SOURCES: nagios-plugin-check_sipsak (NEW) - new here

arekm arekm at pld-linux.org
Sat Aug 23 20:47:20 CEST 2008


Author: arekm                        Date: Sat Aug 23 18:47:20 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new here

---- Files affected:
SOURCES:
   nagios-plugin-check_sipsak (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/nagios-plugin-check_sipsak
diff -u /dev/null SOURCES/nagios-plugin-check_sipsak:1.1
--- /dev/null	Sat Aug 23 20:47:21 2008
+++ SOURCES/nagios-plugin-check_sipsak	Sat Aug 23 20:47:15 2008
@@ -0,0 +1,177 @@
+#!/usr/local/bin/perl
+
+##
+# check_sip - (c) 2005-2006 O'Shaughnessy Evans <shaug+nagios at aloha.net>
+# 
+# Check the responsiveness of a SIP server.
+# 
+# $Id$
+# 
+# Requires sipsak; see sipsak.org for more info.
+##
+
+require 5.004;
+use strict;
+use POSIX;
+use Getopt::Long qw(:config no_ignore_case);
+use Sys::Hostname;
+
+use lib '/usr/local/libexec/nagios'; 
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+
+use vars qw($ME $VERSION $Contact $Expires %Flags $Help $Host $Contact_Host
+            $Password $Port $Proxy $REG_Mode @Sipsak_Cmd $Usage $User $URI
+	    $Verbose);
+
+BEGIN {
+  $VERSION = '0.'. (split(' ', '$Id$'))[2];
+  $ME = 'check_sip';
+
+  # command to get connection state; 1st %s is for extra args, second is SIP URI
+  @Sipsak_Cmd = qw(sipsak --nagios-code -v);
+  $User = '';
+  $Password = '';
+  $Port = 5060;
+  $Proxy = '';
+  $Expires = 300;
+  $Contact_Host = hostname();
+  $REG_Mode = 0;
+
+  $Usage = "$ME -H host [-c contact] [-P proxy] [-p port] [-u user] [-U uri] [-v]";
+  $Help = <<EOhelp;
+$ME:  Nagios plugin to check a SIP server
+
+Usage:
+  $ME [<flags>] -H host [-c contact_uri] [-P proxy] [-p port] [-u user] [-a pass] [-e exp] [-v]
+  $ME [<flags>] -U sip_uri [-c contact_uri] [-P proxy] [-a pass] [-e exp] [-v]
+  $ME --help
+  $ME --man
+  $ME --version
+
+Options:
+  --contact|c   Contact URI to use in register (def <given user>\@$Contact_Host).
+  --expires|e   Set an expiration time for registrations (def $Expires).
+  --hostname|H  Name of the host running the SIP server.
+  --password|a  Auth password to specify when sending a username.
+  --port|p      Port on which the SIP service should be running (def $Port).
+  --proxy|P     Outbound proxy hostname; use if different than SIP URI host.
+  --user|u      Username to include in the SIP uri.
+  --uri|U       Full sip:user\@host[:port] URI.
+  --verbose|-v  Show details of progress (give more than once for more info).
+  --help        Show this usage text.
+  --man         Show the comprehensive documentation.
+  --version     Show the version ($VERSION).
+
+  Normal behavior is to send an OPTIONS request to the SIP server.
+  If a username is given, though, either through --user or --uri, the
+  script will attempt to register with the server given in the SIP URI.
+
+EOhelp
+}
+
+# handle the command-line
+$Verbose = 0;
+GetOptions('verbose|v+'   => \$Verbose,
+           'version|V'    => \$Flags{version},
+           'help|h'       => \$Flags{help},
+           'man|m'        => \$Flags{man},
+	   'contact|c=s'  => \$Contact,
+	   'expires|e=i'  => \$Expires,
+	   'hostname|H=s' => \$Host,
+	   'password|a=s' => \$Password,
+	   'port|p=s'     => \$Port,
+	   'proxy|P=s'    => \$Proxy,
+	   'user|u=s'     => \$User,
+	   'uri|U=s'      => \$URI,
+          )
+ or die($Usage);
+if ($Flags{version}) {
+    print_revision($ME, $VERSION);
+    exit 0;
+}
+elsif ($Flags{help}) {
+    print $Help;
+    exit 0;
+}
+elsif ($Flags{man}) {
+    use Pod::Usage;
+    pod2usage(-verbose => 2, -exitval => 0);
+}
+
+if (!$URI and !$Host) {
+    print "ERROR:  Sorry, but a hostname or full URI must be given.\n\n".
+          $Usage;
+    exit $ERRORS{UNKNOWN};
+}
+elsif ($Host and ! utils::is_hostname($Host)) {
+    print "ERROR:  Sorry, but \"$Host\" doesn't look like a host name.\n\n".
+          $Usage;
+    exit $ERRORS{UNKNOWN};
+}
+
+if (!$URI) {
+    $URI = "sip:". ($User ? "$User\@" : ''). "$Host:$Port";
+}
+
+# add -v flags to sipsak according to the verbosity given on the command line
+for (my $v = 0; $v < $Verbose; $v++) {
+    push @Sipsak_Cmd, '-v';
+}
+
+# if the URI contains a username, we're running in REGISTER mode and we
+# need to add some parameters to our sipsak command line
+if ($URI =~ /\@/) {
+    $REG_Mode = 1;
+
+    push @Sipsak_Cmd, '-U';
+    if (defined($Expires)) {
+        push @Sipsak_Cmd, '--expires', $Expires;
+    }
+
+    if (!$Contact) {
+	$Contact = "sip:$User\@$Contact_Host";
+    }
+    if (defined($Contact)) {
+	$Contact = 'sip:'. $Contact unless $Contact =~ /^sip(s)?:/i;
+        push @Sipsak_Cmd, '--contact', $Contact;
+    }
+
+    if ($Password) {
+	push @Sipsak_Cmd, '--password', $Password;
+    }
+}
+
+# add a proxy to the sipsak command line if one was given
+if ($Proxy) {
+    push @Sipsak_Cmd, '--outbound-proxy', $Proxy;
+}
+
+push @Sipsak_Cmd, '--sip-uri', $URI;
+print "executing:  ". join(' ', @Sipsak_Cmd). "\n" if $Verbose;
+my $cmd = join(' ', @Sipsak_Cmd);
+my @out = `$cmd 2>&1`;
+print "output is:\n\n at out\n" if $Verbose;
+chomp @out;
+my ($status) = grep(/^SIP\s/, @out);
+chomp $status;
+
+my ($state, $answer);
+if ($status =~ /^SIP(\/[\d.]+ 2\d\d)? OK/i) {
+    $state = $ERRORS{OK};
+    $answer = $status;
+}
+else {
+    $state = $ERRORS{CRITICAL};
+    $answer = "$status (\"...$out[-2]\")";
+}
+
+print "Searching known error codes... " if $Verbose > 2;
+foreach my $errname (keys %ERRORS) {
+    print " $errname" if $Verbose > 2;
+    if ($state == $ERRORS{$errname}) {
+	print "\n" if $Verbose > 2;
+        print "SIP $errname: $answer\n";
+        last;
+    }
+}
+exit $state;
================================================================


More information about the pld-cvs-commit mailing list