From 1e2387474a449452b78520b9ad96a8b4b5e99722 Mon Sep 17 00:00:00 2001 From: Harald Pfeiffer Date: Wed, 17 Apr 2019 19:07:19 +0200 Subject: initial commit of source fetch --- .../check_hpasm-4.8/plugins-scripts/HP/Storage.pm | 308 +++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100755 nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm') diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm new file mode 100755 index 0000000..6fecca1 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm @@ -0,0 +1,308 @@ +package HP::Storage; + +use strict; +use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 }; +use Data::Dumper; + +our @ISA = qw(HP::Server); + +sub init { + my $self = shift; + $self->{components} = { + powersupply_subsystem => undef, + fan_subsystem => undef, + temperature_subsystem => undef, + cpu_subsystem => undef, + memory_subsystem => undef, + disk_subsystem => undef, + sensor_subsystem => undef, + }; + $self->{serial} = 'unknown'; + $self->{product} = 'unknown'; + $self->{romversion} = 'unknown'; + $self->collect(); + if (! $self->{runtime}->{plugin}->check_messages()) { + $self->set_serial(); +# $self->check_for_buggy_firmware(); +# $self->analyze_cpus(); +# $self->analyze_powersupplies(); +# $self->analyze_fan_subsystem(); +# $self->analyze_temperatures(); +# $self->analyze_memory_subsystem(); + $self->analyze_disk_subsystem(); +## $self->analyze_sensor_subsystem(); +# $self->check_cpus(); +# $self->check_powersupplies(); +# $self->check_fan_subsystem(); +# $self->check_temperatures(); +# $self->check_memory_subsystem(); + $self->check_disk_subsystem(); +## $self->check_sensor_subsystem(); + } +} + +sub identify { + my $self = shift; + return sprintf "System: '%s', S/N: '%s', ROM: '%s'", + $self->{product}, $self->{serial}, $self->{romversion}; +} + +sub check_for_buggy_firmware { + my $self = shift; + my @buggyfirmwares = ( + "P24 12/11/2001", + "P24 11/15/2002", + "D13 06/03/2003", + "D13 09/15/2004", + "P20 12/17/2002" + ); + $self->{runtime}->{options}->{buggy_firmware} = + grep /^$self->{romversion}/, @buggyfirmwares; +} + +sub dump { + my $self = shift; + printf STDERR "serial %s\n", $self->{serial}; + printf STDERR "product %s\n", $self->{product}; + printf STDERR "romversion %s\n", $self->{romversion}; + printf STDERR "%s\n", Data::Dumper::Dumper($self->{components}); +} + +sub analyze_powersupplies { + my $self = shift; + $self->{components}->{powersupply_subsystem} = + HP::Storage::Component::PowersupplySubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_fan_subsystem { + my $self = shift; + $self->{components}->{fan_subsystem} = + HP::Storage::Component::FanSubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_temperatures { + my $self = shift; + $self->{components}->{temperature_subsystem} = + HP::Storage::Component::TemperatureSubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_cpus { + my $self = shift; + $self->{components}->{cpu_subsystem} = + HP::Storage::Component::CpuSubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_memory_subsystem { + my $self = shift; + $self->{components}->{memory_subsystem} = + HP::Storage::Component::MemorySubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_disk_subsystem { + my $self = shift; + $self->{components}->{disk_subsystem} = + HP::Proliant::Component::DiskSubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub analyze_sensor_subsystem { + my $self = shift; + $self->{components}->{sensor_subsystem} = + HP::FCMGMT::Component::SensorSubsystem->new( + rawdata => $self->{rawdata}, + method => $self->{method}, + runtime => $self->{runtime}, + ); +} + +sub check_cpus { + my $self = shift; + $self->{components}->{cpu_subsystem}->check(); + $self->{components}->{cpu_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 2; +} + +sub check_powersupplies { + my $self = shift; + $self->{components}->{powersupply_subsystem}->check(); + $self->{components}->{powersupply_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 2; +} + +sub check_fan_subsystem { + my $self = shift; + $self->{components}->{fan_subsystem}->check(); + $self->{components}->{fan_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 2; +} + +sub check_temperatures { + my $self = shift; + $self->{components}->{temperature_subsystem}->check(); + $self->{components}->{temperature_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 2; +} + +sub check_memory_subsystem { + my $self = shift; + $self->{components}->{memory_subsystem}->check(); + $self->{components}->{memory_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 2; +} + +sub check_disk_subsystem { + my $self = shift; + $self->{components}->{disk_subsystem}->check(); + $self->{components}->{disk_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 1; +} + +sub check_sensor_subsystem { + my $self = shift; + $self->{components}->{isensor_subsystem}->check(); + $self->{components}->{sensor_subsystem}->dump() + if $self->{runtime}->{options}->{verbose} >= 1; +} + + +sub collect { + my $self = shift; + if ($self->{runtime}->{plugin}->opts->snmpwalk) { + my $cpqSeMibCondition = '1.3.6.1.4.1.232.6.1.3.0'; + # rindsarsch! + $self->{rawdata}->{$cpqSeMibCondition} = 0; + if (! exists $self->{rawdata}->{$cpqSeMibCondition}) { + $self->add_message(CRITICAL, + 'snmpwalk returns no health data (cpqhlth-mib)'); + } + } else { + my $net_snmp_version = Net::SNMP->VERSION(); # 5.002000 or 6.000000 + #$params{'-translate'} = [ + # -all => 0x0 + #]; + my ($session, $error) = + Net::SNMP->session(%{$self->{runtime}->{snmpparams}}); + if (! defined $session) { + $self->{plugin}->add_message(CRITICAL, 'cannot create session object'); + $self->trace(1, Data::Dumper::Dumper($self->{runtime}->{snmpparams})); + } else { + # revMajor is often used for discovery of hp devices + my $cpqSeMibRev = '1.3.6.1.4.1.232.6.1'; + my $cpqSeMibRevMajor = '1.3.6.1.4.1.232.6.1.1.0'; + my $cpqSeMibCondition = '1.3.6.1.4.1.232.6.1.3.0'; + my $result = $session->get_request( + -varbindlist => [$cpqSeMibCondition] + ); + # rindsarsch! + $result->{$cpqSeMibCondition} = 0; + if (!defined($result) || + $result->{$cpqSeMibCondition} eq 'noSuchInstance' || + $result->{$cpqSeMibCondition} eq 'noSuchObject' || + $result->{$cpqSeMibCondition} eq 'endOfMibView') { + $self->add_message(CRITICAL, + 'snmpwalk returns no health data (cpqhlth-mib)'); + $session->close; + } else { + # this is not reliable. many agents return 4=failed + #if ($result->{$cpqSeMibCondition} != 2) { + # $obstacle = "cmapeerstart"; + #} + } + } + if (! $self->{runtime}->{plugin}->check_messages()) { + # snmp peer is alive + $self->trace(2, sprintf "Protocol is %s", + $self->{runtime}->{snmpparams}->{'-version'}); + my $cpqSsSys = "1.3.6.1.4.1.232.8"; + $session->translate; + my $response = {}; #break the walk up in smaller pieces + my $tic = time; my $tac = $tic; + my $response1 = $session->get_table( + -baseoid => $cpqSsSys); + $tac = time; + $self->trace(2, sprintf "%03d seconds for walk cpqSsSys (%d oids)", + $tac - $tic, scalar(keys %{$response1})); + $session->close; + map { $response->{$_} = $response1->{$_} } keys %{$response1}; + map { $response->{$_} =~ s/^\s+//; $response->{$_} =~ s/\s+$//; } + keys %$response; + $self->{rawdata} = $response; + } + } + return $self->{runtime}->{plugin}->check_messages(); +} + +sub set_serial { + my $self = shift; + my $snmpwalk = $self->{rawdata}; + my @serials = (); + my @models = (); + my @fws = (); + my $cpqSsBackplaneEntry = '1.3.6.1.4.1.232.8.2.2.6.1'; + my $cpqSsBackplaneFWRev = '1.3.6.1.4.1.232.8.2.2.6.1.3'; + my $cpqSsBackplaneModel = '1.3.6.1.4.1.232.8.2.2.6.1.9'; + my $cpqSsBackplaneSerialNumber = '1.3.6.1.4.1.232.8.2.2.6.1.13'; + # INDEX { cpqSsBackplaneChassisIndex, cpqSsBackplaneIndex } + my @indexes = SNMP::Utils::get_indices($snmpwalk, + $cpqSsBackplaneEntry); + foreach (@indexes) { + my($idx1, $idx2) = ($_->[0], $_->[1]); + my $fw = SNMP::Utils::get_object($snmpwalk, + $cpqSsBackplaneFWRev, $idx1, $idx2); + my $model = SNMP::Utils::get_object($snmpwalk, + $cpqSsBackplaneModel, $idx1, $idx2); + my $serial = SNMP::Utils::get_object($snmpwalk, + $cpqSsBackplaneSerialNumber, $idx1, $idx2); + push(@serials, $serial); + push(@models, $model); + push(@fws, $fw); + } + + $self->{serial} = join('/', @serials); + $self->{product} = join('/', @models); + $self->{romversion} = join('/', @fws); + $self->{runtime}->{product} = $self->{product}; +} + + + + + + + + + + + + + + + + + + + +1; -- cgit v1.2.3