11 my @cmd = ('sudo', 'megactl', '-Hv', '2>&1');
14 for my $line (@output) {
15 if ($line =~ /^(\w+)\s+/) {
17 my @line = split /\s+/, $line;
18 $devs->{$dev}->{'header'} = \@line;
23 sub check_controller {
25 my ($err, $warn, $ok) = undef;
26 $ok .= "$dev->{'header'}->[0]: ";
27 for my $stat (@{$dev->{'header'}}) {
28 if ($stat =~ /batt:(.*)/) {
30 $warn .= "$dev->{'header'}->[0]: " unless $warn;
31 $warn .= "Battery: $1 ";
35 $ok = "$dev->{'header'}->[0]: ok ";
36 return ($ok, $err, $warn);
41 my ($err, $warn, $ok) = undef;
42 if ($dev->{'header'}->[5] ne 'online') {
43 $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]";
44 return ($ok, $err, $warn);
46 $ok = "$dev->{'header'}->[0]: ok ";
47 return ($ok, $err, $warn);
52 my ($err, $warn, $ok) = undef;
53 if ($dev->{'header'}->[5] ne 'online') {
54 $err .= "$dev->{'header'}->[0]: $dev->{'header'}->[5]";
55 return ($ok, $err, $warn);
57 for my $stat (@{$dev->{'header'}}) {
58 if ($stat =~ /(^errs|media|other):/) {
59 $warn .= "$dev->{'header'}->[0]: " unless $warn;
63 $ok = "$dev->{'header'}->[0]: ok ";
64 return ($ok, $err, $warn);
67 for my $dev (sort keys %$devs) {
68 if ($dev =~ /^\w\d$/) {
69 my ($ok, $err, $warn) = check_controller($devs->{$dev});
70 push @errs, $err if $err;
71 push @warn, $warn if $warn;
73 } elsif ($dev =~ /^\w\d\w\d$/) {
74 my ($ok, $err, $warn) = check_ld($devs->{$dev});
75 push @errs, $err if $err;
76 push @warn, $warn if $warn;
78 } elsif ($dev =~ /^\w+\d+\w+\d+\w+\d+/) {
79 my ($ok, $err, $warn) = check_pd($devs->{$dev});
80 push @errs, $err if $err;
81 push @warn, $warn if $warn;
98 push @ok, "All devices OK";