X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=contrib%2Fcollection.cgi;h=fb76f603aa3794bfd358bf248fe7f6900ddae315;hb=4e809534d43912a3046429ccc53f23778081072a;hp=392c62bccbf7e4d33b9ca4e45689099077b2e49a;hpb=f647e8f0451bc70a96c65ce7f57d9ecce51b9707;p=collectd.git diff --git a/contrib/collection.cgi b/contrib/collection.cgi index 392c62bc..fb76f603 100755 --- a/contrib/collection.cgi +++ b/contrib/collection.cgi @@ -106,6 +106,18 @@ our $GraphDefs; 'GPRINT:max:MAX:%5.1lf%sAh Max,', 'GPRINT:avg:LAST:%5.1lf%sAh Last\l' ], + charge_percent => [ + 'DEF:avg={file}:percent:AVERAGE', + 'DEF:min={file}:percent:MIN', + 'DEF:max={file}:percent:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Charge", + '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' + ], cpu => ['DEF:user_avg={file}:user:AVERAGE', 'DEF:user_min={file}:user:MIN', 'DEF:user_max={file}:user:MAX', @@ -235,6 +247,30 @@ our $GraphDefs; 'GPRINT:total_max_ms:MAX:%5.1lf%s Max,', 'GPRINT:total_avg_ms:LAST:%5.1lf%s Last' ], + fanspeed => [ + '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: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' + ], + frequency_offset => [ # NTPd + 'DEF:ppm_avg={file}:ppm:AVERAGE', + 'DEF:ppm_min={file}:ppm:MIN', + 'DEF:ppm_max={file}:ppm:MAX', + "AREA:ppm_max#$HalfBlue", + "AREA:ppm_min#$Canvas", + "LINE1:ppm_avg#$FullBlue:{inst}", + 'GPRINT:ppm_min:MIN:%5.2lf Min,', + 'GPRINT:ppm_avg:AVERAGE:%5.2lf Avg,', + 'GPRINT:ppm_max:MAX:%5.2lf Max,', + 'GPRINT:ppm_avg:LAST:%5.2lf Last' + ], hddtemp => [ 'DEF:temp_avg={file}:value:AVERAGE', 'DEF:temp_min={file}:value:MIN', @@ -247,6 +283,35 @@ our $GraphDefs; 'GPRINT:temp_max:MAX:%4.1lf Max,', 'GPRINT:temp_avg:LAST:%4.1lf Last\l' ], + if_packets => ['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' + ], load => ['DEF:s_avg={file}:shortterm:AVERAGE', 'DEF:s_min={file}:shortterm:MIN', 'DEF:s_max={file}:shortterm:MAX', @@ -274,6 +339,18 @@ our $GraphDefs; 'GPRINT:l_max:MAX:%4.2lf Max,', 'GPRINT:l_avg:LAST:%4.2lf Last' ], + load_percent => [ + 'DEF:avg={file}:percent:AVERAGE', + 'DEF:min={file}:percent:MIN', + 'DEF:max={file}:percent:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Load", + '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' + ], mails => ['DEF:rawgood={file}:good:AVERAGE', 'DEF:rawspam={file}:spam:AVERAGE', 'CDEF:good=rawgood,UN,0,rawgood,IF', @@ -303,8 +380,10 @@ our $GraphDefs; 'DEF:free_max={file}:free:MAX', 'DEF:buffers_max={file}:buffers:MAX', 'DEF:cached_max={file}:cached:MAX', - 'CDEF:free_cached_buffers_used=free_avg,cached_avg,+,buffers_avg,+,used_avg,+', - 'CDEF:cached_buffers_used=cached_avg,buffers_avg,+,used_avg,+', + 'CDEF:cached_avg_nn=cached_avg,UN,0,cached_avg,IF', + 'CDEF:buffers_avg_nn=buffers_avg,UN,0,buffers_avg,IF', + 'CDEF:free_cached_buffers_used=free_avg,cached_avg_nn,+,buffers_avg_nn,+,used_avg,+', + 'CDEF:cached_buffers_used=cached_avg,buffers_avg_nn,+,used_avg,+', 'CDEF:buffers_used=buffers_avg,used_avg,+', "AREA:free_cached_buffers_used#$HalfGreen", "AREA:cached_buffers_used#$HalfBlue", @@ -633,17 +712,96 @@ our $GraphDefs; 'GPRINT:sleeping_max:MAX:%5.1lf Max,', 'GPRINT:sleeping_avg:LAST:%5.1lf Last\l' ], - sensors => [ - '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:Value", - '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' + ps_rss => [ + 'DEF:avg={file}:byte:AVERAGE', + 'DEF:min={file}:byte:MIN', + 'DEF:max={file}:byte:MAX', + "AREA:avg#$HalfBlue", + "LINE1:avg#$FullBlue:RSS", + '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' + ], + ps_cputime => [ + 'DEF:user_avg_raw={file}:user:AVERAGE', + 'DEF:user_min_raw={file}:user:MIN', + 'DEF:user_max_raw={file}:user:MAX', + 'DEF:syst_avg_raw={file}:syst:AVERAGE', + 'DEF:syst_min_raw={file}:syst:MIN', + 'DEF:syst_max_raw={file}:syst:MAX', + 'CDEF:user_avg=user_avg_raw,1000000,/', + 'CDEF:user_min=user_min_raw,1000000,/', + 'CDEF:user_max=user_max_raw,1000000,/', + 'CDEF:syst_avg=syst_avg_raw,1000000,/', + 'CDEF:syst_min=syst_min_raw,1000000,/', + 'CDEF:syst_max=syst_max_raw,1000000,/', + 'CDEF:user_syst=syst_avg,UN,0,syst_avg,IF,user_avg,+', + "AREA:user_syst#$HalfBlue", + "AREA:syst_avg#$HalfRed", + "LINE1:user_syst#$FullBlue:User ", + 'GPRINT:user_min:MIN:%5.1lf%s Min,', + 'GPRINT:user_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:user_max:MAX:%5.1lf%s Max,', + 'GPRINT:user_avg:LAST:%5.1lf%s Last\l', + "LINE1:syst_avg#$FullRed:System", + 'GPRINT:syst_min:MIN:%5.1lf%s Min,', + 'GPRINT:syst_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:syst_max:MAX:%5.1lf%s Max,', + 'GPRINT:syst_avg:LAST:%5.1lf%s Last\l' + ], + ps_count => [ + 'DEF:procs_avg={file}:processes:AVERAGE', + 'DEF:procs_min={file}:processes:MIN', + 'DEF:procs_max={file}:processes:MAX', + 'DEF:thrds_avg={file}:threads:AVERAGE', + 'DEF:thrds_min={file}:threads:MIN', + 'DEF:thrds_max={file}:threads:MAX', + "AREA:thrds_avg#$HalfBlue", + "AREA:procs_avg#$HalfRed", + "LINE1:thrds_avg#$FullBlue:Threads ", + 'GPRINT:thrds_min:MIN:%5.1lf Min,', + 'GPRINT:thrds_avg:AVERAGE:%5.1lf Avg,', + 'GPRINT:thrds_max:MAX:%5.1lf Max,', + 'GPRINT:thrds_avg:LAST:%5.1lf Last\l', + "LINE1:procs_avg#$FullRed:Processes", + 'GPRINT:procs_min:MIN:%5.1lf Min,', + 'GPRINT:procs_avg:AVERAGE:%5.1lf Avg,', + 'GPRINT:procs_max:MAX:%5.1lf Max,', + 'GPRINT:procs_avg:LAST:%5.1lf Last\l' + ], + ps_pagefaults => [ + 'DEF:minor_avg={file}:minflt:AVERAGE', + 'DEF:minor_min={file}:minflt:MIN', + 'DEF:minor_max={file}:minflt:MAX', + 'DEF:major_avg={file}:majflt:AVERAGE', + 'DEF:major_min={file}:majflt:MIN', + 'DEF:major_max={file}:majflt:MAX', + 'CDEF:minor_major=major_avg,UN,0,major_avg,IF,minor_avg,+', + "AREA:minor_major#$HalfBlue", + "AREA:major_avg#$HalfRed", + "LINE1:minor_major#$FullBlue:Minor", + 'GPRINT:minor_min:MIN:%5.1lf%s Min,', + 'GPRINT:minor_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:minor_max:MAX:%5.1lf%s Max,', + 'GPRINT:minor_avg:LAST:%5.1lf%s Last\l', + "LINE1:major_avg#$FullRed:Major", + 'GPRINT:major_min:MIN:%5.1lf%s Min,', + 'GPRINT:major_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:major_max:MAX:%5.1lf%s Max,', + 'GPRINT:major_avg:LAST:%5.1lf%s Last\l' + ], + qtype => [ + 'DEF:avg={file}:value:AVERAGE', + 'DEF:min={file}:value:MIN', + 'DEF:max={file}:value:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Queries/s", + 'GPRINT:min:MIN:%9.3lf Min,', + 'GPRINT:avg:AVERAGE:%9.3lf Average,', + 'GPRINT:max:MAX:%9.3lf Max,', + 'GPRINT:avg:LAST:%9.3lf Last\l' ], swap => [ 'DEF:used_avg={file}:used:AVERAGE', @@ -689,6 +847,42 @@ our $GraphDefs; 'GPRINT:used_max:MAX:%5.1lf%s Max,', 'GPRINT:used_avg:LAST:%5.1lf%s Last\l' ], + temperature => [ + '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:Value", + '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' + ], + timeleft => [ + 'DEF:avg={file}:timeleft:AVERAGE', + 'DEF:min={file}:timeleft:MIN', + 'DEF:max={file}:timeleft:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Time left [min]", + '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' + ], + time_offset => [ # NTPd + 'DEF:s_avg={file}:seconds:AVERAGE', + 'DEF:s_min={file}:seconds:MIN', + 'DEF:s_max={file}:seconds:MAX', + "AREA:s_max#$HalfBlue", + "AREA:s_min#$Canvas", + "LINE1:s_avg#$FullBlue:{inst}", + 'GPRINT:s_min:MIN:%7.3lf%s Min,', + 'GPRINT:s_avg:AVERAGE:%7.3lf%s Avg,', + 'GPRINT:s_max:MAX:%7.3lf%s Max,', + 'GPRINT:s_avg:LAST:%7.3lf%s Last' + ], traffic => ['DEF:out_min_raw={file}:outgoing:MIN', 'DEF:out_avg_raw={file}:outgoing:AVERAGE', 'DEF:out_max_raw={file}:outgoing:MAX', @@ -736,6 +930,18 @@ our $GraphDefs; 'GPRINT:cpufreq_max:MAX:%5.1lf%s Max,', 'GPRINT:cpufreq_avg:LAST:%5.1lf%s Last\l' ], + multimeter => [ + 'DEF:multimeter_avg={file}:value:AVERAGE', + 'DEF:multimeter_min={file}:value:MIN', + 'DEF:multimeter_max={file}:value:MAX', + "AREA:multimeter_max#$HalfBlue", + "AREA:multimeter_min#$Canvas", + "LINE1:multimeter_avg#$FullBlue:Multimeter", + 'GPRINT:multimeter_min:MIN:%4.1lf Min,', + 'GPRINT:multimeter_avg:AVERAGE:%4.1lf Average,', + 'GPRINT:multimeter_max:MAX:%4.1lf Max,', + 'GPRINT:multimeter_avg:LAST:%4.1lf Last\l' + ], users => [ 'DEF:users_avg={file}:users:AVERAGE', 'DEF:users_min={file}:users:MIN', @@ -760,7 +966,7 @@ our $GraphDefs; 'GPRINT:max:MAX:%5.1lf%sV Max,', 'GPRINT:avg:LAST:%5.1lf%sV Last\l' ], - threads => [ + vs_threads => [ "DEF:total_avg={file}:total:AVERAGE", "DEF:total_min={file}:total:MIN", "DEF:total_max={file}:total:MAX", @@ -842,7 +1048,12 @@ our $GraphDefs; ], }; $GraphDefs->{'disk'} = $GraphDefs->{'partition'}; + $GraphDefs->{'if_errors'} = $GraphDefs->{'if_packets'}; $GraphDefs->{'meminfo'} = $GraphDefs->{'memory'}; + $GraphDefs->{'sensors'} = $GraphDefs->{'temperature'}; + + $GraphDefs->{'delay'} = $GraphDefs->{'time_offset'}; + $GraphDefs->{'time_dispersion'} = $GraphDefs->{'time_offset'}; } our $GraphArgs = @@ -851,14 +1062,21 @@ our $GraphArgs = apache_requests => ['-t', 'apache requests', '-v', 'Requests/s'], apache_scoreboard => ['-t', 'apache scoreboard {inst}', '-v', 'Processes'], charge => ['-t', '{host} charge', '-v', 'Ampere hours'], + charge_percent => ['-t', '{host} charge', '-v', 'Percent'], cpu => ['-t', '{host} cpu{inst} usage', '-v', 'Percent', '-l', '0'], cpufreq => ['-t', '{host} cpu{inst} usage', '-v', 'Mhz'], current => ['-t', '{host} current', '-v', 'Ampere'], #disk => ['-t', '{host} disk {inst} IO wait', '-v', 'Seconds'], + delay => ['-t', 'NTPd peer delay ({inst})', '-v', 'Seconds'], df => ['-t', '{host}:{inst} usage', '-v', 'Percent', '-l', '0'], disk => ['-t', '{host} disk {inst} usage', '-v', 'Byte/s'], + fanspeed => ['-t', '{host} fanspeed {inst}', '-v', 'rpm'], + frequency_offset => ['-t', 'NTPd frequency offset ({inst})', '-v', 'Parts per million'], hddtemp => ['-t', '{host} hdd temperature {inst}', '-v', '°Celsius'], + if_errors => ['-t', '{host} {inst} errors', '-v', 'Errors/s'], + if_packets => ['-t', '{host} {inst} packets', '-v', 'Packets/s'], load => ['-t', '{host} load average', '-v', 'System load', '-X', '0'], + load_percent => ['-t', '{host} load', '-v', 'Percent'], mails => ['-t', '{host} mail count', '-v', 'Amount', '-X', '0'], memory => ['-t', '{host} memory usage', '-v', 'Bytes', '-b', '1024', '-l', '0'], mysql_commands => ['-t', 'mysql command {inst}', '-v', 'Issues/s' ], @@ -869,12 +1087,22 @@ our $GraphArgs = partition => ['-t', '{host} partition {inst} usage', '-v', 'Byte/s'], ping => ['-t', '{host} ping to {inst}', '-v', 'ms'], processes => ['-t', '{host} processes', '-v', 'Processes'], + ps_rss => ['-t', '{host} process {inst} RSS', '-v', 'Bytes', '-b', '1024'], + ps_cputime => ['-t', '{host} process {inst} CPU usage', '-v', 'Seconds'], + ps_count => ['-t', '{host} process {inst} count', '-v', 'Threads/Processes'], + ps_pagefaults => ['-t', '{host} process {inst} pagefaults', '-v', 'Pagefaults/s'], + qtype => ['-t', 'QType {inst}', '-v', 'Queries/s'], sensors => ['-t', '{host} sensor {inst}', '-v', '°Celsius'], swap => ['-t', '{host} swap usage', '-v', 'Bytes', '-b', '1024', '-l', '0'], + temperature => ['-t', '{host} temperature {inst}', '-v', '°Celsius'], + timeleft => ['-t', '{host} UPS time left', '-v', 'Time [min]'], + time_offset => ['-t', 'NTPd time offset ({inst})', '-v', 'Seconds'], + time_dispersion => ['-t', 'NTPd time dispersion ({inst})', '-v', 'Seconds'], traffic => ['-t', '{host} {inst} traffic', '-v', 'Bit/s'], users => ['-t', '{host} users', '-v', 'Users'], + multimeter => ['-t', '{host} multimeter', '-v', 'Value'], voltage => ['-t', '{host} voltage', '-v', 'Volts'], - threads => ['-t', '{host} threads', '-v', 'Threads'], + vs_threads => ['-t', '{host} threads', '-v', 'Threads'], vs_memory => ['-t', '{host} memory usage', '-v', 'Bytes'], vs_processes => ['-t', '{host} processes', '-v', 'Processes'], }; @@ -892,9 +1120,11 @@ our $GraphMulti = mysql_handler => \&output_graph_mysql_handler, partition => 1, ping => \&output_graph_ping, + qtype => \&output_graph_named_qtype, sensors => 1, traffic => 1, - users => 1 + users => 1, + multimeter => 1 }; our @Info; @@ -1156,6 +1386,49 @@ sub output_graph_mysql_handler return (@ret); } +sub output_graph_named_qtype +{ + my @inst = @_; + my @ret = (); + + die if (@inst < 2); + + my @colors = get_n_colors (scalar (@inst)); + + for (my $i = 0; $i < scalar (@inst); $i++) + { + my $inst = $inst[$i]; + push (@ret, + "DEF:avg_$i=$AbsDir/qtype-$inst.rrd:value:AVERAGE", + "DEF:min_$i=$AbsDir/qtype-$inst.rrd:value:MIN", + "DEF:max_$i=$AbsDir/qtype-$inst.rrd:value:MAX"); + } + + for (my $i = 0; $i < scalar (@inst); $i++) + { + my $inst = $inst[$i]; + my $color = $colors[$i]; + my $type = ($i == 0) ? 'AREA' : 'STACK'; + + if (length ($inst) > 5) + { + $inst = substr ($inst, 0, 5); + } + else + { + $inst = sprintf ('%-5s', $inst); + } + + push (@ret, + "$type:avg_$i#$color:$inst", + "GPRINT:min_$i:MIN:%9.3lf Min,", + "GPRINT:avg_$i:AVERAGE:%9.3lf Avg,", + "GPRINT:max_$i:MAX:%9.3lf Max,", + "GPRINT:avg_$i:LAST:%9.3lf Last\\l"); + } + + return (@ret); +} sub output_graph { die unless (defined ($GraphDefs->{$Type})); @@ -1196,6 +1469,7 @@ sub output_graph $Inst = $files->{$Type}[0]; } + #push (@cmd, '-', '-a', 'PNG', '-s', $TimeSpan, '-w', 800, '-h', 150); push (@cmd, '-', '-a', 'PNG', '-s', $TimeSpan); push (@cmd, @{$GraphArgs->{$Type}}) if (defined ($GraphArgs->{$Type})); @@ -1290,6 +1564,8 @@ HEADER print < +

Hourly

+

Daily

Weekly

@@ -1314,6 +1590,8 @@ HTML } print <Hourly +

Daily

Weekly

@@ -1452,7 +1730,7 @@ sub parse_pathinfo $AbsDir = $Config->{'Directory'}; $RelDir = ''; - while (@info and -d $AbsDir . '/' . $Info[0]) + while (@info and -d $AbsDir . '/' . $info[0]) { my $new = shift (@info); next if ($new =~ m/^\./);