Initial commit
This commit is contained in:
commit
7252840bf3
12
README
Normal file
12
README
Normal file
@ -0,0 +1,12 @@
|
||||
Retrieve an http/s url and checks its application type is application/json and the response content decodes properly into JSON.
|
||||
Optionally verify content is found using data file.
|
||||
|
||||
--help shows this message
|
||||
--version shows version information
|
||||
|
||||
USAGE: check_http_json.pl -U http://my.url.com -d sample.data
|
||||
|
||||
-U URL to retrieve (http or https)
|
||||
-d absolute path to data file containing hash to find with JSON response
|
||||
-t Timeout in seconds to wait for the URL to load. If the page fails to load,
|
||||
Nagios check_http_json will exit with UNKNOWN state (default 60)
|
127
check_json.pl
Executable file
127
check_json.pl
Executable file
@ -0,0 +1,127 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Getopt::Std;
|
||||
use LWP::UserAgent;
|
||||
use JSON 'decode_json';
|
||||
|
||||
my $plugin_name = "Nagios check_http_json";
|
||||
my $VERSION = "1.00";
|
||||
|
||||
# getopt module config
|
||||
$Getopt::Std::STANDARD_HELP_VERSION = 1;
|
||||
|
||||
# nagios exit codes
|
||||
use constant EXIT_OK => 0;
|
||||
use constant EXIT_WARNING => 1;
|
||||
use constant EXIT_CRITICAL => 2;
|
||||
use constant EXIT_UNKNOWN => 3;
|
||||
|
||||
|
||||
my $status = EXIT_UNKNOWN;
|
||||
|
||||
#parse cmd opts
|
||||
my %opts;
|
||||
getopts('vU:t:d:', \%opts);
|
||||
$opts{t} = 5 unless (defined $opts{t});
|
||||
if (not (defined $opts{U}) ) {
|
||||
print "ERROR: INVALID USAGE\n";
|
||||
HELP_MESSAGE();
|
||||
exit $status;
|
||||
}
|
||||
|
||||
my $ua = LWP::UserAgent->new;
|
||||
|
||||
$ua->agent('Redirect Bot ' . $VERSION);
|
||||
$ua->protocols_allowed( [ 'http', 'https'] );
|
||||
$ua->parse_head(0);
|
||||
$ua->timeout($opts{t});
|
||||
|
||||
my $response = $ua->get($opts{U});
|
||||
|
||||
if ( $response->header("content-type") ne 'application/json' )
|
||||
{
|
||||
print "Expected content-type to be application/json, got ", $response->header("content-type");
|
||||
exit EXIT_CRITICAL;
|
||||
}
|
||||
|
||||
|
||||
my $json_response;
|
||||
|
||||
eval {
|
||||
|
||||
$json_response = decode_json($response->content);
|
||||
print "JSON repsonse decoded successfully."
|
||||
|
||||
} or do {
|
||||
print "Unable to decode JSON, invalid response?";
|
||||
exit EXIT_CRITICAL;
|
||||
};
|
||||
|
||||
|
||||
if ($opts{d}) {
|
||||
|
||||
if ( -e $opts{d}) {
|
||||
|
||||
my $hash_import = do $opts{d};
|
||||
|
||||
my %attr_check = %{$hash_import};
|
||||
|
||||
my @errors;
|
||||
|
||||
for my $key (sort keys %attr_check) {
|
||||
for my $attr (sort keys %{$attr_check{$key}}) {
|
||||
my $have = $json_response->{products}{$key}{now}{$attr};
|
||||
my $expect = $attr_check{$key}{$attr};
|
||||
push @errors, "For key $key, attribute $attr, expected '$expect', but got '$have'"
|
||||
unless $have eq $expect;
|
||||
}
|
||||
}
|
||||
|
||||
if (@errors) {
|
||||
print "Errors:\n", map { "$_\n" } @errors;
|
||||
$status = EXIT_CRITICAL;
|
||||
}
|
||||
else {
|
||||
print "Found expected content.";
|
||||
$status = EXIT_OK;
|
||||
}
|
||||
}
|
||||
else {
|
||||
print "Unable to find data file $opts{d}";
|
||||
$status = EXIT_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
exit $status;
|
||||
|
||||
sub HELP_MESSAGE
|
||||
{
|
||||
print <<EOHELP
|
||||
Retrieve an http/s url and checks its application type is application/json and the response content decodes properly into JSON.
|
||||
Optionally verify content is found using data file.
|
||||
|
||||
--help shows this message
|
||||
--version shows version information
|
||||
|
||||
USAGE: $0 -U http://my.url.com -d sample.data
|
||||
|
||||
-U URL to retrieve (http or https)
|
||||
-d absolute path to data file containing hash to find with JSON response
|
||||
-t Timeout in seconds to wait for the URL to load. If the page fails to load,
|
||||
$plugin_name will exit with UNKNOWN state (default 60)
|
||||
|
||||
EOHELP
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
sub VERSION_MESSAGE
|
||||
{
|
||||
print <<EOVM
|
||||
$plugin_name v. $VERSION
|
||||
Copyright 2012, Brian Buchalter, http://www.endpoint.com - Licensed under GPLv2
|
||||
EOVM
|
||||
;
|
||||
}
|
18
sample.data
Normal file
18
sample.data
Normal file
@ -0,0 +1,18 @@
|
||||
$VAR1 = {
|
||||
'00142' => {
|
||||
cityid => 'socal',
|
||||
age_group => 'youth',
|
||||
},
|
||||
'00138' => {
|
||||
cityid => 'socal',
|
||||
age_group => 'adult',
|
||||
},
|
||||
'00011' => {
|
||||
cityid => 'ny',
|
||||
age_group => 'youth',
|
||||
},
|
||||
'00009' => {
|
||||
cityid => 'ny',
|
||||
age_group => 'adult',
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue
Block a user