1
package HP::Proliant::Component::DiskSubsystem::Scsi;
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::Scsi::SNMP';
25
bless $self, 'HP::Proliant::Component::DiskSubsystem::Scsi::CLI';
34
foreach (@{$self->{controllers}}) {
41
foreach (@{$self->{controllers}}) {
46
package HP::Proliant::Component::DiskSubsystem::Scsi::Controller;
47
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
50
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
56
runtime => $params{runtime},
59
extendedinfo => undef,
61
map { $self->{$_} = $params{$_} } grep /cpqScsiCntlr/, keys %params;
62
$self->{name} = $params{name} || $params{cpqScsiCntlrIndex}.':'.$params{cpqScsiCntlrBusIndex};
63
$self->{controllerindex} = $self->{cpqScsiCntlrIndex};
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);
79
$info .= ' and unused';
80
$self->add_info($info);
81
$self->{blacklisted} = 1;
83
} elsif ($self->{cpqScsiCntlrCondition} ne 'ok') {
84
$info .= ' and needs attention';
85
$self->add_message(CRITICAL, $info);
86
$self->add_info($info);
88
$self->add_info($info);
90
foreach (@{$self->{logical_drives}}) {
93
foreach (@{$self->{physical_drives}}) {
96
foreach (@{$self->{spare_drives}}) {
103
printf "[SCSI_CONTROLLER_%s]\n", $self->{name};
104
foreach (qw(cpqScsiCntlrIndex cpqScsiCntlrBusIndex cpqScsiCntlrSlot
105
cpqScsiCntlrStatus cpqScsiCntlrCondition cpqScsiCntlrHwLocation)) {
106
printf "%s: %s\n", $_, $self->{$_};
109
foreach (@{$self->{logical_drives}}) {
112
foreach (@{$self->{physical_drives}}) {
115
foreach (@{$self->{spare_drives}}) {
121
package HP::Proliant::Component::DiskSubsystem::Scsi::LogicalDrive;
122
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
125
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
131
runtime => $params{runtime},
134
extendedinfo => undef,
136
map { $self->{$_} = $params{$_} } grep /cpqScsiLogDrv/, keys %params;
137
$self->{name} = $params{name} || $params{cpqScsiLogDrvCntlrIndex}.':'.$params{cpqScsiLogDrvBusIndex}.':'.$params{cpqScsiLogDrvIndex};
139
$self->{controllerindex} = $self->{cpqScsiLogDrvCntlrIndex};
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);
152
$self->add_message(CRITICAL, $info);
155
$self->add_info($info);
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->{$_};
170
package HP::Proliant::Component::DiskSubsystem::Scsi::PhysicalDrive;
171
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
174
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
180
runtime => $params{runtime},
183
extendedinfo => undef,
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};
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);
200
$self->add_info($info);
205
printf "[PHYSICAL_DRIVE_%s]\n", $self->{name};
206
foreach (qw(cpqScsiPhyDrvCntlrIndex cpqScsiPhyDrvBusIndex cpqScsiPhyDrvIndex
207
cpqScsiPhyDrvStatus cpqScsiPhyDrvSize cpqScsiPhyDrvCondition)) {
208
printf "%s: %s\n", $_, $self->{$_};
214
package HP::Proliant::Component::DiskSubsystem::Scsi::SpareDrive;
215
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
218
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
222
printf "[SPARE_DRIVE]\n";