summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2005-09-02 16:12:27 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2005-09-02 16:12:27 +0000
commit3a4fc7a1acf01489554ceff0e5a2b08a992cc737 (patch)
treefc4976c9dd208b33ef344cff4c515a37f78b442a
parentfa32e13ba07c81592ceabbb6e0caefa84acd6efc (diff)
Add first version of check libs
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@10 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
-rwxr-xr-xnagios-check-libs95
1 files changed, 95 insertions, 0 deletions
diff --git a/nagios-check-libs b/nagios-check-libs
new file mode 100755
index 0000000..2d1e6e1
--- /dev/null
+++ b/nagios-check-libs
@@ -0,0 +1,95 @@
+#!/usr/bin/perl -Tw
+
+# Copyright (C) 2005 Peter Palfrader <peter@palfrader.org>
+
+use strict;
+use English;
+use Getopt::Long;
+
+$ENV{'PATH'} = '/bin:/sbin:/usr/bin:/usr/sbin';
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
+
+my $LSOF = '/usr/bin/lsof';
+my $VERSION = '0.0.0';
+
+# nagios exit codes
+my $OK = 0;
+my $WARNING = 1;
+my $CRITICAL = 2;
+my $UNKNOWN = 3;
+
+my $params;
+
+Getopt::Long::config('bundling');
+if (!GetOptions (
+ '--help' => \$params->{'help'},
+ '--version' => \$params->{'version'},
+ '--verbose' => \$params->{'verbose'},
+ )) {
+ die ("$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose]\n");
+};
+if ($params->{'help'}) {
+ print "$PROGRAM_NAME: Usage: $PROGRAM_NAME [--help|--version] [--verbose]\n";
+ print "Reports processes that are linked against libraries that no longer exist.\n";
+ exit (0);
+};
+if ($params->{'version'}) {
+ print "nagios-check-libs $VERSION\n";
+ print "nagios check for availability of debian (security) updates\n";
+ print "Copyright (c) 2005 Peter Palfrader <peter\@palfrader.org>\n";
+ exit (0);
+};
+
+$SIG{'__DIE__'} = sub {
+ print STDERR @_;
+ exit $UNKNOWN;
+};
+
+
+my %processes;
+
+sub getPIDs($$) {
+ my ($user, $process) = @_;
+ return join(', ', sort @{ $processes{$user}->{$process} });
+};
+sub getProcs($) {
+ my ($user) = @_;
+
+ return join(', ', map { $_.' ('.getPIDs($user, $_).')' } (sort {$a cmp $b} keys %{ $processes{$user} }));
+};
+sub getUsers() {
+ return join('; ', (map { $_.': '.getProcs($_) } (sort {$a cmp $b} keys %processes)));
+};
+
+
+
+
+print STDERR "Running $LSOF +L\n" if $params->{'verbose'};
+open (LSOF, "$LSOF +L|") or die ("Cannot run $LSOF +L: $!\n");
+my @lsof=<LSOF>;
+close LSOF;
+if ($CHILD_ERROR) { # program failed
+ die("$LSOF +L returned with non-zero exit code: ".($CHILD_ERROR / 256)."\n");
+};
+
+for my $line (@lsof) {
+ if ($line =~ m/path inode=/) {
+ my ($process, $pid, $user, $rest) = split /\s+/, $line;
+ #$processes{$user}->{$process} = [] unless defined $processes{$user}->{$process};
+ push @{ $processes{$user}->{$process} }, $pid;
+ };
+};
+
+
+
+my $message;
+my $exit = $OK;
+if (keys %processes) {
+ $exit = $CRITICAL;
+ $message = 'The following processes have libs linked that were upgraded: '. getUsers();
+} else {
+ $message = 'No upgraded libs linked in running processes';
+};
+
+print $message,"\n";
+exit $exit;