dsa-check-libs: support ignoring young proccesses
authorPeter Palfrader <peter@palfrader.org>
Sun, 4 Feb 2018 11:23:29 +0000 (12:23 +0100)
committerPeter Palfrader <peter@palfrader.org>
Sun, 4 Feb 2018 11:24:13 +0000 (12:24 +0100)
dsa-nagios-checks/checks/dsa-check-libs
dsa-nagios-checks/debian/changelog
dsa-nagios-checks/debian/control

index b75fcef..2dc0f15 100755 (executable)
@@ -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;
index 10ea8be..b8fb712 100644 (file)
@@ -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 <weasel@debian.org>  Thu, 01 Feb 2018 18:31:35 +0100
+ -- Peter Palfrader <weasel@debian.org>  Sun, 04 Feb 2018 12:23:46 +0100
 
 dsa-nagios-checks (111) unstable; urgency=medium
 
index b9867a7..5a0e1a0 100644 (file)
@@ -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