Страница 1 из 1
rrdtool + perl (RRDp)
Добавлено: 2009-02-08 19:52:00
Inzevision
Сам я в perl не особо понимаю, поэтому обращаюсь за помощью.
Суть в следующем. Есть установленный rrdtool. Всё хорошо, графики рисует всё замечательно, но возникла у меня идея: а зачем мне постоянно рисовать графики, давай лучше по запросу от пользователя рисовать через web.
Нашел скрипт в инете, ну под себя отредактировал.
Код: Выделить всё
#!/usr/bin/perl -w
use RRDp;
use warnings;
use CGI;
#use strict;
$cgi = new CGI; # Load the CGI routines
RRDp::start "/usr/local/bin/rrdtool";
print "Content-type: text/html\n\n";
print "<html><body>\n";
print $cgi->header('Content-type: image/png');
RRDp::cmd "graph /usr/local/www/apache22/data/rrdtool/cpu.png --imgformat PNG",
"--width 400 --start -1d --end now",
"DEF:cpu0=/usr/local/rrdtool/cpu.rrd:cpu0:AVERAGE",
"DEF:cpu1=/usr/local/rrdtool/cpu.rrd:cpu1:AVERAGE",
"LINE1:cpu0#00FF00:'CPU-0'",
"LINE1:cpu1#0000FF:'CPU-1'";
print "</html></body>";
$answer = RRDp::read;
print $$answer;
RRDp::end;
При вызове через web скрипта cpu.pl он пишет в браузер ответ
Код: Выделить всё
Content-Type: Content-type: image/png 481x163
а сам график приходится по другой ссылке смотерть.
Что нужно изменить в скрипте, для того, что бы он выводил мне сгенерированный график в браузер в том же окне, и была кнопка
обновить?
Re: rrdtool + perl (RRDp)
Добавлено: 2009-02-08 20:31:08
ProFTP
картинками не навижу заниматся, но загрузку на сервер реализовывал в фотоальбом
у меня вот похожая проблема
http://forum.lissyara.su/viewtopic.php?f=17&t=14870
там решить это можно по другому, пока забил, то есть скрипт просто рисует картинки с сохраняет их, потом друго скрипт эти картинки "толкает" старые удаляет либо затирает
1) в твоем случае нужно открыть картинку и на ней нарисовать что-то по-моиму
2) или нарисуй картинку и сохрани ее в каталог, потом открой просто через html, как удалять старые там сам смотри
когда сделаешь покажи
Re: rrdtool + perl (RRDp)
Добавлено: 2009-02-08 21:19:01
Inzevision
ProFTP писал(а):
2) или нарисуй картинку и сохрани ее в каталог, потом открой просто через html, как удалять старые там сам смотри
Скрипт создаёт картинку и кладет её в папку на сервере, откуда её можно посмотреть просто по ссылке. Хочу всё в одном окне сделать.
Смысл такой, я запускаю скрит
www.123.com/cgi-bin/cpu.pl и он создает файл cpu.png. Потом созданую картинку можно посмотреть по ссылке
www.123.com/cpu.png
Re: rrdtool + perl (RRDp)
Добавлено: 2009-02-08 21:50:11
ProFTP
попробуй так как там по ссылке ява-скриптом передать бинарь...
я не пробовал не знаю
Re: rrdtool + perl (RRDp)
Добавлено: 2009-02-09 0:32:53
Inzevision
Код: Выделить всё
#!/usr/local/bin/rrdcgi
<HTML>
<HEAD><TITLE>RRDCGI Demo</TITLE></HEAD>
<BODY>
<H1>RRDCGI Example Page</H1>
<P>
<RRD::GRAPH /usr/local/www/apache22/data/rrdtool/demo.png
--imginfo '<IMG SRC=/rrdtool/demo.png WIDTH= HEIGHT= >'
--lazy --title="CPU"
--width 400 --start -1d --end now
DEF:cpu0=/usr/local/rrdtool/cpu.rrd:cpu0:AVERAGE
DEF:cpu1=/usr/local/rrdtool/cpu.rrd:cpu1:AVERAGE
LINE1:cpu0#00FF00:"CPU-0"
LINE1:cpu1#0000FF:"CPU-1"
>
</P>
</BODY>
</HTML>
Так вот и решил этот вопрос. Но с perl так и не разобрался.
По моему это достойная замена простому рисованию графиков по запросу а не через crontab
Re: rrdtool + perl (RRDp)
Добавлено: 2011-01-31 9:54:09
Sin Cera
Чем-то схожий вопрос, тоже необходимо передать картинку по запросу пользователя, но с заданным диапазоном времени, но скрипт никак не реагирует на задание переменной endtime постом
Код: Выделить всё
<form action="/cgi-bin/hellomsg.pl" method="post">
<select name="endtime">
<option value="-3d" selected>day before yesterday</option>
<option value="-2d" selected>yesterday</option>
<option value="-1d" selected>today</option>
</select>
<input type="submit" value="Submit"/>
</form>
переменную -3d к примеру передает, принтует, но дальше загвоздка, передает по условию переменную now (при обратном ругань и мат), вот сам скрипт
Код: Выделить всё
#!/usr/bin/perl -w
use lib qw (/usr/local/rrdtool/lib/perl);
use RRDp;
use warnings;
use CGI;
#use strict;
$cgi = new CGI; #Load the CGI routines
RRDp::start "/usr/local/rrdtool/bin/rrdtool";
print "<br>";
print "Content-type: text/html\n\n";
print "<html><body>\n";
#$endtime = $cgi->param('endtime');
if( !$cgi->param('endtime') )
{
$endtime = "now";
} else {
$endtime = $cgi->param('endtime');
}
print $cgi->header('image/png,',$endtime);
RRDp::cmd "graph /usr/local/apache/htdocs/SLA/BNP/test.png --imgformat PNG",
"--width 400 --end '$endtime' --start end-3day",
"DEF:BNP10101=/usr/local/apache/htdocs/SLA/BNP/BNP.rrd:BNP10101:AVERAGE",
"DEF:BNP10102=/usr/local/apache/htdocs/SLA/BNP/BNP.rrd:BNP10102:AVERAGE",
"DEF:BNP10103=/usr/local/apache/htdocs/SLA/BNP/BNP.rrd:BNP10103:AVERAGE",
"LINE1:BNP10101#ff0000:'RTT RT'",
"LINE1:BNP10102#00ff00:'RTT BC'",
"LINE1:BNP10103#0000ff:'RTT BE'";
print "<br><IMG SRC=../SLA/BNP/test.png>";
print "</html></body>";
$answer = RRDp::read;
print $$answer;
RRDp::end;
Re: rrdtool + perl (RRDp)
Добавлено: 2013-01-10 14:25:11
Yarik
Inzevision писал(а):Сам я в perl не особо понимаю, поэтому обращаюсь за помощью.
Суть в следующем. Есть установленный rrdtool. Всё хорошо, графики рисует всё замечательно, но возникла у меня идея: а зачем мне постоянно рисовать графики, давай лучше по запросу от пользователя рисовать через web.
Нашел скрипт в инете, ну под себя отредактировал.
Код: Выделить всё
#!/usr/bin/perl -w
use RRDp;
use warnings;
use CGI;
#use strict;
$cgi = new CGI; # Load the CGI routines
RRDp::start "/usr/local/bin/rrdtool";
print "Content-type: text/html\n\n";
print "<html><body>\n";
print $cgi->header('Content-type: image/png');
RRDp::cmd "graph /usr/local/www/apache22/data/rrdtool/cpu.png --imgformat PNG",
"--width 400 --start -1d --end now",
"DEF:cpu0=/usr/local/rrdtool/cpu.rrd:cpu0:AVERAGE",
"DEF:cpu1=/usr/local/rrdtool/cpu.rrd:cpu1:AVERAGE",
"LINE1:cpu0#00FF00:'CPU-0'",
"LINE1:cpu1#0000FF:'CPU-1'";
print "</html></body>";
$answer = RRDp::read;
print $$answer;
RRDp::end;
При вызове через web скрипта cpu.pl он пишет в браузер ответ
Код: Выделить всё
Content-Type: Content-type: image/png 481x163
а сам график приходится по другой ссылке смотерть.
Что нужно изменить в скрипте, для того, что бы он выводил мне сгенерированный график в браузер в том же окне, и была кнопка
обновить?
Просто уберите строки:
Код: Выделить всё
print "Content-type: text/html\n\n";
print "<html><body>\n";
Просто если делать как Вы, получается, что браузеру сказали, что это будет HTML-страница и дальше пойдет текст.
Потому дальше видно шапку картинки:
Код: Выделить всё
Content-Type: Content-type: image/png 481x163
.
Что бы было с кнопкой обновить, то у Вас должны быть разные файлы. Этот cgi-скрипт для вывода картинки и, например, html-страничка с тегом <IMG> для вывода картинки из этого скрипта. А под ней <INPUT TYPE="BUTTON"> с функцией refresh.