~ubuntu-branches/ubuntu/wily/nagios-plugins-contrib/wily-proposed

« back to all changes in this revision

Viewing changes to check_hpasm/check_hpasm-4.5.2/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi.pm

  • Committer: Package Import Robot
  • Author(s): Bernd Zeimetz
  • Date: 2013-05-21 22:11:50 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20130521221150-k5bda5v5euvt7wg9
Tags: 6.20130521
* [e68c82e1] check_raid: do not run hpacucli if cciss_vol_status is available.
* [4a1c57e8] Also support tw-cli as additional name for the 3ware binary.
  Thanks to Dennis Hoppe
* [eb5e1c7c] Add /run/ to the check_libs ignore file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package HP::Proliant::Component::DiskSubsystem::Scsi;
2
 
our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
3
 
 
4
 
use strict;
5
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
6
 
 
7
 
sub new {
8
 
  my $class = shift;
9
 
  my %params = @_;
10
 
  my $self = {
11
 
    runtime => $params{runtime},
12
 
    rawdata => $params{rawdata},
13
 
    method => $params{method},
14
 
    controllers => [],
15
 
    physical_drives => [],
16
 
    logical_drives => [],
17
 
    spare_drives => [],
18
 
    condition => undef,
19
 
    blacklisted => 0,
20
 
  };
21
 
  bless $self, $class;
22
 
  if ($self->{method} eq 'snmp') {
23
 
    bless $self, 'HP::Proliant::Component::DiskSubsystem::Scsi::SNMP';
24
 
  } else {
25
 
    bless $self, 'HP::Proliant::Component::DiskSubsystem::Scsi::CLI';
26
 
  }
27
 
  $self->init();
28
 
  $self->assemble();
29
 
  return $self;
30
 
}
31
 
 
32
 
sub check {
33
 
  my $self = shift;
34
 
  foreach (@{$self->{controllers}}) {
35
 
    $_->check();
36
 
  }
37
 
}
38
 
 
39
 
sub dump {
40
 
  my $self = shift;
41
 
  foreach (@{$self->{controllers}}) {
42
 
    $_->dump();
43
 
  }
44
 
}
45
 
 
46
 
package HP::Proliant::Component::DiskSubsystem::Scsi::Controller;
47
 
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
48
 
 
49
 
use strict;
50
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
51
 
 
52
 
sub new {
53
 
  my $class = shift;
54
 
  my %params = @_;
55
 
  my $self = {
56
 
    runtime => $params{runtime},
57
 
    blacklisted => 0,
58
 
    info => undef,
59
 
    extendedinfo => undef,
60
 
  };
61
 
  map { $self->{$_} = $params{$_} } grep /cpqScsiCntlr/, keys %params;
62
 
  $self->{name} = $params{name} || $params{cpqScsiCntlrIndex}.':'.$params{cpqScsiCntlrBusIndex};
63
 
  $self->{controllerindex} = $self->{cpqScsiCntlrIndex};
64
 
  bless $self, $class;
65
 
  return $self;
66
 
}
67
 
 
68
 
sub check {
69
 
  my $self = shift;
70
 
  $self->blacklist('scco', $self->{name});
71
 
  my $info = sprintf 'scsi controller %s in slot %s is %s',
72
 
      $self->{name}, $self->{cpqScsiCntlrSlot}, $self->{cpqScsiCntlrCondition};
73
 
  if ($self->{cpqScsiCntlrCondition} eq 'other') {
74
 
    if (scalar(@{$self->{physical_drives}})) {
75
 
      $info .= ' and needs attention';
76
 
      $self->add_message(CRITICAL, $info);
77
 
      $self->add_info($info);
78
 
    } else {
79
 
      $info .= ' and unused';
80
 
      $self->add_info($info);
81
 
      $self->{blacklisted} = 1;
82
 
    }
83
 
  } elsif ($self->{cpqScsiCntlrCondition} ne 'ok') {
84
 
    $info .= ' and needs attention';
85
 
    $self->add_message(CRITICAL, $info);
86
 
    $self->add_info($info);
87
 
  } else {
88
 
    $self->add_info($info);
89
 
  }
90
 
  foreach (@{$self->{logical_drives}}) {
91
 
    $_->check();
92
 
  } 
93
 
  foreach (@{$self->{physical_drives}}) {
94
 
    $_->check();
95
 
  } 
96
 
  foreach (@{$self->{spare_drives}}) {
97
 
    $_->check();
98
 
  } 
99
 
100
 
 
101
 
sub dump {
102
 
  my $self = shift;
103
 
  printf "[SCSI_CONTROLLER_%s]\n", $self->{name};
104
 
  foreach (qw(cpqScsiCntlrIndex cpqScsiCntlrBusIndex cpqScsiCntlrSlot
105
 
      cpqScsiCntlrStatus cpqScsiCntlrCondition cpqScsiCntlrHwLocation)) {
106
 
    printf "%s: %s\n", $_, $self->{$_};
107
 
  }
108
 
  printf "\n";
109
 
  foreach (@{$self->{logical_drives}}) {
110
 
    $_->dump();
111
 
  }
112
 
  foreach (@{$self->{physical_drives}}) {
113
 
    $_->dump();
114
 
  }
115
 
  foreach (@{$self->{spare_drives}}) {
116
 
    $_->dump();
117
 
  }
118
 
}
119
 
 
120
 
 
121
 
package HP::Proliant::Component::DiskSubsystem::Scsi::LogicalDrive;
122
 
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
123
 
 
124
 
use strict;
125
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
126
 
 
127
 
sub new {
128
 
  my $class = shift;
129
 
  my %params = @_;
130
 
  my $self = {
131
 
    runtime => $params{runtime},
132
 
    blacklisted => 0,
133
 
    info => undef,
134
 
    extendedinfo => undef,
135
 
  };
136
 
  map { $self->{$_} = $params{$_} } grep /cpqScsiLogDrv/, keys %params;
137
 
  $self->{name} = $params{name} || $params{cpqScsiLogDrvCntlrIndex}.':'.$params{cpqScsiLogDrvBusIndex}.':'.$params{cpqScsiLogDrvIndex};
138
 
  bless $self, $class;
139
 
  $self->{controllerindex} = $self->{cpqScsiLogDrvCntlrIndex};
140
 
  return $self;
141
 
}
142
 
 
143
 
sub check {
144
 
  my $self = shift;
145
 
  $self->blacklist('scld', $self->{name});
146
 
  my $info = sprintf 'logical drive %s is %s', $self->{name}, $self->{cpqScsiLogDrvStatus};
147
 
  if ($self->{cpqScsiLogDrvCondition} ne "ok") {
148
 
    if ($self->{cpqScsiLogDrvStatus} =~ 
149
 
        /rebuild|recovering/) {
150
 
      $self->add_message(WARNING, $info);
151
 
    } else {
152
 
      $self->add_message(CRITICAL, $info);
153
 
    }
154
 
  } 
155
 
  $self->add_info($info);
156
 
}
157
 
 
158
 
sub dump {
159
 
  my $self = shift;
160
 
  printf "[LOGICAL_DRIVE_%s]\n", $self->{name};
161
 
  foreach (qw(cpqScsiLogDrvCntlrIndex cpqScsiLogDrvBusIndex cpqScsiLogDrvIndex
162
 
      cpqScsiLogDrvFaultTol cpqScsiLogDrvStatus cpqScsiLogDrvSize 
163
 
      cpqScsiLogDrvPhyDrvIDs cpqScsiLogDrvCondition)) {
164
 
    printf "%s: %s\n", $_, $self->{$_};
165
 
  }
166
 
  printf "\n";
167
 
}
168
 
 
169
 
 
170
 
package HP::Proliant::Component::DiskSubsystem::Scsi::PhysicalDrive;
171
 
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
172
 
 
173
 
use strict;
174
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
175
 
 
176
 
sub new {
177
 
  my $class = shift;
178
 
  my %params = @_;
179
 
  my $self = {
180
 
    runtime => $params{runtime},
181
 
    blacklisted => 0,
182
 
    info => undef,
183
 
    extendedinfo => undef,
184
 
  };
185
 
  map { $self->{$_} = $params{$_} } grep /cpqScsiPhyDrv/, keys %params;
186
 
  $self->{name} = $params{name} || 
187
 
      $self->{cpqScsiPhyDrvCntlrIndex}.':'.$self->{cpqScsiPhyDrvBusIndex}.':'.$self->{cpqScsiPhyDrvIndex}; 
188
 
  $self->{controllerindex} = $self->{cpqScsiPhyDrvCntlrIndex};
189
 
  bless $self, $class;
190
 
  return $self;
191
 
}
192
 
 
193
 
sub check {
194
 
  my $self = shift;
195
 
  $self->blacklist('scpd', $self->{name});
196
 
  my $info = sprintf 'physical drive %s is %s', $self->{name}, $self->{cpqScsiPhyDrvCondition};
197
 
  if ($self->{cpqScsiPhyDrvCondition} ne 'ok') {
198
 
    $self->add_message(CRITICAL, $info);
199
 
  }
200
 
  $self->add_info($info);
201
 
}
202
 
 
203
 
sub dump {
204
 
  my $self = shift;
205
 
  printf "[PHYSICAL_DRIVE_%s]\n", $self->{name};
206
 
  foreach (qw(cpqScsiPhyDrvCntlrIndex cpqScsiPhyDrvBusIndex cpqScsiPhyDrvIndex
207
 
      cpqScsiPhyDrvStatus cpqScsiPhyDrvSize cpqScsiPhyDrvCondition)) {
208
 
    printf "%s: %s\n", $_, $self->{$_};
209
 
  }
210
 
  printf "\n";
211
 
}
212
 
 
213
 
 
214
 
package HP::Proliant::Component::DiskSubsystem::Scsi::SpareDrive;
215
 
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
216
 
 
217
 
use strict;
218
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
219
 
 
220
 
sub dump {
221
 
  my $self = shift;
222
 
  printf "[SPARE_DRIVE]\n";
223
 
}
224
 
 
225
 
 
226
 
1;