rrdtool + perl (RRDp)

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Inzevision
мл. сержант
Сообщения: 102
Зарегистрирован: 2008-07-30 13:43:00
Откуда: Киев
Контактная информация:

rrdtool + perl (RRDp)

Непрочитанное сообщение Inzevision » 2009-02-08 19:52:00

Сам я в 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
а сам график приходится по другой ссылке смотерть.
Что нужно изменить в скрипте, для того, что бы он выводил мне сгенерированный график в браузер в том же окне, и была кнопка обновить?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение ProFTP » 2009-02-08 20:31:08

картинками не навижу заниматся, но загрузку на сервер реализовывал в фотоальбом

у меня вот похожая проблема
http://forum.lissyara.su/viewtopic.php?f=17&t=14870

там решить это можно по другому, пока забил, то есть скрипт просто рисует картинки с сохраняет их, потом друго скрипт эти картинки "толкает" старые удаляет либо затирает

1) в твоем случае нужно открыть картинку и на ней нарисовать что-то по-моиму
2) или нарисуй картинку и сохрани ее в каталог, потом открой просто через html, как удалять старые там сам смотри

когда сделаешь покажи
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Inzevision
мл. сержант
Сообщения: 102
Зарегистрирован: 2008-07-30 13:43:00
Откуда: Киев
Контактная информация:

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение Inzevision » 2009-02-08 21:19:01

ProFTP писал(а): 2) или нарисуй картинку и сохрани ее в каталог, потом открой просто через html, как удалять старые там сам смотри
Скрипт создаёт картинку и кладет её в папку на сервере, откуда её можно посмотреть просто по ссылке. Хочу всё в одном окне сделать.
Смысл такой, я запускаю скрит www.123.com/cgi-bin/cpu.pl и он создает файл cpu.png. Потом созданую картинку можно посмотреть по ссылке www.123.com/cpu.png

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение ProFTP » 2009-02-08 21:50:11

попробуй так как там по ссылке ява-скриптом передать бинарь...

я не пробовал не знаю
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Inzevision
мл. сержант
Сообщения: 102
Зарегистрирован: 2008-07-30 13:43:00
Откуда: Киев
Контактная информация:

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение Inzevision » 2009-02-09 0:32:53

Код: Выделить всё

#!/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

Sin Cera
проходил мимо

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение Sin Cera » 2011-01-31 9:54:09

Чем-то схожий вопрос, тоже необходимо передать картинку по запросу пользователя, но с заданным диапазоном времени, но скрипт никак не реагирует на задание переменной 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;

Yarik
проходил мимо

Re: rrdtool + perl (RRDp)

Непрочитанное сообщение Yarik » 2013-01-10 14:25:11

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.