our $Config = "/etc/collection.conf";
our @DataDirs = ();
+our @DontShowTypes = ();
our $LibDir;
our $ValidTimespan =
$value =~ s#/*$##;
$LibDir = $value;
}
+ elsif ($key eq 'dontshowtype')
+ {
+ push (@DontShowTypes, $value);
+ }
else
{
print STDERR "Unknown key: $key\n";
my $name = "$_";
$name =~ s/\.rrd$//i;
my ($type, $instance) = split (m/-/, $name, 2);
+ if (grep { $_ eq $type } @DontShowTypes) { next; }
$types{$type} = [] if (!$types{$type});
push (@{$types{$type}}, $instance) if (defined ($instance));
}
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;
'GPRINT:avg:LAST:%5.1lf%s Last',
'GPRINT:avg_sum:LAST:(ca. %5.1lf%sB Total)\l'
],
+ apache_connections => ['DEF:min={file}:count:MIN',
+ 'DEF:avg={file}:count:AVERAGE',
+ 'DEF:max={file}:count:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Connections",
+ 'GPRINT:min:MIN:%6.2lf Min,',
+ 'GPRINT:avg:AVERAGE:%6.2lf Avg,',
+ 'GPRINT:max:MAX:%6.2lf Max,',
+ 'GPRINT:avg:LAST:%6.2lf Last'
+ ],
+ apache_idle_workers => ['DEF:min={file}:count:MIN',
+ 'DEF:avg={file}:count:AVERAGE',
+ 'DEF:max={file}:count:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Idle Workers",
+ 'GPRINT:min:MIN:%6.2lf Min,',
+ 'GPRINT:avg:AVERAGE:%6.2lf Avg,',
+ 'GPRINT:max:MAX:%6.2lf Max,',
+ 'GPRINT:avg:LAST:%6.2lf Last'
+ ],
apache_requests => ['DEF:min={file}:count:MIN',
'DEF:avg={file}:count:AVERAGE',
'DEF:max={file}:count:MAX',
'GPRINT:max:MAX:%5.1lf%sAh Max,',
'GPRINT:avg:LAST:%5.1lf%sAh Last\l'
],
+ connections => ['-v', 'Connections',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Connections",
+ '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'
+ ],
cpu => ['-v', 'CPU load',
'DEF:avg={file}:value:AVERAGE',
'DEF:min={file}:value:MIN',
'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',
'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',
'GPRINT:avg:LAST:%4.1lf Last\l'
],
spam_check => [
- 'DEF:avg={file}:hits:AVERAGE',
- 'DEF:min={file}:hits:MIN',
- 'DEF:max={file}:hits:MAX',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
"AREA:max#$HalfMagenta",
"AREA:min#$Canvas",
"LINE1:avg#$FullMagenta:Count ",
'GPRINT:max:MAX:%4.1lf Max,',
'GPRINT:avg:LAST:%4.1lf Last\l'
],
+ conntrack => ['-v', 'Entries',
+ 'DEF:avg={file}:entropy:AVERAGE',
+ 'DEF:min={file}:entropy:MIN',
+ 'DEF:max={file}:entropy:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Count",
+ 'GPRINT:min:MIN:%4.0lf Min,',
+ 'GPRINT:avg:AVERAGE:%4.0lf Avg,',
+ 'GPRINT:max:MAX:%4.0lf Max,',
+ 'GPRINT:avg:LAST:%4.0lf Last\l'
+ ],
entropy => ['-v', 'Bits',
'DEF:avg={file}:entropy:AVERAGE',
'DEF:min={file}:entropy:MIN',
'GPRINT:spam:LAST:%4.1lf Last',
'HRULE:0#000000'
],
+ memcached_command => ['-v', 'Commands',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Commands",
+ 'GPRINT:min:MIN:%5.1lf%s Min,',
+ 'GPRINT:avg:AVERAGE:%5.1lf Avg,',
+ 'GPRINT:max:MAX:%5.1lf Max,',
+ 'GPRINT:avg:LAST:%5.1lf Last\l'
+ ],
+ memcached_connections => ['-v', 'Connections',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Connections",
+ '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'
+ ],
+ memcached_items => ['-v', 'Items',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Items",
+ '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'
+ ],
+ memcached_octets => ['-v', 'Bits/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: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,+',
+ 'CDEF:out_bit_min=out_min,8,*',
+ 'CDEF:out_bit_avg=out_avg,8,*',
+ 'CDEF:out_bit_max=out_max,8,*',
+ 'CDEF:inc_bit_min=inc_min,8,*',
+ 'CDEF:inc_bit_avg=inc_avg,8,*',
+ 'CDEF:inc_bit_max=inc_max,8,*',
+ 'CDEF:overlap=out_bit_avg,inc_bit_avg,GT,inc_bit_avg,out_bit_avg,IF',
+ "AREA:out_bit_avg#$HalfGreen",
+ "AREA:inc_bit_avg#$HalfBlue",
+ "AREA:overlap#$HalfBlueGreen",
+ "LINE1:out_bit_avg#$FullGreen:Written",
+ 'GPRINT:out_bit_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:out_bit_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:out_bit_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:out_avg_sum:LAST:(ca. %5.1lf%sB Total)\l',
+ "LINE1:inc_bit_avg#$FullBlue:Read ",
+ 'GPRINT:inc_bit_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:inc_bit_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:inc_bit_avg:LAST:%5.1lf%s Last',
+ 'GPRINT:inc_avg_sum:LAST:(ca. %5.1lf%sB Total)\l'
+ ],
+ memcached_ops => ['-v', 'Ops',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Ops",
+ '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'
+ ],
memory => ['-b', '1024', '-v', 'Bytes',
'DEF:avg={file}:value:AVERAGE',
'DEF:min={file}:value:MIN',
'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",
'GPRINT:ping_avg:AVERAGE:%4.1lf ms Avg,',
'GPRINT:ping_max:MAX:%4.1lf ms Max,',
'GPRINT:ping_avg:LAST:%4.1lf ms Last'],
+ pg_blks => ['DEF:pg_blks_avg={file}:value:AVERAGE',
+ 'DEF:pg_blks_min={file}:value:MIN',
+ 'DEF:pg_blks_max={file}:value:MAX',
+ "AREA:pg_blks_max#$HalfBlue",
+ "AREA:pg_blks_min#$Canvas",
+ "LINE1:pg_blks_avg#$FullBlue:Blocks",
+ 'GPRINT:pg_blks_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_blks_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_blks_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_blks_avg:LAST:%4.1lf%s Last'],
+ pg_db_size => ['DEF:pg_db_size_avg={file}:value:AVERAGE',
+ 'DEF:pg_db_size_min={file}:value:MIN',
+ 'DEF:pg_db_size_max={file}:value:MAX',
+ "AREA:pg_db_size_max#$HalfBlue",
+ "AREA:pg_db_size_min#$Canvas",
+ "LINE1:pg_db_size_avg#$FullBlue:Bytes",
+ 'GPRINT:pg_db_size_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_db_size_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_db_size_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_db_size_avg:LAST:%4.1lf%s Last'],
+ pg_n_tup_c => ['DEF:pg_n_tup_avg={file}:value:AVERAGE',
+ 'DEF:pg_n_tup_min={file}:value:MIN',
+ 'DEF:pg_n_tup_max={file}:value:MAX',
+ "AREA:pg_n_tup_max#$HalfBlue",
+ "AREA:pg_n_tup_min#$Canvas",
+ "LINE1:pg_n_tup_avg#$FullBlue:Tuples",
+ 'GPRINT:pg_n_tup_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_n_tup_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_n_tup_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_n_tup_avg:LAST:%4.1lf%s Last'],
+ pg_n_tup_g => ['DEF:pg_n_tup_avg={file}:value:AVERAGE',
+ 'DEF:pg_n_tup_min={file}:value:MIN',
+ 'DEF:pg_n_tup_max={file}:value:MAX',
+ "AREA:pg_n_tup_max#$HalfBlue",
+ "AREA:pg_n_tup_min#$Canvas",
+ "LINE1:pg_n_tup_avg#$FullBlue:Tuples",
+ 'GPRINT:pg_n_tup_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_n_tup_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_n_tup_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_n_tup_avg:LAST:%4.1lf%s Last'],
+ pg_numbackends => ['DEF:pg_numbackends_avg={file}:value:AVERAGE',
+ 'DEF:pg_numbackends_min={file}:value:MIN',
+ 'DEF:pg_numbackends_max={file}:value:MAX',
+ "AREA:pg_numbackends_max#$HalfBlue",
+ "AREA:pg_numbackends_min#$Canvas",
+ "LINE1:pg_numbackends_avg#$FullBlue:Backends",
+ 'GPRINT:pg_numbackends_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_numbackends_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_numbackends_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_numbackends_avg:LAST:%4.1lf%s Last'],
+ pg_scan => ['DEF:pg_scan_avg={file}:value:AVERAGE',
+ 'DEF:pg_scan_min={file}:value:MIN',
+ 'DEF:pg_scan_max={file}:value:MAX',
+ "AREA:pg_scan_max#$HalfBlue",
+ "AREA:pg_scan_min#$Canvas",
+ "LINE1:pg_scan_avg#$FullBlue:Scans",
+ 'GPRINT:pg_scan_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_scan_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_scan_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_scan_avg:LAST:%4.1lf%s Last'],
+ pg_xact => ['DEF:pg_xact_avg={file}:value:AVERAGE',
+ 'DEF:pg_xact_min={file}:value:MIN',
+ 'DEF:pg_xact_max={file}:value:MAX',
+ "AREA:pg_xact_max#$HalfBlue",
+ "AREA:pg_xact_min#$Canvas",
+ "LINE1:pg_xact_avg#$FullBlue:Transactions",
+ 'GPRINT:pg_xact_min:MIN:%4.1lf%s Min,',
+ 'GPRINT:pg_xact_avg:AVERAGE:%4.1lf%s Avg,',
+ 'GPRINT:pg_xact_max:MAX:%4.1lf%s Max,',
+ 'GPRINT:pg_xact_avg:LAST:%4.1lf%s Last'],
power => ['-v', 'Watt',
'DEF:avg={file}:value:AVERAGE',
'DEF:min={file}:value:MIN',
'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',
'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',
+ ],
+ vmpage_number => ['-v', 'Pages',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Number",
+ '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'
+ ],
+ vmpage_faults => [
+ "DEF:minf_avg={file}:minflt:AVERAGE",
+ "DEF:minf_min={file}:minflt:MIN",
+ "DEF:minf_max={file}:minflt:MAX",
+ "DEF:majf_avg={file}:majflt:AVERAGE",
+ "DEF:majf_min={file}:majflt:MIN",
+ "DEF:majf_max={file}:majflt:MAX",
+ 'CDEF:overlap=majf_avg,minf_avg,GT,minf_avg,majf_avg,IF',
+ "AREA:majf_avg#$HalfGreen",
+ "AREA:minf_avg#$HalfBlue",
+ "AREA:overlap#$HalfBlueGreen",
+ "LINE1:majf_avg#$FullGreen:Major",
+ 'GPRINT:majf_min:MIN:%5.1lf%s Min,',
+ 'GPRINT:majf_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:majf_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:majf_avg:LAST:%5.1lf%s Last\l',
+ "LINE1:minf_avg#$FullBlue:Minor",
+ 'GPRINT:minf_min:MIN:%5.1lf%s Min,',
+ 'GPRINT:minf_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:minf_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:minf_avg:LAST:%5.1lf%s Last\l'
+ ],
+ vmpage_io => [
+ "DEF:rpag_avg={file}:in:AVERAGE",
+ "DEF:rpag_min={file}:in:MIN",
+ "DEF:rpag_max={file}:in:MAX",
+ "DEF:wpag_avg={file}:out:AVERAGE",
+ "DEF:wpag_min={file}:out:MIN",
+ "DEF:wpag_max={file}:out:MAX",
+ 'CDEF:overlap=wpag_avg,rpag_avg,GT,rpag_avg,wpag_avg,IF',
+ "AREA:wpag_avg#$HalfGreen",
+ "AREA:rpag_avg#$HalfBlue",
+ "AREA:overlap#$HalfBlueGreen",
+ "LINE1:wpag_avg#$FullGreen:OUT",
+ 'GPRINT:wpag_min:MIN:%5.1lf%s Min,',
+ 'GPRINT:wpag_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:wpag_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:wpag_avg:LAST:%5.1lf%s Last\l',
+ "LINE1:rpag_avg#$FullBlue:IN ",
+ 'GPRINT:rpag_min:MIN:%5.1lf%s Min,',
+ 'GPRINT:rpag_avg:AVERAGE:%5.1lf%s Avg,',
+ 'GPRINT:rpag_max:MAX:%5.1lf%s Max,',
+ 'GPRINT:rpag_avg:LAST:%5.1lf%s Last\l'
+ ],
+ vmpage_action => ['-v', 'Pages',
+ 'DEF:avg={file}:value:AVERAGE',
+ 'DEF:min={file}:value:MIN',
+ 'DEF:max={file}:value:MAX',
+ "AREA:max#$HalfBlue",
+ "AREA:min#$Canvas",
+ "LINE1:avg#$FullBlue:Number",
+ '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'
+ ],
+ virt_cpu_total => ['-v', 'Milliseconds',
+ 'DEF:avg_raw={file}:ns:AVERAGE',
+ 'DEF:min_raw={file}:ns:MIN',
+ 'DEF:max_raw={file}:ns:MAX',
+ 'CDEF:avg=avg_raw,1000000,/',
+ 'CDEF:min=min_raw,1000000,/',
+ 'CDEF:max=max_raw,1000000,/',
+ "AREA:avg#$HalfBlue",
+ "LINE1:avg#$FullBlue:CPU time",
+ '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'
],
};
$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'};
+ $GraphDefs->{'vmpage_io-memory'} = $GraphDefs->{'vmpage_io'};
+ $GraphDefs->{'vmpage_io-swap'} = $GraphDefs->{'vmpage_io'};
+ $GraphDefs->{'virt_cpu_total'} = $GraphDefs->{'virt_cpu_total'};
$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;
$MetaGraphDefs->{'mysql_commands'} = \&meta_graph_mysql_commands;
$MetaGraphDefs->{'mysql_handler'} = \&meta_graph_mysql_commands;
$MetaGraphDefs->{'tcp_connections'} = \&meta_graph_tcp_connections;
+ $MetaGraphDefs->{'vmpage_number'} = \&meta_graph_vmpage_number;
+ $MetaGraphDefs->{'vmpage_action'} = \&meta_graph_vmpage_action;
} # load_graph_definitions
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)
{
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 $vname0 = $vnames[@vnames - ($i + 1)];
+ my $vname1 = $vnames[@vnames - $i];
- my $inst_name0 = $inst_data0->{'name'};
- my $inst_name1 = $inst_data1->{'name'};
-
- 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++)
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;
}
$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),
);
}
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);
} # for (@$type_instances)
return (meta_graph_generic_stack ($opts, $sources));
-} # meta_graph_cpu
+} # meta_graph_memory
sub meta_graph_if_rx_errors
{
return (meta_graph_generic_stack ($opts, $sources));
} # meta_graph_tcp_connections
+
+sub meta_graph_vmpage_number
+{
+ 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->{'number_format'} = '%6.2lf';
+
+ $opts->{'rrd_opts'} = ['-v', 'Pages'];
+
+ my @files = ();
+
+ $opts->{'colors'} =
+ {
+ anon_pages => '00e000',
+ bounce => '00e0ff',
+ dirty => '00e0a0',
+ file_pages => 'f000f0',
+ mapped => 'f000a0',
+ page_table_pages => 'ffb000',
+ slab => '0000f0',
+ unstable => '0000a0',
+ writeback => 'ff0000',
+ };
+
+ _custom_sort_arrayref ($type_instances,
+ [reverse qw(anon_pages bounce dirty file_pages mapped page_table_pages slab unstable writeback)]);
+
+ 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_vmpage_number
+
+sub meta_graph_vmpage_action
+{
+ 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->{'number_format'} = '%6.2lf';
+
+ $opts->{'rrd_opts'} = ['-v', 'Pages'];
+
+ my @files = ();
+
+ $opts->{'colors'} =
+ {
+ activate => '00e000',
+ deactivate => '00e0ff',
+ free => '00e0a0',
+ alloc => 'f000f0',
+ refill => 'f000a0',
+ scan_direct => 'ffb000',
+ scan_kswapd => '0000f0',
+ steal => '0000a0',
+ };
+
+ _custom_sort_arrayref ($type_instances,
+ [reverse qw(activate deactivate alloc free refill scan_direct scan_kswapd steal)]);
+
+ 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_vmpage_action
# vim: shiftwidth=2:softtabstop=2:tabstop=8