X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=contrib%2Fcollection.cgi;h=b8a08130b22c5bcd3fa28ddd743c369f19a6f146;hb=41f141639046a261063cf346fe7f89cd4cb9cc59;hp=045b77bbe835ed29ebb962cc30d36b550d902a0f;hpb=83149d73b8a3bd4889517a2e4d0adca0a52e7a06;p=collectd.git diff --git a/contrib/collection.cgi b/contrib/collection.cgi index 045b77bb..b8a08130 100755 --- a/contrib/collection.cgi +++ b/contrib/collection.cgi @@ -209,8 +209,8 @@ sub _find_plugins for (@tmp) { my ($plugin, $instance) = split (m/-/, $_, 2); - $plugins{$plugin} = [] if (!$plugins{$plugin}); - push (@{$plugins{$plugin}}, $instance) if (defined ($instance)); + $plugins{$plugin} = [] if (!exists $plugins{$plugin}); + push (@{$plugins{$plugin}}, $instance); } } # for (@DataDirs) @@ -267,9 +267,11 @@ sub _find_files_for_host for (@$plugin_instances) { - my $plugin_instance = $_; + my $plugin_instance = defined ($_) ? $_ : '-'; my %types = _find_types ($host, $plugin, - ($plugin_instance ne '-') ? $plugin_instance : undef); + ($plugin_instance ne '-') + ? $plugin_instance + : undef); $ret->{$plugin}{$plugin_instance} = {}; @@ -411,6 +413,64 @@ sub _get_random_color return ([$r, $g, $b]); } # _get_random_color +sub _get_n_colors +{ + my $instances = shift; + my $num = scalar @$instances; + my $ret = {}; + + for (my $i = 0; $i < $num; $i++) + { + my $pos = 6 * $i / $num; + my $n = int ($pos); + my $p = $pos - $n; + my $q = 1 - $p; + + my $red = 0; + my $green = 0; + my $blue = 0; + + my $color; + + if ($n == 0) + { + $red = 255; + $blue = 255 * $p; + } + elsif ($n == 1) + { + $red = 255 * $q; + $blue = 255; + } + elsif ($n == 2) + { + $green = 255 * $p; + $blue = 255; + } + elsif ($n == 3) + { + $green = 255; + $blue = 255 * $q; + } + elsif ($n == 4) + { + $red = 255 * $p; + $green = 255; + } + elsif ($n == 5) + { + $red = 255; + $green = 255 * $q; + } + else { die; } + + $color = sprintf ("%02x%02x%02x", $red, $green, $blue); + $ret->{$instances->[$i]} = $color; + } + + return ($ret); +} # _get_n_colors + sub _get_faded_color { my $fg = shift; @@ -1134,7 +1194,7 @@ sub load_graph_definitions 'GPRINT:inc_max:MAX:%5.1lf%ss Max,', 'GPRINT:inc_avg:LAST:%5.1lf%ss Last\l' ], - dns_traffic => ['DEF:rsp_min_raw={file}:responses:MIN', + dns_octets => ['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', @@ -1169,6 +1229,18 @@ sub load_graph_definitions 'GPRINT:qry_avg:LAST:%5.1lf%s Last', 'GPRINT:qry_avg_sum:LAST:(ca. %5.1lf%sB Total)\l' ], + dns_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' + ], email_count => ['-v', 'Mails', 'DEF:avg={file}:value:AVERAGE', 'DEF:min={file}:value:MIN', @@ -1289,6 +1361,18 @@ sub load_graph_definitions 'GPRINT:temp_max:MAX:%4.1lf Max,', 'GPRINT:temp_avg:LAST:%4.1lf Last\l' ], + humidity => ['-v', 'Percent', + 'DEF:temp_avg={file}:value:AVERAGE', + 'DEF:temp_min={file}:value:MIN', + 'DEF:temp_max={file}:value:MAX', + "AREA:temp_max#$HalfGreen", + "AREA:temp_min#$Canvas", + "LINE1:temp_avg#$FullGreen: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' + ], if_errors => ['-v', 'Errors/s', 'DEF:tx_min={file}:tx:MIN', 'DEF:tx_avg={file}:tx:AVERAGE', @@ -1825,18 +1909,6 @@ sub load_graph_definitions '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", @@ -1881,6 +1953,18 @@ sub load_graph_definitions 'GPRINT:ping_avg:AVERAGE:%4.1lf ms Avg,', 'GPRINT:ping_max:MAX:%4.1lf ms Max,', 'GPRINT:ping_avg:LAST:%4.1lf ms Last'], + power => ['-v', 'Watt', + 'DEF:avg={file}:value:AVERAGE', + 'DEF:min={file}:value:MIN', + 'DEF:max={file}:value:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Watt", + 'GPRINT:min:MIN:%5.1lf%sW Min,', + 'GPRINT:avg:AVERAGE:%5.1lf%sW Avg,', + 'GPRINT:max:MAX:%5.1lf%sW Max,', + 'GPRINT:avg:LAST:%5.1lf%sW Last\l' + ], processes => [ "DEF:running_avg={file}:running:AVERAGE", "DEF:running_min={file}:running:MIN", @@ -1943,18 +2027,27 @@ sub load_graph_definitions 'GPRINT:sleeping_max:MAX:%5.1lf Max,', 'GPRINT:sleeping_avg:LAST:%5.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_count => ['-v', 'Processes', + '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_cputime => [ + ps_cputime => ['-v', 'Jiffies', 'DEF:user_avg_raw={file}:user:AVERAGE', 'DEF:user_min_raw={file}:user:MIN', 'DEF:user_max_raw={file}:user:MAX', @@ -1981,27 +2074,7 @@ sub load_graph_definitions '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 => [ + ps_pagefaults => ['-v', 'Pagefaults/s', 'DEF:minor_avg={file}:minflt:AVERAGE', 'DEF:minor_min={file}:minflt:MIN', 'DEF:minor_max={file}:minflt:MAX', @@ -2022,6 +2095,17 @@ sub load_graph_definitions 'GPRINT:major_max:MAX:%5.1lf%s Max,', 'GPRINT:major_avg:LAST:%5.1lf%s Last\l' ], + ps_rss => ['-v', 'Bytes', + 'DEF:avg={file}:value:AVERAGE', + 'DEF:min={file}:value:MIN', + 'DEF:max={file}:value: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_state => ['-v', 'Processes', 'DEF:avg={file}:value:AVERAGE', 'DEF:min={file}:value:MIN', @@ -2034,29 +2118,41 @@ sub load_graph_definitions 'GPRINT:max:MAX:%6.2lf Max,', 'GPRINT:avg:LAST:%6.2lf Last\l' ], - qtype => [ + signal_noise => ['-v', 'dBm', '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' + "LINE1:avg#$FullBlue:Noise", + 'GPRINT:min:MIN:%5.1lf%sdBm Min,', + 'GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,', + 'GPRINT:max:MAX:%5.1lf%sdBm Max,', + 'GPRINT:avg:LAST:%5.1lf%sdBm Last\l' ], - rcode => [ + signal_power => ['-v', 'dBm', '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' + "LINE1:avg#$FullBlue:Power", + 'GPRINT:min:MIN:%5.1lf%sdBm Min,', + 'GPRINT:avg:AVERAGE:%5.1lf%sdBm Avg,', + 'GPRINT:max:MAX:%5.1lf%sdBm Max,', + 'GPRINT:avg:LAST:%5.1lf%sdBm Last\l' + ], + signal_quality => ['-v', '%', + 'DEF:avg={file}:value:AVERAGE', + 'DEF:min={file}:value:MIN', + 'DEF:max={file}:value:MAX', + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Quality", + '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' ], swap => ['-v', 'Bytes', '-b', '1024', 'DEF:avg={file}:value:AVERAGE', @@ -2139,7 +2235,7 @@ sub load_graph_definitions 'GPRINT:temp_max:MAX:%4.1lf Max,', 'GPRINT:temp_avg:LAST:%4.1lf Last\l' ], - timeleft => [ + timeleft => ['-v', 'Minutes', 'DEF:avg={file}:timeleft:AVERAGE', 'DEF:min={file}:timeleft:MIN', 'DEF:max={file}:timeleft:MAX', @@ -2223,7 +2319,7 @@ sub load_graph_definitions 'GPRINT:multimeter_max:MAX:%4.1lf Max,', 'GPRINT:multimeter_avg:LAST:%4.1lf Last\l' ], - users => [ + users => ['-v', 'Users', 'DEF:users_avg={file}:users:AVERAGE', 'DEF:users_min={file}:users:MIN', 'DEF:users_max={file}:users:MAX', @@ -2248,90 +2344,50 @@ sub load_graph_definitions 'GPRINT:avg:LAST:%5.1lf%sV Last\l' ], vs_threads => [ - "DEF:total_avg={file}:total:AVERAGE", - "DEF:total_min={file}:total:MIN", - "DEF:total_max={file}:total:MAX", - "DEF:running_avg={file}:running:AVERAGE", - "DEF:running_min={file}:running:MIN", - "DEF:running_max={file}:running:MAX", - "DEF:uninterruptible_avg={file}:uninterruptible:AVERAGE", - "DEF:uninterruptible_min={file}:uninterruptible:MIN", - "DEF:uninterruptible_max={file}:uninterruptible:MAX", - "DEF:onhold_avg={file}:onhold:AVERAGE", - "DEF:onhold_min={file}:onhold:MIN", - "DEF:onhold_max={file}:onhold:MAX", - "LINE1:total_avg#$FullYellow:Total ", - 'GPRINT:total_min:MIN:%5.1lf Min,', - 'GPRINT:total_avg:AVERAGE:%5.1lf Avg.,', - 'GPRINT:total_max:MAX:%5.1lf Max,', - 'GPRINT:total_avg:LAST:%5.1lf Last\l', - "LINE1:running_avg#$FullRed:Running ", - 'GPRINT:running_min:MIN:%5.1lf Min,', - 'GPRINT:running_avg:AVERAGE:%5.1lf Avg.,', - 'GPRINT:running_max:MAX:%5.1lf Max,', - 'GPRINT:running_avg:LAST:%5.1lf Last\l', - "LINE1:uninterruptible_avg#$FullGreen:Unintr ", - 'GPRINT:uninterruptible_min:MIN:%5.1lf Min,', - 'GPRINT:uninterruptible_avg:AVERAGE:%5.1lf Avg.,', - 'GPRINT:uninterruptible_max:MAX:%5.1lf Max,', - 'GPRINT:uninterruptible_avg:LAST:%5.1lf Last\l', - "LINE1:onhold_avg#$FullBlue:Onhold ", - 'GPRINT:onhold_min:MIN:%5.1lf Min,', - 'GPRINT:onhold_avg:AVERAGE:%5.1lf Avg.,', - 'GPRINT:onhold_max:MAX:%5.1lf Max,', - 'GPRINT:onhold_avg:LAST:%5.1lf Last\l' - ], - vs_memory => [ - 'DEF:vm_avg={file}:vm:AVERAGE', - 'DEF:vm_min={file}:vm:MIN', - 'DEF:vm_max={file}:vm:MAX', - 'DEF:vml_avg={file}:vml:AVERAGE', - 'DEF:vml_min={file}:vml:MIN', - 'DEF:vml_max={file}:vml:MAX', - 'DEF:rss_avg={file}:rss:AVERAGE', - 'DEF:rss_min={file}:rss:MIN', - 'DEF:rss_max={file}:rss:MAX', - 'DEF:anon_avg={file}:anon:AVERAGE', - 'DEF:anon_min={file}:anon:MIN', - 'DEF:anon_max={file}:anon:MAX', - "LINE1:vm_avg#$FullYellow:VM ", - 'GPRINT:vm_min:MIN:%5.1lf%s Min,', - 'GPRINT:vm_avg:AVERAGE:%5.1lf%s Avg.,', - 'GPRINT:vm_max:MAX:%5.1lf%s Avg.,', - 'GPRINT:vm_avg:LAST:%5.1lf%s Last\l', - "LINE1:vml_avg#$FullRed:Locked ", - 'GPRINT:vml_min:MIN:%5.1lf%s Min,', - 'GPRINT:vml_avg:AVERAGE:%5.1lf%s Avg.,', - 'GPRINT:vml_max:MAX:%5.1lf%s Avg.,', - 'GPRINT:vml_avg:LAST:%5.1lf%s Last\l', - "LINE1:rss_avg#$FullGreen:RSS ", - 'GPRINT:rss_min:MIN:%5.1lf%s Min,', - 'GPRINT:rss_avg:AVERAGE:%5.1lf%s Avg.,', - 'GPRINT:rss_max:MAX:%5.1lf%s Avg.,', - 'GPRINT:rss_avg:LAST:%5.1lf%s Last\l', - "LINE1:anon_avg#$FullBlue:Anon. ", - 'GPRINT:anon_min:MIN:%5.1lf%s Min,', - 'GPRINT:anon_avg:AVERAGE:%5.1lf%s Avg.,', - 'GPRINT:anon_max:MAX:%5.1lf%s Avg.,', - 'GPRINT:anon_avg:LAST:%5.1lf%s Last\l', + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Threads", + 'GPRINT:min:MIN:%5.1lf Min,', + 'GPRINT:avg:AVERAGE:%5.1lf Avg.,', + 'GPRINT:max:MAX:%5.1lf Max,', + 'GPRINT:avg:LAST:%5.1lf Last\l', + ], + vs_memory => ['-b', '1024', '-v', 'Bytes', + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:", + 'GPRINT:min:MIN:%5.1lf%sbytes Min,', + 'GPRINT:avg:AVERAGE:%5.1lf%sbytes Avg.,', + 'GPRINT:max:MAX:%5.1lf%sbytes Max,', + 'GPRINT:avg:LAST:%5.1lf%sbytes Last\l', ], vs_processes => [ - 'DEF:proc_avg={file}:total:AVERAGE', - 'DEF:proc_min={file}:total:MIN', - 'DEF:proc_max={file}:total:MAX', - "AREA:proc_max#$HalfBlue", - "AREA:proc_min#$Canvas", - "LINE1:proc_avg#$FullBlue:Processes", - 'GPRINT:proc_min:MIN:%4.1lf Min,', - 'GPRINT:proc_avg:AVERAGE:%4.1lf Avg.,', - 'GPRINT:proc_max:MAX:%4.1lf Max,', - 'GPRINT:proc_avg:LAST:%4.1lf Last\l' + "DEF:avg={file}:value:AVERAGE", + "DEF:min={file}:value:MIN", + "DEF:max={file}:value:MAX", + "AREA:max#$HalfBlue", + "AREA:min#$Canvas", + "LINE1:avg#$FullBlue:Processes", + 'GPRINT:min:MIN:%5.1lf Min,', + 'GPRINT:avg:AVERAGE:%5.1lf Avg.,', + 'GPRINT:max:MAX:%5.1lf Max,', + 'GPRINT:avg:LAST:%5.1lf Last\l', ], }; $GraphDefs->{'if_multicast'} = $GraphDefs->{'ipt_packets'}; $GraphDefs->{'if_tx_errors'} = $GraphDefs->{'if_rx_errors'}; + $GraphDefs->{'dns_qtype'} = $GraphDefs->{'dns_opcode'}; + $GraphDefs->{'dns_rcode'} = $GraphDefs->{'dns_opcode'}; $MetaGraphDefs->{'cpu'} = \&meta_graph_cpu; + $MetaGraphDefs->{'dns_qtype'} = \&meta_graph_dns; + $MetaGraphDefs->{'dns_rcode'} = \&meta_graph_dns; $MetaGraphDefs->{'if_rx_errors'} = \&meta_graph_if_rx_errors; $MetaGraphDefs->{'if_tx_errors'} = \&meta_graph_if_rx_errors; $MetaGraphDefs->{'memory'} = \&meta_graph_memory; @@ -2363,12 +2419,21 @@ sub meta_graph_generic_stack @RRDDefaultArgs, @{$opts->{'rrd_opts'}}); my $max_inst_name = 0; + my @vnames = (); + + for ($i = 0; $i < @$sources; $i++) + { + my $tmp = $sources->[$i]->{'name'}; + $tmp =~ tr/A-Za-z0-9\-_/_/c; + $vnames[$i] = $i . $tmp; + } for ($i = 0; $i < @$sources; $i++) { my $inst_data = $sources->[$i]; my $inst_name = $inst_data->{'name'} || confess; my $file = $inst_data->{'file'} || confess; + my $vname = $vnames[$i]; if (length ($inst_name) > $max_inst_name) { @@ -2378,27 +2443,23 @@ sub meta_graph_generic_stack confess ("No such file: $file") if (!-e $file); push (@cmd, - qq#DEF:${inst_name}_min=$file:value:MIN#, - qq#DEF:${inst_name}_avg=$file:value:AVERAGE#, - qq#DEF:${inst_name}_max=$file:value:MAX#, - qq#CDEF:${inst_name}_nnl=${inst_name}_avg,UN,0,${inst_name}_avg,IF#); + qq#DEF:${vname}_min=$file:value:MIN#, + qq#DEF:${vname}_avg=$file:value:AVERAGE#, + qq#DEF:${vname}_max=$file:value:MAX#, + qq#CDEF:${vname}_nnl=${vname}_avg,UN,0,${vname}_avg,IF#); } { - my $inst_data = $sources->[@$sources - 1]; - my $inst_name = $inst_data->{'name'}; + my $vname = $vnames[@vnames - 1]; - push (@cmd, qq#CDEF:${inst_name}_stk=${inst_name}_nnl#); + push (@cmd, qq#CDEF:${vname}_stk=${vname}_nnl#); } for (my $i = 1; $i < @$sources; $i++) { - my $inst_data0 = $sources->[@$sources - ($i + 1)]; - my $inst_data1 = $sources->[@$sources - $i]; - - my $inst_name0 = $inst_data0->{'name'}; - my $inst_name1 = $inst_data1->{'name'}; + my $vname0 = $vnames[@vnames - ($i + 1)]; + my $vname1 = $vnames[@vnames - $i]; - push (@cmd, qq#CDEF:${inst_name0}_stk=${inst_name0}_nnl,${inst_name1}_stk,+#); + push (@cmd, qq#CDEF:${vname0}_stk=${vname0}_nnl,${vname1}_stk,+#); } for (my $i = 0; $i < @$sources; $i++) @@ -2406,6 +2467,8 @@ sub meta_graph_generic_stack my $inst_data = $sources->[$i]; my $inst_name = $inst_data->{'name'}; + my $vname = $vnames[$i]; + my $legend = sprintf ('%-*s', $max_inst_name, $inst_name); my $line_color; @@ -2425,12 +2488,12 @@ sub meta_graph_generic_stack } $area_color = _color_to_string (_get_faded_color ($area_color)); - push (@cmd, qq(AREA:${inst_name}_stk#$area_color), - qq(LINE1:${inst_name}_stk#$line_color:$legend), - qq(GPRINT:${inst_name}_min:MIN:$number_format Min,), - qq(GPRINT:${inst_name}_avg:AVERAGE:$number_format Avg,), - qq(GPRINT:${inst_name}_max:MAX:$number_format Max,), - qq(GPRINT:${inst_name}_avg:LAST:$number_format Last\\l), + push (@cmd, qq(AREA:${vname}_stk#$area_color), + qq(LINE1:${vname}_stk#$line_color:$legend), + qq(GPRINT:${vname}_min:MIN:$number_format Min,), + qq(GPRINT:${vname}_avg:AVERAGE:$number_format Avg,), + qq(GPRINT:${vname}_max:MAX:$number_format Max,), + qq(GPRINT:${vname}_avg:LAST:$number_format Last\\l), ); } @@ -2457,6 +2520,8 @@ sub meta_graph_cpu $opts->{'title'} = "$host/$plugin" . (defined ($plugin_instance) ? "-$plugin_instance" : '') . "/$type"; + $opts->{'rrd_opts'} = ['-v', 'Percent']; + my @files = (); $opts->{'colors'} = @@ -2501,6 +2566,57 @@ sub meta_graph_cpu return (meta_graph_generic_stack ($opts, $sources)); } # meta_graph_cpu +sub meta_graph_dns +{ + confess ("Wrong number of arguments") if (@_ != 5); + + my $host = shift; + my $plugin = shift; + my $plugin_instance = shift; + my $type = shift; + my $type_instances = shift; + + my $opts = {}; + my $sources = []; + + $opts->{'title'} = "$host/$plugin" + . (defined ($plugin_instance) ? "-$plugin_instance" : '') . "/$type"; + + $opts->{'rrd_opts'} = ['-v', 'Queries/s']; + + my @files = (); + + @$type_instances = sort @$type_instances; + + $opts->{'colors'} = _get_n_colors ($type_instances); + + for (@$type_instances) + { + my $inst = $_; + my $file = ''; + my $title = $opts->{'title'}; + + for (@DataDirs) + { + if (-e "$_/$title-$inst.rrd") + { + $file = "$_/$title-$inst.rrd"; + last; + } + } + confess ("No file found for $title") if ($file eq ''); + + push (@$sources, + { + name => $inst, + file => $file + } + ); + } # for (@$type_instances) + + return (meta_graph_generic_stack ($opts, $sources)); +} # meta_graph_dns + sub meta_graph_memory { confess ("Wrong number of arguments") if (@_ != 5); @@ -2558,7 +2674,7 @@ sub meta_graph_memory } # for (@$type_instances) return (meta_graph_generic_stack ($opts, $sources)); -} # meta_graph_cpu +} # meta_graph_memory sub meta_graph_if_rx_errors { @@ -2714,6 +2830,7 @@ sub meta_graph_ps_state $opts->{'title'} = "$host/$plugin" . (defined ($plugin_instance) ? "-$plugin_instance" : '') . "/$type"; + $opts->{'rrd_opts'} = ['-v', 'Processes']; my @files = (); @@ -2773,6 +2890,7 @@ sub meta_graph_swap $opts->{'title'} = "$host/$plugin" . (defined ($plugin_instance) ? "-$plugin_instance" : '') . "/$type"; $opts->{'number_format'} = '%5.1lf%s'; + $opts->{'rrd_opts'} = ['-v', 'Bytes']; my @files = (); @@ -2851,7 +2969,7 @@ sub meta_graph_tcp_connections }; _custom_sort_arrayref ($type_instances, - [qw(ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 TIME_WAIT CLOSE + [reverse qw(ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT1 FIN_WAIT2 TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK CLOSING LISTEN)]); for (@$type_instances)