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 -
- -
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
------------------------------------------------------------------------------