my $host_url = uri_escape ($host);
my %plugins = _find_plugins ($host);
+ print qq( <div><a href="${\script_name ()}?action=overview">Back to list of hosts</a></div>\n);
+
print "<ul>\n";
for (sort (keys %plugins))
{
my $url_prefix = script_name () . "?host=$host_url;plugin=$plugin_url";
$url_prefix .= ";plugin_instance=$plugin_instance_url" if (defined ($plugin_instance));
+ print qq( <div><a href="${\script_name ()}?action=show_host;host=$host_url">Back to list of plugins</a></div>\n);
+
for (sort (keys %types))
{
my $type = $_;
my $instance_html = encode_entities ($instance);
my $instance_url = uri_escape ($instance);
- print qq# <div><a href="$url_prefix;type=$type_url;type_instance=$instance_url;type=$type_url;type_instance=$instance_url;action=show_type"><img src="$url_prefix;type=$type_url;type_instance=$instance_url;action=show_graph" /></a></div>\n#;
+ print qq# <div><a href="$url_prefix;type=$type_url;type_instance=$instance_url;action=show_type"><img src="$url_prefix;type=$type_url;type_instance=$instance_url;action=show_graph" /></a></div>\n#;
}
if (!@{$types{$type}})
{
- print qq# <div><img src="$url_prefix;type=$type_url;action=show_graph" /></div>\n#;
+ print qq# <div><a href="$url_prefix;type=$type_url;action=show_type"><img src="$url_prefix;type=$type_url;action=show_graph" /></a></div>\n#;
}
}
} # action_show_plugin
my $host_url = uri_escape ($host);
my $plugin_url = uri_escape ($plugin);
+ my $plugin_html = encode_entities ($plugin);
my $plugin_instance_url = defined ($plugin_instance) ? uri_escape ($plugin_instance) : undef;
my $type_url = uri_escape ($type);
my $type_instance_url = defined ($type_instance) ? uri_escape ($type_instance) : undef;
- my $url_prefix = script_name () . "?action=show_graph;host=$host_url;plugin=$plugin_url";
+ my $url_prefix = script_name () . "?action=show_plugin;host=$host_url;plugin=$plugin_url";
+ $url_prefix .= ";plugin_instance=$plugin_instance_url" if (defined ($plugin_instance));
+
+ print qq( <div><a href="$url_prefix">Back to plugin "$plugin_html"</a></div>\n);
+
+ $url_prefix = script_name () . "?action=show_graph;host=$host_url;plugin=$plugin_url";
$url_prefix .= ";plugin_instance=$plugin_instance_url" if (defined ($plugin_instance));
$url_prefix .= ";type=$type_url";
$url_prefix .= ";type_instance=$type_instance_url" if (defined ($type_instance));
my %times = (hour => -3600, day => -86400, week => 7 * -86400, month => 31 * -86400, year => 366 * -86400);
my $start_time = $times{$Args->{'timespan'}} || -86400;
- print STDERR Data::Dumper->Dump ([$Args], ['Args']);
+ #print STDERR Data::Dumper->Dump ([$Args], ['Args']);
return if (!defined ($GraphDefs->{$type}));
@rrd_args = @{$GraphDefs->{$type}};
}
} # action_show_graph
+sub print_header
+{
+ print <<HEAD;
+Content-Type: application/xhtml+xml; charset=utf-8
+Cache-Control: no-cache
+
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>collection.cgi, Version 2</title>
+ <style type="text/css">
+ img
+ {
+ border: none;
+ }
+ </style>
+ </head>
+
+ <body>
+HEAD
+} # print_header
+
+sub print_footer
+{
+ print <<FOOT;
+ </body>
+</html>
+FOOT
+} # print_footer
+
sub main
{
read_config ();
return (0);
}
- print STDOUT header (-Content_Type => 'text/html');
- print STDOUT "<pre>", Data::Dumper->Dump ([$Args], ['Args']), "</pre>\n";
+ print_header ();
if (!$Args->{'host'})
{
$Args->{'type'}, $Args->{'type_instance'});
}
+ print_footer ();
+
return (0);
}
sub load_graph_definitions
{
- my $Canvas = 'F5F5F5';
+ my $Canvas = 'FFFFFF';
my $FullRed = 'FF0000';
my $FullGreen = '00E000';
apache_requests => ['DEF:min={file}:count:MIN',
'DEF:avg={file}:count:AVERAGE',
'DEF:max={file}:count:MAX',
- 'CDEF:moving_average=PREV,UN,avg,PREV,IF,0.8,*,avg,0.2,*,+',
"AREA:max#$HalfBlue",
"AREA:min#$Canvas",
- 'LINE1:moving_average#000000',
"LINE1:avg#$FullBlue:Requests/s",
'GPRINT:min:MIN:%6.2lf Min,',
'GPRINT:avg:AVERAGE:%6.2lf Avg,',
'GPRINT:max:MAX:%4.0lfbit Max,',
'GPRINT:avg:LAST:%4.0lfbit Last\l'
],
- fanspeed => [
- 'DEF:temp_avg={file}:value:AVERAGE',
- 'DEF:temp_min={file}:value:MIN',
- 'DEF:temp_max={file}:value:MAX',
- "AREA:temp_max#$HalfMagenta",
- "AREA:temp_min#$Canvas",
- "LINE1:temp_avg#$FullMagenta:RPM",
- 'GPRINT:temp_min:MIN:%4.1lf Min,',
- 'GPRINT:temp_avg:AVERAGE:%4.1lf Avg,',
- 'GPRINT:temp_max:MAX:%4.1lf Max,',
- 'GPRINT:temp_avg:LAST:%4.1lf Last\l'
+ fanspeed => ['-v', 'RPM',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfMagenta",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullMagenta:RPM",
+ 'GPRINT:min:MIN:%4.1lf Min,',
+ 'GPRINT:avg:AVERAGE:%4.1lf Avg,',
+ 'GPRINT:max:MAX:%4.1lf Max,',
+ 'GPRINT:avg:LAST:%4.1lf Last\l'
+ ],
+ frequency => ['-v', 'Hertz',
+ 'DEF:avg={file}:frequency:AVERAGE',
+ 'DEF:min={file}:frequency:MIN',
+ 'DEF:max={file}:frequency:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Frequency [Hz]",
+ 'GPRINT:min:MIN:%4.1lf Min,',
+ 'GPRINT:avg:AVERAGE:%4.1lf Avg,',
+ 'GPRINT:max:MAX:%4.1lf Max,',
+ 'GPRINT:avg:LAST:%4.1lf Last\l'
],
frequency_offset => [ # NTPd
'DEF:ppm_avg={file}:ppm:AVERAGE',
'GPRINT:ppm_max:MAX:%5.2lf Max,',
'GPRINT:ppm_avg:LAST:%5.2lf Last'
],
+ gauge => ['-v', 'Exec value',
+ 'DEF:temp_avg={file}:value:AVERAGE',
+ 'DEF:temp_min={file}:value:MIN',
+ 'DEF:temp_max={file}:value:MAX',
+ "AREA:temp_max#$HalfBlue",
+ "AREA:temp_min#$Canvas",
+ "LINE1:temp_avg#$FullBlue:Exec value",
+ 'GPRINT:temp_min:MIN:%6.2lf Min,',
+ 'GPRINT:temp_avg:AVERAGE:%6.2lf Avg,',
+ 'GPRINT:temp_max:MAX:%6.2lf Max,',
+ 'GPRINT:temp_avg:LAST:%6.2lf Last\l'
+ ],
hddtemp => [
'DEF:temp_avg={file}:value:AVERAGE',
'DEF:temp_min={file}:value:MIN',
'GPRINT:temp_max:MAX:%4.1lf Max,',
'GPRINT:temp_avg:LAST:%4.1lf Last\l'
],
+ if_errors => ['-v', 'Errors/s',
+ 'DEF:tx_min={file}:tx:MIN',
+ 'DEF:tx_avg={file}:tx:AVERAGE',
+ 'DEF:tx_max={file}:tx:MAX',
+ 'DEF:rx_min={file}:rx:MIN',
+ 'DEF:rx_avg={file}:rx:AVERAGE',
+ 'DEF:rx_max={file}:rx:MAX',
+ 'CDEF:overlap=tx_avg,rx_avg,GT,rx_avg,tx_avg,IF',
+ 'CDEF:mytime=tx_avg,TIME,TIME,IF',
+ 'CDEF:sample_len_raw=mytime,PREV(mytime),-',
+ 'CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF',
+ 'CDEF:tx_avg_sample=tx_avg,UN,0,tx_avg,IF,sample_len,*',
+ 'CDEF:tx_avg_sum=PREV,UN,0,PREV,IF,tx_avg_sample,+',
+ 'CDEF:rx_avg_sample=rx_avg,UN,0,rx_avg,IF,sample_len,*',
+ 'CDEF:rx_avg_sum=PREV,UN,0,PREV,IF,rx_avg_sample,+',
+ "AREA:tx_avg#$HalfGreen",
+ "AREA:rx_avg#$HalfBlue",
+ "AREA:overlap#$HalfBlueGreen",
+ "LINE1:tx_avg#$FullGreen:TX",
+ 'GPRINT:tx_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:tx_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:tx_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:tx_avg_sum:LAST:(ca. %4.0lf%s Total)\l',
+ "LINE1:rx_avg#$FullBlue:RX",
+ #'GPRINT:rx_min:MIN:%5.1lf %s Min,',
+ 'GPRINT:rx_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:rx_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:rx_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)\l'
+ ],
if_packets => ['-v', 'Packets/s',
'DEF:tx_min={file}:tx:MIN',
'DEF:tx_avg={file}:tx:AVERAGE',
'GPRINT:rx_avg:LAST:%5.1lf%s Last',
'GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)\l'
],
+ ipt_bytes => ['-v', 'Bits/s',
+ 'DEF:min_raw={file}:value:MIN',
+ 'DEF:avg_raw={file}:value:AVERAGE',
+ 'DEF:max_raw={file}:value:MAX',
+ 'CDEF:min=min_raw,8,*',
+ 'CDEF:avg=avg_raw,8,*',
+ 'CDEF:max=max_raw,8,*',
+ 'CDEF:mytime=avg_raw,TIME,TIME,IF',
+ 'CDEF:sample_len_raw=mytime,PREV(mytime),-',
+ 'CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF',
+ 'CDEF:avg_sample=avg_raw,UN,0,avg_raw,IF,sample_len,*',
+ 'CDEF:avg_sum=PREV,UN,0,PREV,IF,avg_sample,+',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Bits/s",
+ #'GPRINT:min:MIN:%5.1lf %s Min,',
+ 'GPRINT:avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:max:MAX:%5.1lf%s Max,',
+ 'GPRINT:avg:LAST:%5.1lf%s Last',
+ 'GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)\l'
+ ],
+ ipt_packets => ['-v', 'Packets/s',
+ 'DEF:min_raw={file}:value:MIN',
+ 'DEF:avg_raw={file}:value:AVERAGE',
+ 'DEF:max_raw={file}:value:MAX',
+ 'CDEF:min=min_raw,8,*',
+ 'CDEF:avg=avg_raw,8,*',
+ 'CDEF:max=max_raw,8,*',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Packets/s",
+ 'GPRINT:min:MIN:%5.1lf %s Min,',
+ 'GPRINT:avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:max:MAX:%5.1lf%s Max,',
+ 'GPRINT:avg:LAST:%5.1lf%s Last\l'
+ ],
irq => ['-v', 'Issues/s',
'DEF:avg={file}:value:AVERAGE',
'DEF:min={file}:value:MIN',
'GPRINT:used_max:MAX:%5.1lf%s Max,',
'GPRINT:used_avg:LAST:%5.1lf%s Last'
],
- mysql_commands => [
+ mysql_commands => ['-v', 'Issues/s',
"DEF:val_avg={file}:value:AVERAGE",
"DEF:val_min={file}:value:MIN",
"DEF:val_max={file}:value:MAX",
'GPRINT:val_max:MAX:%5.2lf Max,',
'GPRINT:val_avg:LAST:%5.2lf Last'
],
- mysql_handler => [
+ mysql_handler => ['-v', 'Issues/s',
"DEF:val_avg={file}:value:AVERAGE",
"DEF:val_min={file}:value:MIN",
"DEF:val_max={file}:value:MAX",
'GPRINT:val_max:MAX:%5.2lf Max,',
'GPRINT:val_avg:LAST:%5.2lf Last'
],
- mysql_qcache => [
+ mysql_octets => ['-v', 'Bytes/s',
+ 'DEF:out_min={file}:tx:MIN',
+ 'DEF:out_avg={file}:tx:AVERAGE',
+ 'DEF:out_max={file}:tx:MAX',
+ 'DEF:inc_min={file}:rx:MIN',
+ 'DEF:inc_avg={file}:rx:AVERAGE',
+ 'DEF:inc_max={file}:rx:MAX',
+ 'CDEF:overlap=out_avg,inc_avg,GT,inc_avg,out_avg,IF',
+ 'CDEF:mytime=out_avg,TIME,TIME,IF',
+ 'CDEF:sample_len_raw=mytime,PREV(mytime),-',
+ 'CDEF:sample_len=sample_len_raw,UN,0,sample_len_raw,IF',
+ 'CDEF:out_avg_sample=out_avg,UN,0,out_avg,IF,sample_len,*',
+ 'CDEF:out_avg_sum=PREV,UN,0,PREV,IF,out_avg_sample,+',
+ 'CDEF:inc_avg_sample=inc_avg,UN,0,inc_avg,IF,sample_len,*',
+ 'CDEF:inc_avg_sum=PREV,UN,0,PREV,IF,inc_avg_sample,+',
+ "AREA:out_avg#$HalfGreen",
+ "AREA:inc_avg#$HalfBlue",
+ "AREA:overlap#$HalfBlueGreen",
+ "LINE1:out_avg#$FullGreen:Written",
+ 'GPRINT:out_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:out_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:out_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)\l',
+ "LINE1:inc_avg#$FullBlue:Read ",
+ 'GPRINT:inc_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:inc_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:inc_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)\l'
+ ],
+ mysql_qcache => ['-v', 'Queries/s',
"DEF:hits_min={file}:hits:MIN",
"DEF:hits_avg={file}:hits:AVERAGE",
"DEF:hits_max={file}:hits:MAX",
'GPRINT:queries_max:MAX:%5.0lf Max,',
'GPRINT:queries_avg:LAST:%5.0lf Last\l'
],
- mysql_threads => [
+ mysql_threads => ['-v', 'Threads',
"DEF:running_min={file}:running:MIN",
"DEF:running_avg={file}:running:AVERAGE",
"DEF:running_max={file}:running:MAX",
'GPRINT:created_max:MAX:%5.0lf Max,',
'GPRINT:created_avg:LAST:%5.0lf Last\l'
],
+ nfs_procedure => ['-v', 'Issues/s',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Issues/s",
+ 'GPRINT:min:MIN:%6.2lf Min,',
+ 'GPRINT:avg:AVERAGE:%6.2lf Avg,',
+ 'GPRINT:max:MAX:%6.2lf Max,',
+ 'GPRINT:avg:LAST:%6.2lf Last\l'
+ ],
nfs3_procedures => [
"DEF:null_avg={file}:null:AVERAGE",
"DEF:getattr_avg={file}:getattr:AVERAGE",
'GPRINT:rbyte_max:MAX:%5.1lf%s Max,',
'GPRINT:rbyte_avg:LAST:%5.1lf%s Last\l'
],
- percent => [
+ percent => ['-v', 'Percent',
'DEF:avg={file}:percent:AVERAGE',
'DEF:min={file}:percent:MIN',
'DEF:max={file}:percent:MAX',
'GPRINT:used_max:MAX:%5.1lf%s Max,',
'GPRINT:used_avg:LAST:%5.1lf%s Last\l'
],
- temperature => [
+ temperature => ['-v', 'Celsius',
'DEF:temp_avg={file}:value:AVERAGE',
'DEF:temp_min={file}:value:MIN',
'DEF:temp_max={file}:value:MAX',
'GPRINT:users_max:MAX:%4.1lf Max,',
'GPRINT:users_avg:LAST:%4.1lf Last\l'
],
- voltage => [
+ voltage => ['-v', 'Voltage',
'DEF:avg={file}:value:AVERAGE',
'DEF:min={file}:value:MIN',
'DEF:max={file}:value:MAX',