diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-09-29 22:03:24 (GMT) |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2013-09-29 22:03:24 (GMT) |
commit | 0b6423f9c99d9edf8c96fefd0f6c453859395aa1 (patch) | |
tree | 1c2b6b21704a294940f87c7892676998d8371707 /web/attachments/137235-check_ipmi | |
download | site-0b6423f9c99d9edf8c96fefd0f6c453859395aa1.tar.gz |
Import Nagios Plugins site
Import the Nagios Plugins web site, Cronjobs, infrastructure scripts,
and configuration files.
Diffstat (limited to 'web/attachments/137235-check_ipmi')
-rw-r--r-- | web/attachments/137235-check_ipmi | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/web/attachments/137235-check_ipmi b/web/attachments/137235-check_ipmi new file mode 100644 index 0000000..1d2a5bd --- /dev/null +++ b/web/attachments/137235-check_ipmi | |||
@@ -0,0 +1,75 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Nagios plugin for IPMI sensors status checking. | ||
4 | # | ||
5 | # Especially useful on Dell Poweredge servers, and others that | ||
6 | # implement the Intelligent Platform Management Interface (IPMI) | ||
7 | # interface. | ||
8 | # | ||
9 | # (C) Chris Wilson <check_ipmi@qwirx.com>, 2005-06-04 | ||
10 | # Released under the GNU General Public License (GPL) | ||
11 | |||
12 | use warnings; | ||
13 | use strict; | ||
14 | |||
15 | open IPMI, "ipmitool sdr |" or die "ipmitool: $!"; | ||
16 | |||
17 | my %found; | ||
18 | my %bad; | ||
19 | |||
20 | sub trim ($) { | ||
21 | my ($v) = @_; | ||
22 | $v =~ s/^ +//; | ||
23 | $v =~ s/ +$//; | ||
24 | return $v; | ||
25 | } | ||
26 | |||
27 | while (my $line = <IPMI>) | ||
28 | { | ||
29 | chomp $line; | ||
30 | unless ($line =~ m'^(.*) \| (.*) \| (\w+)$') | ||
31 | { | ||
32 | die "Bad format in ipmitool output: $line"; | ||
33 | } | ||
34 | |||
35 | my $name = trim $1; | ||
36 | my $value = trim $2; | ||
37 | my $state = trim $3; | ||
38 | $name =~ tr| |_|; | ||
39 | |||
40 | my $counter = 1; | ||
41 | my $uname = "$name"; | ||
42 | while ($found{$uname}) { | ||
43 | $uname = $name . $counter++; | ||
44 | } | ||
45 | |||
46 | next if $state eq "ns"; | ||
47 | |||
48 | if ($state ne "ok") { | ||
49 | $bad{$uname} = $state; | ||
50 | } | ||
51 | |||
52 | $found{$uname} = $value; | ||
53 | } | ||
54 | |||
55 | if (keys %bad) { | ||
56 | print "IPMI critical: "; | ||
57 | my @bad; | ||
58 | foreach my $name (sort keys %bad) { | ||
59 | push @bad, "$name is $bad{$name}"; | ||
60 | } | ||
61 | print join(", ", @bad) . " "; | ||
62 | } else { | ||
63 | print "IPMI ok "; | ||
64 | } | ||
65 | |||
66 | my @out; | ||
67 | |||
68 | foreach my $name (sort keys %found) { | ||
69 | next unless $name =~ m|Fan| or $name =~ m|Temp|; | ||
70 | push @out, "$name = $found{$name}"; | ||
71 | } | ||
72 | |||
73 | print "(" . join(", ", @out) . ")\n"; | ||
74 | |||
75 | if (%bad) { exit 2 } else { exit 0 } | ||