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
|
package HP::Proliant::Component::MemorySubsystem::CLI;
our @ISA = qw(HP::Proliant::Component::MemorySubsystem);
use strict;
use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
sub new {
my $class = shift;
my %params = @_;
my $self = {
runtime => $params{runtime},
rawdata => $params{rawdata},
dimms => [],
blacklisted => 0,
info => undef,
extendedinfo => undef,
};
bless $self, $class;
$self->init(%params);
return $self;
}
sub init {
my $self = shift;
my %params = @_;
$self->{dimms} = [];
my %tmpdimm = (
runtime => $params{runtime},
);
my $inblock = 0;
foreach (grep(/^dimm/, split(/\n/, $self->{rawdata}))) {
s/^dimm\s*$//g;
if (/Cartridge #:\s+(\d+)/ || /Processor #:\s+(\d+)/) {
# neuerdings (g6) tauchen hier prozessor- statt cartridge-angaben auf
$tmpdimm{cartridge} = $1;
$tmpdimm{board} = $1;
$inblock = 1;
} elsif (/Module #:\s+(\d+)/) {
$tmpdimm{module} = $1;
} elsif (/Present:\s+(\w+)/) {
$tmpdimm{status} = lc $1 eq 'yes' ? 'present' :
lc $1 eq 'no' ? 'notPresent' : 'other';
} elsif (/Status:\s+(.+?)\s*$/) {
$tmpdimm{condition} = lc $1 =~ /degraded/ ? 'degraded' :
lc $1 eq 'ok' ? 'ok' : lc $1 =~ /n\/a/ ? 'n/a' : 'other';
} elsif (/Size:\s+(\d+)\s*(.+?)\s*$/) {
$tmpdimm{size} = $1 * (lc $2 eq 'mb' ? 1024*1024 :
lc $2 eq 'gb' ? 1024*1024*1024 : 1);
} elsif (/^\s*$/) {
if ($inblock) {
$inblock = 0;
push(@{$self->{dimms}},
HP::Proliant::Component::MemorySubsystem::Dimm->new(%tmpdimm));
%tmpdimm = (
runtime => $params{runtime},
);
}
} elsif (/(\d+)\s+(\d+)\s+(\w+)\s+(0x\w+)\s+(0x\w+)\s+(\d+[MGT]B)\s+(\d+MHz)\s+(\w+)/) {
$tmpdimm{cartridge} = $1;
$tmpdimm{module} = $2;
$tmpdimm{status} = lc $3 eq 'yes' ? 'present' :
lc $3 eq 'no' ? 'notPresent' : 'other';
my $formfactor = $4;
my $memorytype = $5;
my $memorysize = $6;
my $memoryspeed = $7;
$tmpdimm{condition} = lc $8 =~ /degraded/ ? 'degraded' :
lc $8 eq 'ok' ? 'ok' : lc $8 =~ /n\/a/ ? 'n/a' : 'other';
$memorysize =~ /(\d+)([MGT]B)/;
$tmpdimm{size} = $1 * (lc $2 eq 'mb' ? 1024*1024 :
lc $2 eq 'gb' ? 1024*1024*1024 : 1);
push(@{$self->{dimms}},
HP::Proliant::Component::MemorySubsystem::Dimm->new(%tmpdimm));
}
}
if ($inblock) {
push(@{$self->{dimms}},
HP::Proliant::Component::MemorySubsystem::Dimm->new(%tmpdimm));
}
}
sub is_faulty {
my $self = shift;
return 0; # cli hat so einen globalen status nicht
}
1;
|