RFC: ConfigDir option

"Jason Pyeron" <[email protected]> Mon, 28 Nov 2016 19:27:44 -0500
Newsgroups gmane.comp.log.logwatch.devel
Organization PD Inc
Message-ID <A4CA470E2804450E8F15930C96EAC5BC@black7>
Request for comments, concerns, objections, suggestions.

Background:

While developing a testing framework, we needed to support a runtime configuration for the loading of a configuration.

Solution:

--configdir option

Implementation:

root@black7 /projects/logwatch
$ git diff
diff --git a/scripts/logwatch.pl b/scripts/logwatch.pl
index 0167755..fd5dd6a 100755
--- a/scripts/logwatch.pl
+++ b/scripts/logwatch.pl
@@ -62,6 +62,11 @@ use File::Temp qw/ tempdir /;
 eval "use lib \"$BaseDir/lib\";";
 eval "use Logwatch \':dates\'";

#The current placement of the GetOptions is well after the contents of /etc/logwatch/ are ingested. So a preliminary call is added before:
# http://search.cpan.org/dist/Getopt-Long/lib/Getopt/Long.pm 
#Since Getopt::Long modifies ARGV, then we clone the array.
+my @argvClone = @ARGV;
#Most usage of Getopt::Long is based on a global context and the configuration would impact the second call later on, so lets use a OO desgin and instantiate an instance.
+my $gop = Getopt::Long::Parser->new;
#ignore the unknown options, we only care about --configdir
+$gop->configure("pass_through");
#extract confdir, if it exists
+$gop->getoptionsfromarray(\@argvClone, "confdir=s" => \$ConfigDir);
+
 my (%Config, @ServiceList, @LogFileList, %ServiceData, %LogFileData);
 my (@AllShared, @AllLogFiles, @FileList);
 # These need to not be global variables one day
@@ -135,6 +140,7 @@ my %wordsToInts = (yes  => 1,  no     => 0,

 # Load main config file...
 if ($Config{'debug'} > 8) {
# debug the confdir
+   print "\nConfigDir:$ConfigDir\n";
    print "\nDefault Config:\n";
    &PrintConfig();
 }
@@ -192,6 +198,7 @@ my ($tmp_mailto, $tmp_savefile);

 &GetOptions ("d|detail=s"   => \$Config{'detail'},
              "l|logfile=s@" => \@TempLogFileList,
#this is here for error handling
+             "confdir=s"    => \$ConfigDir,
              "logdir=s"     => \$Config{'logdir'},
              "s|service=s@" => \@TempServiceList,
              "m|mailto=s"   => \$tmp_mailto,
@@ -1088,6 +1095,7 @@ sub Usage () {
    print "--detail <level>: Report Detail Level - High, Med, Low or any #.\n";
    print "--logfile <name>: *Name of a logfile definition to report on.\n";
    print "--logdir <name>: Name of default directory where logs are stored.\n";
#the confdir option help
+   print "--confdir <name>: Name of default directory where configuration is stored.\n";
    print "--service <name>: *Name of a service definition to report on.\n";
    print "--output <output type>: Report Output - stdout [default], mail, file.\n"; #8.0
    print "--format <formatting>: Report Format - text [default], html.\n"; #8.0


-Jason

--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-                                                               -
- Jason Pyeron                      PD Inc. http://www.pdinc.us -
- Principal Consultant              10 West 24th Street #100    -
- +1 (443) 269-1555 x333            Baltimore, Maryland 21218   -
-                                                               -
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


------------------------------------------------------------------------------