From e7474a34d1a1ac59497796b8decd3d64c35f5a6a Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 8 Feb 2011 16:43:22 +0100 Subject: [PATCH] contrib/collection3: Set @INC at runtime, too. Apparently the @INC variable is reset by mod_perl, which causes later require()s to fail. --- contrib/collection3/bin/graph.cgi | 70 +++++++++++++++---- contrib/collection3/bin/index.cgi | 65 ++++++++++++++--- .../lib/Collectd/Graph/TypeLoader.pm | 3 +- 3 files changed, 116 insertions(+), 22 deletions(-) diff --git a/contrib/collection3/bin/graph.cgi b/contrib/collection3/bin/graph.cgi index 40408fd5..2b3f2fe1 100755 --- a/contrib/collection3/bin/graph.cgi +++ b/contrib/collection3/bin/graph.cgi @@ -30,8 +30,8 @@ BEGIN { if ($ENV{'SCRIPT_FILENAME'} =~ m{^(/.+)/bin/[^/]+$}) { - $BASE_DIR = $1; - unshift (@INC, "$BASE_DIR/lib"); + $::BASE_DIR = $1; + unshift (@::INC, "$::BASE_DIR/lib"); } } } @@ -48,20 +48,66 @@ use Collectd::Graph::Common (qw(sanitize_type get_selected_files epoch_to_rfc1123 flush_files)); use Collectd::Graph::Type (); -$::MODPERL = 1; - -my $have_init = 0; -sub init +sub base_dir { - if ($have_init) + if (defined $::BASE_DIR) + { + return ($::BASE_DIR); + } + + if (!defined ($ENV{'SCRIPT_FILENAME'})) { return; } - #gc_read_config ("$RealBin/../etc/collection.conf"); - gc_read_config ("$BASE_DIR/etc/collection.conf"); + if ($ENV{'SCRIPT_FILENAME'} =~ m{^(/.+)/bin/[^/]+$}) + { + $::BASE_DIR = $1; + return ($::BASE_DIR); + } - $have_init = 1; + return; +} + +sub lib_dir +{ + my $base = base_dir (); + + if ($base) + { + return "$base/lib"; + } + else + { + return "../lib"; + } +} + +sub sysconf_dir +{ + my $base = base_dir (); + + if ($base) + { + return "$base/etc"; + } + else + { + return "../etc"; + } +} + +sub init +{ + my $lib_dir = lib_dir (); + my $sysconf_dir = sysconf_dir (); + + if (!grep { $lib_dir eq $_ } (@::INC)) + { + unshift (@::INC, $lib_dir); + } + + gc_read_config ("$sysconf_dir/collection.conf"); } sub main @@ -74,6 +120,8 @@ sub main my $OutputFormat = 'PNG'; my $ContentType = 'image/png'; + init (); + if (param ('format')) { my $temp = param ('format') || ''; @@ -98,8 +146,6 @@ HTTP $ContentType = 'text/plain'; } - init (); - if ($GraphWidth) { $GraphWidth =~ s/\D//g; diff --git a/contrib/collection3/bin/index.cgi b/contrib/collection3/bin/index.cgi index 679c1eea..027961fa 100755 --- a/contrib/collection3/bin/index.cgi +++ b/contrib/collection3/bin/index.cgi @@ -30,8 +30,8 @@ BEGIN { if ($ENV{'SCRIPT_FILENAME'} =~ m{^(/.+)/bin/[^/]+$}) { - $BASE_DIR = $1; - unshift (@INC, "$BASE_DIR/lib"); + $::BASE_DIR = $1; + unshift (@::INC, "$::BASE_DIR/lib"); } } } @@ -65,19 +65,66 @@ my %Actions = show_selection => \&action_show_selection ); -my $have_init = 0; -sub init +sub base_dir { - if ($have_init) + if (defined $::BASE_DIR) + { + return ($::BASE_DIR); + } + + if (!defined ($ENV{'SCRIPT_FILENAME'})) { return; } - print STDERR "INC = (" . join (', ', @INC) . ");\n"; + if ($ENV{'SCRIPT_FILENAME'} =~ m{^(/.+)/bin/[^/]+$}) + { + $::BASE_DIR = $1; + return ($::BASE_DIR); + } + + return; +} + +sub lib_dir +{ + my $base = base_dir (); - gc_read_config ("$BASE_DIR/etc/collection.conf"); + if ($base) + { + return "$base/lib"; + } + else + { + return "../lib"; + } +} + +sub sysconf_dir +{ + my $base = base_dir (); + + if ($base) + { + return "$base/etc"; + } + else + { + return "../etc"; + } +} + +sub init +{ + my $lib_dir = lib_dir (); + my $sysconf_dir = sysconf_dir (); + + if (!grep { $lib_dir eq $_ } (@::INC)) + { + unshift (@::INC, $lib_dir); + } - $have_init = 1; + gc_read_config ("$sysconf_dir/collection.conf"); } sub main @@ -339,7 +386,7 @@ sub action_show_selection $types->{$type} = tl_load_type ($file->{'type'}); if (!$types->{$type}) { - cluck ("tl_load_type (" . $file->{'type'} . ") failed"); + warn ("tl_load_type (" . $file->{'type'} . ") failed"); next; } } diff --git a/contrib/collection3/lib/Collectd/Graph/TypeLoader.pm b/contrib/collection3/lib/Collectd/Graph/TypeLoader.pm index 9078110b..5a0b522b 100644 --- a/contrib/collection3/lib/Collectd/Graph/TypeLoader.pm +++ b/contrib/collection3/lib/Collectd/Graph/TypeLoader.pm @@ -92,7 +92,8 @@ sub _load_module_from_config $obj = _create_object ($module); if (!$obj) { - cluck ("Creating an $module object failed"); + #cluck ("Creating an $module object failed"); + warn ("Creating an $module object failed"); return; } } -- 2.30.2