X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=contrib%2Fcollection3%2Flib%2FCollectd%2FGraph%2FType%2FGenericStacked.pm;h=c5114a8019ddd3bed411343649adb9ede404d76b;hb=9d15d1058b93acb7be041934acfe76548539041a;hp=a1a3e1cd7f9459bc2245e55df50b78883446c7be;hpb=d9ba7e3ed5d93e9abd34f961fff51676a096ac02;p=collectd.git diff --git a/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm b/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm index a1a3e1cd..c5114a80 100644 --- a/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm +++ b/contrib/collection3/lib/Collectd/Graph/Type/GenericStacked.pm @@ -1,5 +1,20 @@ package Collectd::Graph::Type::GenericStacked; +# Copyright (C) 2008,2009 Florian octo Forster +# +# 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'); @@ -49,6 +64,36 @@ sub getRRDArgs 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'}); @@ -59,6 +104,23 @@ sub getRRDArgs 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); @@ -71,7 +133,7 @@ sub getRRDArgs { $ds_name_len = length ($names[$i]); } - + # Escape colons _after_ the length has been checked. $names[$i] =~ s/:/\\:/g; @@ -81,34 +143,45 @@ sub getRRDArgs "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++)