retire da-backup checks
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-raid-megactl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 my $devs = {};
7 my @errs;
8 my @warn;
9 my @ok;
10
11 my @cmd = ('sudo', 'megactl', '-Hv', '2>&1');
12 my @output = `@cmd`;
13 if ($? != 0) {
14         print "WARNING: Exec failed!\n";
15         exit 2;
16 }
17
18 for my $line (@output) {
19         if ($line =~ /^(\w+)\s+/) {
20                 my $dev = $1;
21                 my @line = split /\s+/, $line;
22                 $devs->{$dev}->{'header'} = \@line;
23                 next;
24         }
25 }
26
27 sub check_controller {
28         my $dev = shift;
29         my ($err, $warn, $ok) = undef;
30         $ok .= "$dev->{'header'}->[0]: ";
31         for my $stat (@{$dev->{'header'}}) {
32                 if ($stat =~ /batt:(.*)/) {
33                         if ($1 ne 'good') {
34                                 $warn .= "$dev->{'header'}->[0]: " unless $warn;
35                                 $warn .= "Battery: $1 ";
36                         }
37                 }
38         }
39         $ok = "$dev->{'header'}->[0]: ok ";
40         return ($ok, $err, $warn);
41 }
42
43 sub check_ld {
44         my $dev = shift;
45         my ($err, $warn, $ok) = undef;
46         if ($dev->{'header'}->[5] ne 'online') {
47                 $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]";
48                 return ($ok, $err, $warn);
49         }
50         $ok = "$dev->{'header'}->[0]: ok ";
51         return ($ok, $err, $warn);
52 }
53
54 sub check_pd {
55         my $dev = shift;
56         my ($err, $warn, $ok) = undef;
57         if ($dev->{'header'}->[5] ne 'online') {
58                 $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]";
59                 return ($ok, $err, $warn);
60         }
61         for my $stat (@{$dev->{'header'}}) {
62                 if ($stat =~ /(^errs|media|other):/) {
63                         $warn .= "$dev->{'header'}->[0]: " unless $warn;
64                         $warn .= $stat . " ";
65                 }
66         }
67         $ok = "$dev->{'header'}->[0]: ok ";
68         return ($ok, $err, $warn);
69 }
70
71 for my $dev (sort keys %$devs) {
72         if ($dev =~ /^\w\d$/) {
73                 my ($ok, $err, $warn) = check_controller($devs->{$dev});
74                 push @errs, $err if $err;
75                 push @warn, $warn if $warn;
76                 push @ok, $ok if $ok;
77         } elsif ($dev =~ /^\w\d\w\d$/) {
78                 my ($ok, $err, $warn) = check_ld($devs->{$dev});
79                 push @errs, $err if $err;
80                 push @warn, $warn if $warn;
81                 push @ok, $ok if $ok;
82         } elsif ($dev =~ /^\w+\d+\w+\d+\w+\d+/) {
83                 my ($ok, $err, $warn) = check_pd($devs->{$dev});
84                 push @errs, $err if $err;
85                 push @warn, $warn if $warn;
86                 push @ok, $ok if $ok;
87         }
88 }
89
90 if (@errs) {
91         print "CRITICAL: ";
92         print @errs;
93         print "\n";
94         exit 2;
95 } elsif (@warn) {
96         print "WARNING: ";
97         print @warn;
98         print "\n";
99         exit 1;
100 }
101 unless (@ok) {
102         push @ok, "All devices OK";
103 }
104 print "OK: ";
105 print @ok;
106 print "\n";
107 exit 0;
108