1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
package HP::Proliant::Component::DiskSubsystem::Da::SNMP;
our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da
HP::Proliant::Component::SNMP);
use strict;
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
sub new {
my $class = shift;
my %params = @_;
my $self = {
controllers => [],
accelerators => [],
enclosures => [],
physical_drives => [],
logical_drives => [],
spare_drives => [],
blacklisted => 0,
};
bless $self, $class;
return $self;
}
sub init {
my $self = shift;
my $snmpwalk = $self->{rawdata};
# CPQIDA-MIB
my $oids = {
cpqDaCntlrEntry => "1.3.6.1.4.1.232.3.2.2.1.1",
cpqDaCntlrIndex => "1.3.6.1.4.1.232.3.2.2.1.1.1",
cpqDaCntlrModel => "1.3.6.1.4.1.232.3.2.2.1.1.2",
cpqDaCntlrSlot => "1.3.6.1.4.1.232.3.2.2.1.1.5",
cpqDaCntlrCondition => "1.3.6.1.4.1.232.3.2.2.1.1.6",
cpqDaCntlrBoardCondition => "1.3.6.1.4.1.232.3.2.2.1.1.12",
cpqDaCntlrModelValue => {
1 => 'other',
2 => 'ida',
3 => 'idaExpansion',
4 => 'ida-2',
5 => 'smart',
6 => 'smart-2e',
7 => 'smart-2p',
8 => 'smart-2sl',
9 => 'smart-3100es',
10 => 'smart-3200',
11 => 'smart-2dh',
12 => 'smart-221',
13 => 'sa-4250es',
14 => 'sa-4200',
15 => 'sa-integrated',
16 => 'sa-431',
17 => 'sa-5300',
18 => 'raidLc2',
19 => 'sa-5i',
20 => 'sa-532',
21 => 'sa-5312',
22 => 'sa-641',
23 => 'sa-642',
24 => 'sa-6400',
25 => 'sa-6400em',
26 => 'sa-6i',
},
cpqDaCntlrConditionValue => {
1 => "other",
2 => "ok",
3 => "degraded",
4 => "failed",
},
cpqDaCntlrBoardConditionValue => {
1 => "other",
2 => "ok",
3 => "degraded",
4 => "failed",
},
};
# INDEX { cpqDaCntlrIndex }
foreach ($self->get_entries($oids, 'cpqDaCntlrEntry')) {
push(@{$self->{controllers}},
HP::Proliant::Component::DiskSubsystem::Da::Controller->new(%{$_}));
}
$oids = {
cpqDaAccelEntry => "1.3.6.1.4.1.232.3.2.2.2.1",
cpqDaAccelCntlrIndex => "1.3.6.1.4.1.232.3.2.2.2.1.1",
cpqDaAccelStatus => "1.3.6.1.4.1.232.3.2.2.2.1.2",
cpqDaAccelErrCode => "1.3.6.1.4.1.232.3.2.2.2.1.5",
cpqDaAccelBattery => "1.3.6.1.4.1.232.3.2.2.2.1.6",
cpqDaAccelCondition => "1.3.6.1.4.1.232.3.2.2.2.1.9",
cpqDaAccelBatteryValue => {
1 => 'other',
2 => 'ok',
3 => 'recharging',
4 => 'failed',
5 => 'degraded',
6 => 'notPresent',
},
cpqDaAccelConditionValue => {
1 => "other",
2 => "ok",
3 => "degraded",
4 => "failed",
},
cpqDaAccelStatusValue => {
1 => "other",
2 => "invalid",
3 => "enabled",
4 => "tmpDisabled",
5 => "permDisabled",
},
cpqDaAccelErrCodeValue => {
1 => 'other',
2 => 'invalid',
3 => 'badConfig',
4 => 'lowBattery',
5 => 'disableCmd',
6 => 'noResources',
7 => 'notConnected',
8 => 'badMirrorData',
9 => 'readErr',
10 => 'writeErr',
11 => 'configCmd',
12 => 'expandInProgress',
13 => 'snapshotInProgress',
14 => 'redundantLowBattery',
15 => 'redundantSizeMismatch',
16 => 'redundantCacheFailure',
17 => 'excessiveEccErrors',
18 => 'adgEnablerMissing',
19 => 'postEccErrors',
20 => 'batteryHotRemoved',
21 => 'capacitorChargeLow',
22 => 'notEnoughBatteries',
23 => 'cacheModuleNotSupported',
24 => 'batteryNotSupported',
25 => 'noCapacitorAttached',
26 => 'capBasedBackupFailed',
27 => 'capBasedRestoreFailed',
28 => 'capBasedModuleHWFailure',
29 => 'capacitorFailedToCharge',
30 => 'capacitorBasedHWMemBeingErased',
31 => 'incompatibleCacheModule',
32 => 'fbcmChargerCircuitFailure',
},
};
# INDEX { cpqDaAccelCntlrIndex }
foreach ($self->get_entries($oids, 'cpqDaAccelEntry')) {
push(@{$self->{accelerators}},
HP::Proliant::Component::DiskSubsystem::Da::Accelerator->new(%{$_}));
}
$oids = {
cpqDaLogDrvEntry => "1.3.6.1.4.1.232.3.2.3.1.1",
cpqDaLogDrvCntlrIndex => "1.3.6.1.4.1.232.3.2.3.1.1.1",
cpqDaLogDrvIndex => "1.3.6.1.4.1.232.3.2.3.1.1.2",
cpqDaLogDrvFaultTol => "1.3.6.1.4.1.232.3.2.3.1.1.3",
cpqDaLogDrvStatus => "1.3.6.1.4.1.232.3.2.3.1.1.4",
cpqDaLogDrvSize => "1.3.6.1.4.1.232.3.2.3.1.1.9",
cpqDaLogDrvPhyDrvIDs => "1.3.6.1.4.1.232.3.2.3.1.1.10",
cpqDaLogDrvCondition => "1.3.6.1.4.1.232.3.2.3.1.1.11",
cpqDaLogDrvPercentRebuild => "1.3.6.1.4.1.232.3.2.3.1.1.12",
cpqDaLogDrvFaultTolValue => {
1 => "other",
2 => "none",
3 => "mirroring",
4 => "dataGuard",
5 => "distribDataGuard",
7 => "advancedDataGuard",
},
cpqDaLogDrvConditionValue => {
1 => "other",
2 => "ok",
3 => "degraded",
4 => "failed",
},
cpqDaLogDrvStatusValue => {
1 => "other",
2 => "ok",
3 => "failed",
4 => "unconfigured",
5 => "recovering",
6 => "readyForRebuild",
7 => "rebuilding",
8 => "wrongDrive",
9 => "badConnect",
10 => "overheating",
11 => "shutdown",
12 => "expanding",
13 => "notAvailable",
14 => "queuedForExpansion",
},
};
# INDEX { cpqDaLogDrvCntlrIndex, cpqDaLogDrvIndex }
foreach ($self->get_entries($oids, 'cpqDaLogDrvEntry')) {
$_->{cpqDaLogDrvPhyDrvIDs} ||= 'empty';
push(@{$self->{logical_drives}},
HP::Proliant::Component::DiskSubsystem::Da::LogicalDrive->new(%{$_}));
}
$oids = {
cpqDaPhyDrvEntry => "1.3.6.1.4.1.232.3.2.5.1.1",
cpqDaPhyDrvCntlrIndex => "1.3.6.1.4.1.232.3.2.5.1.1.1",
cpqDaPhyDrvIndex => "1.3.6.1.4.1.232.3.2.5.1.1.2",
cpqDaPhyDrvBay => "1.3.6.1.4.1.232.3.2.5.1.1.5",
cpqDaPhyDrvStatus => "1.3.6.1.4.1.232.3.2.5.1.1.6",
cpqDaPhyDrvSize => "1.3.6.1.4.1.232.3.2.5.1.1.9",
cpqDaPhyDrvCondition => "1.3.6.1.4.1.232.3.2.5.1.1.37",
cpqDaPhyDrvBusNumber => "1.3.6.1.4.1.232.3.2.5.1.1.50",
cpqDaPhyDrvConditionValue => {
1 => "other",
2 => "ok",
3 => "degraded",
4 => "failed",
},
cpqDaPhyDrvStatusValue => {
1 => "other",
2 => "ok",
3 => "failed",
4 => "predictiveFailure",
},
};
# INDEX { cpqDaPhyDrvCntlrIndex, cpqDaPhyDrvIndex }
foreach ($self->get_entries($oids, 'cpqDaPhyDrvEntry')) {
push(@{$self->{physical_drives}},
HP::Proliant::Component::DiskSubsystem::Da::PhysicalDrive->new(%{$_}));
}
}
|