X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;ds=sidebyside;f=dsa-nagios-checks%2Fchecks%2Fdsa-check-libs;h=2dc0f159e60bc25892914021fd69c4c364370def;hb=5a2b1e11c9c314cecb563f2121ff9991d24a1b4a;hp=b75fcef3887cbe63e3539d753489e6687a9a7611;hpb=db75b8d6f96b7f61a11501690a54bb277021995b;p=mirror%2Fdsa-nagios.git diff --git a/dsa-nagios-checks/checks/dsa-check-libs b/dsa-nagios-checks/checks/dsa-check-libs index b75fcef..2dc0f15 100755 --- a/dsa-nagios-checks/checks/dsa-check-libs +++ b/dsa-nagios-checks/checks/dsa-check-libs @@ -48,12 +48,27 @@ sub dief { exit $UNKNOWN; } +sub convert_time { + my $in = shift; + my ($ticks, $unit) = ($in =~ /^(\d+)([smhdw]?)$/); + + if ($unit eq 's' || $unit eq '') { } + elsif ($unit eq 'm') { $ticks *= 60; } + elsif ($unit eq 'h') { $ticks *= 60*60; } + elsif ($unit eq 'd') { $ticks *= 60*60*24; } + elsif ($unit eq 'w') { $ticks *= 60*60*24*7; } + else { die "Invalid unit '$unit' in '$in'\n" } + return $ticks; +} + + if (!GetOptions ( '--help' => \$params->{'help'}, '--version' => \$params->{'version'}, '--quiet' => \$params->{'quiet'}, '--ignore-pid-namespaces' => \$params->{'ignore_pid_namespaces'}, '--verbose' => \$params->{'verbose'}, + '--ignore-younger=s' => \$params->{'ignore_younger'}, '-v' => \$params->{'verbose'}, '--config=s' => \$params->{'config'}, )) { @@ -106,7 +121,6 @@ if (! exists $config->{'ignorelist'}) { dief("Config->ignorelist is not an array!\n"); } - my %processes; sub getPIDs($$) { @@ -141,6 +155,26 @@ sub inVserver() { close F; return 0; } +sub getYoungProcesses() { + my $ignore_hash = {}; + if (defined $params->{'ignore_younger'}) { + eval "use Proc::ProcessTable; 1" or die "We need Proc::ProcessTable to use --ignore-younger.\n"; + my $min_age = convert_time($params->{'ignore_younger'}); + my $cutoff = time() - $min_age; + + my $process_table = new Proc::ProcessTable(enable_ttys => 0); + for my $p ( @{$process_table->table} ){ + $ignore_hash->{$p->pid} = 1 if $p->start > $cutoff; + } + } + return $ignore_hash; +} + + +my $IGNORE_YOUNG_PROCESSES = getYoungProcesses(); + + + my $INVSERVER = inVserver(); @@ -194,6 +228,13 @@ LINE: for my $line (@lsof) { next LINE if $ignore; } next if ($INVSERVER && ($process eq 'init') && ($pid == 1) && ($user eq 'root')); + if (exists $IGNORE_YOUNG_PROCESSES->{$pid}) { + if ( $params->{'verbose'} ) { + print STDERR "ignoring young $process($pid) because of [$path]:\n"; + print STDERR $line; + } + next LINE + } if ( $params->{'verbose'} ) { print STDERR "adding $process($pid) because of [$path]:\n"; print STDERR $line;