ASNMTAP
view release on metacpan or search on metacpan
plugins/nagios/check_fs-stat.pl view on Meta::CPAN
<F|D|B>=F(ile), D(irectory) or B(oth)
--dirs=INTEGER
number of expected dirs, if not equal CRITICAL status will result
--files=INTEGER
number of expected files, if not equal CRITICAL status will result
--wildcard <wildcard>
<wildcard> for a file
--wAge=INTEGER
age seconds for a files above which a WARNING status will result
--cAge=INTEGER
age seconds for a files above which a CRITICAL status will result',
_programGetOptions => ['message:s', 'directory=s', 'type:s', 'dirs:i', 'files:i', 'wildcard:s', 'cAge=i', 'wAge=i', 'environment|e:s', 'timeout|t:i', 'trendline|T:i'],
_timeout => 10,
_debug => 0);
my $environment = $objectPlugins->getOptionsArgv ('environment');
my $directory = $objectPlugins->getOptionsArgv ('directory');
$objectPlugins->printUsage ('Missing command line argument directory') unless ( defined $directory );
my $type = $objectPlugins->getOptionsArgv ('type');
if ( defined $type ) {
$objectPlugins->printUsage ('Missing command line argument message') unless ( $type =~ /^[FDB]$/ );
} else {
$type = 'B';
}
my $dirs = $objectPlugins->getOptionsArgv ('dirs');
my $files = $objectPlugins->getOptionsArgv ('files');
my $wildcard = $objectPlugins->getOptionsArgv ('wildcard');
$wildcard = '*' unless ( defined $wildcard );
my $tMessage = $objectPlugins->getOptionsArgv ('message');
if ( defined $tMessage ) {
my $message = $objectPlugins->pluginValue ('message');
$message =~ s/Filesystem Stat/$tMessage/g;
$objectPlugins->pluginValue ( message => $message );
}
my $wAge = $objectPlugins->getOptionsArgv ('wAge');
$objectPlugins->printUsage ('Missing command line argument wAge') unless ( defined $wAge );
my $cAge = $objectPlugins->getOptionsArgv ('cAge');
$objectPlugins->printUsage ('Missing command line argument cAge') unless ( defined $cAge );
$objectPlugins->printUsage ("cAge '$cAge' must be greather then wAge '$wAge'" ) unless ( $cAge > $wAge );
my $debug = $objectPlugins->getOptionsValue ('debug');
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Start plugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
my $now = time();
use Fcntl ':mode';
my @files = glob ("$directory/$wildcard");
my ($nDirectories, $wDirectories, $cDirectories, $nFiles, $wFiles, $cFiles) = (0, 0, 0, 0, 0, 0);
foreach (@files){
my ($mode, $mtime) = ( stat($_) )[2, 10];
my $dTime = ( defined $mtime ) ? $now - $mtime : 0;
if ( $type =~ /^[FB]$/ and S_ISREG($mode) ) {
$nFiles++;
$wFiles++ if ( $dTime > $wAge );
$cFiles++ if ( $dTime > $cAge );
print "file : $_, $now, $mtime, $dTime, $mode, $nFiles, $wFiles, $cFiles\n" if ( $debug );
} elsif ( $type =~ /^[DB]$/ and S_ISDIR($mode) ) {
$nDirectories++;
$wDirectories++ if ( $dTime > $wAge );
$cDirectories++ if ( $dTime > $cAge );
print "directory: $_, $now, $mtime, $dTime, $mode, $nDirectories, $wDirectories, $cDirectories\n" if ( $debug );
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if ( $type =~ /^[BD]$/ ) {
if ( $cDirectories || $cFiles ) {
$objectPlugins->pluginValues ( { stateValue => $ERRORS{CRITICAL}, error => "Directory Aging: $cDirectories/$nDirectories" }, $TYPE{APPEND} );
} elsif ( $wDirectories || $wFiles ) {
$objectPlugins->pluginValues ( { stateValue => $ERRORS{WARNING}, error => "Directory Aging: $wDirectories/$nDirectories" }, $TYPE{APPEND} );
} else {
$objectPlugins->pluginValue ( stateValue => $ERRORS{OK} );
}
$objectPlugins->pluginValues ( { stateValue => $ERRORS{CRITICAL}, error => "Expected Directories: $nDirectories/$dirs" }, $TYPE{APPEND} ) if ( defined $dirs and $nDirectories != $dirs );
}
if ( $type =~ /^[BF]$/ ) {
if ( $cDirectories || $cFiles ) {
$objectPlugins->pluginValues ( { stateValue => $ERRORS{CRITICAL}, error => "File Aging: $cFiles/$nFiles" }, $TYPE{APPEND} );
} elsif ( $wDirectories || $wFiles ) {
$objectPlugins->pluginValues ( { stateValue => $ERRORS{WARNING}, error => "File Aging: $wFiles/$nFiles" }, $TYPE{APPEND} );
} else {
$objectPlugins->pluginValue ( stateValue => $ERRORS{OK} );
}
$objectPlugins->pluginValues ( { stateValue => $ERRORS{CRITICAL}, error => "Expected Files: $nFiles/$files" }, $TYPE{APPEND} ) if ( defined $files and $nFiles != $files );
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# End plugin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$objectPlugins->exit (7);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( run in 1.396 second using v1.01-cache-2.11-cpan-39bf76dae61 )