From eacadbfdc7c120280a8a0192aa2e44ef3e649305 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Sun, 4 Feb 2018 12:23:29 +0100 Subject: [PATCH] dsa-check-libs: support ignoring young proccesses --- dsa-nagios-checks/checks/dsa-check-libs | 43 ++++++++++++++++++++++++- dsa-nagios-checks/debian/changelog | 5 +-- dsa-nagios-checks/debian/control | 2 +- 3 files changed, 46 insertions(+), 4 deletions(-) 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; diff --git a/dsa-nagios-checks/debian/changelog b/dsa-nagios-checks/debian/changelog index 10ea8be..b8fb712 100644 --- a/dsa-nagios-checks/debian/changelog +++ b/dsa-nagios-checks/debian/changelog @@ -1,9 +1,10 @@ -dsa-nagios-checks (112) UNRELEASED; urgency=medium +dsa-nagios-checks (113) UNRELEASED; urgency=medium * maintainer scripts: use dpkg-maintscript-helper to clean out /etc/cron.d/dsa-nagios-checks. + * libproc-processtable-perl: allow ignoring young processes. - -- Peter Palfrader Thu, 01 Feb 2018 18:31:35 +0100 + -- Peter Palfrader Sun, 04 Feb 2018 12:23:46 +0100 dsa-nagios-checks (111) unstable; urgency=medium diff --git a/dsa-nagios-checks/debian/control b/dsa-nagios-checks/debian/control index b9867a7..5a0e1a0 100644 --- a/dsa-nagios-checks/debian/control +++ b/dsa-nagios-checks/debian/control @@ -8,7 +8,7 @@ Standards-Version: 3.9.4 Package: dsa-nagios-checks Architecture: all -Depends: nagios-nrpe-server, nagios-plugins-basic, ${misc:Depends}, binutils, libberkeleydb-perl, dsa-ssh-weak-keys, ruby, python, libyaml-syck-perl +Depends: nagios-nrpe-server, nagios-plugins-basic, ${misc:Depends}, binutils, libberkeleydb-perl, dsa-ssh-weak-keys, ruby, python, libyaml-syck-perl, libproc-processtable-perl Recommends: libnet-dns-sec-perl Suggests: hpacucli Conflicts: dsa-nagios-nrpe-config -- 2.20.1