git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
path: root/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm
diff options
context:
space:
mode:
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm')
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm308
1 files changed, 308 insertions, 0 deletions
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;