summaryrefslogtreecommitdiffstats
path: root/plugins-scripts/check_flexlm.pl
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-scripts/check_flexlm.pl')
-rwxr-xr-xplugins-scripts/check_flexlm.pl149
1 files changed, 149 insertions, 0 deletions
diff --git a/plugins-scripts/check_flexlm.pl b/plugins-scripts/check_flexlm.pl
new file mode 100755
index 0000000..1d26b7c
--- /dev/null
+++ b/plugins-scripts/check_flexlm.pl
@@ -0,0 +1,149 @@
1#! /usr/bin/perl -wT
2#
3# usage:
4# check_flexlm.pl license_file
5#
6# Check available flexlm license managers.
7# Use lmstat to check the status of the license server
8# described by the license file given as argument.
9# Check and interpret the output of lmstat
10# and create returncodes and output.
11#
12# Contrary to the nagios concept, this script takes
13# a file, not a hostname as an argument and returns
14# the status of hosts and services described in that
15# file. Use these hosts.cfg entries as an example
16#
17#host[anchor]=any host will do;some.address.com;;check-host-alive;3;120;24x7;1;1;1;
18#service[anchor]=yodel;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yodel_lic
19#service[anchor]=yeehaw;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yeehaw_lic
20#command[check_flexlm]=/some/path/libexec/check_flexlm.pl $ARG1$
21#
22# Notes:
23# - you need the lmstat utility which comes with flexlm.
24# - set the correct path in the variable $lmstat.
25#
26# initial version: 9-10-99 Ernst-Dieter Martin edmt@infineon.com
27#
28# License: GPL
29#
30
31BEGIN {
32 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
33 $runtimedir = $1;
34 $PROGNAME = $2;
35 }
36}
37
38use strict;
39use Getopt::Long;
40use vars qw($opt_V $opt_h $opt_F $verbose $PROGNAME);
41use lib $main::runtimedir;
42use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
43
44sub print_help ();
45sub print_usage ();
46
47$ENV{'PATH'}='';
48$ENV{'BASH_ENV'}='';
49$ENV{'ENV'}='';
50
51Getopt::Long::Configure('bundling');
52GetOptions
53 ("V" => \$opt_V, "version" => \$opt_V,
54 "h" => \$opt_h, "help" => \$opt_h,
55 "v" => \$verbose, "verbose" => \$verbose,
56 "F=s" => \$opt_F, "filename=s" => \$opt_F);
57
58if ($opt_V) {
59 print_revision($PROGNAME,'$Revision$');
60 exit $ERRORS{'OK'};
61}
62
63if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
64
65# Just in case of problems, let's not hang Nagios
66$SIG{'ALRM'} = sub {
67 print "No Answer from Client\n";
68 exit 2;
69};
70alarm($TIMEOUT);
71
72my $lmstat = "/opt/lic/sw/cadadm/default/bin/lmstat";
73
74($opt_F) || ($opt_F = shift) || usage("License file not specified\n");
75my $licfile = $1 if ($opt_F =~ /^(.*)$/);
76($licfile) || usage("Invalid filename: $opt_F\n");
77
78print "$licfile\n" if $verbose;
79
80open CMD,"$lmstat -c $licfile |";
81
82my $serverup = 0;
83my ($ls1,$ls2,$ls3,$lf1,$lf2,$lf3,$servers);
84
85while ( <CMD> ) {
86 if ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*)/ ) {
87 $ls1 = $1;
88 $ls2 = $2;
89 $ls3 = $3;
90 $lf1 = $lf2 = $lf3 = 0;
91 $servers = 3;
92 } elsif ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*)/ ) {
93 $ls1 = $1;
94 $ls2 = $ls3 = "";
95 $lf1 = $lf2 = $lf3 = 0;
96 $servers = 1;
97 } elsif ( / *$ls1: license server UP/ ) {
98 print "$ls1 UP, ";
99 $lf1 = 1
100 } elsif ( / *$ls2: license server UP/ ) {
101 print "$ls2 UP, ";
102 $lf2 = 1
103 } elsif ( / *$ls3: license server UP/ ) {
104 print "$ls3 UP, ";
105 $lf3 = 1
106 } elsif ( / *([^:]*: UP .*)/ ) {
107 print " license server for $1\n";
108 $serverup = 1;
109 }
110}
111if ( $serverup == 0 ) {
112 print " license server not running\n";
113 exit 2;
114}
115
116exit $ERRORS{'OK'} if ( $servers == $lf1 + $lf2 + $lf3 );
117exit $ERRORS{'WARNING'} if ( $servers == 3 && $lf1 + $lf2 + $lf3 == 2 );
118exit $ERRORS{'CRITICAL'};
119
120
121sub print_usage () {
122 print "Usage:
123 $PROGNAME -F <filename> [--verbose]
124 $PROGNAME --help
125 $PROGNAME --version
126";
127}
128
129sub print_help () {
130 print_revision($PROGNAME,'$Revision$');
131 print "Copyright (c) 2000 Ernst-Dieter Martin/Karl DeBisschop
132
133Check available flexlm license managers
134
135";
136 print_usage();
137 print "
138-F, --filename=FILE
139 Name of license file
140-v, --verbose
141 Print some extra debugging information (not advised for normal operation)
142-V, --version
143 Show version and license information
144-h, --help
145 Show this help screen
146
147";
148 support();
149}