contrib/collection3: Minor cleanups.
[collectd.git] / contrib / collection3 / lib / Collectd / Graph / TypeLoader.pm
index 6223eaa..a9e85f5 100644 (file)
@@ -6,7 +6,7 @@ Collectd::Graph::TypeLoader - Load a module according to the "type"
 
 =cut
 
-# Copyright (C) 2008  Florian octo Forster <octo at verplant.org>
+# 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
@@ -27,15 +27,14 @@ use warnings;
 use Carp (qw(cluck confess));
 use Exporter ();
 use Config::General ('ParseConfig');
+use Collectd::Graph::Config ('gc_get_config');
 use Collectd::Graph::Type ();
 
 @Collectd::Graph::TypeLoader::ISA = ('Exporter');
-@Collectd::Graph::TypeLoader::EXPORT_OK = ('tl_read_config', 'tl_load_type');
-
-our $Configuration = undef;
+@Collectd::Graph::TypeLoader::EXPORT_OK = ('tl_load_type');
 
 our @ArrayMembers = (qw(data_sources rrd_opts custom_order));
-our @ScalarMembers = (qw(rrd_title rrd_format rrd_vertical scale));
+our @ScalarMembers = (qw(rrd_title rrd_format rrd_vertical scale ignore_unknown));
 our @DSMappedMembers = (qw(ds_names rrd_colors));
 
 our %MemberToConfigMap =
@@ -48,54 +47,19 @@ our %MemberToConfigMap =
   rrd_vertical => 'rrdverticallabel',
   rrd_colors => 'color',
   scale => 'scale', # GenericIO only
-  custom_order => 'order' # GenericStacked only
+  custom_order => 'order', # GenericStacked only
+  ignore_unknown => 'ignoreunknown' # GenericStacked only
 );
 
 return (1);
 
-=head1 EXPORTED FUNCTIONS
-
-=over 4
-
-=item B<tl_read_config> (I<$file>)
-
-Reads the configuration from the file located at I<$file>.
-
-=cut
-
-sub tl_read_config
-{
-  my $file = shift;
-  my %conf;
-
-  if ($Configuration)
-  {
-    return (1);
-  }
-
-  %conf = ParseConfig (-ConfigFile => $file,
-    -LowerCaseNames => 1,
-    -UseApacheInclude => 1,
-    -IncludeDirectories => 1,
-    ($Config::General::VERSION >= 2.38) ? (-IncludeAgain => 0) : (),
-    -MergeDuplicateBlocks => 1,
-    -CComments => 0);
-  if (!%conf)
-  {
-    return;
-  }
-
-  $Configuration = \%conf;
-  return (1);
-} # tl_read_config
-
 sub _create_object
 {
   my $module = shift;
   my $obj;
 
-  local $SIG{__WARN__} = sub {};
-  local $SIG{__DIE__} = sub {};
+  local $SIG{__WARN__} = sub { print STDERR "WARNING: " . join (', ', @_) . "\n"; };
+  local $SIG{__DIE__} = sub { print STDERR "FATAL: " . join (', ', @_) . "\n"; };
 
   eval <<PERL;
   require $module;
@@ -123,7 +87,6 @@ sub _load_module_from_config
 
   if ($module)
   {
-    print STDERR "\$module = $module;\n";
     $obj = _create_object ($module);
     if (!$obj)
     {
@@ -232,8 +195,6 @@ sub _load_module_from_config
 
       $obj->{$member} ||= {};
       $obj->{$member}{$ds} = $val;
-
-      print STDERR "\$obj->{$member}{$ds} = $val;\n";
     } # for (@val_list)
   } # }}} for (@DSMappedMembers)
 
@@ -263,6 +224,10 @@ sub _load_module_generic
   return ($obj);
 } # _load_module_generic
 
+=head1 EXPORTED FUNCTIONS
+
+=over 4
+
 =item B<tl_load_type> (I<$type>)
 
 Does whatever is necessary to get an object with which to graph RRD files of
@@ -273,10 +238,11 @@ type I<$type>.
 sub tl_load_type
 {
   my $type = shift;
+  my $conf = gc_get_config ();
 
-  if (defined $Configuration->{'type'}{$type})
+  if (defined ($conf) && defined ($conf->{'type'}{$type}))
   {
-    return (_load_module_from_config ($Configuration->{'type'}{$type}));
+    return (_load_module_from_config ($conf->{'type'}{$type}));
   }
   else
   {