我无法管理的蠢事......
在Perl中,使用RRDTool(rrds模块),我创建了一个公共子例程来创建不同时间段(1天,1周......)的图形。 我想使用一些子参数来显示可选的图例。使用以下代码,不生成任何图形....
#!/usr/bin/perl
use strict;
use OWNet;
use RRDs;
use warnings;
use diagnostics;
my $rrd = '/var/rrd/electricite.rrd';
my $img = '/mnt/ds211/web/';
&CreateGraph("conso","Consommation electrique 1 heure","1h",1);
sub CreateGraph
# inputs: $_[0]: sensor_rrd_name
# $_[1]: chart title
# $_[2]: interval period (1h,24h,7d,1m,1y,10y)
# $_[3]: Puissance instantanee (1/0)
{
my $temp_graph;
$temp_graph ="\"$img$_[0]-$_[2].png\",";
$temp_graph .="\"--start=end-$_[2]\",";
$temp_graph .="\"--end=now\",";
$temp_graph .="\"--width=600\",";
$temp_graph .="\"--height=200\",";
$temp_graph .="\"--slope-mode\",";
$temp_graph .="\"--title=$_[1]\",";
$temp_graph .="\"--vertical-label=Watt\",";
$temp_graph .="\"--lower-limit=0\",";
$temp_graph .="\"--alt-autoscale-max\",";
$temp_graph .="\"DEF:energy=$rrd:$_[0]:AVERAGE\",";
$temp_graph .="\"CDEF:Watt=energy,3600,*\",";
$temp_graph .="\"LINE2:Watt#0000FF:\",";
$temp_graph .="\"AREA:Watt#00FF00:\",";
$temp_graph .="\"VDEF:WattHour=energy,TOTAL\",";
if ($_[3]==1)
{
$temp_graph .="\"GPRINT:Watt:LAST: Puissance instantanee\\: %6.2lf%sW\",";
}
$temp_graph .="\"GPRINT:WattHour: Consommation totale\\: %6.2lf%sWh\\n\",";
$temp_graph .="\"GPRINT:Watt:MIN: Puissance min\\: %6.2lf%sW\",";
$temp_graph .="\"GPRINT:Watt:AVERAGE: Puissance moyenne\\: %6.2lf%sW\",";
$temp_graph .="\"GPRINT:Watt:MAX: Puissance max\\: %6.2lf%sW\"";
RRDs::graph ("$temp_graph");
if ($ERROR = RRDs::error)
{
print "$0: failed to generate graph $_[0] data into rrd: $ERROR\n";
}
}
谢谢
答案 0 :(得分:1)
问题是你正在用一个字符串而不是带有你的参数的数组来处理rrdtool。
而不是
RRDs::graph ("\"graph.gif\",\"DEF:...\" ...");
你应该打电话
RRDs::graph ("graph.gif","DEF:...","...");`
如果您想事先准备好参数,那么您可以使用
my @args = ("graph.gif","DEF:...","...")
RRDs::graph(@args);
希望这会有所帮助。
答案 1 :(得分:0)
我要猜测标题中的空格字符是否会抛弃选项解析。你的$ temp_graph字符串中的标题周围有一些单引号怎么样?
我希望这会有所帮助。
my $temp_graph = qq{"$img$_[0]-$_[2].png",};
$temp_graph .= qq{"--start=end-$_[2]",};
$temp_graph .= qq{"--end=now",};
$temp_graph .= qq{"--width=600",};
$temp_graph .= qq{"--height=200",};
$temp_graph .= qq{"--slope-mode",};
$temp_graph .= qq{"--title='$_[1]'",};
$temp_graph .= qq{"--vertical-label=Watt",};
$temp_graph .= qq{"--lower-limit=0",};
$temp_graph .= qq{"--alt-autoscale-max",};
$temp_graph .= qq{"DEF:energy=$rrd:$_[0]:AVERAGE",};
$temp_graph .= qq{"CDEF:Watt=energy,3600,*",};
$temp_graph .= qq{"LINE2:Watt#0000FF:",};
$temp_graph .= qq{"AREA:Watt#00FF00:",};
$temp_graph .= qq{"VDEF:WattHour=energy,TOTAL",};
if ($_[3]==1)
{
$temp_graph .= qq{"GPRINT:Watt:LAST: Puissance instantanee\\: %6.2lf%sW",};
}
$temp_graph .= qq{"GPRINT:WattHour: Consommation totale\\: %6.2lf%sWh\\n",};
$temp_graph .= qq{"GPRINT:Watt:MIN: Puissance min\\: %6.2lf%sW",};
$temp_graph .= qq{"GPRINT:Watt:AVERAGE: Puissance moyenne\\: %6.2lf%sW",};
$temp_graph .= qq{"GPRINT:Watt:MAX: Puissance max\\: %6.2lf%sW"};
print join qq{",\n"}, split /","/, $temp_graph;
print "\n";