#!/usr/bin/perl
#
# check size of a file
#
# by Doke Scott, doke@udel.edu, 8 Sep 2003

$crit_range = 1800000;  # kB
$warn_range = 1000000;  # kB

use Getopt::Std;

sub usage {
    print qq{Usage: $0 [-w <range>] [-c <range>] -f <file>
    range is hi, low:, :hi, or low:hi
    ie 10000, 800:, :10000, 800:10000
    in kilobytes, good if inside (inclusive), bad if outside
    default crit > $crit_range, warn > $warn_range
};
    exit -1;
    }

getopts( 'w:c:f:' );

$warn_range = $opt_w if ( $opt_w );
$crit_range = $opt_c if ( $opt_c );
$file = $opt_f || &usage();

if ( ! -f $file )  {
    print "UNKNOWN -- No such file\n";
    exit -1;
    }

$size = -s _;
$size /= 1024;

if ( &out_of_range( $crit_range, $size ) ) {
    printf "CRITICAL -- %d kB %s\n", $size, $file;
    exit 2;   # nagios critical exit code
    }
elsif ( &out_of_range( $warn_range, $size ) ) {
    printf "Warning -- %d kB %s\n", $size, $file;
    exit 1;   # nagios warning exit code
    }

printf "OK -- %d kB %s\n", $size, $file;
exit 0;   # nagios ok exit code



sub out_of_range {
    my( $range, $n ) = @_;
    my( $low, $high );

    if ( $range =~ m/^(\d+):(\d+)$/ ) {
	$low = $1; $high = $2;
	if ( $n < $low || $high < $n ) {
	    return 1;
	    }
	}
    elsif ( $range =~ m/^:?(\d+)$/ ) {
	$high = $1;
	if ( $high < $n ) {
	    return 1;
	    }
	}
    elsif ( $range =~ m/^(\d+):$/ ) {
	$low = $1;
	if ( $n < $low ) {
	    return 1;
	    }
	}
    else {
	print "ERROR: can't parse range: '$range'\n";
	exit -1;   # nagios unknown exit code
	}
    }


