summaryrefslogtreecommitdiffstats
path: root/contrib/check_dl_size.pl
diff options
context:
space:
mode:
authorSubhendu Ghosh <sghosh@users.sourceforge.net>2002-04-07 05:13:57 (GMT)
committerSubhendu Ghosh <sghosh@users.sourceforge.net>2002-04-07 05:13:57 (GMT)
commitd71f56c42e6fe08a81eef2667a868bddbf2b751e (patch)
treefd6320cf819389ab9b6296f2e603f5c8540df99c /contrib/check_dl_size.pl
parent733523442b7cc577b750d66d211eb00f1decc799 (diff)
downloadmonitoring-plugins-d71f56c42e6fe08a81eef2667a868bddbf2b751e.tar.gz
plugins from Patrick Greenwell
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@14 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'contrib/check_dl_size.pl')
-rw-r--r--contrib/check_dl_size.pl148
1 files changed, 148 insertions, 0 deletions
diff --git a/contrib/check_dl_size.pl b/contrib/check_dl_size.pl
new file mode 100644
index 0000000..e6cbda8
--- /dev/null
+++ b/contrib/check_dl_size.pl
@@ -0,0 +1,148 @@
1#! /usr/bin/perl -wT
2
3# (c)2001 Patrick Greenwell, Stealthgeeks, LLC. (patrick@stealthgeeks.net)
4# Licensed under the GNU GPL
5# http://www.gnu.org/licenses/gpl.html
6#
7# check_dl_size: Attempts to download a specified file via FTP and verify
8# it is a specified size.
9# Requires Net::FTP
10
11# Version 1.0
12# Last Updated: 8/31/01
13
14
15BEGIN {
16 if ($0 =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
17 $runtimedir = $1;
18 $PROGNAME = $2;
19 }
20}
21
22require 5.004;
23use strict;
24use Getopt::Long;
25use vars qw($opt_H $opt_f $opt_s $opt_t $verbose $PROGNAME);
26use lib $main::runtimedir;
27use utils qw($TIMEOUT %ERRORS &print_revision &usage &support &is_error);
28use Net::FTP;
29
30sub help ();
31sub print_help ();
32sub print_usage ();
33sub version ();
34sub display_res($$);
35my ($ftpfile, $ftpdir, $filesize, $answer) = ();
36my $state = $ERRORS{'UNKNOWN'};
37
38# Directory to place file. If your machine is not secure DO NOT USE /tmp.
39my $dir = "/usr/local/netsaint/etc/tmp";
40
41# Username for login
42my $user = "anonymous";
43
44# Password (PLEASE TAKE APPROPRIATE PRECAUTIONS TO SECURE THIS)
45my $pass = "guest\@example.com";
46
47
48delete @ENV{'PATH', 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
49
50Getopt::Long::Configure('bundling', 'no_ignore_case');
51GetOptions
52 ("V|version" => \&version,
53 "h|help" => \&help,
54 "v|verbose" => \$verbose,
55 "H|hostname=s" => \$opt_H,
56 "f|filename=s" => \$opt_f,
57 "s|filesize=s" => \$opt_s,
58 "t|timeout=s" => \$opt_t,
59 );
60
61($opt_H) || ($opt_H = shift) || usage("Host address or name not specified\n");
62my $host = $1
63 if ($opt_H =~ m/^(([0-9]{1,3}\.){3}[0-9]{1,3}|(([a-z0-9]+(\-+[a-z0-9]+)*|\.))+[a-z])$/i);
64 usage("Please provide a valid IP address or host name\n") unless ($host);
65
66($opt_f) || ($opt_f = shift) || usage("File name not specified\n");
67
68if ($opt_f =~ m/^(.*?)[\/\\]([^\/\\]+)$/) {
69 $ftpdir = $1;
70 $ftpfile = $2;
71}
72
73($opt_s) || ($opt_s = shift) || usage("File size not specified\n");
74usage("File size must be numeric value") unless ($opt_s =~ m/^[0-9]+$/);
75
76(($opt_t) && ($TIMEOUT = $opt_t)) || ($TIMEOUT = 120);
77usage("TIMEOUT must be numeric value") unless ($TIMEOUT =~ m/^[0-9]+$/);
78
79# Don't hang if there are timeout issues
80$SIG{'ALRM'} = sub {
81 print ("ERROR: No response from ftp server (alarm)\n");
82 exit $ERRORS{'UNKNOWN'};
83};
84alarm($TIMEOUT);
85
86# Make certain temporary directory exists
87
88if ( ! -e "$dir" ) {
89 display_res("Temporary directory $dir does not exist.\n", "CRITICAL");
90
91}
92
93# Remove existing file if any
94
95if ( -e "$dir/$ftpfile") {
96 unlink "$dir/$ftpfile" or
97 display_res("Can't remove existing file $dir/$ftpfile.\n", "CRITICAL");
98}
99
100# Snarf file
101
102my $ftp = Net::FTP->new("$host", Passive => 1, Timeout => $TIMEOUT) or
103 display_res("Can't connect to $host.\n", "CRITICAL");
104 $ftp->login("$user","$pass") or
105 display_res("Login to $host failed", "CRITICAL");
106 $ftp->cwd("$ftpdir") or
107 display_res("Can't change to directory $ftpdir.\n", "CRITICAL");
108 $ftp->get($ftpfile, "$dir/$ftpfile") or
109 display_res("Can't retrieve file $ftpfile.\n", "CRITICAL");
110 $ftp->quit;
111
112# If file exists and is correct size we are happy.
113
114if (( -e "$dir/$ftpfile" ) && (($filesize = -s "/tmp/$ftpfile") eq $opt_s)) {
115 display_res("File $ftpfile size OK: $filesize bytes.\n", "OK");
116 } else {
117# Otherwise we are not happy.
118 display_res("File $ftpfile size incorrect: $filesize bytes", "CRITICAL");
119}
120
121exit;
122
123sub print_usage () {
124 print "Usage: $PROGNAME -H <host> -f <filename> -s <file size in bytes> -t <timeout> \n";
125}
126
127sub print_help () {
128 print_revision($PROGNAME,'$ Revision: 1.0 $ ');
129 print "Copyright (c) 2001 Patrick Greenwell, Stealthgeeks, LLC.\n\n";
130 print_usage();
131 support();
132}
133
134sub version () {
135 print_revision($PROGNAME,'$ Revision: 1.0 $ ');
136 exit $ERRORS{'OK'};
137}
138
139sub help () {
140 print_help();
141 exit $ERRORS{'OK'};
142}
143
144sub display_res ($$) {
145 my ($answer, $state) = @_;
146 print $answer;
147 exit $ERRORS{$state};
148}