From 4c605d8cf2237669206a53395ff46df8121d0702 Mon Sep 17 00:00:00 2001 From: Subhendu Ghosh Date: Tue, 4 Feb 2003 06:16:16 +0000 Subject: [PATCH] lmstat output update git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@287 f882894a-f735-0410-b71e-b25c423dba1c --- plugins-scripts/check_flexlm.pl | 173 +++++++++++++++++++++++++------- 1 file changed, 134 insertions(+), 39 deletions(-) diff --git a/plugins-scripts/check_flexlm.pl b/plugins-scripts/check_flexlm.pl index dccb6fe..ade5843 100755 --- a/plugins-scripts/check_flexlm.pl +++ b/plugins-scripts/check_flexlm.pl @@ -28,13 +28,16 @@ # License: GPL # $Id$ # +# lmstat output patches from Steve Rigler/Cliff Rice 13-Apr-2002 +# srigler@marathonoil.com,cerice@marathonoil.com + use strict; use Getopt::Long; -use vars qw($opt_V $opt_h $opt_F $verbose $PROGNAME); +use vars qw($opt_V $opt_h $opt_F $opt_t $verbose $PROGNAME); use lib utils.pm; -use utils qw($TIMEOUT %ERRORS &print_revision &support &usage); +use utils qw(%ERRORS &print_revision &support &usage); $PROGNAME="check_flexlm"; @@ -50,21 +53,32 @@ GetOptions ("V" => \$opt_V, "version" => \$opt_V, "h" => \$opt_h, "help" => \$opt_h, "v" => \$verbose, "verbose" => \$verbose, - "F=s" => \$opt_F, "filename=s" => \$opt_F); + "F=s" => \$opt_F, "filename=s" => \$opt_F, + "t=i" => \$opt_t, "timeout=i" => \$opt_t); if ($opt_V) { print_revision($PROGNAME,'$Revision$'); exit $ERRORS{'OK'}; } +unless (defined $opt_t) { + $opt_t = $utils::TIMEOUT ; # default timeout +} + + if ($opt_h) {print_help(); exit $ERRORS{'OK'};} +unless (defined $opt_F) { + print "Missing license.dat file\n"; + print_usage(); + exit $ERRORS{'UNKNOWN'}; +} # Just in case of problems, let's not hang Nagios $SIG{'ALRM'} = sub { - print "No Answer from Client\n"; - exit 2; + print "Timeout: No Answer from Client\n"; + exit $ERRORS{'UNKNOWN'}; }; -alarm($TIMEOUT); +alarm($opt_t); my $lmstat = $utils::PATH_TO_LMSTAT ; unless (-x $lmstat ) { @@ -78,50 +92,125 @@ my $licfile = $1 if ($opt_F =~ /^(.*)$/); print "$licfile\n" if $verbose; -open CMD,"$lmstat -c $licfile |"; +if ( ! open(CMD,"$lmstat -c $licfile |") ) { + print "ERROR: Could not open \"$lmstat -c $licfile\" ($!)\n"; + exit exit $ERRORS{'UNKNOWN'}; +} my $serverup = 0; -my ($ls1,$ls2,$ls3,$lf1,$lf2,$lf3,$servers); +my @upsrv; +my @downsrv; # list of servers up and down + +#my ($ls1,$ls2,$ls3,$lf1,$lf2,$lf3,$servers); + +# key off of the term "license server" and +# grab the status. Keep going until "Vendor" is found +# + +# +# Collect list of license servers by their status +# Vendor daemon status is ignored for the moment. while ( ) { - if ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*)/ ) { - $ls1 = $1; - $ls2 = $2; - $ls3 = $3; - $lf1 = $lf2 = $lf3 = 0; - $servers = 3; - } elsif ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*)/ ) { - $ls1 = $1; - $ls2 = $ls3 = ""; - $lf1 = $lf2 = $lf3 = 0; - $servers = 1; - } elsif ( / *$ls1: license server UP/ ) { - print "$ls1 UP, "; - $lf1 = 1 - } elsif ( / *$ls2: license server UP/ ) { - print "$ls2 UP, "; - $lf2 = 1 - } elsif ( / *$ls3: license server UP/ ) { - print "$ls3 UP, "; - $lf3 = 1 - } elsif ( / *([^:]*: UP .*)/ ) { - print " license server for $1\n"; - $serverup = 1; - } + next if (/^lmstat/); # ignore 1st line - copyright + next if (/^Flexible/); # ignore 2nd line - timestamp + (/^Vendor/) && last; # ignore Vendor daemon status + print $_ if $verbose; + + if ($_ =~ /license server /) { # matched 1 (of possibly 3) license server + s/^\s*//; #some servers start at col 1, other have whitespace + # strip staring whitespace if any + if ( $_ =~ /UP/) { + $_ =~ /^(.*):/ ; + push(@upsrv, $1); + print "up:$1:\n" if $verbose; + } else { + $_ =~ /^(.*):/; + push(@downsrv, $1); + print "down:$1:\n" if $verbose; + } + + } + + +# if ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*)/ ) { +# $ls1 = $1; +# $ls2 = $2; +# $ls3 = $3; +# $lf1 = $lf2 = $lf3 = 0; +# $servers = 3; +# } elsif ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*)/ ) { +# $ls1 = $1; +# $ls2 = $ls3 = ""; +# $lf1 = $lf2 = $lf3 = 0; +# $servers = 1; +# } elsif ( / *$ls1: license server UP/ ) { +# print "$ls1 UP, "; +# $lf1 = 1 +# } elsif ( / *$ls2: license server UP/ ) { +# print "$ls2 UP, "; +# $lf2 = 1 +# } elsif ( / *$ls3: license server UP/ ) { +# print "$ls3 UP, "; +# $lf3 = 1 +# } elsif ( / *([^:]*: UP .*)/ ) { +# print " license server for $1\n"; +# $serverup = 1; +# } + +} + +#if ( $serverup == 0 ) { +# print " license server not running\n"; +# exit 2; +#} + +close CMD; + +if ($verbose) { + print "License Servers running: ".scalar(@upsrv) ."\n"; + foreach my $upserver (@upsrv) { + print "$upserver\n"; + } + print "License servers not running: ".scalar(@downsrv)."\n"; + foreach my $downserver (@downsrv) { + print "$downserver\n"; + } +} + +# +# print list of servers which are up. +# +if (scalar(@upsrv) > 0) { + print "License Servers running:"; + foreach my $upserver (@upsrv) { + print "$upserver,"; + } } -if ( $serverup == 0 ) { - print " license server not running\n"; - exit 2; +# +# Ditto for those which are down. +# +if (scalar(@downsrv) > 0) { + print "License servers NOT running:"; + foreach my $downserver (@downsrv) { + print "$downserver,"; + } } -exit $ERRORS{'OK'} if ( $servers == $lf1 + $lf2 + $lf3 ); -exit $ERRORS{'WARNING'} if ( $servers == 3 && $lf1 + $lf2 + $lf3 == 2 ); +# perfdata +print "\n|flexlm::up:".scalar(@upsrv).";down:".scalar(@downsrv)."\n"; + +exit $ERRORS{'OK'} if ( scalar(@downsrv) == 0 ); +exit $ERRORS{'WARNING'} if ( (scalar(@upsrv) > 0) && (scalar(@downsrv) > 0)); + +#exit $ERRORS{'OK'} if ( $servers == $lf1 + $lf2 + $lf3 ); +#exit $ERRORS{'WARNING'} if ( $servers == 3 && $lf1 + $lf2 + $lf3 == 2 ); exit $ERRORS{'CRITICAL'}; sub print_usage () { print "Usage: - $PROGNAME -F [--verbose] + $PROGNAME -F [-v] [-t] [-V] [-h] $PROGNAME --help $PROGNAME --version "; @@ -137,14 +226,20 @@ Check available flexlm license managers print_usage(); print " -F, --filename=FILE - Name of license file + Name of license file (usually \"license.dat\") -v, --verbose Print some extra debugging information (not advised for normal operation) +-t, --timeout + Plugin time out in seconds (default = $utils::TIMEOUT ) -V, --version Show version and license information -h, --help Show this help screen +Flexlm license managers usually run as a single server or three servers and a +quorum is needed. The plugin return OK if 1 (single) or 3 (triple) servers +are running, CRITICAL if 1(single) or 3 (triple) servers are down, and WARNING +if 1 or 2 of 3 servers are running\n "; support(); } -- 2.30.2