58b7566e9fe15ceef09217687e1334c5a726e687
[collectd.git] / contrib / collection3 / lib / Collectd / Graph / Type / GenericIO.pm
1 package Collectd::Graph::Type::GenericIO;
2
3 use strict;
4 use warnings;
5 use base ('Collectd::Graph::Type');
6
7 use Carp ('confess');
8
9 use Collectd::Graph::Common (qw($ColorCanvas ident_to_filename get_faded_color));
10
11 return (1);
12
13 sub getRRDArgs
14 {
15   my $obj = shift;
16   my $index = shift;
17
18   my $ident = $obj->{'files'}[$index] || confess ("Unknown index $index");
19   my $filename = ident_to_filename ($ident);
20
21   my $rrd_opts = $obj->{'rrd_opts'} || [];
22   my $rrd_title = $obj->getTitle ($ident);
23   my $format = $obj->{'rrd_format'} || '%5.1lf%s';
24
25   my $ds_list = $obj->getDataSources ();
26   my $ds_names = $obj->{'ds_names'};
27   if (!$ds_names)
28   {
29     $ds_names = {};
30   }
31
32   my $colors = $obj->{'rrd_colors'} || {};
33   my @ret = ('-t', $rrd_title, @$rrd_opts);
34
35   if (defined $obj->{'rrd_vertical'})
36   {
37     push (@ret, '-v', $obj->{'rrd_vertical'});
38   }
39
40   if (@$ds_list != 2)
41   {
42     my $num = 0 + @$ds_list;
43     confess ("Expected two data sources, but there is/are $num");
44   }
45
46   my $rx_ds = $ds_list->[0];
47   my $tx_ds = $ds_list->[1];
48
49   my $rx_ds_name = $ds_names->{$rx_ds} || $rx_ds;
50   my $tx_ds_name = $ds_names->{$tx_ds} || $tx_ds;
51
52   my $rx_color_fg = $colors->{$rx_ds} || '0000ff';
53   my $tx_color_fg = $colors->{$tx_ds} || '00b000';
54
55   my $rx_color_bg = get_faded_color ($rx_color_fg);
56   my $tx_color_bg = get_faded_color ($tx_color_fg);
57   my $overlap_color = get_faded_color ($rx_color_bg, background => $tx_color_bg);
58
59   $filename =~ s#:#\\:#g;
60   $rx_ds =~ s#:#\\:#g;
61   $tx_ds =~ s#:#\\:#g;
62   $rx_ds_name =~ s#:#\\:#g;
63   $tx_ds_name =~ s#:#\\:#g;
64
65   if ($obj->{'scale'})
66   {
67     my $factor = $obj->{'scale'};
68
69     push (@ret,
70         "DEF:min_rx_raw=${filename}:${rx_ds}:MIN",
71         "DEF:avg_rx_raw=${filename}:${rx_ds}:AVERAGE",
72         "DEF:max_rx_raw=${filename}:${rx_ds}:MAX",
73         "DEF:min_tx_raw=${filename}:${tx_ds}:MIN",
74         "DEF:avg_tx_raw=${filename}:${tx_ds}:AVERAGE",
75         "DEF:max_tx_raw=${filename}:${tx_ds}:MAX",
76         "CDEF:min_rx=min_rx_raw,${factor},*",
77         "CDEF:avg_rx=avg_rx_raw,${factor},*",
78         "CDEF:max_rx=max_rx_raw,${factor},*",
79         "CDEF:min_tx=min_tx_raw,${factor},*",
80         "CDEF:avg_tx=avg_tx_raw,${factor},*",
81         "CDEF:max_tx=max_tx_raw,${factor},*");
82   }
83   else # (!$obj->{'scale'})
84   {
85     push (@ret,
86         "DEF:min_rx=${filename}:${rx_ds}:MIN",
87         "DEF:avg_rx=${filename}:${rx_ds}:AVERAGE",
88         "DEF:max_rx=${filename}:${rx_ds}:MAX",
89         "DEF:min_tx=${filename}:${tx_ds}:MIN",
90         "DEF:avg_tx=${filename}:${tx_ds}:AVERAGE",
91         "DEF:max_tx=${filename}:${tx_ds}:MAX");
92   }
93
94   push (@ret,
95       "CDEF:overlap=avg_rx,avg_tx,LT,avg_rx,avg_tx,IF",
96       "AREA:avg_rx#${rx_color_bg}",
97       "AREA:avg_tx#${tx_color_bg}",
98       "AREA:overlap#${overlap_color}",
99       "LINE1:avg_rx#${rx_color_fg}:${rx_ds_name}",
100       "GPRINT:min_rx:MIN:${format} Min,",
101       "GPRINT:avg_rx:AVERAGE:${format} Avg,",
102       "GPRINT:max_rx:MAX:${format} Max,",
103       "GPRINT:avg_rx:LAST:${format} Last\\l",
104       "LINE1:avg_tx#${tx_color_fg}:${tx_ds_name}",
105       "GPRINT:min_tx:MIN:${format} Min,",
106       "GPRINT:avg_tx:AVERAGE:${format} Avg,",
107       "GPRINT:max_tx:MAX:${format} Max,",
108       "GPRINT:avg_tx:LAST:${format} Last\\l");
109
110   return (\@ret);
111 } # getRRDArgs
112
113 # vim: set shiftwidth=2 softtabstop=2 tabstop=8 :