ASNMTAP
view release on metacpan or search on metacpan
plugins/nagios/templates/check_xml-monitoring-1.2.pl view on Meta::CPAN
use Date::Calc qw(check_date check_time);
use Time::Local;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use ASNMTAP::Asnmtap::Plugins::Nagios v3.002.003;
use ASNMTAP::Asnmtap::Plugins::Nagios qw(:NAGIOS);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my $schema = "1.2";
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my $objectNagios = ASNMTAP::Asnmtap::Plugins::Nagios->new (
_programName => 'check_xml-monitoring-1.2.pl',
_programDescription => 'Check Nagios by XML Monitoring 1.2',
_programVersion => '3.002.003',
_programUsagePrefix => '-H|--hostname <hostname> -s|--service <service> [-P|--plugin <plugin>] [-p|--parameters <parameters>] [--validation <validation>]',
_programHelpPrefix => "-H, --hostname=<Nagios Hostname>
-s, --service=<Nagios service name>
-P, --plugin=<plugin to execute>
-p, --parameters=<parameters for the plugin to execute>
--validation=F|T
F(alse) : dtd validation off (default)
T(true) : dtd validation on",
_programGetOptions => ['filename|F=s', 'hostname|H=s', 'service|s=s', 'plugin|P:s', 'parameters|p:s', 'validation:s', 'interval|i=i', 'environment|e=s'],
_timeout => 30,
_debug => 0);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my $filename = $objectNagios->getOptionsArgv ('filename');
my $hostname = $objectNagios->getOptionsArgv ('hostname') ? $objectNagios->getOptionsArgv ('hostname') : undef;
$objectNagios->printUsage ('Missing command line argument hostname') unless (defined $hostname);
my $service = $objectNagios->getOptionsArgv ('service') ? $objectNagios->getOptionsArgv ('service') : undef;
$objectNagios->printUsage ('Missing command line argument service') unless ( defined $service);
my $plugin = $objectNagios->getOptionsArgv ('plugin') ? $objectNagios->getOptionsArgv ('plugin') : undef;
my $parameters = $objectNagios->getOptionsArgv ('parameters') ? $objectNagios->getOptionsArgv ('parameters') : '';
my $validateDTD = $objectNagios->getOptionsArgv ('validation') ? $objectNagios->getOptionsArgv ('validation') : 'F';
if (defined $validateDTD) {
$objectNagios->printUsage ('Invalid validation option: '. $validateDTD) unless ($validateDTD =~ /^[FT]$/);
$validateDTD = ($validateDTD eq 'T') ? 1 : 0;
}
my $resultOutOfDate = $objectNagios->getOptionsArgv ('interval');
my $environment = $objectNagios->getOptionsArgv ('environment') ? $objectNagios->getOptionsArgv ('environment') : 'P';
my $environmentText = $objectNagios->getOptionsValue ('environment');
my $debug = $objectNagios->getOptionsValue ('debug');
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
use ASNMTAP::Asnmtap::Plugins::XML qw(&extract_XML);
use constant HEADER => '<?xml version="1.0" encoding="UTF-8"?>';
use constant FOOTER => '</mon:MonitoringXML>'; # use constant FOOTER => '</MonitoringXML>';
my ($reverse, $message, $result, $debugfileMessage) = ( 0, 'Check Nagios by XML Monitoring 1.2' );
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if ( defined $plugin ) {
if (-s $plugin ) {
$objectNagios->exit (3) if ( $objectNagios->call_system ( $plugin .' '. $parameters, 1 ) );
} else {
$objectNagios->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => "The Plugin '$plugin' doesn't exist" }, $TYPE{APPEND} );
$objectNagios->exit (3);
}
}
my ($returnCode, $xml) = extract_XML ( asnmtapInherited => \$objectNagios, filenameXML => $filename, headerXML => HEADER, footerXML => FOOTER, validateDTD => $validateDTD, filenameDTD => "dtd/Monitoring-$schema.dtd" );
$objectNagios->exit (3) if ( $returnCode );
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my $currentTimeslot = timelocal ((localtime)[0,1,2,3,4,5]);
my %environment = ( P => 'PROD', S => 'SIM', A => 'ACC', T => 'TEST', D => 'DEV', L => 'LOCAL' );
if ($xml->{Monitoring}{Schema}{Value} eq $schema) {
$debugfileMessage = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<HTML><HEAD><TITLE>$message \@ $APPLICATION</TITLE><style type=\"text/css\">\n.statusOdd { font-family: arial,serif; font-size: 10pt; background-color: #DBDBDB...
my $firstResults = 1;
if ( ref $xml->{Monitoring}{Results} eq 'ARRAY' ) {
foreach my $results (@{$xml->{Monitoring}{Results}}) {
processAllResult ( \$debugfileMessage, $firstResults, \$results, $reverse, $debug );
$firstResults = 0;
}
} else {
processAllResult ( \$debugfileMessage, $firstResults, \$xml->{Monitoring}{Results}, $reverse, $debug );
}
$objectNagios->write_debugfile ( \$debugfileMessage, 0 );
} else {
my $tError = 'Content Error: - Schema: '. $xml->{Monitoring}{Schema}{Value} ." ne $schema";
$objectNagios->pluginValues ( { stateValue => $ERRORS{UNKNOWN}, error => $tError, result => undef }, $TYPE{APPEND} );
}
$objectNagios->exit (3);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub processAllResult {
my ($debugfileMessage, $firstResults, $result, $reverse, $debug) = @_;
my $match = ( $$result->{Details}{Host} eq $hostname and $$result->{Details}{Service} eq $service ) ? 1 : 0;
if (! $firstResults or ($match and $$result->{Details}{Environment} =~ /^$environment{$environment}$/i)) {
$$debugfileMessage .= "\n<TABLE WIDTH=\"100%\"><TR><TD>\n<H3 style=\"margin-bottom: 0.5em; font: bold 90% verdana,arial,helvetica\">Environment: $environmentText</H3></TD></TR></TABLE>\n";
$$debugfileMessage .= "\n<TABLE WIDTH=\"100%\">";
validateResultOrSubResult ( $firstResults, \$$result, 0, $reverse, $debug );
if ( defined $$result->{SubResults} ) {
if ( ref $$result->{SubResults} eq 'ARRAY' ) {
foreach my $subResults (@{$$result->{SubResults}}) {
( run in 0.719 second using v1.01-cache-2.11-cpan-e1769b4cff6 )