#!/usr/bin/perl -w ## Written 01/07/04 F. Thomas # $Id: check_wsc.pl v0.6 # Modified 2006-12-15 W. Wagner aka "Wolle" # switching to LWP::Useragent seems to be more flexible # detecting web-pages which are correct, but not the result of the webservice # new options: timeout & useragent # # Modified 2006-12-01 W. Wagner aka "Wolle" use strict; use LWP::UserAgent; # use Net::HTTP; use Getopt::Long; sub print_usage(); sub print_usage2(); my $version = "1.0.1"; use vars qw($opt_H $opt_r $opt_p $opt_t $opt_w $opt_help); use vars qw($name_webservice $verbose $timeout $agent); # setting defaults $timeout = 30; # seconds $agent = "nagios-check_wsc $version"; $name_webservice = "nagios/service1.asmx"; # compatible to v0.6 from fthomas $opt_help=0; GetOptions ("H:s" => \$opt_H, "Hostname:s" => \$opt_H, "r:s" => \$opt_r, "remote_wsc:s" => \$opt_r, "p:s" => \$opt_p, "parameter:s" => \$opt_p, "t:s" => \$opt_t, "servicetype:s" => \$opt_t, "v" => \$verbose, "verbose" => \$verbose, "w:s" => \$name_webservice, "webservice:s", => \$name_webservice, "timeout:i" => \$timeout, "useragent:s" => \$agent, "help" => \$opt_help, # "help" => \$opt_help, "debug" => \$verbose); # if ($opt_help ne 0) { exit print_usage2(); } my $host = $opt_H || exit print_usage(); my $remote = $opt_r || 'intralbc'; my $parameter = $opt_p || return print_usage(); $parameter =~ s/ /%20/g; my $status = 0; my $output = ""; my $method = $opt_t || 'disks'; if ($verbose) { print "gateway=$remote\n"; print "webservice=$name_webservice\n"; print "host being checked=$host\n"; print "method=$method\n"; print "param=$parameter\n"; print "timeout=$timeout\n"; print "useragent=$agent\n"; } my $ua = new LWP::UserAgent; $ua->agent($agent); $ua->timeout($timeout); my $req = new HTTP::Request 'GET'=> "http://$remote/$name_webservice/$method?server=$host¶m=$parameter"; if ($verbose) { print "sending request\n"; } my $response = $ua->request($req); if ($verbose) { print "returning from request\n"; } my $code = $response->code(); my $mess = $response->message(); if ($code ne 200) { $output = "check_wsc UNKNOWN: Problem getting service response message, code=$code, message=$mess"; $status=3; # unknown } else { my $buffer = $response->content();; $status = -1; # if nothing expected is returned if ($verbose) { print $buffer; } # check for probably correct response (custom error pages where not detected as incorrect) v1.0.1 # if (substr($buffer,0,4) ne "/g; if ($status eq "-1") { $status = 0; } } # } if ( $status eq "-1" ) { # content returned is unexpected $output = "Unexpected content returned:\n" . substr($response->content(),0,100); $output =~ s/<//g; $status = 3; } } print "$output\n"; exit $status; sub print_usage2() { print_usage(); print "check_wsc (v$version)\n"; print "Options:\n --help Print detailed help screen -H, --hostname=STRING Hostaddress to be checked -r, --remote_wsc=STRING Address of the gateway serving the webservice -p, --parameter= Parameter for a specified service type -t, --servicetype=STRING Type of check to be executed -v, --verbose Detailed output of check-script -w, --webservice=STRING URL where the webservice can be found. Example: \"/Service1.asmx\". Default: \"/nagios/service1.asmx\". --timeout=integer Timeout in seconds waiting for response message from webservice --useragent=string String to be sent in http header as \"User Agent\" -help "; return(1); } sub print_usage() { print "usage check_wsc.pl -H -r -p -t [-w ] [-v]\n"; print "check_wsc (v$version)\n"; print "use --help to see all otions\n"; return(1); }