diff options
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm')
-rwxr-xr-x | nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm new file mode 100755 index 0000000..bd50a87 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm @@ -0,0 +1,159 @@ +package HP::Proliant::Component::DiskSubsystem; +our @ISA = qw(HP::Proliant::Component); + +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}, + method => $params{method}, + da_subsystem => undef, + sas_da_subsystem => undef, + ide_da_subsystem => undef, + fca_da_subsystem => undef, + scsi_da_subsystem => undef, + condition => $params{condition}, + blacklisted => 0, + }; + bless $self, $class; + $self->init(); + return $self; +} + +sub init { + my $self = shift; + $self->{da_subsystem} = HP::Proliant::Component::DiskSubsystem::Da->new( + runtime => $self->{runtime}, + rawdata => $self->{rawdata}, + method => $self->{method}, + ); + $self->{sas_subsystem} = HP::Proliant::Component::DiskSubsystem::Sas->new( + runtime => $self->{runtime}, + rawdata => $self->{rawdata}, + method => $self->{method}, + ); + $self->{scsi_subsystem} = HP::Proliant::Component::DiskSubsystem::Scsi->new( + runtime => $self->{runtime}, + rawdata => $self->{rawdata}, + method => $self->{method}, + ); + $self->{ide_subsystem} = HP::Proliant::Component::DiskSubsystem::Ide->new( + runtime => $self->{runtime}, + rawdata => $self->{rawdata}, + method => $self->{method}, + ); + $self->{fca_subsystem} = HP::Proliant::Component::DiskSubsystem::Fca->new( + runtime => $self->{runtime}, + rawdata => $self->{rawdata}, + method => $self->{method}, + ); +} + +sub check { + my $self = shift; + $self->add_info('checking disk subsystem'); + $self->{da_subsystem}->check(); + $self->{sas_subsystem}->check(); + $self->{scsi_subsystem}->check(); + $self->{ide_subsystem}->check(); + $self->{fca_subsystem}->check(); + $self->disk_summary(); +} + +sub dump { + my $self = shift; + $self->{da_subsystem}->dump(); + $self->{sas_subsystem}->dump(); + $self->{scsi_subsystem}->dump(); + $self->{ide_subsystem}->dump(); + $self->{fca_subsystem}->dump(); +} + +sub disk_summary { + my $self = shift; + foreach my $subsys (qw(da sas scsi ide fca)) { + if (my $pd = $self->{$subsys.'_subsystem'}->has_physical_drives()) { + my $ld = $self->{$subsys.'_subsystem'}->has_logical_drives(); + $self->add_summary(sprintf '%s: %d logical drives, %d physical drives', + $subsys, $ld, $pd); + } + } +} + +sub assemble { + my $self = shift; + $self->trace(3, sprintf "%s controllers und platten zusammenfuehren", + ref($self)); + $self->trace(3, sprintf "has %d controllers", + scalar(@{$self->{controllers}})); + $self->trace(3, sprintf "has %d accelerators", + scalar(@{$self->{accelerators}})) if exists $self->{accelerators}; + $self->trace(3, sprintf "has %d enclosures", + scalar(@{$self->{enclosures}})); + $self->trace(3, sprintf "has %d physical_drives", + scalar(@{$self->{physical_drives}})); + $self->trace(3, sprintf "has %d logical_drives", + scalar(@{$self->{logical_drives}})); + $self->trace(3, sprintf "has %d spare_drives", + scalar(@{$self->{spare_drives}})); + my $found = { + accelerators => {}, + enclosures => {}, + logical_drives => {}, + physical_drives => {}, + spare_drives => {}, + }; + # found->{komponente}->{controllerindex} ist ein array + # von teilen, die zu einem controller gehoeren + foreach my $item (qw(accelerators enclosures logical_drives physical_drives spare_drives)) { + next if ($item eq "enclosures" && ! exists $self->{$item}); + foreach (@{$self->{$item}}) { + $found->{item}->{$_->{controllerindex}} = [] + unless exists $found->{$item}->{$_->{controllerindex}}; + push(@{$found->{$item}->{$_->{controllerindex}}}, $_); + } + } + foreach my $item (qw(accelerators enclosures logical_drives physical_drives spare_drives)) { + foreach (@{$self->{controllers}}) { + if (exists $found->{$item}->{$_->{controllerindex}}) { + $_->{$item} = $found->{$item}->{$_->{controllerindex}}; + delete $found->{$item}->{$_->{controllerindex}}; + } else { + $_->{$item} = []; # z.b. ein leerer controller: physical_drives = [] + } + } + } + # was jetzt noch in $found uebrig ist, gehoert zu keinem controller + # d.h. komponenten mit ungueltigen cnrtlindex wurden gefunden +} + +sub has_controllers { + my $self = shift; + return scalar(@{$self->{controllers}}); +} + +sub has_accelerators { + my $self = shift; + return exists $self->{accelerators} ? scalar(@{$self->{accelerators}}) : 0; +} + +sub has_physical_drives { + my $self = shift; + return scalar(@{$self->{physical_drives}}); +} + +sub has_logical_drives { + my $self = shift; + return scalar(@{$self->{logical_drives}}); +} + +sub has_enclosures { + my $self = shift; + return scalar(@{$self->{enclosures}}); +} + +1; |