diff --git a/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm b/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm
index 273d89e63cabdd01c6addba1970d3273fe2bad0c..c5114a8019ddd3bed411343649adb9ede404d76b 100644 (file)
package Collectd::Graph::Type::GenericStacked;
+# 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');
my $idents = $group->{$group[$index]};
my $ds_name_len = 0;
+ my $ds = $obj->getDataSources ();
+ if (!$ds)
+ {
+ confess ("obj->getDataSources failed.");
+ }
+ if (@$ds != 1)
+ {
+ confess ("I can only work with RRD files that have "
+ . "exactly one data source!");
+ }
+ my $data_source = $ds->[0];
+
my $rrd_title = $obj->getTitle ($idents->[0]);
my $colors = $obj->{'rrd_colors'} || {};
my @ret = ('-t', $rrd_title, @$rrd_opts);
+ my $ignore_unknown = $obj->{'ignore_unknown'} || 0;
+ if ($ignore_unknown)
+ {
+ if ($ignore_unknown =~ m/^(yes|true|on)$/i)
+ {
+ $ignore_unknown = 1;
+ }
+ else
+ {
+ $ignore_unknown = 0;
+ }
+ }
+
+ my $stacking = $obj->{'stacking'};
+ if ($stacking)
+ {
+ if ($stacking =~ m/^(no|false|off|none)$/i)
+ {
+ $stacking = 0;
+ }
+ else
+ {
+ $stacking = 1;
+ }
+ }
+ else # if (!$stacking)
+ {
+ $stacking = 1;
+ }
+
if (defined $obj->{'rrd_vertical'})
{
push (@ret, '-v', $obj->{'rrd_vertical'});
sort_idents_by_type_instance ($idents, $obj->{'custom_order'});
}
+ if ($ignore_unknown)
+ {
+ my $new_idents = [];
+ for (@$idents)
+ {
+ if (exists ($obj->{'ds_names'}{$_->{'type_instance'}}))
+ {
+ push (@$new_idents, $_);
+ }
+ }
+
+ if (@$new_idents)
+ {
+ $idents = $new_idents;
+ }
+ }
+
$obj->{'ds_names'} ||= {};
my @names = map { $obj->{'ds_names'}{$_->{'type_instance'}} || $_->{'type_instance'} } (@$idents);
{
$ds_name_len = length ($names[$i]);
}
-
+
# Escape colons _after_ the length has been checked.
$names[$i] =~ s/:/\\:/g;
push (@ret,
- "DEF:min${i}=${filename}:value:MIN",
- "DEF:avg${i}=${filename}:value:AVERAGE",
- "DEF:max${i}=${filename}:value:MAX");
+ "DEF:min${i}=${filename}:${data_source}:MIN",
+ "DEF:avg${i}=${filename}:${data_source}:AVERAGE",
+ "DEF:max${i}=${filename}:${data_source}:MAX");
}
- for (my $i = @$idents - 1; $i >= 0; $i--)
+ if ($stacking)
{
- if ($i == (@$idents - 1))
+ for (my $i = @$idents - 1; $i >= 0; $i--)
{
- push (@ret,
- "CDEF:cdef${i}=avg${i}");
+ if ($i == (@$idents - 1))
+ {
+ push (@ret,
+ "CDEF:cdef${i}=avg${i},UN,0,avg${i},IF");
+ }
+ else
+ {
+ my $j = $i + 1;
+ push (@ret,
+ "CDEF:cdef${i}=avg${i},UN,0,avg${i},IF,cdef${j},+");
+ }
}
- else
+
+ for (my $i = 0; $i < @$idents; $i++)
{
- my $j = $i + 1;
+ my $type_instance = $idents->[$i]{'type_instance'};
+ my $color = '000000';
+ if (exists $colors->{$type_instance})
+ {
+ $color = $colors->{$type_instance};
+ }
+
+ $color = get_faded_color ($color);
+
push (@ret,
- "CDEF:cdef${i}=cdef${j},avg${i},+");
+ "AREA:cdef${i}#${color}");
}
}
-
- for (my $i = 0; $i < @$idents; $i++)
+ else # if (!$stacking)
{
- my $type_instance = $idents->[$i]{'type_instance'};
- my $color = '000000';
- if (exists $colors->{$type_instance})
+ for (my $i = @$idents - 1; $i >= 0; $i--)
{
- $color = $colors->{$type_instance};
+ push (@ret,
+ "CDEF:cdef${i}=avg${i}");
}
-
- $color = get_faded_color ($color);
-
- push (@ret,
- "AREA:cdef${i}#${color}");
}
for (my $i = 0; $i < @$idents; $i++)