#! /usr/bin/perl -wT

# (c)2001 Patrick Greenwell, Stealthgeeks, LLC. (patrick@stealthgeeks.net)
# Licensed under the GNU GPL
# http://www.gnu.org/licenses/gpl.html

# check_backup: Checks a directory to see if at least one file was
# created within a specified period of time that is of equal to or greater
# than a given size.

# Version 1.0
# Last Updated: 9/12/01

require 5.004;
use strict;
use lib utils.pm ;
use Plugin;
use Plugin::Parameter qw ($helpparameterlist $versionparameterlist $timeoutparameter
			  $directoryparameter $verboseparameter);
use vars qw($opt_d $opt_s $opt_t $opt_h $xml $opt_v $opt_a $PROGNAME);
use lib $main::runtimedir;
use utils qw(%ERRORS &usage);

$timeoutparameter->default(120);
my $minsizeparameter = new Plugin::Parameter(-name => "minsize", -flags => [ 's', 'minsize' ],
					     -optional => "yes", -valueoptional => 0, -type => "INTEGER",
					     -default => 40000000,
					     -checker => \&Plugin::Parameter::_check_integer,
					     -description => "Minimum file size" );
my $fileageparameter = new Plugin::Parameter(-name => "fileage", -flags => [ 'a', 'fileage' ],
					     -optional => "yes", -valueoptional => 0, -type => "SECONDS",
					     -default => 3600,
					     -checker => \&Plugin::Parameter::_check_time,
					     -description => "Maximum age of files to be checked");
my @commandparameterlist = ( $directoryparameter,
			     $minsizeparameter,
			     $fileageparameter,
			     $timeoutparameter,
			     $verboseparameter );

my $plugin = new Plugin(-revision => '$Revision: 1.0 $',
			-copyright => "2001 Patrick Greenwell, Stealthgeeks, LLC. <patrick\@stealthgeeks.net>, 2004 Howard Wilkinson <howard\@cohtech.com>",
			-shortcomment => "Checks a directory to see if at least one file was created within a specified period of time that is of equal to or greater than a given size.",
			-parameterlists => [ \@commandparameterlist, $helpparameterlist, $versionparameterlist ] );


sub display_res($$);
my ($filesize, $answer) = ();
my $state = $ERRORS{'UNKNOWN'};

# Time period(in seconds)
my $within = "3600";

delete @ENV{'PATH', 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};

$plugin->init();

$plugin->start_timeout($opt_t, "No response from file system request");

# Do stuff

my $time = time();

opendir(THISDIR, "$opt_d") or die "Can't open directory! $!";
my @allfiles = grep !/^\./, readdir THISDIR;
closedir THISDIR;

$plugin->stop_timeout();

while (@allfiles){
  my $file = $opt_d . '/' . pop @allfiles;
  my ($size, $mtime) = (stat($file))[7,9];
  if ((($time - $mtime) <= $opt_a) and ($size >= $opt_s)) {
    display_res("File $file is <= $opt_a seconds old and >= $opt_s bytes.\n", "OK");
  }
}

# If we got here nothing matched.... 
display_res("No files in $opt_d are <= $opt_a seconds old and >= $opt_s bytes.", "CRITICAL");

exit;

sub display_res ($$) {
  my ($answer, $state) = @_;
  printf "%s %s: %s", $PROGNAME, $state, $answer;
  exit $ERRORS{$state};
}
