В дополнение к статье, расскажу, что графики можно строить по запросу используя cgi скрипт, тем более пользователь Rossi25 напомнил мне о моем обещании описать этот процесс.
При установке RRDtool во FreeBSD, устанавливается rrdcgi, которая доступна по пути: /usr/local/bin/rrdcgi, ее мы и будем использовать для генерации графика при обращении к cgi скрипту.
Итак, поехали:)
Как веб-сервер, будем использовать Apache, в рамках этой статьи предполагается, что Apache у Вас установлен и настроен.
# vi /usr/local/etc/apache22/httpd.conf
Добавляем в httpd.conf следующие строки для обработки cgi скриптов
<Directory "/usr/local/www/temperature> Options FollowSymLinks ExecCGI AddHandler cgi-script .cgi DirectoryIndex index.cgi AllowOverride None Order allow,deny Allow from all </Directory>
Директория /usr/local/www/temperature — будет являться корневой для нашего термометра.
Создадим ее
# mkdir /usr/local/www/temperature
Назначим права на созданную директорию
# chown www:www /usr/local/www/temperature
Рестартуем apache
# apachectl restart
Создаем наш cgi скрипт
# vi /usr/local/www/temperature/index.cgi
И вписываем туда:
#!/usr/local/bin/rrdcgi <HTML> <HEAD> <CONTENT="text/html; charset=UTF-8"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=koi8-r"> <TITLE>Температура на улице</TITLE> </HEAD> <BODY> <CENTER> <H2>Температура на улице</H2> <RRD::GRAPH png/temp1d.png --lazy --rigid --slope-mode --width 500 --heigh 200 --title "Title" --start -1d --font TITLE:13 --color BACK#444444 --color SHADEA#444444 --color SHADEB#444444 --color CANVAS#444444 --color FONT#ff7518 --slope-mode --imginfo <IMG SRC=png/%s WIDTH=%lu HEIGHT=%lu> DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE CDEF:tp_17=temperature,0,GT,temperature,100,GT,34,temperature,IF,0,IF AREA:tp_17#FF0000 CDEF:tp_16=temperature,0,GT,temperature,32,GT,32,temperature,IF,0,IF AREA:tp_16#FF1100 CDEF:tp_15=temperature,0,GT,temperature,30,GT,30,temperature,IF,0,IF AREA:tp_15#FF2200 CDEF:tp_14=temperature,0,GT,temperature,28,GT,28,temperature,IF,0,IF AREA:tp_14#FF3300 CDEF:tp_13=temperature,0,GT,temperature,26,GT,26,temperature,IF,0,IF AREA:tp_13#FF4400 CDEF:tp_12=temperature,0,GT,temperature,24,GT,24,temperature,IF,0,IF AREA:tp_12#FF5500 CDEF:tp_11=temperature,0,GT,temperature,22,GT,22,temperature,IF,0,IF AREA:tp_11#FF6600 CDEF:tp_10=temperature,0,GT,temperature,20,GT,20,temperature,IF,0,IF AREA:tp_10#FF7700 CDEF:tp_09=temperature,0,GT,temperature,18,GT,18,temperature,IF,0,IF AREA:tp_09#FF8800 CDEF:tp_08=temperature,0,GT,temperature,16,GT,16,temperature,IF,0,IF AREA:tp_08#FF9900 CDEF:tp_07=temperature,0,GT,temperature,14,GT,14,temperature,IF,0,IF AREA:tp_07#FFAA00 CDEF:tp_06=temperature,0,GT,temperature,12,GT,12,temperature,IF,0,IF AREA:tp_06#FFBB00 CDEF:tp_05=temperature,0,GT,temperature,10,GT,10,temperature,IF,0,IF AREA:tp_05#FFCC00 CDEF:tp_04=temperature,0,GT,temperature,8,GT,8,temperature,IF,0,IF AREA:tp_04#FFDD00 CDEF:tp_03=temperature,0,GT,temperature,6,GT,6,temperature,IF,0,IF AREA:tp_03#FFEE00 CDEF:tp_02=temperature,0,GT,temperature,4,GT,4,temperature,IF,0,IF AREA:tp_02#FFFF00 CDEF:tp_01=temperature,0,GT,temperature,2,GT,2,temperature,IF,0,IF AREA:tp_01#ffffcd CDEF:tm_17=temperature,0,LT,temperature,-100,LT,-34,temperature,IF,0,IF AREA:tm_17#0000FF CDEF:tm_16=temperature,0,LT,temperature,-32,LT,-32,temperature,IF,0,IF AREA:tm_16#0011FF CDEF:tm_15=temperature,0,LT,temperature,-30,LT,-30,temperature,IF,0,IF AREA:tm_15#0022FF CDEF:tm_14=temperature,0,LT,temperature,-28,LT,-28,temperature,IF,0,IF AREA:tm_14#0033FF CDEF:tm_13=temperature,0,LT,temperature,-26,LT,-26,temperature,IF,0,IF AREA:tm_13#0044FF CDEF:tm_12=temperature,0,LT,temperature,-24,LT,-24,temperature,IF,0,IF AREA:tm_12#0055FF CDEF:tm_11=temperature,0,LT,temperature,-22,LT,-22,temperature,IF,0,IF AREA:tm_11#0066FF CDEF:tm_10=temperature,0,LT,temperature,-20,LT,-20,temperature,IF,0,IF AREA:tm_10#0077FF CDEF:tm_09=temperature,0,LT,temperature,-18,LT,-18,temperature,IF,0,IF AREA:tm_09#0088FF CDEF:tm_08=temperature,0,LT,temperature,-16,LT,-16,temperature,IF,0,IF AREA:tm_08#0099FF CDEF:tm_07=temperature,0,LT,temperature,-14,LT,-14,temperature,IF,0,IF AREA:tm_07#00AAFF CDEF:tm_06=temperature,0,LT,temperature,-12,LT,-12,temperature,IF,0,IF AREA:tm_06#00BBFF CDEF:tm_05=temperature,0,LT,temperature,-10,LT,-10,temperature,IF,0,IF AREA:tm_05#00CCFF CDEF:tm_04=temperature,0,LT,temperature,-8,LT,-8,temperature,IF,0,IF AREA:tm_04#00DDFF CDEF:tm_03=temperature,0,LT,temperature,-6,LT,-6,temperature,IF,0,IF AREA:tm_03#00EEFF CDEF:tm_02=temperature,0,LT,temperature,-4,LT,-4,temperature,IF,0,IF AREA:tm_02#00FFFF CDEF:tm_01=temperature,0,LT,temperature,-2,LT,-2,temperature,IF,0,IF AREA:tm_01#CDFFFF LINE1:temperature "GPRINT:temperature:LAST:Curent:%3.2lfC" "GPRINT:temperature:AVERAGE:Average:%3.2lfC" "GPRINT:temperature:MAX:Maximum:%3.2lfC" "GPRINT:temperature:MIN:Minimum:%3.2lfC"j HRULE:0#33cc33 </BR> Last update: <RRD::TIME::LAST /var/db/rrdtool/temperature.rrd "%H:%M, %d %b %Y"> </BODY> </HTML>
Создаем папку и установим владельца для хранения графиков
# mkdir /usr/local/www/temperature/png # chown www:www /usr/local/www/temperature/png/
Заходим браузером на сервер:
http://ваш_ip_адрес/temperature, должны увидеть что-то типа такого
Параметр —lazy — указывает не пересоздавать график если данные не обновились, для отладки лучше отключить или удалять график в ручную.
Я не смог побороть вывод русских символов в локале KO8-R, в UTF-8 с русским проблем не было, если будет, то добавьте в скрипт после <h2></h2>следующие строки:
<RRD::SETENV LC_TIME ru_RU.UTF-8> <RRD::SETENV LANG ru_RU.UTF-8>
должно помочь.
Очень надеюсь, что статья кому-нибудь поможет.