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

« back to all changes in this revision

Viewing changes to check_hpasm/check_hpasm-4.5.2/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem.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::TemperatureSubsystem;
2
 
our @ISA = qw(HP::Proliant::Component);
3
 
 
4
 
use strict;
5
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
6
 
 
7
 
sub new {
8
 
  my $class = shift;
9
 
################################## custom_thresholds
10
 
  my %params = @_;
11
 
  my $self = {
12
 
    runtime => $params{runtime},
13
 
    rawdata => $params{rawdata},
14
 
    method => $params{method},
15
 
    condition => $params{condition},
16
 
    status => $params{status},
17
 
    temperatures => [],
18
 
    blacklisted => 0,
19
 
    info => undef,
20
 
    extendedinfo => undef,
21
 
  };
22
 
  bless $self, $class;
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}; <> };
28
 
    }
29
 
    foreach my $ct_items
30
 
        (split(/\//, $params{runtime}->{options}->{customthresholds})) {
31
 
      if ($ct_items =~ /^(\d+):(\d+)$/) {
32
 
        $params{runtime}->{options}->{thresholds}->{$1} = $2;
33
 
      } else {
34
 
        die sprintf "invalid threshold %s", $ct_items;
35
 
      }
36
 
    }
37
 
  }
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);
42
 
  } else {
43
 
    die "unknown method";
44
 
  }
45
 
  return $self;
46
 
}
47
 
 
48
 
sub check {
49
 
  my $self = shift;
50
 
  my $errorfound = 0;
51
 
  $self->add_info('checking temperatures');
52
 
  if (scalar (@{$self->{temperatures}}) == 0) {
53
 
    #$self->overall_check(); 
54
 
    $self->add_info('no temperatures found');
55
 
  } else {
56
 
    foreach (sort { $a->{cpqHeTemperatureIndex} <=> $b->{cpqHeTemperatureIndex}}
57
 
        @{$self->{temperatures}}) {
58
 
      $_->check();
59
 
    }
60
 
  }
61
 
}
62
 
 
63
 
sub dump {
64
 
  my $self = shift;
65
 
  foreach (@{$self->{temperatures}}) {
66
 
    $_->dump();
67
 
  }
68
 
}
69
 
 
70
 
 
71
 
package HP::Proliant::Component::TemperatureSubsystem::Temperature;
72
 
our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem);
73
 
 
74
 
use strict;
75
 
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
76
 
 
77
 
sub new {
78
 
  my $class = shift;
79
 
  my %params = @_;
80
 
  my $self = {
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},
88
 
    blacklisted => 0,
89
 
    info => undef,
90
 
    extendedinfo => undef,
91
 
  };
92
 
  bless $self, $class;
93
 
  if ($params{runtime}->{options}->{celsius}) {
94
 
    $self->{cpqHeTemperatureUnits} = 'C';
95
 
    $self->{cpqHeTemperature} = $self->{cpqHeTemperatureCelsius};
96
 
    $self->{cpqHeTemperatureThreshold} = 
97
 
        $self->{cpqHeTemperatureThresholdCelsius};
98
 
  } else {
99
 
    $self->{cpqHeTemperatureUnits} = 'F';
100
 
    $self->{cpqHeTemperature} = 
101
 
        (($self->{cpqHeTemperatureCelsius} * 9) / 5) + 32;
102
 
    $self->{cpqHeTemperatureThreshold} = 
103
 
        (($self->{cpqHeTemperatureThresholdCelsius} * 9) / 5) + 32;
104
 
  }
105
 
  my $index = $self->{cpqHeTemperatureIndex};
106
 
  if (exists $params{runtime}->{options}->{thresholds}->{$index}) {
107
 
    $self->{cpqHeTemperatureThreshold} = 
108
 
        $params{runtime}->{options}->{thresholds}->{$index};
109
 
        
110
 
  }
111
 
  return $self;
112
 
}
113
 
 
114
 
sub check {
115
 
  my $self = shift;
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});
129
 
  } else {
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});
134
 
  }
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}
141
 
    );
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}
149
 
    );
150
 
  } 
151
 
  $self->add_extendedinfo(sprintf "temp_%s=%d",
152
 
      $self->{cpqHeTemperatureIndex},
153
 
      $self->{cpqHeTemperature});
154
 
}
155
 
 
156
 
sub dump { 
157
 
  my $self = shift;
158
 
  printf "[TEMP_%s]\n", $self->{cpqHeTemperatureIndex};
159
 
  foreach (qw(cpqHeTemperatureChassis cpqHeTemperatureIndex 
160
 
      cpqHeTemperatureLocale cpqHeTemperatureCelsius cpqHeTemperatureThreshold
161
 
      cpqHeTemperatureCondition)) {
162
 
    printf "%s: %s\n", $_, $self->{$_};
163
 
  }
164
 
  printf "info: %s\n\n", $self->{info};
165
 
}
166
 
 
167
 
1;
168