1
package HP::Proliant::Component::FanSubsystem::SNMP;
2
our @ISA = qw(HP::Proliant::Component::FanSubsystem
3
HP::Proliant::Component::SNMP);
6
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
12
runtime => $params{runtime},
13
rawdata => $params{rawdata},
19
extendedinfo => undef,
22
$self->overall_init(%params);
23
$self->he_init(%params);
24
$self->te_init(%params);
32
my $snmpwalk = $params{rawdata};
34
my $cpqHeThermalSystemFanStatus = '1.3.6.1.4.1.232.6.2.6.4.0';
35
my $cpqHeThermalSystemFanStatusValue = {
41
my $cpqHeThermalCpuFanStatus = '1.3.6.1.4.1.232.6.2.6.5.0';
42
my $cpqHeThermalCpuFanStatusValue = {
45
4 => 'failed', # shutdown
47
$self->{sysstatus} = SNMP::Utils::get_object_value(
48
$snmpwalk, $cpqHeThermalSystemFanStatus,
49
$cpqHeThermalSystemFanStatusValue);
50
$self->{cpustatus} = SNMP::Utils::get_object_value(
51
$snmpwalk, $cpqHeThermalCpuFanStatus,
52
$cpqHeThermalCpuFanStatusValue);
53
$self->{sysstatus} |= lc $self->{sysstatus};
54
$self->{cpustatus} |= lc $self->{cpustatus};
60
my $snmpwalk = $params{rawdata};
61
my $ignore_redundancy = $params{ignore_redundancy};
62
# cpqHeThermalFanTable
64
cpqHeThermalFanEntry => '1.3.6.1.4.1.232.6.2.6.6.1',
65
cpqHeThermalFanIndex => '1.3.6.1.4.1.232.6.2.6.6.1.1',
66
cpqHeThermalFanRequired => '1.3.6.1.4.1.232.6.2.6.6.1.2',
67
cpqHeThermalFanPresent => '1.3.6.1.4.1.232.6.2.6.6.1.3',
68
cpqHeThermalFanCpuFan => '1.3.6.1.4.1.232.6.2.6.6.1.4',
69
cpqHeThermalFanStatus => '1.3.6.1.4.1.232.6.2.6.6.1.5',
70
cpqHeThermalFanHwLocation => '1.3.6.1.4.1.232.6.2.6.6.1.6',
71
cpqHeThermalFanRequiredValue => {
76
cpqHeThermalFanPresentValue => {
81
cpqHeThermalFanCpuFanValue => {
86
cpqHeThermalFanStatusValue => {
92
# INDEX { cpqHeThermalFanIndex }
93
foreach ($self->get_entries($oids, 'cpqHeThermalFanEntry')) {
94
next if ! $_->{cpqHeThermalFanPresent};
95
push(@{$self->{th_fans}},
96
HP::Proliant::Component::FanSubsystem::Fan->new(%{$_}));
103
my $snmpwalk = $params{rawdata};
104
my $ignore_redundancy = $params{ignore_redundancy};
105
# cpqHeFltTolFanTable
107
cpqHeFltTolFanEntry => '1.3.6.1.4.1.232.6.2.6.7.1',
108
cpqHeFltTolFanChassis => '1.3.6.1.4.1.232.6.2.6.7.1.1',
109
cpqHeFltTolFanIndex => '1.3.6.1.4.1.232.6.2.6.7.1.2',
110
cpqHeFltTolFanLocale => '1.3.6.1.4.1.232.6.2.6.7.1.3',
111
cpqHeFltTolFanPresent => '1.3.6.1.4.1.232.6.2.6.7.1.4',
112
cpqHeFltTolFanType => '1.3.6.1.4.1.232.6.2.6.7.1.5',
113
cpqHeFltTolFanSpeed => '1.3.6.1.4.1.232.6.2.6.7.1.6',
114
cpqHeFltTolFanRedundant => '1.3.6.1.4.1.232.6.2.6.7.1.7',
115
cpqHeFltTolFanRedundantPartner => '1.3.6.1.4.1.232.6.2.6.7.1.8',
116
cpqHeFltTolFanCondition => '1.3.6.1.4.1.232.6.2.6.7.1.9',
117
cpqHeFltTolFanHotPlug => '1.3.6.1.4.1.232.6.2.6.7.1.10',
118
cpqHeFltTolFanHwLocation => '1.3.6.1.4.1.232.6.2.6.7.1.11',
119
cpqHeFltTolFanCurrentSpeed => '1.3.6.1.4.1.232.6.2.6.7.1.12',
120
cpqHeFltTolFanLocaleValue => {
129
9 => "removableMedia",
135
cpqHeFltTolFanPresentValue => {
140
cpqHeFltTolFanSpeedValue => {
145
cpqHeFltTolFanRedundantValue => {
150
cpqHeFltTolFanTypeValue => {
155
cpqHeFltTolFanConditionValue => {
161
cpqHeFltTolFanHotPlugValue => {
163
2 => "nonHotPluggable",
167
# INDEX { cpqHeFltTolFanChassis, cpqHeFltTolFanIndex }
168
foreach ($self->get_entries($oids, 'cpqHeFltTolFanEntry')) {
169
next if ! defined $_->{cpqHeFltTolFanIndex};
170
# z.b. USM65201WS hat nur solche fragmente. die werden erst gar nicht
171
# als fans akzeptiert. dafuer gibts dann die overall condition
172
# SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.1 = INTEGER: 0
173
# SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.2 = INTEGER: 0
174
$_->{cpqHeFltTolFanPctMax} = ($_->{cpqHeFltTolFanPresent} eq 'present') ?
176
push(@{$self->{he_fans}},
177
HP::Proliant::Component::FanSubsystem::Fan->new(%{$_}));
185
foreach (@{$self->{he_fans}}) {
186
$tmpfans->{$_->{cpqHeFltTolFanIndex}} = $_;
188
foreach (@{$self->{he_fans}}) {
189
if (exists $tmpfans->{$_->{cpqHeFltTolFanRedundantPartner}}) {
190
$_->{partner} = $tmpfans->{$_->{cpqHeFltTolFanRedundantPartner}};
192
$_->{partner} = undef;
195
@{$self->{fans}} = @{$self->{he_fans}};
201
$self->blacklist('ofs', '');
202
if ($self->{sysstatus} && $self->{cpustatus}) {
203
if ($self->{sysstatus} eq 'degraded') {
205
$self->add_message(WARNING,
206
sprintf 'system fan overall status is %s', $self->{sysstatus});
207
} elsif ($self->{sysstatus} eq 'failed') {
209
$self->add_message(CRITICAL,
210
sprintf 'system fan overall status is %s', $self->{sysstatus});
212
if ($self->{cpustatus} eq 'degraded') {
214
$self->add_message(WARNING,
215
sprintf 'cpu fan overall status is %s', $self->{cpustatus});
216
} elsif ($self->{cpustatus} eq 'failed') {
218
$self->add_message(CRITICAL,
219
sprintf 'cpu fan overall status is %s', $self->{cpustatus});
221
$self->add_info(sprintf 'overall fan status: system=%s, cpu=%s',
222
$self->{sysstatus}, $self->{cpustatus});
225
$self->add_info('this system seems to be water-cooled. no fans found');