dsa-check-zone-rrsig-expiration-many: sort zone details by state
authorPeter Palfrader <peter@palfrader.org>
Wed, 27 Jul 2016 08:33:52 +0000 (10:33 +0200)
committerPeter Palfrader <peter@palfrader.org>
Wed, 27 Jul 2016 08:33:52 +0000 (10:33 +0200)
dsa-nagios-checks/checks/dsa-check-zone-rrsig-expiration-many
dsa-nagios-checks/debian/changelog

index 445dded..ec99484 100755 (executable)
@@ -102,13 +102,9 @@ die ($USAGE) unless (scalar @ARGV == 1);
 my $INDIR = shift;
 
 
-my $count =
-       { 'ok' => [],
-         'warn' => [],
-         'critical' => [],
-         'unknown' => [],
-         'unsigned' => [],
-       };
+my $states = [qw{critical warn unknown ok unsigned}];
+my $count =   { map { $_ => [] } @$states };
+my $details = { map { $_ => [] } @$states };
 
 
 my %dnsseczones;
@@ -135,7 +131,8 @@ for my $file (sort {$a cmp $b} (readdir INDIR)) {
                $dnsseczones{$file} = {};
                $dnsseczones{$file}->{'initial_refs'} = $initial_refs if defined $initial_refs;
        } else {
-               push @{$count->{'unsigned'}}, $file;
+               push @{$count  ->{'unsigned'}}, $file;
+               push @{$details->{'unsigned'}}, "$file: marked unsigned or undelegated.\n";
        };
 }
 closedir(INDIR);
@@ -154,8 +151,6 @@ if (defined $params->{'geozonedir'}) {
        closedir(INDIR);
 }
 
-my @details;
-
 my %threads;
 for my $zone (sort {$a cmp $b} keys %dnsseczones) {
        die "Duplicate zone $zone?\n"  if defined $threads{$zone};
@@ -171,12 +166,13 @@ while (time - $begin <= $params->{timeout}) {
 
                my ($res, $det) = $threads{$zone}->join();
 
-               push @details, @$det;
+               my $type = ($res == 0) ? 'ok' :
+                          ($res == 1) ? 'warn' :
+                          ($res == 2) ? 'critical' :
+                                        'unknown';
 
-               if ($res == 0) { push @{$count->{'ok'}}, $zone; }
-               elsif ($res == 1) { push @{$count->{'warn'}}, $zone; }
-               elsif ($res == 2) { push @{$count->{'critical'}}, $zone; }
-               else { push @{$count->{'unknown'}}, $zone; };
+               push @{$details->{$type}}, @$det;
+               push @{$count  ->{$type}}, $zone;
                delete $threads{$zone};
        }
        last if scalar keys %threads == 0;
@@ -184,36 +180,37 @@ while (time - $begin <= $params->{timeout}) {
        sleep 1;
 }
 for my $zone (sort {$a cmp $b} keys %threads) {
-       push @{$count->{'warn'}}, $zone;
-       push @details, "$zone: timeout during check\n";
+       push @{$count  ->{'warn'}}, $zone;
+       push @{$details->{'warn'}}, "$zone: timeout during check\n";
        $threads{$zone}->kill('KILL')->detach();
 }
 
-for my $k (keys %$count) {
-       @{$count->{$k}} = sort {$a cmp $b} @{$count->{$k}};
-}
-
-my $exit;
+my $exit = 0;
 my %state_mapping = (
        'unknown' => 255,
        'critical' => 2,
        'warn' => 1,
        'ok' => 0 );
 
-for my $state (sort {$state_mapping{$b} <=> $state_mapping{$a}} keys %state_mapping) {
+for my $state (@$states) {
+       @{$count->{$state}}   = sort {$a cmp $b} @{$count->{$state}};
+       @{$details->{$state}} = sort {$a cmp $b} @{$details->{$state}};
+
        if (scalar @{$count->{$state}}) {
                printf "%s: %d", uc($state), scalar @{$count->{$state}};
                if ($state_mapping{$state} > 0) {
                        print ": ", join(', ', @{$count->{$state}});
                };
                print "; ";
-               $exit = $state_mapping{$state} unless defined $exit;
+               $exit = $state_mapping{$state} if ($state_mapping{$state} > $exit);
        };
 };
 printf "unsigned: %d", scalar @{$count->{'unsigned'}};
 print "\n";
-for (@details) {
-       s/\|/;/g;
-       print $_;
+for my $state (@$states) {
+       for (@{$details->{$state}}) {
+               s/\|/;/g;
+               print $_;
+       }
 }
-exit ((defined $exit) ? $exit : 0);
+exit $exit;
index 8ec8612..d3b1647 100644 (file)
@@ -34,6 +34,7 @@ dsa-nagios-checks (108+XXXX) UNRELEASED; urgency=medium
     in zonefiles.  This will skip it being checked.
   * dsa-check-zone-rrsig-expiration-many: remove | (which starts performance
     data) in detail output.
+  * dsa-check-zone-rrsig-expiration-many: sort zone details by state.
 
   [ Tollef Fog Heen ]
   * dsa-update-unowned-file-status: ignore fdescfs, used for /dev/fd on
@@ -46,7 +47,7 @@ dsa-nagios-checks (108+XXXX) UNRELEASED; urgency=medium
   * Add dsa-check-hpssacli, replaces hpacucli for new hosts.
   * dsa-check-hpssacli: accept 12.0Gbps as transfer speed for SAS
 
- -- Peter Palfrader <weasel@debian.org>  Wed, 27 Jul 2016 10:17:59 +0200
+ -- Peter Palfrader <weasel@debian.org>  Wed, 27 Jul 2016 10:31:06 +0200
 
 dsa-nagios-checks (108) unstable; urgency=medium