ASNMTAP
view release on metacpan or search on metacpan
lib/ASNMTAP/Asnmtap.pm view on Meta::CPAN
our $PERLCOMMAND = '/usr/bin/perl';
our $PPPDCOMMAND = '/usr/sbin/pppd';
our $ROUTECOMMAND = '/sbin/route';
our $RSYNCCOMMAND = '/usr/bin/rsync';
our $SCPCOMMAND = '/usr/bin/scp';
our $SSHCOMMAND = '/usr/bin/ssh';
if ( exists $_config{COMMAND} ) {
$CHATCOMMAND = $_config{COMMAND}{CHAT} if ( exists $_config{COMMAND}{CHAT} );
$DIFFCOMMAND = $_config{COMMAND}{DIFF} if ( exists $_config{COMMAND}{DIFF} );
$KILLALLCOMMAND = $_config{COMMAND}{KILLALL} if ( exists $_config{COMMAND}{KILLALL} );
$PERLCOMMAND = $_config{COMMAND}{PERL} if ( exists $_config{COMMAND}{PERL} );
$PPPDCOMMAND = $_config{COMMAND}{PPPD} if ( exists $_config{COMMAND}{PPPD} );
$ROUTECOMMAND = $_config{COMMAND}{ROUTE} if ( exists $_config{COMMAND}{ROUTE} );
$RSYNCCOMMAND = $_config{COMMAND}{RSYNC} if ( exists $_config{COMMAND}{RSYNC} );
$SCPCOMMAND = $_config{COMMAND}{SCP} if ( exists $_config{COMMAND}{SCP} );
$SSHCOMMAND = $_config{COMMAND}{SSH} if ( exists $_config{COMMAND}{SSH} );
}
undef %_config;
# Plugin variables - - - - - - - - - - - - - - - - - - - - - - - - - - -
our %ERRORS = ('OK'=>'0','WARNING'=>'1','CRITICAL'=>'2','UNKNOWN'=>'3','DEPENDENT'=>'4','OFFLINE'=>'5','NO TEST'=>'6','NO DATA'=>'7','IN PROGRESS'=>'8','TRENDLINE'=>'9');
our %STATE = ('0'=>'OK','1'=>'WARNING','2'=>'CRITICAL','3'=>'UNKNOWN','4'=>'DEPENDENT','5'=>'OFFLINE','6'=>'NO TEST','7'=>'NO DATA','8'=>'IN PROGRESS','9'=>'TRENDLINE');
our %TYPE = ('REPLACE'=>'0','APPEND'=>'1','INSERT'=>'2','COMMA_REPLACE'=>'3','COMMA_APPEND'=>'4','COMMA_INSERT'=>'5');
# Constructor & initialisation - - - - - - - - - - - - - - - - - - - - -
sub new (@) {
my $classname = shift;
unless ( defined $classname ) { my @c = caller; die "Syntax error: Class name expected after new at $c[1] line $c[2]\n" }
if ( ref $classname) { my @c = caller; die "Syntax error: Can't construct new ".ref($classname)." from another object at $c[1] line $c[2]\n" }
my $self = {};
my @parameters = (_programName => 'NOT DEFINED',
_programDescription => 'NOT DEFINED',
_programVersion => '0.000.000',
_programUsagePrefix => undef,
_programUsageSuffix => undef,
_programHelpPrefix => undef,
_programHelpSuffix => undef,
_programGetOptions => undef,
_debug => 0);
if ( $] < 5.010000 ) {
eval "use fields";
$self = fields::phash (@parameters);
} else {
use ASNMTAP::PseudoHash;
$self = do {
my @array = undef;
while (my ($k, $v) = splice(@parameters, 0, 2)) {
$array[$array[0]{$k} = @array] = $v;
}
bless(\@array, $classname);
};
}
my %args = @_;
$self->{_programName} = $args{_programName} if ( exists $args{_programName} );
$self->{_programDescription} = $args{_programDescription} if ( exists $args{_programDescription} );
$self->{_programVersion} = $args{_programVersion} if ( exists $args{_programVersion} );
$self->{_programUsagePrefix} = $args{_programUsagePrefix} if ( exists $args{_programUsagePrefix} );
$self->{_programHelpPrefix} = $args{_programHelpPrefix} if ( exists $args{_programHelpPrefix} );
$self->{_programUsageSuffix} = $args{_programUsageSuffix} if ( exists $args{_programUsageSuffix} );
$self->{_programHelpSuffix} = $args{_programHelpSuffix} if ( exists $args{_programHelpSuffix} );
$self->{_programGetOptions} = $args{_programGetOptions} if ( exists $args{_programGetOptions} );
$self->{_debug} = $args{_debug} if ( exists $args{_debug} );
if ( defined $self->{_programVersion} ) {
$self->{_programVersion} =~ s/^\$Revision: //;
$self->{_programVersion} =~ s/ \$\s*$//;
}
bless ($self, $classname);
$self->_init(\%args);
$self->_getOptions();
return ($self);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub _init {
carp ('ASNMTAP::Asnmtap: _init') if ( $_[0]->{_debug} );
$_[0]->{_programUsageSuffix} = ' [-v|--verbose <LEVEL>] [-V|--version] [-h|--help] [--usage] [--dumpData]';
$_[0]->{_programHelpSuffix} = "
-v, --verbose=<LEVEL>
0: single line, minimal output
1: single line, additional information
2: multi line, configuration debug output
3: lots of detail for problem diagnosis
-V, --version
Report version
-h, --help
Display the help message
--usage
Display the short usage statement
--dumpData
Display the stringified data structures from the current object
";
push (@{ $_[0]->{_programGetOptions} }, 'verbose|v:i', 'version|V', 'help|h', 'usage', 'dumpData');
$_[0]->[ $_[0]->[0]{_getOptionsType} = @{$_[0]} ] = {};
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub _getOptions {
carp ('ASNMTAP::Asnmtap: _getOptions') if ( $_[0]->{_debug} );
Getopt::Long::Configure ('bundling', 'pass_through');
my %getOptionsArgv;
my $programGetOptions = $_[0]->{_programGetOptions};
my $resultGetOptions = GetOptions ( \%getOptionsArgv, @$programGetOptions );
carp ('ASNMTAP::Asnmtap: _getOptions '. "Unknown option(s): @ARGV") if ( ref $_[0] !~ /ASNMTAP::Asnmtap::Plugins/ );
$_[0]->[ $_[0]->[0]{_getOptionsArgv} = @{$_[0]} ] = {%getOptionsArgv};
$_[0]->printRevision () if ( exists $_[0]->{_getOptionsArgv}->{version} );
$_[0]->printHelp () if ( exists $_[0]->{_getOptionsArgv}->{help} );
$_[0]->printUsage ('.') if ( exists $_[0]->{_getOptionsArgv}->{usage} );
my $verbose = (exists $_[0]->{_getOptionsArgv}->{verbose}) ? $_[0]->{_getOptionsArgv}->{verbose} : 0;
$_[0]->printUsage ('Invalid verbose option: '. $verbose) unless ($verbose =~ /^[0123]$/);
$_[0]->[ $_[0]->[0]{_getOptionsValues} = @{$_[0]} ] = {};
}
# = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
sub _checkAccObjRef { unless ( ref $_[0] ) { cluck 'Syntax error: Access object reference expected'; exit $ERRORS{UNKNOWN} } }
sub _checkSubArgs0 { if ( @_ > 1 ) { cluck "Syntax error: To many arguments ". (caller 1)[3]; exit $ERRORS{UNKNOWN} } }
( run in 2.120 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )