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