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

« back to all changes in this revision

Viewing changes to check_hpasm/check_hpasm-4.6.3/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas.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::DiskSubsystem::Sas;
 
2
our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
 
3
 
 
4
use strict;
 
5
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
 
6
 
 
7
sub new {
 
8
  my $class = shift;
 
9
  my %params = @_;
 
10
  my $self = {
 
11
    runtime => $params{runtime},
 
12
    rawdata => $params{rawdata},
 
13
    method => $params{method},
 
14
    controllers => [],
 
15
    physical_drives => [],
 
16
    logical_drives => [],
 
17
    spare_drives => [],
 
18
    condition => undef,
 
19
    blacklisted => 0,
 
20
  };
 
21
  bless $self, $class;
 
22
  if ($self->{method} eq 'snmp') {
 
23
    bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::SNMP';
 
24
  } else {
 
25
    bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::CLI';
 
26
  }
 
27
  $self->init();
 
28
  $self->assemble();
 
29
  return $self;
 
30
}
 
31
 
 
32
sub check {
 
33
  my $self = shift;
 
34
  foreach (@{$self->{controllers}}) {
 
35
    $_->check();
 
36
  }
 
37
}
 
38
 
 
39
sub dump {
 
40
  my $self = shift;
 
41
  foreach (@{$self->{controllers}}) {
 
42
    $_->dump();
 
43
  }
 
44
}
 
45
 
 
46
package HP::Proliant::Component::DiskSubsystem::Sas::Controller;
 
47
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
 
48
 
 
49
use strict;
 
50
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
 
51
 
 
52
sub new {
 
53
  my $class = shift;
 
54
  my %params = @_;
 
55
  my $self = {
 
56
    runtime => $params{runtime},
 
57
    cpqSasHbaIndex => $params{cpqSasHbaIndex},
 
58
    cpqSasHbaLocation => $params{cpqSasHbaLocation},
 
59
    cpqSasHbaSlot => $params{cpqSasHbaSlot},
 
60
    cpqSasHbaStatus => $params{cpqSasHbaStatus},
 
61
    cpqSasHbaCondition => $params{cpqSasHbaCondition},
 
62
    blacklisted => 0,
 
63
  };
 
64
  $self->{name} = $params{name} || $self->{cpqSasHbaSlot};
 
65
  $self->{controllerindex} = $self->{cpqSasHbaIndex};
 
66
  bless $self, $class;
 
67
  return $self;
 
68
}
 
69
 
 
70
sub check {
 
71
  my $self = shift;
 
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});
 
80
    } else {
 
81
      $self->add_info(sprintf 'sas controller in slot %s is ok and unused',
 
82
          $self->{cpqSasHbaSlot});
 
83
      $self->{blacklisted} = 1;
 
84
    }
 
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});
 
91
  } else {
 
92
    $self->add_info(sprintf 'sas controller in slot %s is ok',
 
93
        $self->{cpqSasHbaSlot});
 
94
  }
 
95
  foreach (@{$self->{logical_drives}}) {
 
96
    $_->check();
 
97
  } 
 
98
  foreach (@{$self->{physical_drives}}) {
 
99
    $_->check();
 
100
  } 
 
101
  foreach (@{$self->{spare_drives}}) {
 
102
    $_->check();
 
103
  } 
 
104
 
105
 
 
106
sub dump {
 
107
  my $self = shift;
 
108
  printf "[SAS_HBA%s]\n", $self->{name};
 
109
  foreach (qw(cpqSasHbaSlot cpqSasHbaIndex cpqSasHbaCondition
 
110
      cpqSasHbaStatus cpqSasHbaLocation)) {
 
111
    printf "%s: %s\n", $_, $self->{$_};
 
112
  }
 
113
  printf "\n";
 
114
  foreach (@{$self->{logical_drives}}) {
 
115
    $_->dump();
 
116
  }
 
117
  foreach (@{$self->{physical_drives}}) {
 
118
    $_->dump();
 
119
  }
 
120
  foreach (@{$self->{spare_drives}}) {
 
121
    $_->dump();
 
122
  }
 
123
}
 
124
 
 
125
 
 
126
package HP::Proliant::Component::DiskSubsystem::Sas::LogicalDrive;
 
127
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
 
128
 
 
129
use strict;
 
130
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
 
131
 
 
132
sub new {
 
133
  my $class = shift;
 
134
  my %params = @_;
 
135
  my $self = {
 
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},
 
143
    blacklisted => 0,
 
144
  };
 
145
  bless $self, $class;
 
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;
 
152
  }
 
153
  return $self;
 
154
}
 
155
 
 
156
sub check {
 
157
  my $self = shift;
 
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});
 
165
    } else {
 
166
      $self->add_message(CRITICAL,
 
167
          sprintf "logical drive %s is %s",
 
168
              $self->{name}, $self->{cpqSasLogDrvStatus});
 
169
    }
 
170
  } 
 
171
  $self->add_info(
 
172
      sprintf "logical drive %s is %s (%s)", $self->{name},
 
173
          $self->{cpqSasLogDrvStatus}, $self->{cpqSasLogDrvRaidLevel});
 
174
}
 
175
 
 
176
sub dump {
 
177
  my $self = shift;
 
178
  printf "[LOGICAL_DRIVE]\n";
 
179
  foreach (qw(cpqSasLogDrvHbaIndex cpqSasLogDrvIndex cpqSasLogDrvRaidLevel
 
180
      cpqSasLogDrvStatus cpqSasLogDrvCondition
 
181
      cpqSasLogDrvRebuildingPercent)) {
 
182
    printf "%s: %s\n", $_, $self->{$_};
 
183
  }
 
184
  printf "\n";
 
185
}
 
186
 
 
187
 
 
188
package HP::Proliant::Component::DiskSubsystem::Sas::PhysicalDrive;
 
189
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
 
190
 
 
191
use strict;
 
192
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
 
193
 
 
194
sub new {
 
195
  my $class = shift;
 
196
  my %params = @_;
 
197
  my $self = {
 
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},
 
205
    blacklisted => 0,
 
206
  };
 
207
  $self->{name} = $params{name} || 
 
208
      $self->{cpqSasPhyDrvHbaIndex}.':'.$self->{cpqSasPhyDrvIndex}; ####vorerst
 
209
  $self->{controllerindex} = $self->{cpqSasPhyDrvHbaIndex};
 
210
  bless $self, $class;
 
211
  return $self;
 
212
}
 
213
 
 
214
sub check {
 
215
  my $self = shift;
 
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});
 
221
  }
 
222
  $self->add_info(
 
223
      sprintf "physical drive %s is %s", 
 
224
          $self->{name}, $self->{cpqSasPhyDrvCondition});
 
225
}
 
226
 
 
227
sub dump {
 
228
  my $self = shift;
 
229
  printf "[PHYSICAL_DRIVE]\n";
 
230
  foreach (qw(cpqSasPhyDrvHbaIndex cpqSasPhyDrvIndex cpqSasPhyDrvLocationString
 
231
      cpqSasPhyDrvSize cpqSasPhyDrvStatus cpqSasPhyDrvCondition)) {
 
232
    printf "%s: %s\n", $_, $self->{$_};
 
233
  }
 
234
  printf "\n";
 
235
}
 
236
 
 
237
 
 
238
package HP::Proliant::Component::DiskSubsystem::Sas::SpareDrive;
 
239
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
 
240
 
 
241
use strict;
 
242
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
 
243
 
 
244
sub dump {
 
245
  my $self = shift;
 
246
  printf "[SPARE_DRIVE]\n";
 
247
}
 
248
 
 
249
 
 
250
1;