ASNMTAP
view release on metacpan or search on metacpan
lib/ASNMTAP/Asnmtap/Plugins.pm view on Meta::CPAN
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use strict;
use warnings; # Must be used in test mode only. This reduces a little process speed
#use diagnostics; # Must be used in test mode only. This reduces a lot of process speed
no warnings 'deprecated';
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use Carp qw(carp);
use Time::HiRes qw(gettimeofday tv_interval);
# include the class files - - - - - - - - - - - - - - - - - - - - - - - -
use ASNMTAP::Asnmtap qw(:ASNMTAP :COMMANDS :_HIDDEN :PLUGINS);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BEGIN {
use Exporter ();
@ASNMTAP::Asnmtap::Plugins::ISA = qw(Exporter ASNMTAP::Asnmtap);
%ASNMTAP::Asnmtap::Plugins::EXPORT_TAGS = (ALL => [ qw($APPLICATION $BUSINESS $DEPARTMENT $COPYRIGHT $SENDEMAILTO
$CAPTUREOUTPUT
$PREFIXPATH $LOGPATH $PIDPATH $PERL5LIB $MANPATH $LD_LIBRARY_PATH
$ALARM_OFF %ERRORS %STATE %TYPE
$CHATCOMMAND $DIFFCOMMAND $KILLALLCOMMAND $PERLCOMMAND $PPPDCOMMAND $ROUTECOMMAND $RSYNCCOMMAND $SCPCOMMAND $SSHCOMMAND
&_checkAccObjRef
&_checkSubArgs0 &_checkSubArgs1 &_checkSubArgs2
&_checkReadOnly0 &_checkReadOnly1 &_checkReadOnly2
&_dumpValue
$PLUGINPATH) ],
PLUGINS => [ qw($APPLICATION $BUSINESS $DEPARTMENT $COPYRIGHT $SENDEMAILTO
$CAPTUREOUTPUT
$PREFIXPATH $PLUGINPATH $LOGPATH $PIDPATH $PERL5LIB $MANPATH $LD_LIBRARY_PATH
%ERRORS %STATE %TYPE) ],
COMMANDS => [ qw($CHATCOMMAND $DIFFCOMMAND $KILLALLCOMMAND $PERLCOMMAND $PPPDCOMMAND $ROUTECOMMAND $RSYNCCOMMAND $SCPCOMMAND $SSHCOMMAND) ],
_HIDDEN => [ qw(&_checkAccObjRef
&_checkSubArgs0 &_checkSubArgs1 &_checkSubArgs2
&_checkReadOnly0 &_checkReadOnly1 &_checkReadOnly2
&_dumpValue) ] );
@ASNMTAP::Asnmtap::Plugins::EXPORT_OK = ( @{ $ASNMTAP::Asnmtap::Plugins::EXPORT_TAGS{ALL} } );
$ASNMTAP::Asnmtap::Plugins::VERSION = do { my @r = (q$Revision: 3.002.003$ =~ /\d+/g); sprintf "%d."."%03d" x $#r, @r };
}
our $ALARM_OFF = 0;
# Constructor & initialisation - - - - - - - - - - - - - - - - - - - - -
sub _init {
$_[0]->SUPER::_init($_[1]);
carp ('ASNMTAP::Asnmtap::Plugins: _init') if ( $_[0]->{_debug} );
# --httpdump & --dumphttp tijdelijk voor backwards compatibiliteit !!!
$_[0]->{_programUsageSuffix} = ' [-S|--status N] [-A|asnmtapEnv [F|T]|[F|T]|[F|T]] [-O|onDemand F|T|N|Y] [-L|--logging <LOGGING>] [-D|--debugfile|--httpdump|--dumphttp <DEBUGFILE>] [-d|--debug F|T|L|M|A|S] '. $_[0]->{_programUsageSuffix};
$_[0]->{_programHelpSuffix} = "
-S, --status=N
N(agios) : Nagios custom plugin output (default)
-A, --asnmtapEnv=[F|T]|[F|T]|[F|T]
F(alse) : all screendebugging off (default)
T(true) : all screendebugging on
|
F(alse) : all file debugging off (default)
T(true) : all file debugging on
|
F(alse) : nok file debugging off (default)
T(true) : nok file debugging on
-O, --onDemand=F|T|N|Y
F(alse)/N(o) : normal plugin execution (default)
T(true)/Y(es) : plugin launched on demand
-L, --logging=LOGGING
write logging to file LOGGING
-D, --debugfile, --httpdump, --dumphttp=DEBUGFILE
write debug to file DEBUGFILE
-d, --debug=F|T|L|M|A|S
F(alse) : screendebugging off (default)
T(true) : normal screendebugging on
L(ong) : long screendebugging on
M(oderator) : long screendebugging on for Moderators
A(dmin) : long screendebugging on for Admins
S(erver Admin): long screendebugging on for Server Admins
" . $_[0]->{_programHelpSuffix};
push ( @{ $_[0]->{_programGetOptions} }, 'status|S:s', 'asnmtapEnv|A:s', 'onDemand|O:s', 'logging|L:s', 'debugfile|D|dumphttp|httpdump:s', 'debug|d:s' );
my ($_programUsageSuffix, $_programHelpSuffix);
foreach ( @{ $_[0]->{_programGetOptions} } ) {
for ($_) {
/^trendline\|T([:=])i$/ && do { $_[0]->{_getOptionsType}->{trendline} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-T|--trendline <TRENDLINE>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-T, --trendline <TRENDLINE>\...
/^timeout\|t([:=])i$/ && do { $_[0]->{_getOptionsType}->{timeout} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-t|--timeout <TIMEOUT>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-t, --timeout=<TIMEOUT>\n time...
/^environment\|e([:=])s$/ && do { $_[0]->{_getOptionsType}->{environment} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-e|--environment <ENVIRONMENT>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-e, --environment=<ENVIR...
/^proxy([:=])s$/ && do { $_[0]->{_getOptionsType}->{proxy} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'--proxy <username:password@proxy:port&domain[,domain]>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "...
/^host\|H([:=])s$/ && do { $_[0]->{_getOptionsType}->{host} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-H|--host <HOST>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-H, --host=<HOST>\n hostname or ip a...
/^url\|U([:=])s$/ && do { $_[0]->{_getOptionsType}->{url} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-U|--url <URL>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-U, --url=<URL>\n"; last; };
/^port\|P([:=])i$/ && do { $_[0]->{_getOptionsType}->{port} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-P|--port <PORT>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-P, --port=<PORT>\n"; last; };
/^community\|C([:=])s$/ && do { $_[0]->{_getOptionsType}->{community} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-C|--community <SNMP COMMUNITY>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-C, --community=<SNMP C...
/^username\|u\|loginname([:=])s$/ && do { $_[0]->{_getOptionsType}->{username} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-u|--username|--loginname <USERNAME>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-u, --username/--l...
/^password\|p\|passwd([:=])s$/ && do { $_[0]->{_getOptionsType}->{password} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-p|--password|--passwd <PASSWORD>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-p, --password/--pass...
/^filename\|F([:=])s$/ && do { $_[0]->{_getOptionsType}->{filename} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-F|--filename <FILENAME>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-F, --filename=<FILENAME>\n ...
/^interval\|i([:=])i$/ && do { $_[0]->{_getOptionsType}->{interval} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-i|--interval <SECONDS>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-i, --interval=<SECONDS>\n in...
/^loglevel\|l([:=])s$/ && do { $_[0]->{_getOptionsType}->{loglevel} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-l|--loglevel <LOGLEVEL>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-l, --loglevel=<LOGLEVEL>\n ...
/^year\|Y([:=])i$/ && do { $_[0]->{_getOptionsType}->{year} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-Y|--year <YEAR>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-Y, --year=<YEAR>\n year, format: [1...
/^quarter\|Q([:=])i$/ && do { $_[0]->{_getOptionsType}->{quarter} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-Q|--quarter <QUARTER>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-Q, --quarter=<QUARTER>\n quar...
/^month\|M([:=])i$/ && do { $_[0]->{_getOptionsType}->{month} = $1; $_programUsageSuffix .= ($1 eq ':' ? ' [' : ' ') .'-M|--month <MONTH>'. ($1 eq ':' ? ']' : ''); $_programHelpSuffix .= "-M, --month=<MONTH>\n month, where...
/^warning\|w([:=])s$/ && do { $_[0]->{_getOptionsType}->{warning} = $1; last; };
/^critical\|c([:=])s$/ && do { $_[0]->{_getOptionsType}->{critical} = $1; last; };
}
}
$_[0]->{_programUsageSuffix} = $_programUsageSuffix .' '. $_[0]->{_programUsageSuffix} if (defined $_programUsageSuffix);
$_[0]->{_programHelpSuffix} = "\n". $_programHelpSuffix . $_[0]->{_programHelpSuffix} if (defined $_programHelpSuffix);
$_[0]->[ $_[0]->[0]{_exit_} = @{$_[0]} ] = 0;
$_[0]->[ $_[0]->[0]{_plugins} = @{$_[0]} ] = (defined $_[1]->{_plugins}) ? $_[1]->{_plugins} : 1;
$_[0]->[ $_[0]->[0]{_timeout} = @{$_[0]} ] = (defined $_[1]->{_timeout}) ? $_[1]->{_timeout} : 10;
$_[0]->[ $_[0]->[0]{_browseragent} = @{$_[0]} ] = (defined $_[1]->{_browseragent}) ? $_[1]->{_browseragent} : 'Mozilla/5.0 (compatible; ASNMTAP; U; ASNMTAP 3.002.003 postfix; nl-BE; rv:3.002.003) Gecko/yyyymmdd libwww-perl/5.813';
$_[0]->[ $_[0]->[0]{_SSLversion} = @{$_[0]} ] = (defined $_[1]->{_SSLversion} and $_[1]->{_SSLversion} =~ /^(?:2|3|23)$/) ? $_[1]->{_SSLversion} : 3;
$_[0]->[ $_[0]->[0]{_clientCertificate} = @{$_[0]} ] = $_[1]->{_clientCertificate} if (defined $_[1]->{_clientCertificate});
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub _getOptions {
$_[0]->SUPER::_getOptions();
carp ('ASNMTAP::Asnmtap::Plugins: _getOptions') if ( $_[0]->{_debug} );
# Default _pluginValues - - - - - - - - - - - - - - - - - - - - - - - -
$_[0]->[ $_[0]->[0]{_pluginValues} = @{$_[0]} ] = {};
$_[0]->{_pluginValues}->{stateValue} = $ERRORS{DEPENDENT};
$_[0]->{_pluginValues}->{stateError} = $STATE{$_[0]->{_pluginValues}->{stateValue}};
$_[0]->{_pluginValues}->{message} = $_[0]->{_programDescription};
$_[0]->{_pluginValues}->{alert} = undef;
$_[0]->{_pluginValues}->{error} = undef;
$_[0]->{_pluginValues}->{result} = undef;
$_[0]->{_pluginValues}->{performanceData} = undef;
my ($startTimeSeconds, $startTimeMicroseconds) = gettimeofday();
$_[0]->{_pluginValues}->{startTime} = $startTimeSeconds .'.'. $startTimeMicroseconds;
$_[0]->{_pluginValues}->{endTime} = $_[0]->{_pluginValues}->{startTime};
# Options that are unknown, ambiguous or supplied with an invalid option value are passed through in @ARGV
if ( @ARGV ) {
$_[0]->{_pluginValues}->{error} = "Unknown option(s) @ARGV";
$_[0]->{_exit_} = 2;
$_[0]->exit(0);
}
# Default command line options - - - - - - - - - - - - - - - - - - - -
my $status = (exists $_[0]->{_getOptionsArgv}->{status}) ? $_[0]->{_getOptionsArgv}->{status} : 'N';
$_[0]->printUsage ('Invalid status option: '. $status) unless ($status =~ /^[N]$/);
if (exists $_[0]->{_getOptionsArgv}->{asnmtapEnv}) {
my $asnmtapEnv = $_[0]->{_getOptionsArgv}->{asnmtapEnv};
my ($boolean_screenDebug, $boolean_debug_all, $boolean_debug_NOK) = split (/\|/, $asnmtapEnv);
$_[0]->printUsage ('Wrong ASNMTAP environment options: '. $asnmtapEnv) unless (defined $boolean_screenDebug and defined $boolean_debug_all and defined $boolean_debug_NOK);
$_[0]->printUsage ('Invalid ASNMTAP environment options: '. $asnmtapEnv) unless ($boolean_screenDebug =~ /^[TF]$/ and $boolean_debug_all =~ /^[TF]$/ and $boolean_debug_NOK =~ /^[TF]$/);
$_[0]->{_getOptionsValues}->{boolean_screenDebug} = ($boolean_screenDebug eq 'T') ? 1 : 0;
$_[0]->{_getOptionsValues}->{boolean_debug_all} = ($boolean_debug_all eq 'T') ? 1 : 0;
$_[0]->{_getOptionsValues}->{boolean_debug_NOK} = ($boolean_debug_NOK eq 'T') ? 1 : 0;
} else {
$_[0]->{_getOptionsValues}->{boolean_screenDebug} = 0;
$_[0]->{_getOptionsValues}->{boolean_debug_all} = 0;
$_[0]->{_getOptionsValues}->{boolean_debug_NOK} = 0;
}
my $onDemand = (exists $_[0]->{_getOptionsArgv}->{onDemand}) ? $_[0]->{_getOptionsArgv}->{onDemand} : 'F';
$_[0]->printUsage ('Invalid on demand option: '. $onDemand) unless ($onDemand =~ /^[FTNY]$/);
$_[0]->{_getOptionsValues}->{onDemand} = ($onDemand =~ /^[TY]$/) ? 1 : 0;
# exists $_[0]->{_getOptionsArgv}->{logging}
if ( defined $_[0]->{_getOptionsArgv}->{debugfile} ) {
unlink $_[0]->{_getOptionsArgv}->{debugfile} if ( -s $_[0]->{_getOptionsArgv}->{debugfile} );
}
lib/ASNMTAP/Asnmtap/Plugins.pm view on Meta::CPAN
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub proxy {
&_checkAccObjRef ( $_[0] ); &_checkSubArgs2;
if ( defined $_[1] ) {
if ( exists $_[0]->{_proxy} ) {
if ( defined $_[2] ) {
$_[0]->{_proxy}->{$_[1]} = $_[2] if ( exists $_[0]->{_proxy}->{$_[1]} );
}
( defined $_[0]->{_proxy}->{$_[1]} ) ? $_[0]->{_proxy}->{$_[1]} : undef;
} else {
undef;
}
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub timeout { &_checkAccObjRef ( $_[0] ); &_checkSubArgs1; $_[0]->{_timeout} = $_[1] if ( defined $_[1] ); $_[0]->{_timeout}; }
# Class accessor methods - - - - - - - - - - - - - - - - - - - - - - - -
sub setEndTime_and_getResponsTime {
&_checkAccObjRef ( $_[0] ); &_checkSubArgs1;
my ($endTimeSeconds, $endTimeMicroseconds) = gettimeofday();
$_[0]->{_pluginValues}->{endTime} = "$endTimeSeconds.$endTimeMicroseconds";
my ($startTimeSeconds, $startTimeMicroseconds) = split (/\./, $_[1]);
$startTimeMicroseconds = 0 unless ( defined $startTimeMicroseconds );
return ( defined $startTimeSeconds ? int ( ( ( $endTimeSeconds >= $startTimeSeconds ) ? tv_interval ( [$startTimeSeconds, $startTimeMicroseconds], [$endTimeSeconds, $endTimeMicroseconds] ) : tv_interval ( [$endTimeSeconds, $endTimeMicroseconds], [$...
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub write_debugfile {
&_checkAccObjRef ( $_[0] ); &_checkReadOnly2;
my $debugfile = $_[0]->{_getOptionsArgv}->{debugfile};
if ( defined $debugfile ) {
my $openAppend = ( defined $_[2] and $_[2] =~ /^1$/ ) ? 1 : 0;
my $rvOpen = open (DEBUGFILE, ($openAppend ? '>>' : '>') .$debugfile);
if ($rvOpen) {
print DEBUGFILE ${$_[1]}, "\n";
close(DEBUGFILE);
} else {
print ref ($_[0]) .": Cannot open $debugfile to print debug information\n";
}
}
}
# Utility methods - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub printUsage {
$_[0]->_getOptions () if ( exists $_[0]->{_getOptionsArgv}->{usage} );
$_[0]->SUPER::printUsage ($_[1]);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub printHelp {
$_[0]->_getOptions ();
$_[0]->SUPER::printHelp ();
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub call_system {
&_checkAccObjRef ( $_[0] ); &_checkReadOnly2;
return ( $ERRORS{DEPENDENT} ) unless ( defined $_[1] );
my ($status, $stdout, $stderr) = $_[0]->SUPER::call_system ( $_[1] );
if ( $status ) {
if ( $_[0]->{_getOptionsValues}->{debug} ) {
$_[0]->pluginValues ( { stateValue => $ERRORS{OK}, alert => $_[1] .': OK', result => ( defined $stdout ? $stdout : undef ) }, $TYPE{APPEND} );
} else {
$_[0]->pluginValues ( { stateValue => $ERRORS{OK}, result => ( defined $stdout ? $stdout : undef ) }, $TYPE{APPEND} );
}
return ( $ERRORS{OK} );
} else {
if ( $_[0]->{_getOptionsValues}->{debug} ) {
$_[0]->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, result => ( defined $stderr ? $stderr : undef ) }, $TYPE{APPEND} );
} else {
$_[0]->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => $_[1] .': '. $stderr, result => ( defined $stderr ? $stderr : undef ) }, $TYPE{APPEND} );
}
return ( $ERRORS{UNKNOWN} );
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub exit {
&_checkAccObjRef ( $_[0] ); &_checkSubArgs1;
exit $ERRORS { $_[0]->{_pluginValues}->{stateError} } if ( exists $_[0]->{_exit_} and $_[0]->{_exit_} == 1 );
# Timing Out Slow Plugins - part 2/2 - - - - - - - - - - - - - - - - -
if ( exists $_[0]->{_getOptionsArgv}->{timeout} ) {
my $remaining = alarm (0);
if ( $ALARM_OFF or $! =~ /\QASNMTAP::Asnmtap::Plugins::ALARM_OFF = 1\n\E/ or $@ =~ /\QASNMTAP::Asnmtap::Plugins::ALARM_OFF = 1\n\E/ ) {
$_[0]->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "TIMING OUT SLOW PLUGIN ($remaining)" }, $TYPE{APPEND} );
$remaining = 0;
}
$SIG{ALRM} = $_[0]->{_pluginValues}->{_handler_} ? $_[0]->{_pluginValues}->{_handler_} : 'DEFAULT';
if ( $_[0]->{_pluginValues}->{_alarm_} ) { # Previous alarm pending
my $alarm = $_[0]->{_pluginValues}->{_alarm_} - $_[0]->{_getOptionsArgv}->{timeout} + $remaining;
if ( $alarm > 0 ) { # Reset it, excluding the elapsed time
alarm ($alarm);
} else { # It should have gone off already, set it off
kill 'ALRM',$$;
}
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$_[0]->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => 'HELP, THERE IS A PROBLEM WITH THE PLUGIN' }, $TYPE{APPEND} ) if ( $_[0]->{_pluginValues}->{stateValue} == $ERRORS{DEPENDENT} or ( exists $_[0]->{_exit_} and $_[0]->{_exit_} == 2 ) );
$_[0]->appendPerformanceData('Status='. $_[0]->{_pluginValues}->{stateValue} .';1;2;0;3') if ( defined $_[1] && $_[1] =~ /^[1357]$/ );
my $duration = $_[0]->setEndTime_and_getResponsTime ($_[0]->{_pluginValues}->{startTime});
$_[0]->appendPerformanceData('Compilation='. ($_[0]->setEndTime_and_getResponsTime ($^T) - $duration) .'ms;;;0;') if ( $_[1] =~ /^[2367]$/ );
if ( $_[0]->{_getOptionsArgv}->{trendline} ) {
( run in 1.025 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )