Code

Imported Upstream version 5.5.0
[pkg-collectd.git] / contrib / collection3 / lib / Collectd / Graph / Type / GenericIO.pm
diff --git a/contrib/collection3/lib/Collectd/Graph/Type/GenericIO.pm b/contrib/collection3/lib/Collectd/Graph/Type/GenericIO.pm
new file mode 100644 (file)
index 0000000..7ed915b
--- /dev/null
@@ -0,0 +1,140 @@
+package Collectd::Graph::Type::GenericIO;
+
+# Copyright (C) 2008,2009  Florian octo Forster <octo at verplant.org>
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; only version 2 of the License is applicable.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+use strict;
+use warnings;
+use base ('Collectd::Graph::Type');
+
+use Carp ('confess');
+
+use Collectd::Graph::Common (qw($ColorCanvas ident_to_filename get_faded_color));
+
+return (1);
+
+sub getRRDArgs
+{
+  my $obj = shift;
+  my $index = shift;
+
+  my $ident = $obj->{'files'}[$index] || confess ("Unknown index $index");
+  my $filename = ident_to_filename ($ident);
+
+  my $rrd_opts = $obj->{'rrd_opts'} || [];
+  my $rrd_title = $obj->getTitle ($ident);
+  my $format = $obj->{'rrd_format'} || '%5.1lf%s';
+
+  my $ds_list = $obj->getDataSources ();
+  my $ds_names = $obj->{'ds_names'};
+  if (!$ds_names)
+  {
+    $ds_names = {};
+  }
+
+  my $colors = $obj->{'rrd_colors'} || {};
+  my @ret = ('-t', $rrd_title, @$rrd_opts);
+
+  if (defined $obj->{'rrd_vertical'})
+  {
+    push (@ret, '-v', $obj->{'rrd_vertical'});
+  }
+
+  if (@$ds_list != 2)
+  {
+    my $num = 0 + @$ds_list;
+    confess ("Expected two data sources, but there is/are $num");
+  }
+
+  my $rx_ds = $ds_list->[0];
+  my $tx_ds = $ds_list->[1];
+
+  my $rx_ds_name = $ds_names->{$rx_ds} || $rx_ds;
+  my $tx_ds_name = $ds_names->{$tx_ds} || $tx_ds;
+
+  my $rx_color_fg = $colors->{$rx_ds} || '0000ff';
+  my $tx_color_fg = $colors->{$tx_ds} || '00b000';
+
+  my $rx_color_bg = get_faded_color ($rx_color_fg);
+  my $tx_color_bg = get_faded_color ($tx_color_fg);
+  my $overlap_color = get_faded_color ($rx_color_bg, background => $tx_color_bg);
+
+  $filename =~ s#:#\\:#g;
+  $rx_ds =~ s#:#\\:#g;
+  $tx_ds =~ s#:#\\:#g;
+  $rx_ds_name =~ s#:#\\:#g;
+  $tx_ds_name =~ s#:#\\:#g;
+
+  if ($obj->{'scale'})
+  {
+    my $factor = $obj->{'scale'};
+
+    push (@ret,
+       "DEF:min_rx_raw=${filename}:${rx_ds}:MIN",
+       "DEF:avg_rx_raw=${filename}:${rx_ds}:AVERAGE",
+       "DEF:max_rx_raw=${filename}:${rx_ds}:MAX",
+       "DEF:min_tx_raw=${filename}:${tx_ds}:MIN",
+       "DEF:avg_tx_raw=${filename}:${tx_ds}:AVERAGE",
+       "DEF:max_tx_raw=${filename}:${tx_ds}:MAX",
+       "CDEF:min_rx=min_rx_raw,${factor},*",
+       "CDEF:avg_rx=avg_rx_raw,${factor},*",
+       "CDEF:max_rx=max_rx_raw,${factor},*",
+       "CDEF:min_tx=min_tx_raw,${factor},*",
+       "CDEF:avg_tx=avg_tx_raw,${factor},*",
+       "CDEF:max_tx=max_tx_raw,${factor},*");
+  }
+  else # (!$obj->{'scale'})
+  {
+    push (@ret,
+       "DEF:min_rx=${filename}:${rx_ds}:MIN",
+       "DEF:avg_rx=${filename}:${rx_ds}:AVERAGE",
+       "DEF:max_rx=${filename}:${rx_ds}:MAX",
+       "DEF:min_tx=${filename}:${tx_ds}:MIN",
+       "DEF:avg_tx=${filename}:${tx_ds}:AVERAGE",
+       "DEF:max_tx=${filename}:${tx_ds}:MAX");
+  }
+
+  push (@ret,
+    "CDEF:avg_rx_bytes=avg_rx,8,/",
+    "VDEF:global_min_rx=min_rx,MINIMUM",
+    "VDEF:global_avg_rx=avg_rx,AVERAGE",
+    "VDEF:global_max_rx=max_rx,MAXIMUM",
+    "VDEF:global_tot_rx=avg_rx_bytes,TOTAL",
+    "CDEF:avg_tx_bytes=avg_tx,8,/",
+    "VDEF:global_min_tx=min_tx,MINIMUM",
+    "VDEF:global_avg_tx=avg_tx,AVERAGE",
+    "VDEF:global_max_tx=max_tx,MAXIMUM",
+    "VDEF:global_tot_tx=avg_tx_bytes,TOTAL");
+
+  push (@ret,
+      "CDEF:overlap=avg_rx,avg_tx,LT,avg_rx,avg_tx,IF",
+      "AREA:avg_rx#${rx_color_bg}",
+      "AREA:avg_tx#${tx_color_bg}",
+      "AREA:overlap#${overlap_color}",
+      "LINE1:avg_rx#${rx_color_fg}:${rx_ds_name}",
+      "GPRINT:global_min_rx:${format} Min,",
+      "GPRINT:global_avg_rx:${format} Avg,",
+      "GPRINT:global_max_rx:${format} Max,",
+      "GPRINT:global_tot_rx:ca. ${format} Total\\l",
+      "LINE1:avg_tx#${tx_color_fg}:${tx_ds_name}",
+      "GPRINT:global_min_tx:${format} Min,",
+      "GPRINT:global_avg_tx:${format} Avg,",
+      "GPRINT:global_max_tx:${format} Max,",
+      "GPRINT:global_tot_tx:ca. ${format} Total\\l");
+
+  return (\@ret);
+} # getRRDArgs
+
+# vim: set shiftwidth=2 softtabstop=2 tabstop=8 :