1
package HP::Proliant::Component::DiskSubsystem::Sas;
2
our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
5
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
11
runtime => $params{runtime},
12
rawdata => $params{rawdata},
13
method => $params{method},
15
physical_drives => [],
22
if ($self->{method} eq 'snmp') {
23
bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::SNMP';
25
bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::CLI';
34
foreach (@{$self->{controllers}}) {
41
foreach (@{$self->{controllers}}) {
46
package HP::Proliant::Component::DiskSubsystem::Sas::Controller;
47
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
50
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
56
runtime => $params{runtime},
57
cpqSasHbaIndex => $params{cpqSasHbaIndex},
58
cpqSasHbaLocation => $params{cpqSasHbaLocation},
59
cpqSasHbaSlot => $params{cpqSasHbaSlot},
60
cpqSasHbaStatus => $params{cpqSasHbaStatus},
61
cpqSasHbaCondition => $params{cpqSasHbaCondition},
64
$self->{name} = $params{name} || $self->{cpqSasHbaSlot};
65
$self->{controllerindex} = $self->{cpqSasHbaIndex};
72
$self->blacklist('saco', $self->{cpqSasHbaSlot});
73
if ($self->{cpqSasHbaCondition} eq 'other') {
74
if (scalar(@{$self->{physical_drives}})) {
75
$self->add_message(CRITICAL,
76
sprintf 'sas controller in slot %s needs attention',
77
$self->{cpqSasHbaSlot});
78
$self->add_info(sprintf 'sas controller in slot %s needs attention',
79
$self->{cpqSasHbaSlot});
81
$self->add_info(sprintf 'sas controller in slot %s is ok and unused',
82
$self->{cpqSasHbaSlot});
83
$self->{blacklisted} = 1;
85
} elsif ($self->{cpqSasHbaCondition} ne 'ok') {
86
$self->add_message(CRITICAL,
87
sprintf 'sas controller in slot %s needs attention',
88
$self->{cpqSasHbaSlot});
89
$self->add_info(sprintf 'sas controller in slot %s needs attention',
90
$self->{cpqSasHbaSlot});
92
$self->add_info(sprintf 'sas controller in slot %s is ok',
93
$self->{cpqSasHbaSlot});
95
foreach (@{$self->{logical_drives}}) {
98
foreach (@{$self->{physical_drives}}) {
101
foreach (@{$self->{spare_drives}}) {
108
printf "[SAS_HBA%s]\n", $self->{name};
109
foreach (qw(cpqSasHbaSlot cpqSasHbaIndex cpqSasHbaCondition
110
cpqSasHbaStatus cpqSasHbaLocation)) {
111
printf "%s: %s\n", $_, $self->{$_};
114
foreach (@{$self->{logical_drives}}) {
117
foreach (@{$self->{physical_drives}}) {
120
foreach (@{$self->{spare_drives}}) {
126
package HP::Proliant::Component::DiskSubsystem::Sas::LogicalDrive;
127
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
130
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
136
runtime => $params{runtime},
137
cpqSasLogDrvHbaIndex => $params{cpqSasLogDrvHbaIndex},
138
cpqSasLogDrvIndex => $params{cpqSasLogDrvIndex},
139
cpqSasLogDrvStatus => $params{cpqSasLogDrvStatus},
140
cpqSasLogDrvCondition => $params{cpqSasLogDrvCondition},
141
cpqSasLogDrvRebuildingPercent => $params{cpqSasLogDrvRebuildingPercent},
142
cpqSasLogDrvRaidLevel => $params{cpqSasLogDrvRaidLevel},
146
$self->{name} = $params{name} ||
147
$self->{cpqSasLogDrvHbaIndex}.':'.$self->{cpqSasLogDrvIndex}; ####vorerst
148
$self->{controllerindex} = $self->{cpqSasLogDrvHbaIndex};
149
if (! $self->{cpqSasLogDrvRebuildingPercent} ||
150
$self->{cpqSasLogDrvRebuildingPercent} == 4294967295) {
151
$self->{cpqSasLogDrvRebuildingPercent} = 100;
158
$self->blacklist('sald', $self->{name});
159
if ($self->{cpqSasLogDrvCondition} ne "ok") {
160
if ($self->{cpqSasLogDrvStatus} =~
161
/rebuild|recovering|expanding|queued/) {
162
$self->add_message(WARNING,
163
sprintf "logical drive %s is %s",
164
$self->{name}, $self->{cpqSasLogDrvStatus});
166
$self->add_message(CRITICAL,
167
sprintf "logical drive %s is %s",
168
$self->{name}, $self->{cpqSasLogDrvStatus});
172
sprintf "logical drive %s is %s (%s)", $self->{name},
173
$self->{cpqSasLogDrvStatus}, $self->{cpqSasLogDrvRaidLevel});
178
printf "[LOGICAL_DRIVE]\n";
179
foreach (qw(cpqSasLogDrvHbaIndex cpqSasLogDrvIndex cpqSasLogDrvRaidLevel
180
cpqSasLogDrvStatus cpqSasLogDrvCondition
181
cpqSasLogDrvRebuildingPercent)) {
182
printf "%s: %s\n", $_, $self->{$_};
188
package HP::Proliant::Component::DiskSubsystem::Sas::PhysicalDrive;
189
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
192
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
198
runtime => $params{runtime},
199
cpqSasPhyDrvHbaIndex => $params{cpqSasPhyDrvHbaIndex},
200
cpqSasPhyDrvIndex => $params{cpqSasPhyDrvIndex},
201
cpqSasPhyDrvLocationString => $params{cpqSasPhyDrvLocationString},
202
cpqSasPhyDrvStatus => $params{cpqSasPhyDrvStatus},
203
cpqSasPhyDrvSize => $params{cpqSasPhyDrvSize},
204
cpqSasPhyDrvCondition => $params{cpqSasPhyDrvCondition},
207
$self->{name} = $params{name} ||
208
$self->{cpqSasPhyDrvHbaIndex}.':'.$self->{cpqSasPhyDrvIndex}; ####vorerst
209
$self->{controllerindex} = $self->{cpqSasPhyDrvHbaIndex};
216
$self->blacklist('sapd', $self->{name});
217
if ($self->{cpqSasPhyDrvCondition} ne 'ok') {
218
$self->add_message(CRITICAL,
219
sprintf "physical drive %s is %s",
220
$self->{name}, $self->{cpqSasPhyDrvCondition});
223
sprintf "physical drive %s is %s",
224
$self->{name}, $self->{cpqSasPhyDrvCondition});
229
printf "[PHYSICAL_DRIVE]\n";
230
foreach (qw(cpqSasPhyDrvHbaIndex cpqSasPhyDrvIndex cpqSasPhyDrvLocationString
231
cpqSasPhyDrvSize cpqSasPhyDrvStatus cpqSasPhyDrvCondition)) {
232
printf "%s: %s\n", $_, $self->{$_};
238
package HP::Proliant::Component::DiskSubsystem::Sas::SpareDrive;
239
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
242
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
246
printf "[SPARE_DRIVE]\n";