summaryrefslogtreecommitdiffstats
path: root/plugins-scripts/check_disk_smb.pl
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-scripts/check_disk_smb.pl')
-rw-r--r--[-rwxr-xr-x]plugins-scripts/check_disk_smb.pl28
1 files changed, 23 insertions, 5 deletions
diff --git a/plugins-scripts/check_disk_smb.pl b/plugins-scripts/check_disk_smb.pl
index 4e46397..eda8dd4 100755..100644
--- a/plugins-scripts/check_disk_smb.pl
+++ b/plugins-scripts/check_disk_smb.pl
@@ -19,15 +19,18 @@
19# 19#
20 20
21require 5.004; 21require 5.004;
22use POSIX; 22use POSIX qw(setsid);
23use strict; 23use strict;
24use Getopt::Long; 24use Getopt::Long;
25use vars qw($opt_P $opt_V $opt_h $opt_H $opt_s $opt_W $opt_u $opt_p $opt_w $opt_c $opt_a $verbose); 25use vars qw($opt_P $opt_V $opt_h $opt_H $opt_s $opt_W $opt_u $opt_p $opt_w $opt_c $opt_a $opt_C $opt_t $verbose);
26use vars qw($PROGNAME); 26use vars qw($PROGNAME);
27use FindBin; 27use FindBin;
28use lib "$FindBin::Bin"; 28use lib "$FindBin::Bin";
29use utils qw($TIMEOUT %ERRORS &print_revision &support &usage); 29use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
30 30
31# make us session leader which makes all children exit if we do
32setsid;
33
31sub print_help (); 34sub print_help ();
32sub print_usage (); 35sub print_usage ();
33 36
@@ -40,6 +43,7 @@ $ENV{'ENV'}='';
40Getopt::Long::Configure('bundling'); 43Getopt::Long::Configure('bundling');
41GetOptions 44GetOptions
42 ("v" => \$verbose, "verbose" => \$verbose, 45 ("v" => \$verbose, "verbose" => \$verbose,
46 "t=i" => \$opt_t, "timeout=i" => \$opt_t,
43 "P=s" => \$opt_P, "port=s" => \$opt_P, 47 "P=s" => \$opt_P, "port=s" => \$opt_P,
44 "V" => \$opt_V, "version" => \$opt_V, 48 "V" => \$opt_V, "version" => \$opt_V,
45 "h" => \$opt_h, "help" => \$opt_h, 49 "h" => \$opt_h, "help" => \$opt_h,
@@ -50,7 +54,8 @@ GetOptions
50 "s=s" => \$opt_s, "share=s" => \$opt_s, 54 "s=s" => \$opt_s, "share=s" => \$opt_s,
51 "W=s" => \$opt_W, "workgroup=s" => \$opt_W, 55 "W=s" => \$opt_W, "workgroup=s" => \$opt_W,
52 "H=s" => \$opt_H, "hostname=s" => \$opt_H, 56 "H=s" => \$opt_H, "hostname=s" => \$opt_H,
53 "a=s" => \$opt_a, "address=s" => \$opt_a); 57 "a=s" => \$opt_a, "address=s" => \$opt_a,
58 "C=s" => \$opt_C, "configfile=s" => \$opt_C);
54 59
55if ($opt_V) { 60if ($opt_V) {
56 print_revision($PROGNAME,'@NP_VERSION@'); #' 61 print_revision($PROGNAME,'@NP_VERSION@'); #'
@@ -88,6 +93,12 @@ my $warn = $1 if ($opt_w =~ /^([0-9]{1,2}\%?|100\%?|[0-9]+[kMG])$/);
88my $crit = $1 if ($opt_c =~ /^([0-9]{1,2}\%?|100\%?|[0-9]+[kMG])$/); 93my $crit = $1 if ($opt_c =~ /^([0-9]{1,2}\%?|100\%?|[0-9]+[kMG])$/);
89($crit) || usage("Invalid critical threshold: $opt_c\n"); 94($crit) || usage("Invalid critical threshold: $opt_c\n");
90 95
96($opt_C) || ($opt_C = shift @ARGV) || ($opt_C = "");
97my $configfile = $opt_C if ($opt_C);
98usage("Unable to read config file $configfile\n") if ($configfile) && (! -r $configfile);
99
100if ($opt_t && $opt_t =~ /^([0-9]+)$/) { $TIMEOUT = $1; }
101
91# Execute the given command line and return anything it writes to STDOUT and/or 102# Execute the given command line and return anything it writes to STDOUT and/or
92# STDERR. (This might be useful for other plugins, too, so it should possibly 103# STDERR. (This might be useful for other plugins, too, so it should possibly
93# be moved to utils.pm.) 104# be moved to utils.pm.)
@@ -175,6 +186,8 @@ my @lines = undef;
175# Just in case of problems, let's not hang the monitoring system 186# Just in case of problems, let's not hang the monitoring system
176$SIG{'ALRM'} = sub { 187$SIG{'ALRM'} = sub {
177 print "No Answer from Client\n"; 188 print "No Answer from Client\n";
189 $SIG{'INT'} = 'IGNORE';
190 kill(-2, $$);
178 exit $ERRORS{"UNKNOWN"}; 191 exit $ERRORS{"UNKNOWN"};
179}; 192};
180alarm($TIMEOUT); 193alarm($TIMEOUT);
@@ -188,6 +201,7 @@ my @cmd = (
188 defined($workgroup) ? ("-W", $workgroup) : (), 201 defined($workgroup) ? ("-W", $workgroup) : (),
189 defined($address) ? ("-I", $address) : (), 202 defined($address) ? ("-I", $address) : (),
190 defined($opt_P) ? ("-p", $opt_P) : (), 203 defined($opt_P) ? ("-p", $opt_P) : (),
204 defined($configfile) ? ("-s", $configfile) : (),
191 "-c", "du" 205 "-c", "du"
192); 206);
193 207
@@ -288,7 +302,8 @@ exit $ERRORS{$state};
288 302
289sub print_usage () { 303sub print_usage () {
290 print "Usage: $PROGNAME -H <host> -s <share> -u <user> -p <password> 304 print "Usage: $PROGNAME -H <host> -s <share> -u <user> -p <password>
291 -w <warn> -c <crit> [-W <workgroup>] [-P <port>] [-a <IP>]\n"; 305 -w <warn> -c <crit> [-W <workgroup>] [-P <port>] [-a <IP>] [-t timeout]
306 [-C <configfile>]\n";
292} 307}
293 308
294sub print_help () { 309sub print_help () {
@@ -314,11 +329,14 @@ Perl Check SMB Disk plugin for monitoring
314 Password to log in to server. (Defaults to an empty password) 329 Password to log in to server. (Defaults to an empty password)
315-w, --warning=INTEGER or INTEGER[kMG] 330-w, --warning=INTEGER or INTEGER[kMG]
316 Percent of used space at which a warning will be generated (Default: 85%) 331 Percent of used space at which a warning will be generated (Default: 85%)
317
318-c, --critical=INTEGER or INTEGER[kMG] 332-c, --critical=INTEGER or INTEGER[kMG]
319 Percent of used space at which a critical will be generated (Defaults: 95%) 333 Percent of used space at which a critical will be generated (Defaults: 95%)
334-t, --timeout=INTEGER
335 Seconds before connection times out (Default: 15)
320-P, --port=INTEGER 336-P, --port=INTEGER
321 Port to be used to connect to. Some Windows boxes use 139, others 445 (Defaults to smbclient default) 337 Port to be used to connect to. Some Windows boxes use 139, others 445 (Defaults to smbclient default)
338-C, --configfile=STRING
339 Path to configfile which should be used by smbclient (Defaults to smb.conf of your smb installation)
322 340
323 If thresholds are followed by either a k, M, or G then check to see if that 341 If thresholds are followed by either a k, M, or G then check to see if that
324 much disk space is available (kilobytes, Megabytes, Gigabytes) 342 much disk space is available (kilobytes, Megabytes, Gigabytes)