X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=contrib%2Fcollection.cgi;h=31f1b9179b5ae4823436c781eecb3870648c6865;hb=034a237b11bf1a8809751f103b01ff1c3859ec2b;hp=68ae00ed729507c2a6ea594dc5238a0d44ae64e1;hpb=99c778e7555fc522ca6bd7ed6f96cd80a774a7fa;p=collectd.git diff --git a/contrib/collection.cgi b/contrib/collection.cgi index 68ae00ed..31f1b917 100755 --- a/contrib/collection.cgi +++ b/contrib/collection.cgi @@ -247,13 +247,96 @@ our $GraphDefs; 'GPRINT:total_max_ms:MAX:%5.1lf%s Max,', 'GPRINT:total_avg_ms:LAST:%5.1lf%s Last' ], + dns_traffic => ['DEF:rsp_min_raw={file}:responses:MIN', + 'DEF:rsp_avg_raw={file}:responses:AVERAGE', + 'DEF:rsp_max_raw={file}:responses:MAX', + 'DEF:qry_min_raw={file}:queries:MIN', + 'DEF:qry_avg_raw={file}:queries:AVERAGE', + 'DEF:qry_max_raw={file}:queries:MAX', + 'CDEF:rsp_min=rsp_min_raw,8,*', + 'CDEF:rsp_avg=rsp_avg_raw,8,*', + 'CDEF:rsp_max=rsp_max_raw,8,*', + 'CDEF:qry_min=qry_min_raw,8,*', + 'CDEF:qry_avg=qry_avg_raw,8,*', + 'CDEF:qry_max=qry_max_raw,8,*', + 'CDEF:overlap=rsp_avg,qry_avg,GT,qry_avg,rsp_avg,IF', + 'CDEF:mytime=rsp_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:rsp_avg_sample=rsp_avg_raw,UN,0,rsp_avg_raw,IF,sample_len,*', + 'CDEF:rsp_avg_sum=PREV,UN,0,PREV,IF,rsp_avg_sample,+', + 'CDEF:qry_avg_sample=qry_avg_raw,UN,0,qry_avg_raw,IF,sample_len,*', + 'CDEF:qry_avg_sum=PREV,UN,0,PREV,IF,qry_avg_sample,+', + "AREA:rsp_avg#$HalfGreen", + "AREA:qry_avg#$HalfBlue", + "AREA:overlap#$HalfBlueGreen", + "LINE1:rsp_avg#$FullGreen:Responses", + 'GPRINT:rsp_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:rsp_max:MAX:%5.1lf%s Max,', + 'GPRINT:rsp_avg:LAST:%5.1lf%s Last', + 'GPRINT:rsp_avg_sum:LAST:(ca. %5.1lf%sB Total)\l', + "LINE1:qry_avg#$FullBlue:Queries ", + #'GPRINT:qry_min:MIN:%5.1lf %s Min,', + 'GPRINT:qry_avg:AVERAGE:%5.1lf%s Avg,', + 'GPRINT:qry_max:MAX:%5.1lf%s Max,', + 'GPRINT:qry_avg:LAST:%5.1lf%s Last', + 'GPRINT:qry_avg_sum:LAST:(ca. %5.1lf%sB Total)\l' + ], + email => [ + 'DEF:avg={file}:count:AVERAGE', + 'DEF:min={file}:count:MIN', + 'DEF:max={file}:count:MAX', + "AREA:max#$HalfMagenta", + "AREA:min#$Canvas", + "LINE1:avg#$FullMagenta:Count ", + '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' + ], + email_size => [ + 'DEF:avg={file}:size:AVERAGE', + 'DEF:min={file}:size:MIN', + 'DEF:max={file}:size:MAX', + "AREA:max#$HalfMagenta", + "AREA:min#$Canvas", + "LINE1:avg#$FullMagenta:Count ", + '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' + ], + spam_score => [ + 'DEF:avg={file}:score:AVERAGE', + 'DEF:min={file}:score:MIN', + 'DEF:max={file}:score:MAX', + "AREA:max#$HalfMagenta", + "AREA:min#$Canvas", + "LINE1:avg#$FullMagenta:Count ", + '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' + ], + spam_check => [ + 'DEF:avg={file}:hits:AVERAGE', + 'DEF:min={file}:hits:MIN', + 'DEF:max={file}:hits:MAX', + "AREA:max#$HalfMagenta", + "AREA:min#$Canvas", + "LINE1:avg#$FullMagenta:Count ", + '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' + ], 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_max#$HalfMagenta", "AREA:temp_min#$Canvas", - "LINE1:temp_avg#$FullBlue:RPM", + "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,', @@ -275,14 +358,24 @@ our $GraphDefs; 'DEF:temp_avg={file}:value:AVERAGE', 'DEF:temp_min={file}:value:MIN', 'DEF:temp_max={file}:value:MAX', - "AREA:temp_max#$HalfBlue", + "AREA:temp_max#$HalfRed", "AREA:temp_min#$Canvas", - "LINE1:temp_avg#$FullBlue:Temperature", + "LINE1:temp_avg#$FullRed:Temperature", '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' ], + irq => ['DEF:irq_avg={file}:irq:AVERAGE', + 'DEF:irq_min={file}:irq:MIN', + 'DEF:irq_max={file}:irq:MAX', + "AREA:irq_max#$HalfBlue", + "AREA:irq_min#$Canvas", + "LINE1:irq_avg#$FullBlue:Interrupts", + 'GPRINT:irq_min:MIN:%5.1lf Min,', + 'GPRINT:irq_avg:AVERAGE:%5.1lf Avg,', + 'GPRINT:irq_max:MAX:%5.1lf Max,', + 'GPRINT:irq_avg:LAST:%5.1lf Last'], if_packets => ['DEF:tx_min={file}:tx:MIN', 'DEF:tx_avg={file}:tx:AVERAGE', 'DEF:tx_max={file}:tx:MAX', @@ -304,13 +397,13 @@ our $GraphDefs; '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. %.0lf Total)\l', + '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. %.0lf Total)\l' + 'GPRINT:rx_avg_sum:LAST:(ca. %4.0lf%s Total)\l' ], load => ['DEF:s_avg={file}:shortterm:AVERAGE', 'DEF:s_min={file}:shortterm:MIN', @@ -618,6 +711,18 @@ our $GraphDefs; 'GPRINT:read_avg:AVERAGE:%5.1lf Avg,', 'GPRINT:read_avg:LAST:%5.1lf Last\l' ], + opcode => [ + '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' + ], partition => [ "DEF:rbyte_avg={file}:rbytes:AVERAGE", "DEF:rbyte_min={file}:rbytes:MIN", @@ -791,6 +896,30 @@ our $GraphDefs; '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' + ], + rcode => [ + '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', 'DEF:used_min={file}:used:MIN', @@ -839,9 +968,9 @@ our $GraphDefs; 'DEF:temp_avg={file}:value:AVERAGE', 'DEF:temp_min={file}:value:MIN', 'DEF:temp_max={file}:value:MAX', - "AREA:temp_max#$HalfBlue", + "AREA:temp_max#$HalfRed", "AREA:temp_min#$Canvas", - "LINE1:temp_avg#$FullBlue:Value", + "LINE1:temp_avg#$FullRed:Temperature", 'GPRINT:temp_min:MIN:%4.1lf Min,', 'GPRINT:temp_avg:AVERAGE:%4.1lf Avg,', 'GPRINT:temp_max:MAX:%4.1lf Max,', @@ -918,6 +1047,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', @@ -1046,9 +1187,15 @@ our $GraphArgs = 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'], + dns_traffic => ['-t', '{host} DNS traffic', '-v', 'Bit/s'], + email => ['-t', '{host} E-Mail {inst} count', '-v', 'E-Mails'], + email_size => ['-t', '{host} E-Mail {inst} size', '-v', 'Bytes'], + spam_score => ['-t', '{host} spam score', '-v', 'score'], + spam_check => ['-t', '{host} spam checks {inst}', '-v', 'hits'], + 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'], + irq => ['-t', '{host} Interrupts {inst}', '-v', 'Ints/s'], 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'], @@ -1060,6 +1207,7 @@ our $GraphArgs = mysql_qcache => ['-t', 'mysql query cache', '-v', 'Queries/s' ], mysql_threads => ['-t', 'mysql threads', '-v', 'Threads' ], nfs3_procedures => ['-t', '{host} NFSv3 {inst} procedures', '-v', 'Procedures/s' ], + opcode => ['-t', 'OpCode {inst}', '-v', 'Queries/s'], partition => ['-t', '{host} partition {inst} usage', '-v', 'Byte/s'], ping => ['-t', '{host} ping to {inst}', '-v', 'ms'], processes => ['-t', '{host} processes', '-v', 'Processes'], @@ -1067,6 +1215,8 @@ our $GraphArgs = 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'], + rcode => ['-t', 'RCode {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'], @@ -1075,7 +1225,8 @@ our $GraphArgs = time_dispersion => ['-t', 'NTPd time dispersion ({inst})', '-v', 'Seconds'], traffic => ['-t', '{host} {inst} traffic', '-v', 'Bit/s'], users => ['-t', '{host} users', '-v', 'Users'], - voltage => ['-t', '{host} voltage', '-v', 'Volts'], + multimeter => ['-t', '{host} multimeter', '-v', 'Value'], + voltage => ['-t', '{host} voltage {inst}', '-v', 'Volts'], vs_threads => ['-t', '{host} threads', '-v', 'Threads'], vs_memory => ['-t', '{host} memory usage', '-v', 'Bytes'], vs_processes => ['-t', '{host} processes', '-v', 'Processes'], @@ -1087,6 +1238,11 @@ our $GraphMulti = cpu => \&output_graph_cpu, cpufreq => 1, disk => 1, + email => \&output_graph_email_count, + email_size => \&output_graph_email_size, + irq => \&output_graph_irq, + spam_score => 1, + spam_check => \&output_graph_spam_check, load => 0, mails => 0, memory => 0, @@ -1094,9 +1250,12 @@ our $GraphMulti = mysql_handler => \&output_graph_mysql_handler, partition => 1, ping => \&output_graph_ping, + qtype => \&output_graph_named_qtype, + rcode => \&output_graph_named_rcode, sensors => 1, traffic => 1, - users => 1 + users => 1, + multimeter => 1 }; our @Info; @@ -1272,6 +1431,157 @@ sub output_graph_ping return (@ret); } +sub output_graph_irq +{ + my @inst = sort { $a <=> $b } @_; + 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/irq-$inst.rrd:irq:AVERAGE", + "DEF:min_$i=$AbsDir/irq-$inst.rrd:irq:MIN", + "DEF:max_$i=$AbsDir/irq-$inst.rrd:irq:MAX"); + } + + for (my $i = 0; $i < scalar (@inst); $i++) + { + my $inst = $inst[$i]; + my $color = $colors[$i]; + + if (length ($inst) > 15) + { + $inst = substr ($inst, 0, 12) . '...'; + } + else + { + $inst = sprintf ('%-15s', $inst); + } + + push (@ret, + "LINE1:avg_$i#$color:$inst", + "GPRINT:min_$i:MIN:%5.1lf Min,", + "GPRINT:avg_$i:AVERAGE:%5.1lf Avg,", + "GPRINT:max_$i:MAX:%5.1lf Max,", + "GPRINT:avg_$i:LAST:%5.1lf Last\\l"); + } + + return (@ret); +} + +sub output_graph_email_count +{ + my @inst = @_; + my @ret = (); + + my $c = scalar @inst; + + my @colors = get_n_colors ($c); + + for (my $i = 0; $i < $c; ++$i) { + push @ret, + "DEF:min_$i=$AbsDir/email-$inst[$i].rrd:count:MIN", + "DEF:avg_$i=$AbsDir/email-$inst[$i].rrd:count:AVERAGE", + "DEF:max_$i=$AbsDir/email-$inst[$i].rrd:count:MAX"; + } + + for (my $i = 0; $i < $c; ++$i) { + my $s = ""; + + if (length $inst[$i] > 10) { + $s = substr ($inst[$i], 0, 7) . '...'; + } + else { + $s = sprintf '%-10s', $inst[$i]; + } + + push @ret, + "LINE1:avg_$i#$colors[$i]:$s", + "GPRINT:min_$i:MIN:%4.1lf Min,", + "GPRINT:avg_$i:AVERAGE:%4.1lf Avg,", + "GPRINT:max_$i:MAX:%4.1lf Max,", + "GPRINT:avg_$i:LAST:%4.1lf Last\\l"; + } + return @ret; +} + +sub output_graph_email_size +{ + my @inst = @_; + my @ret = (); + + my $c = scalar @inst; + + my @colors = get_n_colors ($c); + + for (my $i = 0; $i < $c; ++$i) { + push @ret, + "DEF:min_$i=$AbsDir/email_size-$inst[$i].rrd:size:MIN", + "DEF:avg_$i=$AbsDir/email_size-$inst[$i].rrd:size:AVERAGE", + "DEF:max_$i=$AbsDir/email_size-$inst[$i].rrd:size:MAX"; + } + + for (my $i = 0; $i < $c; ++$i) { + my $s = ""; + + if (length $inst[$i] > 10) { + $s = substr ($inst[$i], 0, 7) . '...'; + } + else { + $s = sprintf '%-10s', $inst[$i]; + } + + push @ret, + "LINE1:avg_$i#$colors[$i]:$s", + "GPRINT:min_$i:MIN:%4.1lf Min,", + "GPRINT:avg_$i:AVERAGE:%4.1lf Avg,", + "GPRINT:max_$i:MAX:%4.1lf Max,", + "GPRINT:avg_$i:LAST:%4.1lf Last\\l"; + } + return @ret; +} + +sub output_graph_spam_check +{ + my @inst = sort @_; + my @ret = (); + + my $c = scalar @inst; + + my @colors = get_n_colors ($c); + + for (my $i = 0; $i < $c; ++$i) { + push @ret, + "DEF:min_$i=$AbsDir/spam_check-$inst[$i].rrd:hits:MIN", + "DEF:avg_$i=$AbsDir/spam_check-$inst[$i].rrd:hits:AVERAGE", + "DEF:max_$i=$AbsDir/spam_check-$inst[$i].rrd:hits:MAX"; + } + + for (my $i = 0; $i < $c; ++$i) { + my $s = ""; + + if (length $inst[$i] > 25) { + $s = substr ($inst[$i], 0, 22) . '...'; + } + else { + $s = sprintf '%-25s', $inst[$i]; + } + + push @ret, + "LINE1:avg_$i#$colors[$i]:$s", + "GPRINT:min_$i:MIN:%4.1lf Min,", + "GPRINT:avg_$i:AVERAGE:%4.1lf Avg,", + "GPRINT:max_$i:MAX:%4.1lf Max,", + "GPRINT:avg_$i:LAST:%4.1lf Last\\l"; + } + return @ret; +} + sub output_graph_mysql_commands { my @inst = @_; @@ -1358,6 +1668,93 @@ 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_named_rcode +{ + 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/rcode-$inst.rrd:value:AVERAGE", + "DEF:min_$i=$AbsDir/rcode-$inst.rrd:value:MIN", + "DEF:max_$i=$AbsDir/rcode-$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) > 8) + { + $inst = substr ($inst, 0, 6) . '..'; + } + else + { + $inst = sprintf ('%-8s', $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})); @@ -1477,6 +1874,83 @@ Cache-Control: no-cache + HEADER my $MySelf = defined ($ENV{'GATEWAY_INTERFACE'}) ? $ENV{'SCRIPT_NAME'} : $0; @@ -1486,7 +1960,7 @@ HEADER print qq(\t\t
Go up
\n); print "\t\t

Hourly

-
+

Daily

-
+

Weekly

-
+

Monthly

-
+

Yearly

-
+
HTML } elsif (length ($Type) != 0) @@ -1520,15 +1994,15 @@ HTML print <Hourly -
+

Daily

-
+

Weekly

-
+

Monthly

-
+

Yearly

-
+
HTML } else @@ -1556,7 +2030,7 @@ HTML if (ref ($GraphMulti->{$type}) eq 'CODE') { print qq(\t\t), - qq(\n); + qq(\n); next; } @@ -1567,12 +2041,12 @@ HTML if (length ($inst)) { print qq(\t\t), - qq(\n); + qq(\n); } else { print qq(\t\t), - qq(\n); + qq(\n); } } }