1
package HP::Proliant::Component::TemperatureSubsystem;
2
our @ISA = qw(HP::Proliant::Component);
5
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
9
################################## custom_thresholds
12
runtime => $params{runtime},
13
rawdata => $params{rawdata},
14
method => $params{method},
15
condition => $params{condition},
16
status => $params{status},
20
extendedinfo => undef,
23
if ($params{runtime}->{options}->{customthresholds}) {
24
if (-f $params{runtime}->{options}->{customthresholds}) {
25
$params{runtime}->{options}->{customthresholds} =
26
do { local (@ARGV, $/) =
27
$params{runtime}->{options}->{customthresholds}; <> };
30
(split(/\//, $params{runtime}->{options}->{customthresholds})) {
31
if ($ct_items =~ /^(\d+):(\d+)$/) {
32
$params{runtime}->{options}->{thresholds}->{$1} = $2;
34
die sprintf "invalid threshold %s", $ct_items;
38
if ($self->{method} eq 'snmp') {
39
return HP::Proliant::Component::TemperatureSubsystem::SNMP->new(%params);
40
} elsif ($self->{method} eq 'cli') {
41
return HP::Proliant::Component::TemperatureSubsystem::CLI->new(%params);
51
$self->add_info('checking temperatures');
52
if (scalar (@{$self->{temperatures}}) == 0) {
53
#$self->overall_check();
54
$self->add_info('no temperatures found');
56
foreach (sort { $a->{cpqHeTemperatureIndex} <=> $b->{cpqHeTemperatureIndex}}
57
@{$self->{temperatures}}) {
65
foreach (@{$self->{temperatures}}) {
71
package HP::Proliant::Component::TemperatureSubsystem::Temperature;
72
our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem);
75
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
81
runtime => $params{runtime},
82
cpqHeTemperatureChassis => $params{cpqHeTemperatureChassis},
83
cpqHeTemperatureIndex => $params{cpqHeTemperatureIndex},
84
cpqHeTemperatureLocale => $params{cpqHeTemperatureLocale},
85
cpqHeTemperatureCelsius => $params{cpqHeTemperatureCelsius},
86
cpqHeTemperatureThresholdCelsius => $params{cpqHeTemperatureThresholdCelsius},
87
cpqHeTemperatureCondition => $params{cpqHeTemperatureCondition},
90
extendedinfo => undef,
93
if ($params{runtime}->{options}->{celsius}) {
94
$self->{cpqHeTemperatureUnits} = 'C';
95
$self->{cpqHeTemperature} = $self->{cpqHeTemperatureCelsius};
96
$self->{cpqHeTemperatureThreshold} =
97
$self->{cpqHeTemperatureThresholdCelsius};
99
$self->{cpqHeTemperatureUnits} = 'F';
100
$self->{cpqHeTemperature} =
101
(($self->{cpqHeTemperatureCelsius} * 9) / 5) + 32;
102
$self->{cpqHeTemperatureThreshold} =
103
(($self->{cpqHeTemperatureThresholdCelsius} * 9) / 5) + 32;
105
my $index = $self->{cpqHeTemperatureIndex};
106
if (exists $params{runtime}->{options}->{thresholds}->{$index}) {
107
$self->{cpqHeTemperatureThreshold} =
108
$params{runtime}->{options}->{thresholds}->{$index};
116
$self->blacklist('t', $self->{cpqHeTemperatureIndex});
117
if ($self->{cpqHeTemperature} > $self->{cpqHeTemperatureThreshold}) {
118
$self->add_info(sprintf "%d %s temperature too high (%d%s, %d max)",
119
$self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
120
$self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits},
121
$self->{cpqHeTemperatureThreshold});
122
$self->add_message(CRITICAL, $self->{info});
123
} elsif ($self->{cpqHeTemperature} < 0) {
124
# #21 SCSI_BACKPLANE_ZONE -1C/31F 60C/140F OK - can't be true
125
$self->add_info(sprintf "%d %s temperature too low (%d%s)",
126
$self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
127
$self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits});
128
$self->add_message(CRITICAL, $self->{info});
130
$self->add_info(sprintf "%d %s temperature is %d%s (%d max)",
131
$self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
132
$self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits},
133
$self->{cpqHeTemperatureThreshold});
135
if ($self->{runtime}->{options}->{perfdata} == 2) {
136
$self->{runtime}->{plugin}->add_perfdata(
137
label => sprintf('temp_%s', $self->{cpqHeTemperatureIndex}),
138
value => $self->{cpqHeTemperature},
139
warning => $self->{cpqHeTemperatureThreshold},
140
critical => $self->{cpqHeTemperatureThreshold}
142
} elsif ($self->{runtime}->{options}->{perfdata} == 1) {
143
$self->{runtime}->{plugin}->add_perfdata(
144
label => sprintf('temp_%s_%s', $self->{cpqHeTemperatureIndex},
145
$self->{cpqHeTemperatureLocale}),
146
value => $self->{cpqHeTemperature},
147
warning => $self->{cpqHeTemperatureThreshold},
148
critical => $self->{cpqHeTemperatureThreshold}
151
$self->add_extendedinfo(sprintf "temp_%s=%d",
152
$self->{cpqHeTemperatureIndex},
153
$self->{cpqHeTemperature});
158
printf "[TEMP_%s]\n", $self->{cpqHeTemperatureIndex};
159
foreach (qw(cpqHeTemperatureChassis cpqHeTemperatureIndex
160
cpqHeTemperatureLocale cpqHeTemperatureCelsius cpqHeTemperatureThreshold
161
cpqHeTemperatureCondition)) {
162
printf "%s: %s\n", $_, $self->{$_};
164
printf "info: %s\n\n", $self->{info};