decommission heininen (RT#3870)
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-packages
index 61050f4..107b94b 100755 (executable)
@@ -61,7 +61,13 @@ sub record($) {
 sub get_packages {
        $ENV{'COLUMNS'} = 1000;
        $ENV{'LC_ALL'} = 'C';
-       open(F, "dpkg -l|") or die ("Cannot run dpkg: $!\n");
+       open(F, "dpkg --print-architecture|") or die ("Cannot run dpkg --print-architecture: $!\n");
+       my $arch = <F>;
+       chomp($arch);
+       close(F);
+
+
+       open(F, "dpkg -l|") or die ("Cannot run dpkg -l: $!\n");
        my @lines = <F>;
        close(F);
        chomp(@lines);
@@ -72,6 +78,7 @@ sub get_packages {
        my %pkgs;
        for my $line (@lines) {
                my ($state, $pkg, $version, undef) = split(/  */, $line);
+               $pkg =~ s/\Q:$arch\E$//;
                $pkgs{$state}{$pkg} = { 'installed' => $version }
        }
 
@@ -224,46 +231,55 @@ my @reportform = (
        { 'key' => 'obsolete',
          'listpackages' => 1,
          'long' => "%d local or obsolete packages: %s",
-         'short' => "%d obs",
+         'short' => "%d obs/loc",
+         'perf' => "obs_loc=%d;1;5;0",
          'status' => 'WARNING' },
        { 'key' => 'outofdate',
          'listpackages' => 1,
          'long' => "%d out of date packages: %s",
          'short' => "%d updates",
+         'perf' => "outdated=%d;1;5;0",
          'status' => 'WARNING' },
        { 'key' => 'current',
          'listpackages' => 0,
          'long' => "%d packages current.",
          'short' => "%d ok",
+         'perf' => "current=%d;;;0",
          'status' => 'OK' },
        { 'key' => 'obsolete-ignored',
          'listpackages' => 1,
          'long' => "%d whitelisted local or obsolete packages: %s",
-         'short' => "%d obs(ignored)",
+         'short' => "%d obs/loc(ignored)",
+         'perf' => "obs_ign=%d;;;0",
          'status' => 'OK' },
        { 'key' => 'rc',
          'listpackages' => 1,
          'long' => "%d packages removed but not purged: %s",
          'short' => "%d rc",
+         'perf' => "rm_unprg=%d;;;0",
          'status' => 'OK' },
        { 'key' => 'hi',
          'listpackages' => 1,
          'long' => "%d packages on hold: %s",
          'short' => "%d hi",
+         'perf' => "hold=%d;;;0",
          'status' => 'OK' },
        { 'key' => 'pc',
          'listpackages' => 1,
          'long' => "%d packages requested to be purged but conffiles still installed: %s",
          'short' => "%d pc",
+         'perf' => "prg_conf=%d;1;;0",
          'status' => 'WARNING' },
        );
 
 my @longout;
+my @perfout;
 my @shortout;
 for my $form (@reportform) {
        my $pkgs = $packages->{$form->{'key'}};
        delete $packages->{$form->{'key'}};
        my $num = scalar keys %$pkgs;
+       push @perfout, sprintf($form->{'perf'}, $num);
        next unless ($num > 0);
        if ($form->{'listpackages'}) {
                my $list = join(", ", keys %$pkgs);
@@ -286,8 +302,10 @@ if (scalar keys %$packages) {
 
 my $shortout = $EXITCODE.": ".join(", ", @shortout);
 my $longout = join("\n", @longout);
+my $perfout = "|".join(" ", @perfout);
 
-print $shortout,"\n";
+print $shortout;
 print $longout,"\n";
+print $perfout,"\n";
 
 exit $CODE{$EXITCODE};