mirror of
https://github.com/ranl/monitor-utils.git
synced 2024-11-05 07:43:40 +01:00
104 lines
2.3 KiB
Perl
104 lines
2.3 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
# Modules
|
||
|
use strict;
|
||
|
use Getopt::Long;
|
||
|
Getopt::Long::Configure('bundling');
|
||
|
|
||
|
# Functions
|
||
|
sub _syntax_err(@)
|
||
|
{
|
||
|
my $msg = shift;
|
||
|
print <<EOU;
|
||
|
Err: $msg
|
||
|
|
||
|
Syntax:
|
||
|
-f [/path/to/file] -w [time in seconds] -c [time in seconds] -v
|
||
|
|
||
|
-v option will cause the check to return UNKNOWN exit status in case of the file doesn't exists
|
||
|
|
||
|
Information:
|
||
|
This script will check the modification time of a file,
|
||
|
If it is [time in seconds] older an error status will be generated according to the -w and -c arguments
|
||
|
If the file doesn't exists no error will be generated
|
||
|
Its primary purpose is to check that lock files doesn't exists for too much time
|
||
|
|
||
|
EOU
|
||
|
exit(3);
|
||
|
}
|
||
|
|
||
|
# User input
|
||
|
my %opt;
|
||
|
my $result = GetOptions(\%opt,
|
||
|
'file|f=s',
|
||
|
'warn|w=i',
|
||
|
'crit|c=i',
|
||
|
'verify|v',
|
||
|
);
|
||
|
|
||
|
# Validate arguments
|
||
|
_syntax_err("Missing -f") unless defined $opt{'file'};
|
||
|
_syntax_err("Missing -w") unless defined $opt{'warn'};
|
||
|
_syntax_err("Missing -c") unless defined $opt{'crit'};
|
||
|
_syntax_err("-w can't be >= than -c") if ($opt{'warn'} >= $opt{'crit'});
|
||
|
|
||
|
# Variables
|
||
|
my $OK = 0;
|
||
|
my $WARNING = 1;
|
||
|
my $CRITICAL = 2;
|
||
|
my $UNKNOWN = 3;
|
||
|
my $status = $OK;
|
||
|
my $msg;
|
||
|
my $perf;
|
||
|
|
||
|
# Take mtime and systems's epoc if file exists
|
||
|
if( -f $opt{'file'})
|
||
|
{
|
||
|
my $filestat = (stat($opt{'file'}))[9];
|
||
|
my $epoc = time;
|
||
|
my $timediff = $epoc - $filestat;
|
||
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||
|
$year += 1900;
|
||
|
$mon += 1;
|
||
|
my $timestamp = "$mday/$mon/$year $hour:$min:$sec";
|
||
|
|
||
|
# Decide exit status
|
||
|
if ($timediff < $opt{'warn'})
|
||
|
{
|
||
|
$msg = "OK: look's good";
|
||
|
$status = $OK;
|
||
|
}
|
||
|
elsif ($timediff >= $opt{'warn'} && $timediff < $opt{'crit'})
|
||
|
{
|
||
|
$msg = "WARN: $opt{'file'} mtime is $timestamp";
|
||
|
$status = $WARNING;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$msg = "CRIT: $opt{'file'} mtime is $timestamp";
|
||
|
$status = $CRITICAL;
|
||
|
}
|
||
|
|
||
|
$perf = "mtime=$timediff"."s".";$opt{'warn'};$opt{'crit'}";
|
||
|
}
|
||
|
# If file doesn't exists exit OK nothing to check (or UNKNOWN in case of -v)
|
||
|
else
|
||
|
{
|
||
|
if($opt{'verify'})
|
||
|
{
|
||
|
$msg = "UNKNOWN: $opt{'file'} doesn't exists";
|
||
|
$perf = "mtime=0s;$opt{'warn'};$opt{'crit'}";
|
||
|
$status = $UNKNOWN;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$msg = "OK: $opt{'file'} doesn't exists, nothing to check";
|
||
|
$perf = "mtime=0s;$opt{'warn'};$opt{'crit'}";
|
||
|
$status = $OK;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Exit
|
||
|
print "$msg | $perf\n";
|
||
|
exit($status);
|