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
diff options
context:
space:
mode:
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP')
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm240
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component.pm7
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem.pm176
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FanSubsystem.pm139
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FuseSubsystem.pm121
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/ManagerSubsystem.pm154
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/TempSubsystem.pm177
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/NetConnectorSubsystem.pm134
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerEnclosureSubsystem.pm136
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerSupplySubsystem.pm238
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/ServerBladeSubsystem.pm158
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant.pm771
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component.pm5
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem.pm45
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/CLI.pm32
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/SNMP.pm68
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem.pm124
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/CLI.pm27
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/SNMP.pm78
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem.pm112
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/CLI.pm57
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/SNMP.pm50
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem.pm159
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da.pm407
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/CLI.pm239
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/SNMP.pm232
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca.pm433
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/CLI.pm34
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/SNMP.pm303
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide.pm256
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/CLI.pm27
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/SNMP.pm115
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas.pm251
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/CLI.pm27
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/SNMP.pm126
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi.pm227
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/CLI.pm27
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/SNMP.pm134
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem.pm236
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/CLI.pm78
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/SNMP.pm221
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem.pm263
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/CLI.pm101
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/SNMP.pm231
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem.pm197
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/CLI.pm87
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/SNMP.pm746
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem.pm202
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem/SNMP.pm189
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem.pm214
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/CLI.pm81
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/SNMP.pm96
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/SNMP.pm67
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem.pm205
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/CLI.pm56
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/SNMP.pm119
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/SNMP/Utils.pm103
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Server.pm447
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Storage.pm308
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/StorageWorks.pm157
60 files changed, 10450 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm
new file mode 100755
index 0000000..64e69e6
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm
@@ -0,0 +1,240 @@
+package HP::BladeSystem;
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+use Data::Dumper;
+
+our @ISA = qw(HP::Server HP::Proliant::Component::SNMP);
+
+sub init {
+ my $self = shift;
+ $self->{components} = {
+ common_enclosure_subsystem => undef,
+ power_enclosure_subsystem => undef,
+ power_supply_subsystem => undef,
+ net_connector_subsystem => undef,
+ server_blade_subsystem => undef,
+ };
+ $self->{serial} = 'unknown';
+ $self->{product} = 'unknown';
+ $self->{romversion} = 'unknown';
+ $self->trace(3, 'BladeSystem identified');
+ $self->collect();
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ $self->set_serial();
+ $self->analyze_common_enclosures();
+ $self->analyze_power_enclosures();
+ $self->analyze_power_supplies();
+ $self->analyze_net_connectors();
+ $self->analyze_server_blades();
+ $self->check_common_enclosures();
+ $self->check_power_enclosures();
+ $self->check_power_supplies();
+ $self->check_net_connectors();
+ $self->check_server_blades();
+ }
+}
+
+sub identify {
+ my $self = shift;
+ return sprintf "System: '%s', S/N: '%s'",
+ $self->{product}, $self->{serial};
+}
+
+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->{enclosures});
+}
+
+sub analyze_common_enclosures {
+ my $self = shift;
+ $self->{components}->{common_enclosure_subsystem} =
+ HP::BladeSystem::Component::CommonEnclosureSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_power_enclosures {
+ my $self = shift;
+ $self->{components}->{power_enclosure_subsystem} =
+ HP::BladeSystem::Component::PowerEnclosureSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_power_supplies {
+ my $self = shift;
+ $self->{components}->{power_supply_subsystem} =
+ HP::BladeSystem::Component::PowerSupplySubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_net_connectors {
+ my $self = shift;
+ $self->{components}->{net_connector_subsystem} =
+ HP::BladeSystem::Component::NetConnectorSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_server_blades {
+ my $self = shift;
+ $self->{components}->{server_blade_subsystem} =
+ HP::BladeSystem::Component::ServerBladeSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub check_common_enclosures {
+ my $self = shift;
+ $self->{components}->{common_enclosure_subsystem}->check();
+ $self->{components}->{common_enclosure_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_power_enclosures {
+ my $self = shift;
+ $self->{components}->{power_enclosure_subsystem}->check();
+ $self->{components}->{power_enclosure_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_power_supplies {
+ my $self = shift;
+ $self->{components}->{power_supply_subsystem}->check();
+ $self->{components}->{power_supply_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_net_connectors {
+ my $self = shift;
+ $self->{components}->{net_connector_subsystem}->check();
+ $self->{components}->{net_connector_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_server_blades {
+ my $self = shift;
+ $self->{components}->{server_blade_subsystem}->check();
+ $self->{components}->{server_blade_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub collect {
+ my $self = shift;
+ if ($self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $cpqRackMibCondition = '1.3.6.1.4.1.232.22.1.3.0';
+ $self->trace(3, 'getting cpqRackMibCondition');
+ if (! exists $self->{rawdata}->{$cpqRackMibCondition}) {
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no health data (cpqrack-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.22.1';
+ my $cpqSeMibRevMajor = '1.3.6.1.4.1.232.22.1.1.0';
+ my $cpqRackMibCondition = '1.3.6.1.4.1.232.22.1.3.0';
+ $self->trace(3, 'getting cpqRackMibCondition');
+ my $result = $session->get_request(
+ -varbindlist => [$cpqRackMibCondition]
+ );
+ if (!defined($result) ||
+ $result->{$cpqRackMibCondition} eq 'noSuchInstance' ||
+ $result->{$cpqRackMibCondition} eq 'noSuchObject' ||
+ $result->{$cpqRackMibCondition} eq 'endOfMibView') {
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no health data (cpqrack-mib)');
+ $session->close;
+ } else {
+ $self->trace(3, 'getting cpqRackMibCondition done');
+ }
+ }
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ # snmp peer is alive
+ $self->trace(2, sprintf "Protocol is %s",
+ $self->{runtime}->{snmpparams}->{'-version'});
+ my $oidtrees = [
+ ["cpqSiComponent", "1.3.6.1.4.1.232.2.2"],
+ ["cpqSiAsset", "1.3.6.1.4.1.232.2.2.2"],
+ #["cpqRackInfo", "1.3.6.1.4.1.232.22"],
+ ['cpqRackCommonEnclosureEntry', '1.3.6.1.4.1.232.22.2.3.1.1.1'],
+ ['cpqRackCommonEnclosureTempEntry', '1.3.6.1.4.1.232.22.2.3.1.2.1'],
+ ['cpqRackCommonEnclosureFanEntry', '1.3.6.1.4.1.232.22.2.3.1.3.1'],
+ ['cpqRackCommonEnclosureFuseEntry', '1.3.6.1.4.1.232.22.2.3.1.4.1'],
+ ['cpqRackCommonEnclosureManagerEntry', '1.3.6.1.4.1.232.22.2.3.1.6.1'],
+ ['cpqRackPowerEnclosureEntry', '1.3.6.1.4.1.232.22.2.3.3.1.1'],
+ ['cpqRackServerBladeEntry', '1.3.6.1.4.1.232.22.2.4.1.1.1'],
+ ['cpqRackPowerSupplyEntry', '1.3.6.1.4.1.232.22.2.5.1.1.1'],
+ ['cpqRackNetConnectorEntry', '1.3.6.1.4.1.232.22.2.6.1.1.1'],
+ ['cpqRackMibCondition', '1.3.6.1.4.1.232.22.1.3.0'],
+ ];
+ my $cpqSiComponent = "1.3.6.1.4.1.232.2.2";
+ my $cpqSiAsset = "1.3.6.1.4.1.232.2.2.2";
+ my $cpqRackInfo = "1.3.6.1.4.1.232.22";
+ $session->translate;
+ my $response = {}; #break the walk up in smaller pieces
+ foreach my $subtree (@{$oidtrees}) {
+ my $tic = time; my $tac = $tic;
+ my $response0 = $session->get_table(
+ -baseoid => $subtree->[1]);
+ if (scalar (keys %{$response0}) == 0) {
+ $self->trace(2, sprintf "maxrepetitions failed. fallback");
+ $response0 = $session->get_table(
+ -maxrepetitions => 1,
+ -baseoid => $subtree->[1]);
+ }
+ $tac = time;
+ $self->trace(2, sprintf "%03d seconds for walk %s (%d oids)",
+ $tac - $tic, $subtree->[0], scalar(keys %{$response0}));
+ map { $response->{$_} = $response0->{$_} } keys %{$response0};
+ }
+ $session->close;
+ 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 $cpqSiSysSerialNum = "1.3.6.1.4.1.232.2.2.2.1.0";
+ my $cpqSiProductName = "1.3.6.1.4.1.232.2.2.4.2.0";
+
+ $self->{serial} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSiSysSerialNum);
+ $self->{product} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSiProductName);
+ $self->{serial} = $self->{serial};
+ $self->{product} = lc $self->{product};
+ $self->{romversion} = 'unknown';
+#####################################################################
+$self->{runtime}->{product} = $self->{product};
+}
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component.pm
new file mode 100755
index 0000000..15fa213
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component.pm
@@ -0,0 +1,7 @@
+package HP::BladeSystem::Component;
+
+use strict;
+
+our @ISA = qw(HP::BladeSystem);
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem.pm
new file mode 100755
index 0000000..37cec73
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem.pm
@@ -0,0 +1,176 @@
+package HP::BladeSystem::Component::CommonEnclosureSubsystem;
+our @ISA = qw(HP::BladeSystem::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},
+ common_enclosures => [],
+ common_enclosure_temp_subsys => undef,
+ common_enclosure_fan_subsys => undef,
+ common_enclosure_fuse_subsys => undef,
+ common_enclosure_manager_subsys => undef,
+ common_enclosure_frus => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ # jeweils ein block fuer
+ # enclosures, temps, fans, fuses
+ # loop ueber oids und entspr. new
+ my $oids = {
+ cpqRackCommonEnclosureEntry => '1.3.6.1.4.1.232.22.2.3.1.1.1',
+ cpqRackCommonEnclosureRack => '1.3.6.1.4.1.232.22.2.3.1.1.1.1',
+ cpqRackCommonEnclosureIndex => '1.3.6.1.4.1.232.22.2.3.1.1.1.2',
+ cpqRackCommonEnclosureModel => '1.3.6.1.4.1.232.22.2.3.1.1.1.3',
+ cpqRackCommonEnclosureSparePartNumber => '1.3.6.1.4.1.232.22.2.3.1.1.1.6',
+ cpqRackCommonEnclosureSerialNum => '1.3.6.1.4.1.232.22.2.3.1.1.1.7',
+ cpqRackCommonEnclosureFWRev => '1.3.6.1.4.1.232.22.2.3.1.1.1.8',
+ cpqRackCommonEnclosureName => '1.3.6.1.4.1.232.22.2.3.1.1.1.9',
+ cpqRackCommonEnclosureCondition => '1.3.6.1.4.1.232.22.2.3.1.1.1.16',
+ cpqRackCommonEnclosureHasServerBlades => '1.3.6.1.4.1.232.22.2.3.1.1.1.17',
+ cpqRackCommonEnclosureHasPowerBlades => '1.3.6.1.4.1.232.22.2.3.1.1.1.18',
+ cpqRackCommonEnclosureHasNetConnectors => '1.3.6.1.4.1.232.22.2.3.1.1.1.19',
+ cpqRackCommonEnclosureHasTempSensors => '1.3.6.1.4.1.232.22.2.3.1.1.1.20',
+ cpqRackCommonEnclosureHasFans => '1.3.6.1.4.1.232.22.2.3.1.1.1.21',
+ cpqRackCommonEnclosureHasFuses => '1.3.6.1.4.1.232.22.2.3.1.1.1.22',
+ cpqRackCommonEnclosureConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ cpqRackCommonEnclosureHasServerBladesValue => {
+ 1 => 'false',
+ 2 => 'true',
+ },
+ };
+ $oids->{cpqRackCommonEnclosureHasPowerBladesValue} =
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue};
+ $oids->{cpqRackCommonEnclosureHasNetConnectorsValue} =
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue};
+ $oids->{cpqRackCommonEnclosureHasTempSensorsValue} =
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue};
+ $oids->{cpqRackCommonEnclosureHasFansValue} =
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue};
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue} =
+ $oids->{cpqRackCommonEnclosureHasServerBladesValue};
+ # INDEX { cpqRackCommonEnclosureRack cpqRackCommonEnclosureIndex }
+ foreach ($self->get_entries($oids, 'cpqRackCommonEnclosureEntry')) {
+ push(@{$self->{common_enclosures}},
+ HP::BladeSystem::Component::CommonEnclosureSubsystem::CommonEnclosure->new(%{$_}));
+ }
+
+ $self->{common_enclosure_fan_subsys} = HP::BladeSystem::Component::CommonEnclosureSubsystem::FanSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+ $self->{common_enclosure_temp_subsys} = HP::BladeSystem::Component::CommonEnclosureSubsystem::TempSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+ $self->{common_enclosure_fuse_subsys} = HP::BladeSystem::Component::CommonEnclosureSubsystem::FuseSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+ $self->{common_enclosure_manager_subsys} = HP::BladeSystem::Component::CommonEnclosureSubsystem::ManagerSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{common_enclosures}}) {
+ $_->check();
+ }
+ $self->{common_enclosure_fan_subsys}->check();
+ $self->{common_enclosure_temp_subsys}->check();
+ $self->{common_enclosure_fuse_subsys}->check();
+ $self->{common_enclosure_manager_subsys}->check();
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{common_enclosures}}) {
+ $_->dump();
+ }
+ $self->{common_enclosure_fan_subsys}->dump();
+ $self->{common_enclosure_temp_subsys}->dump();
+ $self->{common_enclosure_fuse_subsys}->dump();
+ $self->{common_enclosure_manager_subsys}->dump();
+}
+
+
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::CommonEnclosure;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackCommonEnclosure/, keys %params;
+ $self->{name} = $self->{cpqRackCommonEnclosureRack}.':'.$self->{cpqRackCommonEnclosureIndex};
+ $self->{serfw} = sprintf "Ser: %s, FW: %s", $self->{cpqRackCommonEnclosureSerialNum},
+ $self->{cpqRackCommonEnclosureFWRev};
+ bless $self, $class;
+ return $self;
+}
+
+
+sub check {
+ my $self = shift;
+ $self->blacklist('ce', $self->{cpqRackCommonEnclosureName});
+ my $info = sprintf 'common enclosure %s condition is %s (%s)',
+ $self->{cpqRackCommonEnclosureName}, $self->{cpqRackCommonEnclosureCondition}, $self->{serfw};
+ $self->add_info($info);
+ if ($self->{cpqRackCommonEnclosureCondition} eq 'failed') {
+ $info .= sprintf " (SparePartNum %s)", $self->{cpqRackCommonEnclosureSparePartNumber};
+ $self->add_message(CRITICAL, $info);
+ } elsif ($self->{cpqRackCommonEnclosureCondition} eq 'degraded') {
+ $info .= sprintf " (SparePartNum %s)", $self->{cpqRackCommonEnclosureSparePartNumber};
+ $self->add_message(WARNING, $info);
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[COMMON_ENCLOSURE_%s]\n", $self->{cpqRackCommonEnclosureName};
+ foreach (qw(cpqRackCommonEnclosureRack cpqRackCommonEnclosureIndex cpqRackCommonEnclosureModel
+ cpqRackCommonEnclosureSerialNum cpqRackCommonEnclosureFWRev cpqRackCommonEnclosureFWRev
+ cpqRackCommonEnclosureName
+ cpqRackCommonEnclosureCondition cpqRackCommonEnclosureHasServerBlades
+ cpqRackCommonEnclosureHasPowerBlades cpqRackCommonEnclosureHasNetConnectors
+ cpqRackCommonEnclosureHasTempSensors cpqRackCommonEnclosureHasFans cpqRackCommonEnclosureHasFuses)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FanSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FanSubsystem.pm
new file mode 100755
index 0000000..c28b921
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FanSubsystem.pm
@@ -0,0 +1,139 @@
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::FanSubsystem;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem);
+
+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},
+ blacklisted => 0,
+ fans => [],
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackCommonEnclosureFanEntry => '1.3.6.1.4.1.232.22.2.3.1.3.1',
+ cpqRackCommonEnclosureFanRack => '1.3.6.1.4.1.232.22.2.3.1.3.1.1',
+ cpqRackCommonEnclosureFanChassis => '1.3.6.1.4.1.232.22.2.3.1.3.1.2',
+ cpqRackCommonEnclosureFanIndex => '1.3.6.1.4.1.232.22.2.3.1.3.1.3',
+ cpqRackCommonEnclosureFanEnclosureName => '1.3.6.1.4.1.232.22.2.3.1.3.1.4',
+ cpqRackCommonEnclosureFanLocation => '1.3.6.1.4.1.232.22.2.3.1.3.1.5',
+ cpqRackCommonEnclosureFanPartNumber => '1.3.6.1.4.1.232.22.2.3.1.3.1.6',
+ cpqRackCommonEnclosureFanSparePartNumber => '1.3.6.1.4.1.232.22.2.3.1.3.1.7',
+ cpqRackCommonEnclosureFanPresent => '1.3.6.1.4.1.232.22.2.3.1.3.1.8',
+ cpqRackCommonEnclosureFanRedundant => '1.3.6.1.4.1.232.22.2.3.1.3.1.9',
+ cpqRackCommonEnclosureFanRedundantGroupId => '1.3.6.1.4.1.232.22.2.3.1.3.1.10',
+ cpqRackCommonEnclosureFanCondition => '1.3.6.1.4.1.232.22.2.3.1.3.1.11',
+ cpqRackCommonEnclosureFanEnclosureSerialNum => '1.3.6.1.4.1.232.22.2.3.1.3.1.12',
+ cpqRackCommonEnclosureFanPresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqRackCommonEnclosureFanRedundantValue => {
+ 0 => 'other', # meiner phantasie entsprungen, da sich hp nicht aeussert
+ 1 => 'other',
+ 2 => 'notRedundant',
+ 3 => 'redundant',
+ },
+ cpqRackCommonEnclosureFanConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ }
+ };
+ # INDEX { cpqRackCommonEnclosureFanRack, cpqRackCommonEnclosureFanChassis, cpqRackCommonEnclosureFanIndex }
+ foreach ($self->get_entries($oids, 'cpqRackCommonEnclosureFanEntry')) {
+ push(@{$self->{fans}},
+ HP::BladeSystem::Component::CommonEnclosureSubsystem::FanSubsystem::Fan->new(%{$_}));
+ }
+
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{fans}}) {
+ $_->check() if $_->{cpqRackCommonEnclosureFanPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{fans}}) {
+ $_->dump() if $_->{cpqRackCommonEnclosureFanPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::FanSubsystem::Fan;
+
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem::FanSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackCommonEnclosureFan/, keys %params;
+ $self->{name} = $self->{cpqRackCommonEnclosureFanRack}.':'.$self->{cpqRackCommonEnclosureFanChassis}.':'.$self->{cpqRackCommonEnclosureFanIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('f', $self->{name});
+ $self->add_info(sprintf 'fan %s is %s, location is %s, redundance is %s, condition is %s',
+ $self->{name}, $self->{cpqRackCommonEnclosureFanPresent},
+ $self->{cpqRackCommonEnclosureFanLocation},
+ $self->{cpqRackCommonEnclosureFanRedundant},
+ $self->{cpqRackCommonEnclosureFanCondition});
+ if ($self->{cpqRackCommonEnclosureFanCondition} eq 'degraded') {
+ $self->{info} .= sprintf ", (SparePartNum: %s)", $self->{cpqRackCommonEnclosureFanSparePartNumber};
+ $self->add_message(WARNING, $self->{info});
+ } elsif ($self->{cpqRackCommonEnclosureFanCondition} eq 'failed') {
+ $self->{info} .= sprintf ", (SparePartNum: %s)", $self->{cpqRackCommonEnclosureFanSparePartNumber};
+ $self->add_message(CRITICAL, $self->{info});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FAN_%s]\n", $self->{name};
+ foreach (qw(cpqRackCommonEnclosureFanRack cpqRackCommonEnclosureFanChassis
+ cpqRackCommonEnclosureFanIndex cpqRackCommonEnclosureFanEnclosureName
+ cpqRackCommonEnclosureFanLocation cpqRackCommonEnclosureFanPartNumber
+ cpqRackCommonEnclosureFanSparePartNumber cpqRackCommonEnclosureFanPresent
+ cpqRackCommonEnclosureFanRedundant cpqRackCommonEnclosureFanRedundantGroupId
+ cpqRackCommonEnclosureFanCondition cpqRackCommonEnclosureFanEnclosureSerialNum)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FuseSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FuseSubsystem.pm
new file mode 100755
index 0000000..bc67e3b
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/FuseSubsystem.pm
@@ -0,0 +1,121 @@
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::FuseSubsystem;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem);
+
+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},
+ blacklisted => 0,
+ fuses => [],
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackCommonEnclosureFuseEntry => '1.3.6.1.4.1.232.22.2.3.1.4.1',
+ cpqRackCommonEnclosureFuseRack => '1.3.6.1.4.1.232.22.2.3.1.4.1.1',
+ cpqRackCommonEnclosureFuseChassis => '1.3.6.1.4.1.232.22.2.3.1.4.1.2',
+ cpqRackCommonEnclosureFuseIndex => '1.3.6.1.4.1.232.22.2.3.1.4.1.3',
+ cpqRackCommonEnclosureFuseEnclosureName => '1.3.6.1.4.1.232.22.2.3.1.4.1.4',
+ cpqRackCommonEnclosureFuseLocation => '1.3.6.1.4.1.232.22.2.3.1.4.1.5',
+ cpqRackCommonEnclosureFusePresent => '1.3.6.1.4.1.232.22.2.3.1.4.1.8',
+ cpqRackCommonEnclosureFuseCondition => '1.3.6.1.4.1.232.22.2.3.1.4.1.11',
+ cpqRackCommonEnclosureFusePresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqRackCommonEnclosureFuseConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 4 => 'failed',
+ }
+ };
+ # INDEX { cpqRackCommonEnclosureFuseRack, cpqRackCommonEnclosureFuseChassis, cpqRackCommonEnclosureFuseIndex }
+ foreach ($self->get_entries($oids, 'cpqRackCommonEnclosureFuseEntry')) {
+ push(@{$self->{fuses}},
+ HP::BladeSystem::Component::CommonEnclosureSubsystem::FuseSubsystem::Fuse->new(%{$_}));
+ }
+
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{fuses}}) {
+ $_->check() if $_->{cpqRackCommonEnclosureFusePresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{fuses}}) {
+ $_->dump() if $_->{cpqRackCommonEnclosureFusePresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::FuseSubsystem::Fuse;
+
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem::FuseSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackCommonEnclosureFuse/, keys %params;
+ $self->{name} = $self->{cpqRackCommonEnclosureFuseRack}.':'.$self->{cpqRackCommonEnclosureFuseChassis}.':'.$self->{cpqRackCommonEnclosureFuseIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('fu', $self->{name});
+ $self->add_info(sprintf 'fuse %s is %s, location is %s, condition is %s',
+ $self->{name}, $self->{cpqRackCommonEnclosureFusePresent},
+ $self->{cpqRackCommonEnclosureFuseLocation}, $self->{cpqRackCommonEnclosureFuseCondition});
+ if ($self->{cpqRackCommonEnclosureFuseCondition} eq 'failed') {
+ $self->add_message(CRITICAL, $self->{info});
+ } elsif ($self->{cpqRackCommonEnclosureFuseCondition} ne 'ok') {
+ $self->add_message(WARNING, $self->{info});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FUSE_%s]\n", $self->{name};
+ foreach (qw(cpqRackCommonEnclosureFuseRack cpqRackCommonEnclosureFuseChassis
+ cpqRackCommonEnclosureFuseIndex cpqRackCommonEnclosureFuseEnclosureName
+ cpqRackCommonEnclosureFuseLocation cpqRackCommonEnclosureFusePresent
+ cpqRackCommonEnclosureFuseCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/ManagerSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/ManagerSubsystem.pm
new file mode 100755
index 0000000..1c2e15b
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/ManagerSubsystem.pm
@@ -0,0 +1,154 @@
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::ManagerSubsystem;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem);
+
+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},
+ blacklisted => 0,
+ managers => [],
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackCommonEnclosureManagerEntry => '1.3.6.1.4.1.232.22.2.3.1.6.1',
+ cpqRackCommonEnclosureManagerRack => '1.3.6.1.4.1.232.22.2.3.1.6.1.1',
+ cpqRackCommonEnclosureManagerChassis => '1.3.6.1.4.1.232.22.2.3.1.6.1.2',
+ cpqRackCommonEnclosureManagerIndex => '1.3.6.1.4.1.232.22.2.3.1.6.1.3',
+ cpqRackCommonEnclosureManagerEnclosureName => '1.3.6.1.4.1.232.22.2.3.1.6.1.4',
+ cpqRackCommonEnclosureManagerLocation => '1.3.6.1.4.1.232.22.2.3.1.6.1.5',
+ cpqRackCommonEnclosureManagerPartNumber => '1.3.6.1.4.1.232.22.2.3.1.6.1.6',
+ cpqRackCommonEnclosureManagerSparePartNumber => '1.3.6.1.4.1.232.22.2.3.1.6.1.7',
+ cpqRackCommonEnclosureManagerSerialNum => '1.3.6.1.4.1.232.22.2.3.1.6.1.8',
+ cpqRackCommonEnclosureManagerRole => '1.3.6.1.4.1.232.22.2.3.1.6.1.9',
+ cpqRackCommonEnclosureManagerPresent => '1.3.6.1.4.1.232.22.2.3.1.6.1.10',
+ cpqRackCommonEnclosureManagerRedundant => '1.3.6.1.4.1.232.22.2.3.1.6.1.11',
+ cpqRackCommonEnclosureManagerCondition => '1.3.6.1.4.1.232.22.2.3.1.6.1.12',
+ cpqRackCommonEnclosureManagerFWRev => '1.3.6.1.4.1.232.22.2.3.1.6.1.15',
+ cpqRackCommonEnclosureManagerRoleValue => {
+ 1 => 'standby',
+ 2 => 'active',
+ },
+ cpqRackCommonEnclosureManagerPresentValue => {
+ 1 => 'other',
+ 2 => 'absent', # mit vorsicht zu geniessen!
+ 3 => 'present',
+ },
+ cpqRackCommonEnclosureManagerRedundantValue => {
+ 0 => 'other', # meiner phantasie entsprungen, da sich hp nicht aeussert
+ 1 => 'other',
+ 2 => 'notRedundant',
+ 3 => 'redundant',
+ },
+ cpqRackCommonEnclosureManagerConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ }
+ };
+ # INDEX { cpqRackCommonEnclosureManagerRack, cpqRackCommonEnclosureManagerChassis, cpqRackCommonEnclosureManagerIndex }
+ foreach ($self->get_entries($oids, 'cpqRackCommonEnclosureManagerEntry')) {
+ push(@{$self->{managers}},
+ HP::BladeSystem::Component::CommonEnclosureSubsystem::ManagerSubsystem::Manager->new(%{$_}));
+ }
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{managers}}) {
+ $_->check() if $_->{cpqRackCommonEnclosureManagerPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{managers}}) {
+ $_->dump() if $_->{cpqRackCommonEnclosureManagerPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::ManagerSubsystem::Manager;
+
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem::ManagerSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackCommonEnclosureManager/, keys %params;
+ $self->{name} = $self->{cpqRackCommonEnclosureManagerRack}.
+ ':'.$self->{cpqRackCommonEnclosureManagerChassis}.
+ ':'.$self->{cpqRackCommonEnclosureManagerIndex};
+ if ($self->{cpqRackCommonEnclosureManagerPresent} eq "absent" &&
+ defined $self->{cpqRackCommonEnclosureManagerEnclosureName}) {
+ $self->{cpqRackCommonEnclosureManagerPresent} = "present";
+ }
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('em', $self->{name});
+ my $info = sprintf 'manager %s is %s, location is %s, redundance is %s, condition is %s, role is %s',
+ $self->{name}, $self->{cpqRackCommonEnclosureManagerPresent},
+ $self->{cpqRackCommonEnclosureManagerLocation},
+ $self->{cpqRackCommonEnclosureManagerRedundant},
+ $self->{cpqRackCommonEnclosureManagerCondition},
+ $self->{cpqRackCommonEnclosureManagerRole};
+ $self->add_info($info) if $self->{cpqRackCommonEnclosureManagerPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent managers nur bei -vvv
+ if ($self->{cpqRackCommonEnclosureManagerCondition} eq 'degraded') {
+ $self->{info} .= sprintf ' (SparePartNum: %s)',
+ $self->{cpqRackCommonEnclosureManagerSparePartNumber};
+ $self->add_message(WARNING, $self->{info});
+ } elsif ($self->{cpqRackCommonEnclosureManagerCondition} eq 'failed') {
+ $self->{info} .= sprintf ' (SparePartNum: %s)',
+ $self->{cpqRackCommonEnclosureManagerSparePartNumber};
+ $self->add_message(CRITICAL, $self->{info});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[ENCLOSURE_MANAGER_%s]\n", $self->{name};
+ foreach (qw(cpqRackCommonEnclosureManagerRack cpqRackCommonEnclosureManagerChassis
+ cpqRackCommonEnclosureManagerIndex cpqRackCommonEnclosureManagerEnclosureName
+ cpqRackCommonEnclosureManagerLocation cpqRackCommonEnclosureManagerPartNumber
+ cpqRackCommonEnclosureManagerSparePartNumber cpqRackCommonEnclosureManagerPresent
+ cpqRackCommonEnclosureManagerRedundant
+ cpqRackCommonEnclosureManagerCondition cpqRackCommonEnclosureManagerFWRev)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/TempSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/TempSubsystem.pm
new file mode 100755
index 0000000..3e004f1
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/CommonEnclosureSubsystem/TempSubsystem.pm
@@ -0,0 +1,177 @@
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::TempSubsystem;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem);
+
+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},
+ condition => $params{condition},
+ status => $params{status},
+ temperatures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($params{runtime}->{options}->{customthresholds}) {
+ if (-f $params{runtime}->{options}->{customthresholds}) {
+ open CT, $params{runtime}->{options}->{customthresholds};
+ $params{runtime}->{options}->{customthresholds} = <CT>;
+ close CT;
+ }
+ foreach my $ct_items
+ (split(/\//, $params{runtime}->{options}->{customthresholds})) {
+ if ($ct_items =~ /^(\d+):(\d+)$/) {
+ my $temp = $2;
+ $params{runtime}->{options}->{thresholds}->{$1} = $temp;
+ } else {
+ die sprintf "invalid threshold %s", $ct_items;
+ }
+ }
+ }
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqRackCommonEnclosureTempEntry => '1.3.6.1.4.1.232.22.2.3.1.2.1',
+ cpqRackCommonEnclosureTempRack => '1.3.6.1.4.1.232.22.2.3.1.2.1.1',
+ cpqRackCommonEnclosureTempChassis => '1.3.6.1.4.1.232.22.2.3.1.2.1.2',
+ cpqRackCommonEnclosureTempSensorIndex => '1.3.6.1.4.1.232.22.2.3.1.2.1.3',
+ cpqRackCommonEnclosureTempSensorEnclosureName => '1.3.6.1.4.1.232.22.2.3.1.2.1.4',
+ cpqRackCommonEnclosureTempLocation => '1.3.6.1.4.1.232.22.2.3.1.2.1.5',
+ cpqRackCommonEnclosureTempCurrent => '1.3.6.1.4.1.232.22.2.3.1.2.1.6',
+ cpqRackCommonEnclosureTempThreshold => '1.3.6.1.4.1.232.22.2.3.1.2.1.7',
+ cpqRackCommonEnclosureTempCondition => '1.3.6.1.4.1.232.22.2.3.1.2.1.8',
+ cpqRackCommonEnclosureTempType => '1.3.6.1.4.1.232.22.2.3.1.2.1.9',
+ cpqRackCommonEnclosureTempConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ cpqRackCommonEnclosureTempTypeValue => {
+ 1 => 'other',
+ 5 => 'blowout',
+ 9 => 'caution',
+ 15 => 'critical',
+ },
+ };
+ # INDEX { cpqRackCommonEnclosureTempRack cpqRackCommonEnclosureTempChassis
+ # cpqRackCommonEnclosureTempSensorIndex }
+ foreach ($self->get_entries($oids, 'cpqRackCommonEnclosureTempEntry')) {
+ push(@{$self->{temperatures}},
+ HP::BladeSystem::Component::CommonEnclosureSubsystem::TempSubsystem::Temp->new(%{$_})) if (($_->{cpqRackCommonEnclosureTempCurrent} != -1 && $_->{cpqRackCommonEnclosureTempThreshold} != -1) && ($_->{cpqRackCommonEnclosureTempThreshold} != 0));
+ }
+
+}
+
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ if (scalar (@{$self->{temperatures}}) == 0) {
+ #$self->overall_check();
+ } else {
+ foreach (@{$self->{temperatures}}) {
+ $_->check();
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{temperatures}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::BladeSystem::Component::CommonEnclosureSubsystem::TempSubsystem::Temp;
+our @ISA = qw(HP::BladeSystem::Component::CommonEnclosureSubsystem::TempSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackCommonEnclosureTemp/, keys %params;
+ $self->{name} = $params{cpqRackCommonEnclosureTempRack}.':'.
+ $params{cpqRackCommonEnclosureTempChassis}.':'.
+ $params{cpqRackCommonEnclosureTempSensorIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('t', $self->{name});
+ if ($self->{cpqRackCommonEnclosureTempCurrent} > $self->{cpqRackCommonEnclosureTempThreshold}) {
+ $self->add_info(sprintf "%s temperature too high (%d%s)",
+ $self->{cpqRackCommonEnclosureTempLocation},
+ $self->{cpqRackCommonEnclosureTempCurrent},
+ $self->{runtime}->{options}->{celsius} ? "C" : "F");
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info(sprintf "%s temperature is %d%s (%d max)",
+ $self->{cpqRackCommonEnclosureTempLocation},
+ $self->{cpqRackCommonEnclosureTempCurrent},
+ $self->{runtime}->{options}->{celsius} ? "C" : "F",
+ $self->{cpqRackCommonEnclosureTempThreshold});
+ }
+ if ($self->{runtime}->{options}->{perfdata} == 2) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s', $self->{name}),
+ value => $self->{cpqRackCommonEnclosureTempCurrent},
+ warning => $self->{cpqRackCommonEnclosureTempThreshold},
+ critical => $self->{cpqRackCommonEnclosureTempThreshold}
+ );
+ } elsif ($self->{runtime}->{options}->{perfdata} == 1) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s_%s', $self->{name},
+ $self->{cpqRackCommonEnclosureTempLocation}),
+ value => $self->{cpqRackCommonEnclosureTempCurrent},
+ warning => $self->{cpqRackCommonEnclosureTempThreshold},
+ critical => $self->{cpqRackCommonEnclosureTempThreshold}
+ );
+ }
+ $self->add_extendedinfo(sprintf "temp_%s=%d",
+ $self->{name}, $self->{cpqRackCommonEnclosureTempCurrent});
+
+}
+
+
+sub dump {
+ my $self = shift;
+ printf "[TEMP_%s]\n", $self->{name};
+ foreach (qw(cpqRackCommonEnclosureTempRack cpqRackCommonEnclosureTempChassis
+ cpqRackCommonEnclosureTempSensorIndex cpqRackCommonEnclosureTempSensorEnclosureName
+ cpqRackCommonEnclosureTempLocation
+ cpqRackCommonEnclosureTempCurrent cpqRackCommonEnclosureTempThreshold
+ cpqRackCommonEnclosureTempCondition cpqRackCommonEnclosureTempType)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/NetConnectorSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/NetConnectorSubsystem.pm
new file mode 100755
index 0000000..9fbd4d0
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/NetConnectorSubsystem.pm
@@ -0,0 +1,134 @@
+package HP::BladeSystem::Component::NetConnectorSubsystem;
+our @ISA = qw(HP::BladeSystem::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},
+ net_connectors => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackNetConnectorEntry => '1.3.6.1.4.1.232.22.2.6.1.1.1',
+ cpqRackNetConnectorRack => '1.3.6.1.4.1.232.22.2.6.1.1.1.1',
+ cpqRackNetConnectorChassis => '1.3.6.1.4.1.232.22.2.6.1.1.1.2',
+ cpqRackNetConnectorIndex => '1.3.6.1.4.1.232.22.2.6.1.1.1.3',
+ cpqRackNetConnectorEnclosureName => '1.3.6.1.4.1.232.22.2.6.1.1.1.4',
+ cpqRackNetConnectorName => '1.3.6.1.4.1.232.22.2.6.1.1.1.5',
+ cpqRackNetConnectorModel => '1.3.6.1.4.1.232.22.2.6.1.1.1.6',
+ cpqRackNetConnectorSerialNum => '1.3.6.1.4.1.232.22.2.6.1.1.1.7',
+ cpqRackNetConnectorPartNumber => '1.3.6.1.4.1.232.22.2.6.1.1.1.8',
+ cpqRackNetConnectorSparePartNumber => '1.3.6.1.4.1.232.22.2.6.1.1.1.9',
+ cpqRackNetConnectorFWRev => '1.3.6.1.4.1.232.22.2.6.1.1.1.10',
+ cpqRackNetConnectorType => '1.3.6.1.4.1.232.22.2.6.1.1.1.11',
+ cpqRackNetConnectorLocation => '1.3.6.1.4.1.232.22.2.6.1.1.1.12',
+ cpqRackNetConnectorPresent => '1.3.6.1.4.1.232.22.2.6.1.1.1.13',
+ cpqRackNetConnectorHasFuses => '1.3.6.1.4.1.232.22.2.6.1.1.1.14',
+ cpqRackNetConnectorEnclosureSerialNum => '1.3.6.1.4.1.232.22.2.6.1.1.1.15',
+ cpqRackNetConnectorTypeValue => {
+ 0 => 'other', # undefined
+ 1 => 'other',
+ 2 => 'active',
+ 3 => 'passive',
+ },
+ cpqRackNetConnectorPresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqRackNetConnectorHasFusesValue => {
+ -1 => 'false', # wird geliefert, also vermute ich false
+ 1 => 'false',
+ 2 => 'true',
+ },
+ };
+
+
+ # INDEX { cpqRackNetConnectorRack, cpqRackNetConnectorChassis, cpqRackNetConnectorIndex }
+ # dreckada dreck, dreckada
+ foreach ($self->get_entries($oids, 'cpqRackNetConnectorEntry')) {
+ push(@{$self->{net_connectors}},
+ HP::BladeSystem::Component::NetConnectorSubsystem::NetConnector->new(%{$_}));
+ }
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{net_connectors}}) {
+ $_->check() if $_->{cpqRackNetConnectorPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{net_connectors}}) {
+ $_->dump() if $_->{cpqRackNetConnectorPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::NetConnectorSubsystem::NetConnector;
+our @ISA = qw(HP::BladeSystem::Component::NetConnectorSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackNetConnector/, keys %params;
+ $self->{name} = $params{cpqRackNetConnectorRack}.
+ ':'.$params{cpqRackNetConnectorChassis}.
+ ':'.$params{cpqRackNetConnectorIndex};
+ $self->{serfw} = sprintf "Ser: %s, FW: %s", $self->{cpqRackNetConnectorSerialNum}, $self->{cpqRackNetConnectorFWRev};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('nc', $self->{name});
+ my $info = sprintf 'net connector %s is %s, model is %s (%s)',
+ $self->{name}.($self->{cpqRackNetConnectorName} ? ' \''.$self->{cpqRackNetConnectorName}.'\'' : ''),
+ $self->{cpqRackNetConnectorPresent}, $self->{cpqRackNetConnectorModel}, $self->{serfw};
+ $self->add_info($info);
+ # hat weder status noch condition, vielleicht spaeter mal
+ $info .= sprintf " (SparePartNum %s)", $self->{cpqRackNetConnectorSparePartNumber};
+}
+
+sub dump {
+ my $self = shift;
+ printf "[NET_CONNECTOR_%s]\n", $self->{cpqRackNetConnectorName};
+ foreach (qw(cpqRackNetConnectorRack cpqRackNetConnectorChassis cpqRackNetConnectorIndex cpqRackNetConnectorEnclosureName cpqRackNetConnectorName cpqRackNetConnectorModel cpqRackNetConnectorSerialNum cpqRackNetConnectorPartNumber cpqRackNetConnectorSparePartNumber cpqRackNetConnectorFWRev cpqRackNetConnectorType cpqRackNetConnectorLocation cpqRackNetConnectorPresent cpqRackNetConnectorHasFuses cpqRackNetConnectorEnclosureSerialNum)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerEnclosureSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerEnclosureSubsystem.pm
new file mode 100755
index 0000000..82445d3
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerEnclosureSubsystem.pm
@@ -0,0 +1,136 @@
+package HP::BladeSystem::Component::PowerEnclosureSubsystem;
+our @ISA = qw(HP::BladeSystem::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},
+ power_enclosures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+
+# cpqRackPowerEnclosureTable
+ my $oids = {
+ cpqRackPowerEnclosureEntry => '1.3.6.1.4.1.232.22.2.3.3.1.1',
+ cpqRackPowerEnclosureRack => '1.3.6.1.4.1.232.22.2.3.3.1.1.1',
+ cpqRackPowerEnclosureIndex => '1.3.6.1.4.1.232.22.2.3.3.1.1.2',
+ cpqRackPowerEnclosureName => '1.3.6.1.4.1.232.22.2.3.3.1.1.3',
+ cpqRackPowerEnclosureMgmgtBoardSerialNum => '1.3.6.1.4.1.232.22.2.3.3.1.1.4',
+ cpqRackPowerEnclosureRedundant => '1.3.6.1.4.1.232.22.2.3.3.1.1.5',
+ cpqRackPowerEnclosureLoadBalanced => '1.3.6.1.4.1.232.22.2.3.3.1.1.6',
+ cpqRackPowerEnclosureInputPwrType => '1.3.6.1.4.1.232.22.2.3.3.1.1.7',
+ cpqRackPowerEnclosurePwrFeedMax => '1.3.6.1.4.1.232.22.2.3.3.1.1.8',
+ cpqRackPowerEnclosureCondition => '1.3.6.1.4.1.232.22.2.3.3.1.1.9',
+ cpqRackPowerEnclosureRedundantValue => {
+ 1 => 'other',
+ 2 => 'notRedundant',
+ 3 => 'redundant',
+ },
+ cpqRackPowerEnclosureLoadBalancedValue => {
+ 0 => 'aechz',
+ 1 => 'other',
+ 2 => 'notLoadBalanced',
+ 3 => 'loadBalanced',
+ },
+ cpqRackPowerEnclosureInputPwrTypeValue => {
+ 1 => 'other',
+ 2 => 'singlePhase',
+ 3 => 'threePhase',
+ 4 => 'directCurrent',
+ },
+ cpqRackPowerEnclosureConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ },
+ };
+
+
+ # INDEX { cpqRackPowerEnclosureRack, cpqRackPowerEnclosureIndex }
+ # dreckada dreck, dreckada
+ foreach ($self->get_entries($oids, 'cpqRackPowerEnclosureEntry')) {
+ push(@{$self->{power_enclosures}},
+ HP::BladeSystem::Component::PowerEnclosureSubsystem::PowerEnclosure->new(%{$_}));
+ }
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{power_enclosures}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{power_enclosures}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::BladeSystem::Component::PowerEnclosureSubsystem::PowerEnclosure;
+our @ISA = qw(HP::BladeSystem::Component::PowerEnclosureSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackPowerEnclosure/, keys %params;
+ $self->{name} = $self->{cpqRackPowerEnclosureRack}.':'.$self->{cpqRackPowerEnclosureIndex};
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('pe', $self->{name});
+ my $info = sprintf 'power enclosure %s \'%s\' condition is %s',
+ $self->{name}, $self->{cpqRackPowerEnclosureName}, $self->{cpqRackPowerEnclosureCondition};
+ $self->add_info($info);
+ if ($self->{cpqRackPowerEnclosureCondition} eq 'degraded') {
+ $self->add_message(WARNING, $info);
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[POWER_ENCLOSURE_%s]\n", $self->{cpqRackPowerEnclosureName};
+ foreach (qw(cpqRackPowerEnclosureRack cpqRackPowerEnclosureIndex
+ cpqRackPowerEnclosureName cpqRackPowerEnclosureMgmgtBoardSerialNum
+ cpqRackPowerEnclosureRedundant cpqRackPowerEnclosureLoadBalanced
+ cpqRackPowerEnclosureInputPwrType cpqRackPowerEnclosurePwrFeedMax
+ cpqRackPowerEnclosureCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerSupplySubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerSupplySubsystem.pm
new file mode 100755
index 0000000..261ce19
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/PowerSupplySubsystem.pm
@@ -0,0 +1,238 @@
+package HP::BladeSystem::Component::PowerSupplySubsystem;
+our @ISA = qw(HP::BladeSystem::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},
+ power_supplies => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackPowerSupplyEntry => '1.3.6.1.4.1.232.22.2.5.1.1.1',
+ cpqRackPowerSupplyRack => '1.3.6.1.4.1.232.22.2.5.1.1.1.1',
+ cpqRackPowerSupplyChassis => '1.3.6.1.4.1.232.22.2.5.1.1.1.2',
+ cpqRackPowerSupplyIndex => '1.3.6.1.4.1.232.22.2.5.1.1.1.3',
+ cpqRackPowerSupplyEnclosureName => '1.3.6.1.4.1.232.22.2.5.1.1.1.4',
+ cpqRackPowerSupplySerialNum => '1.3.6.1.4.1.232.22.2.5.1.1.1.5',
+ cpqRackPowerSupplySparePartNumber => '1.3.6.1.4.1.232.22.2.5.1.1.1.7',
+ cpqRackPowerSupplyFWRev => '1.3.6.1.4.1.232.22.2.5.1.1.1.8',
+ cpqRackPowerSupplyMaxPwrOutput => '1.3.6.1.4.1.232.22.2.5.1.1.1.9',
+ cpqRackPowerSupplyCurPwrOutput => '1.3.6.1.4.1.232.22.2.5.1.1.1.10',
+ cpqRackPowerSupplyIntakeTemp => '1.3.6.1.4.1.232.22.2.5.1.1.1.12',
+ cpqRackPowerSupplyExhaustTemp => '1.3.6.1.4.1.232.22.2.5.1.1.1.13',
+ cpqRackPowerSupplyStatus => '1.3.6.1.4.1.232.22.2.5.1.1.1.14',
+ cpqRackPowerSupplySupplyInputLineStatus => '1.3.6.1.4.1.232.22.2.5.1.1.1.15',
+ cpqRackPowerSupplyPresent => '1.3.6.1.4.1.232.22.2.5.1.1.1.16',
+ cpqRackPowerSupplyCondition => '1.3.6.1.4.1.232.22.2.5.1.1.1.17',
+ cpqRackPowerSupplySupplyInputLineStatusValue => {
+ 1 => 'noError',
+ 2 => 'lineOverVoltage',
+ 3 => 'lineUnderVoltage',
+ 4 => 'lineHit',
+ 5 => 'brownOut',
+ 6 => 'linePowerLoss',
+ },
+ cpqRackPowerSupplyStatusValue => {
+ 1 => 'noError',
+ 2 => 'generalFailure',
+ 3 => 'bistFailure',
+ 4 => 'fanFailure',
+ 5 => 'tempFailure',
+ 6 => 'interlockOpen',
+ 7 => 'epromFailed',
+ 8 => 'vrefFailed',
+ 9 => 'dacFailed',
+ 10 => 'ramTestFailed',
+ 11 => 'voltageChannelFailed',
+ 12 => 'orringdiodeFailed',
+ 13 => 'brownOut',
+ 14 => 'giveupOnStartup',
+ 15 => 'nvramInvalid',
+ 16 => 'calibrationTableInvalid',
+ },
+ cpqRackPowerSupplyPresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqRackPowerSupplyConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ };
+
+
+ # INDEX { cpqRackPowerSupplyRack, cpqRackPowerSupplyChassis, cpqRackPowerSupplyIndex }
+ foreach ($self->get_entries($oids, 'cpqRackPowerSupplyEntry')) {
+ push(@{$self->{power_supplies}},
+ HP::BladeSystem::Component::PowerSupplySubsystem::PowerSupply->new(%{$_}));
+ }
+}
+
+sub check {
+ my $self = shift;
+ my $total_current_watt = 0;
+ my $total_max_watt = 0;
+ my $total_in_temp = 0;
+ my $total_out_temp = 0;
+ my $num_ps = 0;
+ foreach (@{$self->{power_supplies}}) {
+ $_->check() if $_->{cpqRackPowerSupplyPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ if ($_->{cpqRackPowerSupplyPresent} eq 'present') {
+ $total_max_watt += $_->{cpqRackPowerSupplyMaxPwrOutput};
+ $total_current_watt += $_->{cpqRackPowerSupplyCurPwrOutput};
+ $total_in_temp += $_->{cpqRackPowerSupplyIntakeTemp}
+ if $_->{cpqRackPowerSupplyIntakeTemp} != -1;
+ $total_out_temp += $_->{cpqRackPowerSupplyExhaustTemp}
+ if $_->{cpqRackPowerSupplyExhaustTemp} != -1;
+ $num_ps++;
+ }
+ }
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => 'watt_total',
+ value => $total_current_watt,
+ warning => $total_max_watt,
+ critical => $total_max_watt,
+ );
+ #$self->{runtime}->{plugin}->add_perfdata(
+ # label => 'watt_total_pct',
+ # value => ($total_current_watt == 0 ? 0 :
+ # sprintf("%.2f",
+ # ($total_current_watt / $total_max_watt * 100))),
+ # warning => 100,
+ # critical => 100,
+ # uom => '%',
+ #);
+ if ($total_in_temp) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => 'in_temp',
+ value => $total_in_temp / $num_ps,
+ );
+ }
+ if ($total_out_temp) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => 'out_temp',
+ value => $total_out_temp / $num_ps,
+ );
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{power_supplies}}) {
+ $_->dump() if $_->{cpqRackPowerSupplyPresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::PowerSupplySubsystem::PowerSupply;
+our @ISA = qw(HP::BladeSystem::Component::PowerSupplySubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackPowerSupply/, keys %params;
+ $self->{name} = $params{cpqRackPowerSupplyRack}.
+ ':'.$params{cpqRackPowerSupplyChassis}.
+ ':'.$params{cpqRackPowerSupplyIndex};
+ $self->{serfw} = sprintf "Ser: %s, FW: %s", $self->{cpqRackPowerSupplySerialNum}, $self->{cpqRackPowerSupplyFWRev};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('ps', $self->{name});
+ my $info = sprintf 'power supply %s is %s, condition is %s (%s)',
+ $self->{name}, $self->{cpqRackPowerSupplyPresent},
+ $self->{cpqRackPowerSupplyCondition}, $self->{serfw};
+ $self->add_info($info);
+ if ($self->{cpqRackPowerSupplyPresent} eq 'present') {
+ if ($self->{cpqRackPowerSupplyCondition} eq 'degraded') {
+ $info .= sprintf " (SparePartNum %s)", $self->{cpqRackPowerSupplySparePartNumber};
+ $self->add_message(WARNING, $info);
+ $self->add_info(sprintf 'power supply %s status is %s, inp.line status is %s',
+ $self->{name}, $self->{cpqRackPowerSupplyStatus},
+ $self->{cpqRackPowerSupplySupplyInputLineStatus});
+ } elsif ($self->{cpqRackPowerSupplyCondition} eq 'failed') {
+ $info .= sprintf " (SparePartNum %s)", $self->{cpqRackPowerSupplySparePartNumber};
+ $self->add_message(CRITICAL, $info);
+ $self->add_info(sprintf 'power supply %s status is %s, inp.line status is %s',
+ $self->{name}, $self->{cpqRackPowerSupplyStatus},
+ $self->{cpqRackPowerSupplySupplyInputLineStatus});
+ }
+ if ($self->{runtime}->{options}->{perfdata} != 2) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('watt_%s', $self->{name}),
+ value => $self->{cpqRackPowerSupplyCurPwrOutput},
+ warning => $self->{cpqRackPowerSupplyMaxPwrOutput},
+ critical => $self->{cpqRackPowerSupplyMaxPwrOutput}
+ );
+ #$self->{runtime}->{plugin}->add_perfdata(
+ # label => sprintf('watt_pct_%s', $self->{name}),
+ # value => ($self->{cpqRackPowerSupplyCurPwrOutput} == 0 ? 0 :
+ # sprintf ("%.2f",
+ # ($self->{cpqRackPowerSupplyCurPwrOutput} /
+ # $self->{cpqRackPowerSupplyMaxPwrOutput} * 100))),
+ # warning => 100,
+ # critical => 100,
+ # uom => '%',
+ #);
+ if ($self->{cpqRackPowerSupplyIntakeTemp} != -1) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('in_temp_%s', $self->{name}),
+ value => $self->{cpqRackPowerSupplyIntakeTemp},
+ );
+ }
+ if ($self->{cpqRackPowerSupplyExhaustTemp} != -1) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('out_temp_%s', $self->{name}),
+ value => $self->{cpqRackPowerSupplyExhaustTemp},
+ );
+ }
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[POWER_SUPPLY%s]\n", $self->{name};
+ foreach (qw(cpqRackPowerSupplyRack cpqRackPowerSupplyChassis cpqRackPowerSupplyIndex cpqRackPowerSupplyEnclosureName cpqRackPowerSupplySerialNum cpqRackPowerSupplySparePartNumber cpqRackPowerSupplyFWRev cpqRackPowerSupplyMaxPwrOutput cpqRackPowerSupplyCurPwrOutput cpqRackPowerSupplyIntakeTemp cpqRackPowerSupplyExhaustTemp cpqRackPowerSupplyStatus cpqRackPowerSupplySupplyInputLineStatus cpqRackPowerSupplyPresent cpqRackPowerSupplyCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/ServerBladeSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/ServerBladeSubsystem.pm
new file mode 100755
index 0000000..2b41f7c
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem/Component/ServerBladeSubsystem.pm
@@ -0,0 +1,158 @@
+package HP::BladeSystem::Component::ServerBladeSubsystem;
+our @ISA = qw(HP::BladeSystem::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},
+ server_blades => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $oids = {
+ cpqRackServerBladeEntry => '1.3.6.1.4.1.232.22.2.4.1.1.1',
+ cpqRackServerBladeRack => '1.3.6.1.4.1.232.22.2.4.1.1.1.1',
+ cpqRackServerBladeChassis => '1.3.6.1.4.1.232.22.2.4.1.1.1.2',
+ cpqRackServerBladeIndex => '1.3.6.1.4.1.232.22.2.4.1.1.1.3',
+ cpqRackServerBladeName => '1.3.6.1.4.1.232.22.2.4.1.1.1.4',
+ cpqRackServerBladeEnclosureName => '1.3.6.1.4.1.232.22.2.4.1.1.1.5',
+ cpqRackServerBladePartNumber => '1.3.6.1.4.1.232.22.2.4.1.1.1.6',
+ cpqRackServerBladeSparePartNumber => '1.3.6.1.4.1.232.22.2.4.1.1.1.7',
+ cpqRackServerBladePosition => '1.3.6.1.4.1.232.22.2.4.1.1.1.8',
+ cpqRackServerBladeHeight => '1.3.6.1.4.1.232.22.2.4.1.1.1.9',
+ cpqRackServerBladeWidth => '1.3.6.1.4.1.232.22.2.4.1.1.1.10',
+ cpqRackServerBladeDepth => '1.3.6.1.4.1.232.22.2.4.1.1.1.11',
+ cpqRackServerBladePresent => '1.3.6.1.4.1.232.22.2.4.1.1.1.12',
+ cpqRackServerBladeHasFuses => '1.3.6.1.4.1.232.22.2.4.1.1.1.13',
+ cpqRackServerBladeEnclosureSerialNum => '1.3.6.1.4.1.232.22.2.4.1.1.1.14',
+ cpqRackServerBladeSlotsUsed => '1.3.6.1.4.1.232.22.2.4.1.1.1.15',
+ cpqRackServerBladeStatus => '1.3.6.1.4.1.232.22.2.4.1.1.1.21',
+ cpqRackServerBladeDiagnosticString => '1.3.6.1.4.1.232.22.2.4.1.1.1.24',
+ cpqRackServerBladePowered => '1.3.6.1.4.1.232.22.2.4.1.1.1.25',
+ cpqRackServerBladePOSTStatus => '1.3.6.1.4.1.232.22.2.4.1.1.1.35',
+ cpqRackServerBladePresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqRackServerBladeStatusValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ cpqRackServerBladePoweredValue => {
+ 0 => 'aechz',
+ 1 => 'other',
+ 2 => 'on',
+ 3 => 'off',
+ 4 => 'powerStagedOff',
+ 5 => 'reboot',
+ },
+ cpqRackServerBladePOSTStatusValue => {
+ 1 => 'other',
+ 2 => 'started',
+ 3 => 'completed',
+ 4 => 'failed',
+ },
+ };
+
+
+ # INDEX { cpqRackServerBladeRack, cpqRackServerBladeChassis, cpqRackServerBladeIndex }
+ # dreckada dreck, dreckada
+ foreach ($self->get_entries($oids, 'cpqRackServerBladeEntry')) {
+ push(@{$self->{server_blades}},
+ HP::BladeSystem::Component::ServerBladeSubsystem::ServerBlade->new(%{$_}));
+ }
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{server_blades}}) {
+ $_->check() if $_->{cpqRackServerBladePresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent blades nur bei -vvv
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{server_blades}}) {
+ $_->dump() if $_->{cpqRackServerBladePresent} eq 'present' ||
+ $self->{runtime}->{options}->{verbose} >= 3; # absent blades nur bei -vvv
+ }
+}
+
+
+package HP::BladeSystem::Component::ServerBladeSubsystem::ServerBlade;
+our @ISA = qw(HP::BladeSystem::Component::ServerBladeSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqRackServerBlade/, keys %params;
+ $self->{cpqRackServerBladeDiagnosticString} ||= '';
+ $self->{name} = $self->{cpqRackServerBladeRack}.
+ ':'.$self->{cpqRackServerBladeChassis}.
+ ':'.$self->{cpqRackServerBladeIndex};
+ bless $self, $class;
+ $self->init();
+#printf "%s\n", Data::Dumper::Dumper(\%params);
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('sb', $self->{name});
+ my $info = sprintf 'server blade %s \'%s\' is %s, status is %s, powered is %s',
+ $self->{name}, $self->{cpqRackServerBladeName}, $self->{cpqRackServerBladePresent},
+ $self->{cpqRackServerBladeStatus}, $self->{cpqRackServerBladePowered};
+ $self->add_info($info);
+ if ($self->{cpqRackServerBladePowered} eq 'on') {
+ if ($self->{cpqRackServerBladeStatus} eq 'degraded') {
+ $self->add_message(WARNING, sprintf 'server blade %s diag is \'%s\', post status is %s',
+ $self->{cpqRackServerBladeName}, $self->{cpqRackServerBladeDiagnosticString},
+ $self->{cpqRackServerBladePOSTStatus});
+ } elsif ($self->{cpqRackServerBladeStatus} eq 'failed') {
+ $self->add_message(CRITICAL, sprintf 'server blade %s diag is \'%s\', post status is %s',
+ $self->{cpqRackServerBladeName}, $self->{cpqRackServerBladeDiagnosticString},
+ $self->{cpqRackServerBladePOSTStatus});
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[SERVER_BLADE_%s]\n", $self->{cpqRackServerBladeName};
+ foreach (qw(cpqRackServerBladeRack cpqRackServerBladeChassis cpqRackServerBladeIndex cpqRackServerBladeName cpqRackServerBladeEnclosureName cpqRackServerBladePartNumber cpqRackServerBladeSparePartNumber cpqRackServerBladePosition cpqRackServerBladeHeight cpqRackServerBladeWidth cpqRackServerBladeDepth cpqRackServerBladePresent cpqRackServerBladeHasFuses cpqRackServerBladeEnclosureSerialNum cpqRackServerBladeSlotsUsed cpqRackServerBladeStatus cpqRackServerBladeDiagnosticString cpqRackServerBladePowered cpqRackServerBladePOSTStatus)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant.pm
new file mode 100755
index 0000000..6b0f1ac
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant.pm
@@ -0,0 +1,771 @@
+package HP::Proliant;
+
+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,
+ nic_subsystem => undef,
+ disk_subsystem => undef,
+ asr_subsystem => undef,
+ event_subsystem => undef,
+ battery_subsystem => undef,
+ };
+ $self->{serial} = 'unknown';
+ $self->{product} = 'unknown';
+ $self->{romversion} = 'unknown';
+ $self->collect();
+ if (! $self->{runtime}->{plugin}->check_messages() &&
+ ! exists $self->{noinst_hint}) {
+ $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_nic_subsystem();
+ $self->analyze_disk_subsystem();
+ $self->analyze_asr_subsystem();
+ $self->analyze_event_subsystem();
+ $self->analyze_battery_subsystem();
+ $self->auto_blacklist();
+ $self->check_cpus();
+ $self->check_powersupplies();
+ $self->check_fan_subsystem();
+ $self->check_temperatures();
+ $self->check_memory_subsystem();
+ $self->check_nic_subsystem();
+ $self->check_disk_subsystem();
+ $self->check_asr_subsystem();
+ $self->check_event_subsystem();
+ $self->check_battery_subsystem();
+ }
+}
+
+sub identify {
+ my $self = shift;
+ foreach (qw(product serial romversion)) {
+ $self->{$_} =~ s/^\s+//;
+ $self->{$_} =~ s/\s+$//;
+ }
+ 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"
+ );
+ if ($self->{romversion} =~ /^\w+ \d+\/\d+\/\d+$/) {
+ $self->{runtime}->{options}->{buggy_firmware} =
+ grep /^$self->{romversion}/, @buggyfirmwares;
+ } else {
+ # nicht parsbarer schrott in cpqSeSysRomVer, gesehen bei Gen9
+ $self->{runtime}->{options}->{buggy_firmware} = undef;
+ }
+}
+
+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::Proliant::Component::PowersupplySubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_fan_subsystem {
+ my $self = shift;
+ $self->{components}->{fan_subsystem} =
+ HP::Proliant::Component::FanSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_temperatures {
+ my $self = shift;
+ $self->{components}->{temperature_subsystem} =
+ HP::Proliant::Component::TemperatureSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_cpus {
+ my $self = shift;
+ $self->{components}->{cpu_subsystem} =
+ HP::Proliant::Component::CpuSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_memory_subsystem {
+ my $self = shift;
+ $self->{components}->{memory_subsystem} =
+ HP::Proliant::Component::MemorySubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_nic_subsystem {
+ my $self = shift;
+ return if $self->{method} ne "snmp";
+ $self->{components}->{nic_subsystem} =
+ HP::Proliant::Component::NicSubsystem->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_asr_subsystem {
+ my $self = shift;
+ $self->{components}->{asr_subsystem} =
+ HP::Proliant::Component::AsrSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_event_subsystem {
+ my $self = shift;
+ $self->{components}->{event_subsystem} =
+ HP::Proliant::Component::EventSubsystem->new(
+ rawdata => $self->{rawdata},
+ method => $self->{method},
+ runtime => $self->{runtime},
+ );
+}
+
+sub analyze_battery_subsystem {
+ my $self = shift;
+ $self->{components}->{battery_subsystem} =
+ HP::Proliant::Component::BatterySubsystem->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_nic_subsystem {
+ my $self = shift;
+ return if $self->{method} ne "snmp";
+ if ($self->{runtime}->{plugin}->{opts}->get('eval-nics')) {
+ $self->{components}->{nic_subsystem}->check();
+ $self->{components}->{nic_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} >= 2;
+ # zum anhaengen an die normale ausgabe... da: 2 logical drives, 5 physical...
+ $self->{runtime}->{plugin}->add_message(OK,
+ $self->{components}->{disk_subsystem}->{summary})
+ if $self->{components}->{disk_subsystem}->{summary};
+}
+
+sub check_asr_subsystem {
+ my $self = shift;
+ $self->{components}->{asr_subsystem}->check();
+ $self->{components}->{asr_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_event_subsystem {
+ my $self = shift;
+ $self->{components}->{event_subsystem}->check();
+ $self->{components}->{event_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub check_battery_subsystem {
+ my $self = shift;
+ $self->{components}->{battery_subsystem}->check();
+ $self->{components}->{battery_subsystem}->dump()
+ if $self->{runtime}->{options}->{verbose} >= 2;
+}
+
+sub auto_blacklist() {
+ my $self = shift;
+ if ($self->{product} =~ /380 g6/) {
+ # http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c01723408/c01723408.pdf seite 19
+ if ($self->{components}->{cpu_subsystem}->num_cpus() == 1) {
+ $self->add_blacklist('ff/f:5,6');
+ }
+ } elsif ($self->{product} =~ /380 g6/) {
+ # http://bizsupport1.austin.hp.com/bc/docs/support/SupportManual/c01704762/c01704762.pdf Fan 2 is only required when processor 2 is installed in the server.
+ }
+}
+
+
+package HP::Proliant::CLI;
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+our @ISA = qw(HP::Proliant);
+
+sub collect {
+ my $self = shift;
+ my $hpasmcli = undef;
+ if (($self->{runtime}->{plugin}->opts->hpasmcli) &&
+ (-f $self->{runtime}->{plugin}->opts->hpasmcli) &&
+ (! -x $self->{runtime}->{plugin}->opts->hpasmcli)) {
+ no strict 'refs';
+ open(BIRK, $self->{runtime}->{plugin}->opts->hpasmcli);
+ # all output in one file prefixed with server|powersupply|fans|temp|dimm
+ while(<BIRK>) {
+ chomp;
+ $self->{rawdata} .= $_."\n";
+ }
+ close BIRK;
+ # If you run this script and redirect it's output to a file
+ # you can use it for testing purposes with
+ # --hpasmcli <output>
+ # It must not be executable. (chmod 644)
+ my $diag = <<'EOEO';
+ hpasmcli=$(which hpasmcli)
+ hpacucli=$(which hpacucli)
+ for i in server powersupply fans temp dimm
+ do
+ $hpasmcli -s "show $i" | while read line
+ do
+ printf "%s %s\n" $i "$line"
+ done
+ done
+ if [ -x "$hpacucli" ]; then
+ for i in config status
+ do
+ $hpacucli ctrl all show $i | while read line
+ do
+ printf "%s %s\n" $i "$line"
+ done
+ done
+ fi
+EOEO
+ } else {
+ #die "exec hpasmcli";
+ # alles einsammeln und in rawdata stecken
+ my $hpasmcli = undef;
+ $hpasmcli = $self->{runtime}->{plugin}->opts->hpasmcli ?
+ $self->{runtime}->{plugin}->opts->hpasmcli : '/sbin/hpasmcli';
+# check if this exists at all
+# descend the directory
+ if ($self->{runtime}->{plugin}->opts->hpasmcli &&
+ -e $self->{runtime}->{plugin}->opts->hpasmcli) {
+ $hpasmcli = $self->{runtime}->{plugin}->opts->hpasmcli;
+ } elsif (-e '/sbin/hpasmcli') {
+ $hpasmcli = '/sbin/hpasmcli';
+ } else {
+ $hpasmcli = undef;
+ }
+ if ($hpasmcli) {
+ if ($< != 0) {
+ close STDIN;
+ $hpasmcli = "sudo -S ".$hpasmcli;
+ }
+ $self->trace(2, sprintf "calling %s\n", $hpasmcli);
+ $self->check_daemon();
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ $self->check_hpasm_client($hpasmcli);
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ foreach my $component (qw(server fans temp dimm powersupply iml)) {
+ if (open HPASMCLI, "$hpasmcli -s \"show $component\" </dev/null |") {
+ my @output = <HPASMCLI>;
+ close HPASMCLI;
+ $self->{rawdata} .= join("\n", map {
+ $component.' '.$_;
+ } @output);
+ }
+ }
+ if ($self->{runtime}->{options}->{hpacucli}) {
+ #1 oder 0. pfad selber finden
+ my $hpacucli = undef;
+ if (-e '/usr/sbin/hpssacli') {
+ $hpacucli = '/usr/sbin/hpssacli';
+ } elsif (-e '/usr/local/sbin/hpssacli') {
+ $hpacucli = '/usr/local/sbin/hpssacli';
+ } elsif (-e '/usr/sbin/hpacucli') {
+ $hpacucli = '/usr/sbin/hpacucli';
+ } elsif (-e '/usr/local/sbin/hpacucli') {
+ $hpacucli = '/usr/local/sbin/hpacucli';
+ } elsif (-e '/usr/sbin/hpssacli') {
+ $hpacucli = '/usr/sbin/hpssacli';
+ } elsif (-e '/usr/local/sbin/hpssacli') {
+ $hpacucli = '/usr/local/sbin/hpssacli';
+ } else {
+ $hpacucli = $hpasmcli;
+ $hpacucli =~ s/^sudo\s*//;
+ $hpacucli =~ s/hpasmcli/hpacucli/;
+ $hpacucli = -e $hpacucli ? $hpacucli : undef;
+ if (! $hpacucli) {
+ $hpacucli = $hpasmcli;
+ $hpacucli =~ s/^sudo\s*//;
+ $hpacucli =~ s/hpasmcli/hpssacli/;
+ $hpacucli = -e $hpacucli ? $hpacucli : undef;
+ }
+ }
+ if ($hpacucli) {
+ if ($< != 0) {
+ close STDIN;
+ $hpacucli = "sudo -S ".$hpacucli;
+ }
+ $self->trace(2, sprintf "calling %s\n", $hpacucli);
+ $self->check_hpacu_client($hpacucli);
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ if (open HPACUCLI, "$hpacucli ctrl all show status 2>&1|") {
+ my @output = <HPACUCLI>;
+ close HPACUCLI;
+ $self->{rawdata} .= join("\n", map {
+ 'status '.$_;
+ } @output);
+ }
+ if (open HPACUCLI, "$hpacucli ctrl all show config 2>&1|") {
+ my @output = <HPACUCLI>;
+ close HPACUCLI;
+ $self->{rawdata} .= join("\n", map {
+ 'config '.$_;
+ } @output);
+ if (grep /Syntax error at "config"/, @output) {
+ # older version of hpacucli CLI 7.50.18.0
+ foreach my $slot (0..10) {
+ if (open HPACUCLI, "$hpacucli ctrl slot=$slot logicaldrive all show 2>&1|") {
+ my @output = <HPACUCLI>;
+ close HPACUCLI;
+ $self->{rawdata} .= join("\n", map {
+ 'config '.$_;
+ } @output);
+ }
+ if (open HPACUCLI, "$hpacucli ctrl slot=$slot physicaldrive all show 2>&1|") {
+ my @output = <HPACUCLI>;
+ close HPACUCLI;
+ $self->{rawdata} .= join("\n", map {
+ 'config '.$_;
+ } @output);
+ }
+ }
+ }
+ }
+ } elsif ($self->{runtime}->{options}->{hpacucli} == 2) {
+ # we probably don't have sudo-privileges, but we were compiled with
+ # --enable-hpacucli=maybe
+ # so we cover it up in silence
+ $self->remove_message(UNKNOWN);
+ $self->trace(2, sprintf "calling %s seems to have failed, but nobody cares\n", $hpacucli);
+ }
+ } else {
+ if ($self->{runtime}->{options}->{noinstlevel} eq 'ok') {
+ $self->add_message(OK,
+ 'hpacucli is not installed. let\'s hope the best...');
+ } else {
+ $self->add_message(
+ uc $self->{runtime}->{options}->{noinstlevel},
+ 'hpacucli is not installed.');
+ }
+ }
+ }
+ }
+ }
+ } else {
+ if ($self->{runtime}->{options}->{noinstlevel} eq 'ok') {
+ $self->add_message(OK,
+ 'hpasm is not installed, i can only guess');
+ $self->{noinst_hint} = 1;
+ } else {
+ $self->add_message(
+ uc $self->{runtime}->{options}->{noinstlevel},
+ 'hpasmcli is not installed.');
+ }
+ }
+ }
+}
+
+
+sub check_daemon {
+ my $self = shift;
+ my $multiproc_os_signatures_files = {
+ '/etc/SuSE-release' => 'VERSION\s*=\s*8',
+ '/etc/trustix-release' => '.*',
+ '/etc/redhat-release' => '.*Pensacola.*',
+ '/etc/debian_version' => '3\.1',
+ '/etc/issue' => '.*Kernel 2\.4\.9-vmnix2.*', # VMware ESX Server 2.5.4
+ };
+ if (open PS, "/bin/ps -e -ocmd|") {
+ my $numprocs = 0;
+ my $numcliprocs = 0;
+ my @procs = <PS>;
+ close PS;
+ $numprocs = grep /hpasm.*d$/, map { (split /\s+/, $_)[0] } @procs;
+ $numcliprocs = grep /hpasmcli/, grep !/check_hpasm/, @procs;
+ if (! $numprocs ) {
+ $self->add_message(CRITICAL, 'hpasmd needs to be restarted');
+ } elsif ($numprocs > 1) {
+ my $known = 0;
+ foreach my $osfile (keys %{$multiproc_os_signatures_files}) {
+ if (-f $osfile) {
+ open OSSIG, $osfile;
+ if (grep /$multiproc_os_signatures_files->{$osfile}/, <OSSIG>) {
+ $known = 1;
+ }
+ close OSSIG;
+ }
+ }
+ if (! $known) {
+ $self->add_message(UNKNOWN, 'multiple hpasmd procs');
+ }
+ }
+ if ($numcliprocs == 1) {
+ $self->add_message(UNKNOWN, 'another hpasmcli is running');
+ } elsif ($numcliprocs > 1) {
+ $self->add_message(UNKNOWN, 'hanging hpasmcli processes');
+ }
+ }
+}
+
+sub check_hpasm_client {
+ my $self = shift;
+ my $hpasmcli = shift;
+ if (open HPASMCLI, "$hpasmcli -s help 2>&1 |") {
+ my @output = <HPASMCLI>;
+ close HPASMCLI;
+ if (grep /Could not communicate with hpasmd/, @output) {
+ $self->add_message(CRITICAL, 'hpasmd needs to be restarted');
+ } elsif (grep /(asswor[dt]:)|(You must be root)/, @output) {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpasmcli);
+ } elsif (grep /must have a tty/, @output) {
+ $self->add_message(CRITICAL,
+ 'sudo must be configured with requiretty=no (man sudo)');
+ } elsif (grep /ERROR: hpasmcli only runs on HPE Proliant Servers/, @output) {
+ $self->add_message(UNKNOWN, "hpasmcli detected incompatible hardware");
+ } elsif (! grep /CLEAR/, @output) {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpasmcli);
+ }
+ } else {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpasmcli);
+ }
+}
+
+sub check_hpacu_client {
+ my $self = shift;
+ my $hpacucli = shift;
+ if (open HPACUCLI, "$hpacucli help 2>&1 |") {
+ my @output = <HPACUCLI>;
+ close HPACUCLI;
+ if (grep /Another instance of hpacucli is running/, @output) {
+ $self->add_message(UNKNOWN, 'another hpacucli is running');
+ } elsif (grep /You need to have administrator rights/, @output) {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpacucli);
+ } elsif (grep /(asswor[dt]:)|(You must be root)/, @output) {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpacucli);
+ } elsif (! grep /(CLI Syntax)|(ACU CLI)/, @output) {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpacucli);
+ }
+ } else {
+ $self->add_message(UNKNOWN,
+ sprintf "insufficient rights to call %s", $hpacucli);
+ }
+}
+
+sub set_serial {
+ my $self = shift;
+ foreach (grep(/^server/, split(/\n/, $self->{rawdata}))) {
+ if (/System\s+:\s+(.*[^\s])/) {
+ $self->{product} = lc $1;
+ } elsif (/Serial No\.\s+:\s+(\w+)/) {
+ $self->{serial} = $1;
+ } elsif (/ROM version\s+:\s+(.*[^\s])/) {
+ $self->{romversion} = $1;
+ }
+ }
+ $self->{serial} = $self->{serial};
+ $self->{product} = lc $self->{product};
+ $self->{romversion} = $self->{romversion};
+ foreach (qw(serial product romversion)) {
+ $self->{$_} =~ s/\s+$//g;
+ }
+}
+
+
+package HP::Proliant::SNMP;
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+our @ISA = qw(HP::Proliant);
+
+sub collect {
+ my $self = shift;
+ my %oidtables = (
+ system => "1.3.6.1.2.1.1",
+ cpqSeProcessor => "1.3.6.1.4.1.232.1.2.2",
+ cpqHePWSComponent => "1.3.6.1.4.1.232.6.2.9",
+ cpqHeThermal => "1.3.6.1.4.1.232.6.2.6",
+ cpqHeMComponent => "1.3.6.1.4.1.232.6.2.14",
+ cpqDaComponent => "1.3.6.1.4.1.232.3.2",
+ cpqSiComponent => "1.3.6.1.4.1.232.2.2",
+ cpqSeRom => "1.3.6.1.4.1.232.1.2.6",
+ cpqSasComponent => "1.3.6.1.4.1.232.5",
+ cpqIdeComponent => "1.3.6.1.4.1.232.14",
+ cpqFcaComponent => "1.3.6.1.4.1.232.16.2",
+ cpqHeAsr => "1.3.6.1.4.1.232.6.2.5",
+ cpqNic => "1.3.6.1.4.1.232.18.2",
+ cpqHeEventLog => "1.3.6.1.4.1.232.6.2.11",
+ cpqHeSysBackupBattery => "1.3.6.1.4.1.232.6.2.17",
+
+ # cpqHeComponent => "1.3.6.1.4.1.232.6.2",
+ # cpqHeFComponent => "1.3.6.1.4.1.232.6.2.6.7",
+ # cpqHeTComponent => "1.3.6.1.4.1.232.6.2.6.8",
+ );
+ my %oidvalues = (
+ cpqHeEventLogSupported => "1.3.6.1.4.1.232.6.2.11.1.0",
+ cpqHeEventLogCondition => "1.3.6.1.4.1.232.6.2.11.2.0",
+ cpqNicIfLogMapOverallCondition => "1.3.6.1.4.1.232.18.2.2.2.0",
+ cpqHeThermalTempStatus => "1.3.6.1.4.1.232.6.2.6.3.0",
+ cpqHeThermalSystemFanStatus => "1.3.6.1.4.1.232.6.2.6.4.0",
+ cpqHeThermalCpuFanStatus => "1.3.6.1.4.1.232.6.2.6.5.0",
+ cpqHeAsrStatus => "1.3.6.1.4.1.232.6.2.5.1.0",
+ cpqHeAsrCondition => "1.3.6.1.4.1.232.6.2.5.17.0",
+ );
+ if ($self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $cpqSeMibCondition = '1.3.6.1.4.1.232.1.1.3.0'; # 2=ok
+ my $cpqHeMibCondition = '1.3.6.1.4.1.232.6.1.3.0'; # hat nicht jeder
+ if ($self->{productname} =~ /4LEE/) {
+ # rindsarsch!
+ $self->{rawdata}->{$cpqHeMibCondition} = 0;
+ }
+ if (! exists $self->{rawdata}->{$cpqHeMibCondition} &&
+ ! exists $self->{rawdata}->{$cpqSeMibCondition}) { # vlt. geht doch was
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no health data (cpqhlth-mib)');
+ }
+ $self->{fullrawdata} = {};
+ %{$self->{fullrawdata}} = %{$self->{rawdata}};
+ $self->{rawdata} = {};
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ # for a better simulation, only put those oids into
+ # rawdata which would also be put by a real snmp agent.
+ foreach my $table (keys %oidtables) {
+ my $oid = $oidtables{$table};
+ $oid =~ s/\./\\./g;
+ my $tmpoids = {};
+ my $tic = time;
+ map { $tmpoids->{$_} = $self->{fullrawdata}->{$_} }
+ grep /^$oid/, %{$self->{fullrawdata}};
+ my $tac = time;
+ $self->trace(2, sprintf "%03d seconds for walk %s (%d oids)",
+ $tac - $tic, $table, scalar(keys %{$tmpoids}));
+ map { $self->{rawdata}->{$_} = $tmpoids->{$_} } keys %{$tmpoids};
+ }
+ my @oids = values %oidvalues;
+ map { $self->{rawdata}->{$_} = $self->{fullrawdata}->{$_} } @oids;
+ }
+ } 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 {
+ $session->translate(['-timeticks' => 0]);
+ # revMajor is often used for discovery of hp devices
+ my $cpqHeMibRev = '1.3.6.1.4.1.232.6.1';
+ my $cpqHeMibRevMajor = '1.3.6.1.4.1.232.6.1.1.0';
+ my $cpqHeMibCondition = '1.3.6.1.4.1.232.6.1.3.0';
+ my $result = $session->get_request(
+ -varbindlist => [$cpqHeMibCondition]
+ );
+ if ($self->{productname} =~ /4LEE/) {
+ # rindsarsch!
+ $result->{$cpqHeMibCondition} = 0;
+ }
+ if (!defined($result) ||
+ $result->{$cpqHeMibCondition} eq 'noSuchInstance' ||
+ $result->{$cpqHeMibCondition} eq 'noSuchObject' ||
+ $result->{$cpqHeMibCondition} 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->{$cpqHeMibCondition} != 2) {
+ # $obstacle = "cmapeerstart";
+ #}
+ }
+ }
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ # snmp peer is alive
+ $self->trace(2, sprintf "Protocol is %s",
+ $self->{runtime}->{snmpparams}->{'-version'});
+ $session->translate;
+ my $response = {}; #break the walk up in smaller pieces
+ foreach my $table (keys %oidtables) {
+ my $oid = $oidtables{$table};
+ my $tic = time;
+ my $tmpresponse = $session->get_table(
+ -baseoid => $oid);
+ if (scalar (keys %{$tmpresponse}) == 0) {
+ $self->trace(2, sprintf "maxrepetitions failed. fallback");
+ $tmpresponse = $session->get_table(
+ -maxrepetitions => 1,
+ -baseoid => $oid);
+ }
+ my $tac = time;
+ $self->trace(2, sprintf "%03d seconds for walk %s (%d oids)",
+ $tac - $tic, $table, scalar(keys %{$tmpresponse}));
+ map { $response->{$_} = $tmpresponse->{$_} } keys %{$tmpresponse};
+ }
+ my @oids = values %oidvalues;
+ my $tic = time;
+ my $tmpresponse = $session->get_request(
+ -varbindlist => \@oids,
+ );
+ my $tac = time;
+ $self->trace(2, sprintf "%03d seconds for get various (%d oids)",
+ $tac - $tic, scalar(keys %{$tmpresponse}));
+ map { $response->{$_} = $tmpresponse->{$_} } keys %{$tmpresponse};
+ $session->close();
+ $self->{rawdata} = $response;
+ }
+ }
+ return $self->{runtime}->{plugin}->check_messages();
+}
+
+sub set_serial {
+ my $self = shift;
+
+ my $cpqSiSysSerialNum = "1.3.6.1.4.1.232.2.2.2.1.0";
+ my $cpqSiProductName = "1.3.6.1.4.1.232.2.2.4.2.0";
+ my $cpqSeSysRomVer = "1.3.6.1.4.1.232.1.2.6.1.0";
+ my $cpqSeRedundantSysRomVer = "1.3.6.1.4.1.232.1.2.6.4.0";
+
+ $self->{serial} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSiSysSerialNum);
+ $self->{product} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSiProductName);
+ $self->{romversion} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSeSysRomVer);
+ $self->{redundantromversion} =
+ SNMP::Utils::get_object($self->{rawdata}, $cpqSeRedundantSysRomVer);
+ if ($self->{romversion} && $self->{romversion} =~
+ #/(\d{2}\/\d{2}\/\d{4}).*?([ADP]{1}\d{2}).*/) {
+ /(\d{2}\/\d{2}\/\d{4}).*?Family.*?([A-Z]{1})(\d+).*/) {
+ $self->{romversion} = sprintf("%s%02d %s", $2, $3, $1);
+ } elsif ($self->{romversion} && $self->{romversion} =~
+ /([ADP]{1}\d{2})\-(\d{2}\/\d{2}\/\d{4})/) {
+ $self->{romversion} = sprintf("%s %s", $1, $2);
+ } else {
+ # fallback if romversion is broken, redundantromversion not
+ #.1.3.6.1.4.1.232.1.2.6.1.0 = STRING: "4), Family "
+ #.1.3.6.1.4.1.232.1.2.6.3.0 = ""
+ #.1.3.6.1.4.1.232.1.2.6.4.0 = STRING: "v1.20 (08/26/2014), Family "
+ if ($self->{redundantromversion} && $self->{redundantromversion} =~
+ /(\d{2}\/\d{2}\/\d{4}).*?Family.*?([A-Z]{1})(\d+).*/) {
+ $self->{romversion} = sprintf("%s%02d %s", $2, $3, $1);
+ } elsif ($self->{redundantromversion} && $self->{redundantromversion} =~
+ /([ADP]{1}\d{2})\-(\d{2}\/\d{2}\/\d{4})/) {
+ $self->{romversion} = sprintf("%s %s", $1, $2);
+ }
+ }
+ if (!$self->{serial} && $self->{romversion}) {
+ # this probably is a very, very old server.
+ $self->{serial} = "METHUSALEM";
+ $self->{runtime}->{scrapiron} = 1;
+ }
+ $self->{serial} = $self->{serial};
+ $self->{product} = lc $self->{product};
+ $self->{romversion} = $self->{romversion};
+ $self->{runtime}->{product} = $self->{product};
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component.pm
new file mode 100755
index 0000000..cefab99
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component.pm
@@ -0,0 +1,5 @@
+package HP::Proliant::Component;
+our @ISA = qw(HP::Proliant);
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem.pm
new file mode 100755
index 0000000..fccfb3d
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem.pm
@@ -0,0 +1,45 @@
+package HP::Proliant::Component::AsrSubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ temperatures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::AsrSubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::AsrSubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking ASR');
+ $self->overall_check();
+}
+
+sub dump {
+ my $self = shift;
+}
+
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/CLI.pm
new file mode 100755
index 0000000..68dad8a
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/CLI.pm
@@ -0,0 +1,32 @@
+package HP::Proliant::Component::AsrSubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::AsrSubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+}
+
+sub overall_check {
+ my $self = shift;
+ my %params = @_;
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/SNMP.pm
new file mode 100755
index 0000000..823ccf4
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/AsrSubsystem/SNMP.pm
@@ -0,0 +1,68 @@
+package HP::Proliant::Component::AsrSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::AsrSubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->overall_init(%params);
+ return $self;
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ my $cpqHeAsrStatus = "1.3.6.1.4.1.232.6.2.5.1.0";
+ my $cpqHeAsrStatusValue = {
+ 1 => "other",
+ 2 => "notAvailable",
+ 3 => "disabled",
+ 4 => "enabled",
+ };
+ my $cpqHeAsrCondition = "1.3.6.1.4.1.232.6.2.5.17.0";
+ my $cpqHeAsrConditionValue = {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ };
+ $self->{asrcondition} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeAsrCondition,
+ $cpqHeAsrConditionValue);
+ $self->{asrstatus} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeAsrStatus,
+ $cpqHeAsrStatusValue);
+ $self->{asrcondition} |= lc $self->{asrcondition};
+ $self->{asrstatus} |= lc $self->{asrstatus};
+}
+
+sub overall_check {
+ my $self = shift;
+ my $result = 0;
+ $self->blacklist('asr', '');
+ if ($self->{asrstatus} and $self->{asrstatus} eq "enabled") {
+ my $info = sprintf 'ASR overall condition is %s', $self->{asrcondition};
+ if ($self->{asrcondition} eq "degraded") {
+ $self->add_message(WARNING, $info);
+ } elsif ($self->{asrcondition} eq "failed") {
+ $self->add_message(CRITICAL, $info);
+ }
+ $self->add_info($info);
+ } else {
+ $self->add_info('This system does not have ASR.');
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem.pm
new file mode 100755
index 0000000..82da78d
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem.pm
@@ -0,0 +1,124 @@
+package HP::Proliant::Component::BatterySubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ sysbatteries => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::BatterySubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ #return HP::Proliant::Component::BatterySubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking sysbatteries');
+ if (scalar (@{$self->{sysbatteries}}) == 0) {
+ #$self->overall_check();
+ $self->add_info('no sysbatteries found');
+ } else {
+ foreach (sort { $a->{cpqHeSysBatteryIndex} <=> $b->{cpqHeSysBatteryIndex}}
+ @{$self->{sysbatteries}}) {
+ $_->check();
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{sysbatteries}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::BatterySubsystem::Battery;
+our @ISA = qw(HP::Proliant::Component::BatterySubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeSysBatteryChassis => $params{cpqHeSysBatteryChassis},
+ cpqHeSysBatteryIndex => $params{cpqHeSysBatteryIndex},
+ cpqHeSysBatteryPresent => $params{cpqHeSysBatteryPresent},
+ cpqHeSysBatteryCondition => $params{cpqHeSysBatteryCondition},
+ cpqHeSysBatteryStatus => $params{cpqHeSysBatteryStatus},
+ cpqHeSysBatteryCapacityMaximum => $params{cpqHeSysBatteryCapacityMaximum},
+ cpqHeSysBatteryProductName => $params{cpqHeSysBatteryProductName},
+ cpqHeSysBatteryModel => $params{cpqHeSysBatteryModel},
+ cpqHeSysBatterySerialNumber => $params{cpqHeSysBatterySerialNumber},
+ cpqHeSysBatteryFirmwareRev => $params{cpqHeSysBatteryFirmwareRev},
+ cpqHeSysBatterySparePartNum => $params{cpqHeSysBatterySparePartNum},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ $self->{name} = $params{name} ||
+ $self->{cpqHeSysBatteryChassis}.':'.$self->{cpqHeSysBatteryIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('sba', $self->{name});
+ my $info = sprintf "battery %s/%s has condition %s and status %s",
+ $self->{cpqHeSysBatteryChassis},
+ $self->{cpqHeSysBatteryIndex},
+ $self->{cpqHeSysBatteryCondition},
+ $self->{cpqHeSysBatteryStatus};
+ if ($self->{cpqHeSysBatteryCondition} eq "ok") {
+ } elsif ($self->{cpqHeSysBatteryCondition} eq "degraded") {
+ $self->add_info($info);
+ $self->add_message(WARNING, $self->{info});
+ } elsif ($self->{cpqHeSysBatteryCondition} eq "failed") {
+ $self->add_info($info);
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info($info);
+ $self->add_message(UNKNOWN, $self->{info});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[SYSBATTERY_%s_%s]\n", $self->{cpqHeSysBatteryChassis},
+ $self->{cpqHeSysBatteryIndex};
+ foreach (qw(cpqHeSysBatteryChassis cpqHeSysBatteryIndex
+ cpqHeSysBatteryPresent cpqHeSysBatteryCondition cpqHeSysBatteryStatus
+ cpqHeSysBatteryCapacityMaximum cpqHeSysBatteryProductName
+ cpqHeSysBatteryModel cpqHeSysBatterySerialNumber
+ cpqHeSysBatteryFirmwareRev cpqHeSysBatterySparePartNum)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/CLI.pm
new file mode 100755
index 0000000..46211e6
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/CLI.pm
@@ -0,0 +1,27 @@
+package HP::Proliant::Component::BatterySubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::BatterySubsystem);
+
+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},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/SNMP.pm
new file mode 100755
index 0000000..2fb23df
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/BatterySubsystem/SNMP.pm
@@ -0,0 +1,78 @@
+package HP::Proliant::Component::BatterySubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::BatterySubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ sysbatteries => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeSysBatteryTable => '1.3.6.1.4.1.232.6.2.17.2',
+ cpqHeSysBatteryEntry => '1.3.6.1.4.1.232.6.2.17.2.1',
+ cpqHeSysBatteryChassis => '1.3.6.1.4.1.232.6.2.17.2.1.1',
+ cpqHeSysBatteryIndex => '1.3.6.1.4.1.232.6.2.17.2.1.2',
+ cpqHeSysBatteryPresent => '1.3.6.1.4.1.232.6.2.17.2.1.3',
+ cpqHeSysBatteryPresentValue => {
+ '1' => 'other',
+ '2' => 'absent',
+ '3' => 'present',
+ },
+ cpqHeSysBatteryCondition => '1.3.6.1.4.1.232.6.2.17.2.1.4',
+ cpqHeSysBatteryConditionValue => {
+ '1' => 'other',
+ '2' => 'ok',
+ '3' => 'degraded',
+ '4' => 'failed',
+ },
+ cpqHeSysBatteryStatus => '1.3.6.1.4.1.232.6.2.17.2.1.5',
+ cpqHeSysBatteryStatusValue => {
+ '1' => 'noError',
+ '2' => 'generalFailure',
+ '3' => 'shutdownHighResistance',
+ '4' => 'shutdownLowVoltage',
+ '5' => 'shutdownShortCircuit',
+ '6' => 'shutdownChargeTimeout',
+ '7' => 'shutdownOverTemperature',
+ '8' => 'shutdownDischargeMinVoltage',
+ '9' => 'shutdownDischargeCurrent',
+ '10' => 'shutdownLoadCountHigh',
+ '11' => 'shutdownEnablePin',
+ '12' => 'shutdownOverCurrent',
+ '13' => 'shutdownPermanentFailure',
+ '14' => 'shutdownBackupTimeExceeded',
+ },
+ cpqHeSysBatteryCapacityMaximum => '1.3.6.1.4.1.232.6.2.17.2.1.6',
+ cpqHeSysBatteryProductName => '1.3.6.1.4.1.232.6.2.17.2.1.7',
+ cpqHeSysBatteryModel => '1.3.6.1.4.1.232.6.2.17.2.1.8',
+ cpqHeSysBatterySerialNumber => '1.3.6.1.4.1.232.6.2.17.2.1.9',
+ cpqHeSysBatteryFirmwareRev => '1.3.6.1.4.1.232.6.2.17.2.1.10',
+ cpqHeSysBatterySparePartNum => '1.3.6.1.4.1.232.6.2.17.2.1.11',
+ };
+ # INDEX { cpqHeSysBatteryChassis, cpqHeSysBatteryIndex }
+ foreach ($self->get_entries($oids, 'cpqHeSysBatteryEntry')) {
+ next if ! $_->{cpqHeSysBatteryPresent} eq "present";
+ push(@{$self->{sysbatteries}},
+ HP::Proliant::Component::BatterySubsystem::Battery->new(%{$_}));
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem.pm
new file mode 100755
index 0000000..0486fd9
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem.pm
@@ -0,0 +1,112 @@
+package HP::Proliant::Component::CpuSubsystem;
+our @ISA = qw(HP::Proliant::Component);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+################################## scrapiron ##########
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ method => $params{method},
+ condition => $params{condition},
+ status => $params{status},
+ cpus => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::CpuSubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::CpuSubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking cpus');
+ if (scalar (@{$self->{cpus}}) == 0) {
+ # sachen gibts.....
+ # $self->overall_check(); # sowas ist mir nur einmal untergekommen
+ } else {
+ foreach (@{$self->{cpus}}) {
+ $_->check();
+ }
+ }
+}
+
+sub num_cpus {
+ my $self = shift;
+ return scalar @{$self->{cpus}};
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{cpus}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::CpuSubsystem::Cpu;
+our @ISA = qw(HP::Proliant::Component::CpuSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqSeCpuSlot => $params{cpqSeCpuSlot},
+ cpqSeCpuUnitIndex => $params{cpqSeCpuUnitIndex},
+ cpqSeCpuName => $params{cpqSeCpuName},
+ cpqSeCpuStatus => $params{cpqSeCpuStatus},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('c', $self->{cpqSeCpuUnitIndex});
+ if ($self->{cpqSeCpuStatus} ne "ok") {
+ if ($self->{runtime}->{options}{scrapiron} &&
+ ($self->{cpqSeCpuStatus} eq "unknown")) {
+ $self->add_info(sprintf "cpu %d probably ok (%s)",
+ $self->{cpqSeCpuUnitIndex}, $self->{cpqSeCpuStatus});
+ } else {
+ $self->add_info(sprintf "cpu %d needs attention (%s)",
+ $self->{cpqSeCpuUnitIndex}, $self->{cpqSeCpuStatus});
+ $self->add_message(CRITICAL, $self->{info});
+ }
+ } else {
+ $self->add_info(sprintf "cpu %d is %s",
+ $self->{cpqSeCpuUnitIndex}, $self->{cpqSeCpuStatus});
+ }
+ $self->add_extendedinfo(sprintf "cpu_%s=%s",
+ $self->{cpqSeCpuUnitIndex}, $self->{cpqSeCpuStatus});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[CPU_%s]\n", $self->{cpqSeCpuUnitIndex};
+ foreach (qw(cpqSeCpuSlot cpqSeCpuUnitIndex cpqSeCpuName cpqSeCpuStatus)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/CLI.pm
new file mode 100755
index 0000000..8953417
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/CLI.pm
@@ -0,0 +1,57 @@
+package HP::Proliant::Component::CpuSubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::CpuSubsystem);
+
+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},
+ cpus => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my %tmpcpu = (
+ runtime => $params{runtime},
+ );
+ my $inblock = 0;
+ foreach (grep(/^server/, split(/\n/, $self->{rawdata}))) {
+ if (/Processor:\s+(\d+)/) {
+ $tmpcpu{cpqSeCpuUnitIndex} = $1;
+ $inblock = 1;
+ } elsif (/Name\s*:\s+(.+?)\s*$/) {
+ $tmpcpu{cpqSeCpuName} = $1;
+ } elsif (/Status\s*:\s+(.+?)\s*$/) {
+ $tmpcpu{cpqSeCpuStatus} = lc $1;
+ } elsif (/Socket\s*:\s+(.+?)\s*$/) {
+ $tmpcpu{cpqSeCpuSlot} = $1;
+ } elsif (/^server\s*$/) {
+ if ($inblock) {
+ $inblock = 0;
+ push(@{$self->{cpus}},
+ HP::Proliant::Component::CpuSubsystem::Cpu->new(%tmpcpu));
+ %tmpcpu = (
+ runtime => $params{runtime},
+ );
+ }
+ }
+ }
+ if ($inblock) {
+ push(@{$self->{cpus}},
+ HP::Proliant::Component::CpuSubsystem::Cpu->new(%tmpcpu));
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/SNMP.pm
new file mode 100755
index 0000000..0824d04
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/CpuSubsystem/SNMP.pm
@@ -0,0 +1,50 @@
+package HP::Proliant::Component::CpuSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::CpuSubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ cpus => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init();
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ # CPQSTDEQ-MIB
+ my $oids = {
+ cpqSeCpuEntry => '1.3.6.1.4.1.232.1.2.2.1.1',
+ cpqSeCpuUnitIndex => '1.3.6.1.4.1.232.1.2.2.1.1.1',
+ cpqSeCpuSlot => '1.3.6.1.4.1.232.1.2.2.1.1.2',
+ cpqSeCpuName => '1.3.6.1.4.1.232.1.2.2.1.1.3',
+ cpqSeCpuStatus => '1.3.6.1.4.1.232.1.2.2.1.1.6',
+ cpqSeCpuStatusValue => {
+ 1 => "unknown",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ 5 => "disabled",
+ },
+ };
+
+ # INDEX { cpqSeCpuUnitIndex }
+ foreach ($self->get_entries($oids, 'cpqSeCpuEntry')) {
+ push(@{$self->{cpus}},
+ HP::Proliant::Component::CpuSubsystem::Cpu->new(%{$_}));
+ }
+}
+
+1;
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;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da.pm
new file mode 100755
index 0000000..5dbc5ef
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da.pm
@@ -0,0 +1,407 @@
+package HP::Proliant::Component::DiskSubsystem::Da;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
+
+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},
+ controllers => [],
+ accelerators => [],
+ enclosures => [],
+ physical_drives => [],
+ logical_drives => [],
+ spare_drives => [],
+ condition => undef,
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Da::SNMP';
+ } else {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Da::CLI';
+ }
+ $self->init();
+ $self->assemble();
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->dump();
+ }
+}
+
+package HP::Proliant::Component::DiskSubsystem::Da::Controller;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqDaCntlrIndex => $params{cpqDaCntlrIndex},
+ cpqDaCntlrSlot => $params{cpqDaCntlrSlot},
+ cpqDaCntlrModel => $params{cpqDaCntlrModel},
+ cpqDaCntlrCondition => $params{cpqDaCntlrCondition},
+ cpqDaCntlrBoardCondition => $params{cpqDaCntlrBoardCondition},
+ blacklisted => 0,
+ };
+ $self->{name} = $params{name} || $self->{cpqDaCntlrSlot};
+ $self->{controllerindex} = $self->{cpqDaCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+#$self->dumper($self);
+ $self->blacklist('daco', $self->{cpqDaCntlrIndex});
+ foreach (@{$self->{accelerators}}) {
+ $_->check();
+ }
+ foreach (@{$self->{enclosures}}) {
+ $_->check();
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->check();
+ }
+ if ($self->{cpqDaCntlrCondition} eq 'other') {
+ if (scalar(@{$self->{physical_drives}})) {
+ $self->add_message(CRITICAL,
+ sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ $self->add_info(sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ } else {
+ $self->add_info(sprintf 'da controller %s in slot %s is ok and unused',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ $self->{blacklisted} = 1;
+ }
+ } elsif ($self->{cpqDaCntlrCondition} eq 'degraded') {
+ # maybe only the battery has failed and is disabled, no problem
+ if (scalar(grep {
+ $_->has_failed() && $_->is_disabled()
+ } @{$self->{accelerators}})) {
+ # message was already written in the accel code
+ } else {
+ $self->add_message(CRITICAL,
+ sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ $self->add_info(sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ }
+ } elsif ($self->{cpqDaCntlrCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ $self->add_info(sprintf 'da controller %s in slot %s needs attention',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ } else {
+ $self->add_info(sprintf 'da controller %s in slot %s is ok',
+ $self->{cpqDaCntlrIndex}, $self->{cpqDaCntlrSlot});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[DA_CONTROLLER_%s]\n", $self->{name};
+ foreach (qw(cpqDaCntlrSlot cpqDaCntlrIndex cpqDaCntlrCondition
+ cpqDaCntlrModel)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+ foreach (@{$self->{accelerators}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{enclosures}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Da::Accelerator;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqDaAccelCntlrIndex => $params{cpqDaAccelCntlrIndex},
+ cpqDaAccelBattery => $params{cpqDaAccelBattery} || 'notPresent',
+ cpqDaAccelCondition => $params{cpqDaAccelCondition},
+ cpqDaAccelStatus => $params{cpqDaAccelStatus},
+ cpqDaAccelErrCode => $params{cpqDaAccelErrCode},
+ blacklisted => 0,
+ failed => 0,
+ };
+ $self->{controllerindex} = $self->{cpqDaAccelCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('daac', $self->{cpqDaAccelCntlrIndex});
+ $self->add_info(sprintf 'controller accelerator is %s',
+ $self->{cpqDaAccelCondition});
+ if ($self->{cpqDaAccelCondition} eq "failed" || $self->{cpqDaAccelCondition} eq "degraded") {
+ $self->add_message(CRITICAL, sprintf
+ "controller accelerator is %s (reason: %s) and needs attention",
+ $self->{cpqDaAccelCondition}, $self->{cpqDaAccelErrCode});
+ }
+ $self->blacklist('daacb', $self->{cpqDaAccelCntlrIndex});
+ $self->add_info(sprintf 'controller accelerator battery is %s',
+ $self->{cpqDaAccelBattery});
+ if ($self->{cpqDaAccelBattery} eq "notPresent") {
+ } elsif ($self->{cpqDaAccelBattery} eq "recharging") {
+ $self->add_message(WARNING, "controller accelerator battery recharging");
+ } elsif ($self->{cpqDaAccelBattery} eq "failed" &&
+ $self->{cpqDaAccelStatus} eq "tmpDisabled") {
+ $self->add_message(WARNING, "controller accelerator battery needs attention");
+ } elsif ($self->{cpqDaAccelBattery} ne "ok") {
+ # (other) failed degraded
+ $self->add_message(CRITICAL, "controller accelerator battery needs attention");
+ }
+}
+
+sub has_failed {
+ my $self = shift;
+ return $self->{cpqDaAccelStatus} =~ /Disabled/ ? 1 : 0;
+}
+
+sub is_disabled {
+ my $self = shift;
+ return $self->{cpqDaAccelStatus} =~ /Disabled/ ? 1 : 0;
+}
+
+sub dump {
+ my $self = shift;
+ printf "[ACCELERATOR]\n";
+ foreach (qw(cpqDaAccelCntlrIndex cpqDaAccelBattery
+ cpqDaAccelStatus cpqDaAccelCondition cpqDaAccelErrCode)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+package HP::Proliant::Component::DiskSubsystem::Da::Enclosure;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ name => $params{name},
+ cpqDaEnclCntlrIndex => $params{cpqDaEnclCntlrIndex},
+ cpqDaEnclIndex => $params{cpqDaEnclIndex},
+ cpqDaEnclPort => $params{cpqDaEnclPort},
+ cpqDaEnclBox => $params{cpqDaEnclBox},
+ cpqDaEnclCondition => $params{cpqDaEnclCondition},
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqDaEnclPort}.':'.$self->{cpqDaEnclBox}; ##vorerst
+ $self->{controllerindex} = $self->{cpqDaEnclCntlrIndex};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('dae', $self->{name});
+ $self->add_info(
+ sprintf "disk enclosure %s is %s",
+ $self->{name}, $self->{cpqDaEnclCondition});
+ if ($self->{cpqDaEnclCondition} !~ /^OK/) {
+ $self->add_message(CRITICAL,
+ sprintf "disk enclosure %s is %s",
+ $self->{name}, $self->{cpqDaEnclCondition});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[Disk Enclosure]\n";
+ foreach (qw(cpqDaEnclCntlrIndex cpqDaEnclIndex cpqDaEnclPort
+ cpqDaEnclBox cpqDaEnclCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+package HP::Proliant::Component::DiskSubsystem::Da::LogicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqDaLogDrvIndex => $params{cpqDaLogDrvIndex},
+ cpqDaLogDrvCntlrIndex => $params{cpqDaLogDrvCntlrIndex},
+ cpqDaLogDrvSize => $params{cpqDaLogDrvSize},
+ cpqDaLogDrvFaultTol => $params{cpqDaLogDrvFaultTol},
+ cpqDaLogDrvPercentRebuild => $params{cpqDaLogDrvPercentRebuild},
+ cpqDaLogDrvStatus => $params{cpqDaLogDrvStatus},
+ cpqDaLogDrvCondition => $params{cpqDaLogDrvCondition},
+ cpqDaLogDrvPhyDrvIDs => $params{cpqDaLogDrvPhyDrvIDs},
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqDaLogDrvCntlrIndex}.':'.$self->{cpqDaLogDrvIndex}; ##vorerst
+ $self->{controllerindex} = $self->{cpqDaLogDrvCntlrIndex};
+ if (! $self->{cpqDaLogDrvPercentRebuild} ||
+ $self->{cpqDaLogDrvPercentRebuild} == 4294967295) {
+ $self->{cpqDaLogDrvPercentRebuild} = 100;
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('dald', $self->{name});
+ $self->add_info(sprintf "logical drive %s is %s (%s)",
+ $self->{name}, $self->{cpqDaLogDrvStatus},
+ $self->{cpqDaLogDrvFaultTol});
+ if ($self->{cpqDaLogDrvCondition} ne "ok") {
+ if ($self->{cpqDaLogDrvStatus} =~
+ /rebuild|recovering|recovery|expanding|queued/) {
+ $self->add_message(WARNING,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqDaLogDrvStatus});
+ } else {
+ $self->add_message(CRITICAL,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqDaLogDrvStatus});
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LOGICAL_DRIVE]\n";
+ foreach (qw(cpqDaLogDrvCntlrIndex cpqDaLogDrvIndex cpqDaLogDrvSize
+ cpqDaLogDrvFaultTol cpqDaLogDrvStatus cpqDaLogDrvCondition
+ cpqDaLogDrvPercentRebuild cpqDaLogDrvPhyDrvIDs)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Da::PhysicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ name => $params{name},
+ cpqDaPhyDrvCntlrIndex => $params{cpqDaPhyDrvCntlrIndex},
+ cpqDaPhyDrvIndex => $params{cpqDaPhyDrvIndex},
+ cpqDaPhyDrvBay => $params{cpqDaPhyDrvBay},
+ cpqDaPhyDrvBusNumber => $params{cpqDaPhyDrvBusNumber},
+ cpqDaPhyDrvSize => $params{cpqDaPhyDrvSize},
+ cpqDaPhyDrvStatus => $params{cpqDaPhyDrvStatus},
+ cpqDaPhyDrvCondition => $params{cpqDaPhyDrvCondition},
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqDaPhyDrvCntlrIndex}.':'.$self->{cpqDaPhyDrvIndex}; ##vorerst
+ $self->{controllerindex} = $self->{cpqDaPhyDrvCntlrIndex};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('dapd', $self->{name});
+ $self->add_info(
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqDaPhyDrvCondition});
+ if ($self->{cpqDaPhyDrvCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqDaPhyDrvCondition});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PHYSICAL_DRIVE]\n";
+ foreach (qw(cpqDaPhyDrvCntlrIndex cpqDaPhyDrvIndex cpqDaPhyDrvBay
+ cpqDaPhyDrvBusNumber cpqDaPhyDrvSize cpqDaPhyDrvStatus
+ cpqDaPhyDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Da::SpareDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub dump {
+ my $self = shift;
+ printf "[SPARE_DRIVE]\n";
+ foreach (qw(cpqDaPhyDrvCntlrIndex cpqDaPhyDrvIndex cpqDaPhyDrvBay
+ cpqDaPhyDrvBusNumber cpqDaPhyDrvSize cpqDaPhyDrvStatus
+ cpqDaPhyDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/CLI.pm
new file mode 100755
index 0000000..75d3181
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/CLI.pm
@@ -0,0 +1,239 @@
+package HP::Proliant::Component::DiskSubsystem::Da::CLI;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Da);
+
+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 $hpacucli = $self->{rawdata};
+ my $slot = 0;
+ my $type = "unkn";
+ my @lines = ();
+ my $thistype = 0;
+ my $tmpcntl = {};
+ my $tmpaccel = {};
+ my $tmpld = {};
+ my $tmppd = {};
+ my $tmpencl = {};
+ my $cntlindex = 0;
+ my $enclosureindex = 0;
+ my $ldriveindex = 0;
+ my $pdriveindex = 0;
+ my $incontroller = 0;
+ foreach (split(/\n/, $hpacucli)) {
+ next unless /^status/;
+ next if /^status\s*$/;
+ s/^status\s*//;
+ if (/(MSA[\s\w]+)\s+in\s+(\w+)/) {
+ $incontroller = 1;
+ $slot = $2;
+ $cntlindex++;
+ $tmpcntl->{$slot}->{cpqDaCntlrIndex} = $cntlindex;
+ $tmpcntl->{$slot}->{cpqDaCntlrModel} = $1;
+ $tmpcntl->{$slot}->{cpqDaCntlrSlot} = $slot;
+ } elsif (/([\s\w]+) in Slot\s+(\d+)/) {
+ $incontroller = 1;
+ $slot = $2;
+ $cntlindex++;
+ $tmpcntl->{$slot}->{cpqDaCntlrIndex} = $cntlindex;
+ $tmpcntl->{$slot}->{cpqDaCntlrModel} = $1;
+ $tmpcntl->{$slot}->{cpqDaCntlrSlot} = $slot;
+ } elsif (/Controller Status: (\w+)/) {
+ $tmpcntl->{$slot}->{cpqDaCntlrBoardCondition} = lc $1;
+ $tmpcntl->{$slot}->{cpqDaCntlrCondition} = lc $1;
+ } elsif (/Cache Status: ([\w\s]+?)\s*$/) {
+ # Cache Status: OK
+ # Cache Status: Not Configured
+ # Cache Status: Temporarily Disabled
+ $tmpaccel->{$slot}->{cpqDaAccelCntlrIndex} = $cntlindex;
+ $tmpaccel->{$slot}->{cpqDaAccelSlot} = $slot;
+ #condition: other,ok,degraded,failed
+ #status: other,invalid,enabled,tmpDisabled,permDisabled
+ $tmpaccel->{$slot}->{cpqDaAccelCondition} = lc $1;
+ if ($tmpaccel->{$slot}->{cpqDaAccelCondition} eq 'ok') {
+ $tmpaccel->{$slot}->{cpqDaAccelStatus} = 'enabled';
+ } elsif ($tmpaccel->{$slot}->{cpqDaAccelCondition} eq 'not configured') {
+ $tmpaccel->{$slot}->{cpqDaAccelCondition} = 'ok';
+ $tmpaccel->{$slot}->{cpqDaAccelStatus} = 'enabled';
+ } elsif ($tmpaccel->{$slot}->{cpqDaAccelCondition} eq 'temporarily disabled') {
+ $tmpaccel->{$slot}->{cpqDaAccelCondition} = 'ok';
+ $tmpaccel->{$slot}->{cpqDaAccelStatus} = 'tmpDisabled';
+ } elsif ($tmpaccel->{$slot}->{cpqDaAccelCondition} eq 'permanently disabled') {
+ $tmpaccel->{$slot}->{cpqDaAccelCondition} = 'ok';
+ $tmpaccel->{$slot}->{cpqDaAccelStatus} = 'permDisabled';
+ } else {
+ $tmpaccel->{$slot}->{cpqDaAccelStatus} = 'enabled';
+ }
+ } elsif (/Battery.* Status: (\w+)/) {
+ # sowas gibts auch Battery/Capacitor Status: OK
+ $tmpaccel->{$slot}->{cpqDaAccelBattery} = lc $1;
+ } elsif (/^\s*$/) {
+ }
+ }
+ $slot = 0;
+ $cntlindex = 0;
+ $enclosureindex = 0;
+ $ldriveindex = 0;
+ $pdriveindex = 0;
+ foreach (split(/\n/, $hpacucli)) {
+ next unless /^config/;
+ next if /^config\s*$/;
+ s/^config\s*//;
+ if (/(MSA[\s\w]+)\s+in\s+(\w+)/) {
+ $slot = $2;
+ $cntlindex++;
+ $pdriveindex = 1;
+ } elsif (/([\s\w]+) in Slot\s+(\d+)/) {
+ #if ($slot ne $2 || ! $slot) {
+ $cntlindex++;
+ # 2012-12-15 das passt nicht zur oberen schleife
+ # ich habe keine ahnung, was der hintergrund fuer dieses if ist
+ #}
+ $slot = $2;
+ $pdriveindex = 1;
+ } elsif (/([\s\w]+) at Port ([\w]+), Box (\d+), (.*)/) {
+ $enclosureindex++;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclCntlrIndex} = $cntlindex;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclIndex} = $enclosureindex;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclPort} = $2;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclBox} = $3;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclCondition} = $4;
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclStatus} =
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaEnclCondition};
+ $tmpencl->{$slot}->{$enclosureindex}->{cpqDaLogDrvPhyDrvIDs} = 'unknown';
+ } elsif (/logicaldrive\s+(.+?)\s+\((.*)\)/) {
+ # logicaldrive 1 (683.5 GB, RAID 5, OK)
+ # logicaldrive 1 (683.5 GB, RAID 5, OK)
+ # logicaldrive 2 (442 MB, RAID 1+0, OK)
+ $ldriveindex = $1;
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvCntlrIndex} = $cntlindex;
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvIndex} = $ldriveindex;
+ ($tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvSize},
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvFaultTol},
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvCondition}) =
+ map { lc $_ } split(/,\s*/, $2);
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvStatus} =
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvCondition};
+ $tmpld->{$slot}->{$ldriveindex}->{cpqDaLogDrvPhyDrvIDs} = 'unknown';
+ } elsif (/physicaldrive\s+(.+?)\s+\((.*)\)/) {
+ # physicaldrive 2:0 (port 2:id 0 , Parallel SCSI, 36.4 GB, OK)
+ # physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 146 GB, OK)
+ # physicaldrive 1:1 (box 1:bay 1, Parallel SCSI, 146 GB, OK)
+ my $name = $1;
+ my($location, $type, $size, $status) = split(/,/, $2);
+ $status =~ s/^\s+//g;
+ $status =~ s/\s+$//g;
+ $status = lc $status;
+ my %location = ();
+ foreach (split(/:/, $location)) {
+ $location{$1} = $2 if /(\w+)\s+(\w+)/;
+ }
+ $location{box} ||= 0;
+ $location{id} ||= $pdriveindex;
+ $location{bay} ||= $location{id};
+ $location{port} ||= $location{bay};
+ $tmppd->{$slot}->{$name}->{name} = lc $name;
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvCntlrIndex} = $cntlindex;
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvIndex} = $location{id};
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvBay} = $location{bay};
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvBusNumber} = $location{port};
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvSize} = $size;
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvStatus} = $status;
+ $tmppd->{$slot}->{$name}->{cpqDaPhyDrvCondition} = $status;
+ $tmppd->{$slot}->{$name}->{ldriveindex} = $ldriveindex || -1;
+ foreach (keys %{$tmppd->{$slot}->{$name}}) {
+ $tmppd->{$slot}->{$name}->{$_} =~ s/^\s+//g;
+ $tmppd->{$slot}->{$name}->{$_} =~ s/\s+$//g;
+ $tmppd->{$slot}->{$name}->{$_} = lc $tmppd->{$slot}->{$name}->{$_};
+ }
+ $pdriveindex++;
+ }
+ }
+
+ foreach my $slot (keys %{$tmpcntl}) {
+ if (exists $tmpcntl->{$slot}->{cpqDaCntlrModel} &&
+ ! $self->identified($tmpcntl->{$slot}->{cpqDaCntlrModel})) {
+ delete $tmpcntl->{$slot};
+ delete $tmpaccel->{$slot};
+ delete $tmpencl->{$slot};
+ delete $tmpld->{$slot};
+ delete $tmppd->{$slot};
+ }
+ }
+
+#printf "%s\n", Data::Dumper::Dumper($tmpcntl);
+#printf "%s\n", Data::Dumper::Dumper($tmpaccel);
+#printf "%s\n", Data::Dumper::Dumper($tmpld);
+#printf "%s\n", Data::Dumper::Dumper($tmppd);
+ foreach my $slot (sort {
+ $tmpcntl->{$a}->{cpqDaCntlrIndex} <=> $tmpcntl->{$b}->{cpqDaCntlrIndex}
+ }keys %{$tmpcntl}) {
+ $tmpcntl->{$slot}->{runtime} = $self->{runtime};
+ push(@{$self->{controllers}},
+ HP::Proliant::Component::DiskSubsystem::Da::Controller->new(
+ %{$tmpcntl->{$slot}}));
+ }
+ foreach my $slot (sort {
+ $tmpaccel->{$a}->{cpqDaAccelCntlrIndex} <=> $tmpaccel->{$b}->{cpqDaAccelCntlrIndex}
+ } keys %{$tmpaccel}) {
+ $tmpaccel->{$slot}->{runtime} = $self->{runtime};
+ push(@{$self->{accelerators}},
+ HP::Proliant::Component::DiskSubsystem::Da::Accelerator->new(
+ %{$tmpaccel->{$slot}}));
+ }
+ foreach my $slot (keys %{$tmpencl}) {
+ foreach my $enclosureindex (keys %{$tmpencl->{$slot}}) {
+ $tmpencl->{$slot}->{$enclosureindex}->{runtime} = $self->{runtime};
+ push(@{$self->{enclosures}},
+ HP::Proliant::Component::DiskSubsystem::Da::Enclosure->new(
+ %{$tmpencl->{$slot}->{$enclosureindex}}));
+ }
+ }
+ foreach my $slot (keys %{$tmpld}) {
+ foreach my $ldriveindex (keys %{$tmpld->{$slot}}) {
+ $tmpld->{$slot}->{$ldriveindex}->{runtime} = $self->{runtime};
+ push(@{$self->{logical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Da::LogicalDrive->new(
+ %{$tmpld->{$slot}->{$ldriveindex}}));
+ }
+ foreach my $pdriveindex (sort {
+ (split ':', $a, 2)[0] cmp (split ':', $b, 2)[0] ||
+ (split ':', $a, 2)[1] cmp (split ':', $b, 2)[1] ||
+ (split ':', $a, 2)[2] <=> (split ':', $b, 2)[2]
+ } keys %{$tmppd->{$slot}}) {
+ $tmppd->{$slot}->{$pdriveindex}->{runtime} = $self->{runtime};
+ push(@{$self->{physical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Da::PhysicalDrive->new(
+ %{$tmppd->{$slot}->{$pdriveindex}}));
+ }
+ }
+}
+
+sub identified {
+ my $self = shift;
+ my $info = shift;
+ return 1 if $info =~ /Parallel SCSI/;
+ return 1 if $info =~ /Smart Array/; # Trond: works fine on E200i, P400, E400
+ return 1 if $info =~ /MSA500/;
+ #return 1 if $info =~ /Smart Array (5|6)/;
+ #return 1 if $info =~ /Smart Array P400i/; # snmp sagt Da, trotz SAS in cli
+ #return 1 if $info =~ /Smart Array P410i/; # dto
+ return 0;
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/SNMP.pm
new file mode 100755
index 0000000..629fe29
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Da/SNMP.pm
@@ -0,0 +1,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(%{$_}));
+ }
+
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca.pm
new file mode 100755
index 0000000..2014697
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca.pm
@@ -0,0 +1,433 @@
+package HP::Proliant::Component::DiskSubsystem::Fca;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
+
+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},
+ host_controllers => [],
+ controllers => [],
+ accelerators => [],
+ enclosures => [],
+ physical_drives => [],
+ logical_drives => [],
+ spare_drives => [],
+ global_status => undef,
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Fca::SNMP';
+ } else {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Fca::CLI';
+ }
+ $self->init();
+ $self->assemble();
+ return $self;
+}
+
+sub assemble {
+ my $self = shift;
+ $self->trace(3, sprintf "%s controllers und platten zusammenfuehren",
+ ref($self));
+ $self->trace(3, sprintf "has %d host controllers",
+ scalar(@{$self->{host_controllers}}));
+ $self->trace(3, sprintf "has %d controllers",
+ scalar(@{$self->{controllers}}));
+ $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}}));
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{host_controllers}}) {
+ $_->check();
+ }
+ foreach (@{$self->{controllers}}) {
+ $_->check();
+ }
+ foreach (@{$self->{accelerators}}) {
+ $_->check();
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->check();
+ }
+ # wozu eigentlich?
+ #if (! $self->has_controllers()) {
+ #$self->{global_status}->check();
+ #}
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{host_controllers}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{controllers}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{accelerators}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->dump();
+ }
+ #$self->{global_status}->dump();
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::GlobalStatus;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqFcaMibCondition => $params{cpqFcaMibCondition},
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ if ($self->{cpqFcaMibCondition} eq 'other') {
+ $self->add_message(OK,
+ sprintf 'fcal overall condition is other, update your drivers, please');
+ } elsif ($self->{cpqFcaMibCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf 'fcal overall condition is %s', $self->{cpqFcaMibCondition});
+ }
+ $self->{info} =
+ sprintf 'fcal overall condition is %s', $self->{cpqFcaMibCondition};
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FCAL]\n";
+ foreach (qw(cpqFcaMibCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::HostController;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqFcaHostCntlr/, keys %params;
+ $self->{name} = $params{name} || $self->{cpqFcaHostCntlrIndex};
+ $self->{controllerindex} = $self->{cpqFcaHostCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('fcahc', $self->{name});
+ my $info = sprintf 'fcal host controller %s in slot %s is %s',
+ $self->{name}, $self->{cpqFcaHostCntlrSlot}, $self->{cpqFcaHostCntlrCondition};
+ if ($self->{cpqFcaHostCntlrCondition} eq 'other') {
+ #$info .= sprintf ' and needs attention (%s)', $self->{cpqFcaHostCntlrStatus};
+ # let's assume other=ok
+ $self->add_message(OK, $info);
+ $self->add_info($info);
+ } elsif ($self->{cpqFcaHostCntlrCondition} ne 'ok') {
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $self->add_info($info);
+ }
+ $self->blacklist('fcahco', $self->{name});
+ $info = sprintf 'fcal host controller %s overall condition is %s',
+ $self->{name}, $self->{cpqFcaHostCntlrOverallCondition};
+ if ($self->{cpqFcaHostCntlrOverallCondition} eq 'other') {
+ $self->add_message(OK, $info);
+ } elsif ($self->{cpqFcaHostCntlrOverallCondition} ne 'ok') {
+ $self->add_message(WARNING, $info);
+ }
+ $self->add_info($info);
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FCAL_HOST_CONTROLLER_%s]\n", $self->{name};
+ foreach (qw(cpqFcaHostCntlrIndex cpqFcaHostCntlrSlot
+ cpqFcaHostCntlrModel cpqFcaHostCntlrStatus cpqFcaHostCntlrCondition
+ cpqFcaHostCntlrOverallCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::Controller;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqFcaCntlr/, keys %params;
+ $self->{name} = $params{name} ||
+ $self->{cpqFcaCntlrBoxIndex}.':'.$self->{cpqFcaCntlrBoxIoSlot};
+ $self->{controllerindex} = $self->{cpqFcaCntlrBoxIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('fcaco', $self->{name});
+ my $info = sprintf 'fcal controller %s in box %s/slot %s is %s',
+ $self->{name}, $self->{cpqFcaCntlrBoxIndex}, $self->{cpqFcaCntlrBoxIoSlot},
+ $self->{cpqFcaCntlrCondition};
+ if ($self->{cpqFcaCntlrCondition} eq 'other') {
+ if (1) { # was ist mit phys. drives?
+ $info .= ' needs attention';
+ $info .= sprintf(' (%s)', $self->{cpqFcaCntlrStatus}) unless $self->{cpqFcaCntlrStatus} eq 'ok';
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $self->add_info($info);
+ $self->{blacklisted} = 1;
+ }
+ } elsif ($self->{cpqFcaCntlrCondition} ne 'ok') {
+ $info .= ' needs attention';
+ $info .= sprintf(' (%s)', $self->{cpqFcaCntlrStatus}) unless $self->{cpqFcaCntlrStatus} eq 'ok';
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $self->add_info($info);
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FCAL_CONTROLLER_%s]\n", $self->{name};
+ foreach (qw(cpqFcaCntlrBoxIndex cpqFcaCntlrBoxIoSlot cpqFcaCntlrModel
+ cpqFcaCntlrStatus cpqFcaCntlrCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::Accelerator;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqFcaAccel/, keys %params;
+ $self->{name} = $params{name} ||
+ $self->{cpqFcaAccelBoxIndex}.':'.$self->{cpqFcaAccelBoxIoSlot};
+ $self->{controllerindex} = $self->{cpqFcaAccelBoxIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ # !!! cpqFcaAccelStatus
+ $self->blacklist('fcaac', $self->{name});
+ my $info = sprintf 'fcal accelerator %s in box %s/slot %s is ',
+ $self->{name}, $self->{cpqFcaAccelBoxIndex}, $self->{cpqFcaAccelBoxIoSlot};
+ if ($self->{cpqFcaAccelStatus} eq 'invalid') {
+ $info .= 'not installed';
+ $self->add_info($info);
+ } elsif ($self->{cpqFcaAccelStatus} eq 'tmpDisabled') {
+ $info .= 'temp disabled';
+ $self->add_info($info);
+ } elsif ($self->{cpqFcaAccelCondition} eq 'other') {
+ $info .= sprintf '%s and needs attention (%s)',
+ $self->{cpqFcaAccelCondition}, $self->{cpqFcaAccelErrCode};
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } elsif ($self->{cpqFcaAccelCondition} ne 'ok') {
+ $info .= sprintf '%s and needs attention (%s)',
+ $self->{cpqFcaAccelCondition}, $self->{cpqFcaAccelErrCode};
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $info .= sprintf '%s', $self->{cpqFcaAccelCondition};
+ $self->add_info($info);
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FCAL_ACCELERATOR_%s]\n", $self->{name};
+ foreach (qw(cpqFcaAccelBoxIndex cpqFcaAccelBoxIoSlot cpqFcaAccelStatus
+ cpqFcaAccelErrCode cpqFcaAccelBatteryStatus cpqFcaAccelCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::LogicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqFcaLogDrv/, keys %params;
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqFcaLogDrvBoxIndex}.':'.
+ $self->{cpqFcaLogDrvIndex};
+ $self->{controllerindex} = $self->{cpqFcaLogDrvBoxIndex};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('fcald', $self->{name});
+ my $info = sprintf 'logical drive %s (%s) is %s',
+ $self->{name}, $self->{cpqFcaLogDrvFaultTol}, $self->{cpqFcaLogDrvCondition};
+ if ($self->{cpqFcaLogDrvCondition} ne "ok") {
+ $info .= sprintf ' (%s)', $self->{cpqFcaLogDrvStatus};
+ if ($self->{cpqFcaLogDrvStatus} =~
+ /rebuild|recovering|expand/) {
+ $info .= sprintf ' (%s)', $self->{cpqFcaLogDrvStatus};
+ $self->add_message(WARNING, $info);
+ } else {
+ $self->add_message(CRITICAL, $info);
+ }
+ }
+ $self->add_info($info);
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LOGICAL_DRIVE_%s]\n", $self->{name};
+ foreach (qw(cpqFcaLogDrvBoxIndex cpqFcaLogDrvIndex cpqFcaLogDrvFaultTol
+ cpqFcaLogDrvStatus cpqFcaLogDrvPercentRebuild cpqFcaLogDrvSize
+ cpqFcaLogDrvPhyDrvIDs cpqFcaLogDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::PhysicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqFcaPhyDrv/, keys %params;
+ $self->{name} = $params{name} ||
+ $self->{cpqFcaPhyDrvBoxIndex}.':'.$self->{cpqFcaPhyDrvIndex}; ####vorerst
+ $self->{controllerindex} = $self->{cpqScsiPhyDrvCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('fcapd', $self->{name});
+ my $info = sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqFcaPhyDrvStatus};
+ if ($self->{cpqFcaPhyDrvStatus} eq 'unconfigured') {
+ # not part of a logical drive
+ # condition will surely be other
+ } elsif ($self->{cpqFcaPhyDrvCondition} ne 'ok') {
+ $self->add_message(CRITICAL, $info);
+ }
+ $self->add_info($info);
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PHYSICAL_DRIVE_%s]\n", $self->{name};
+ foreach (qw(cpqFcaPhyDrvBoxIndex cpqFcaPhyDrvIndex cpqFcaPhyDrvModel
+ cpqFcaPhyDrvBay cpqFcaPhyDrvStatus cpqFcaPhyDrvCondition
+ cpqFcaPhyDrvSize cpqFcaPhyDrvBusNumber)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Fca::SpareDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub dump {
+ my $self = shift;
+ printf "[SPARE_DRIVE]\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/CLI.pm
new file mode 100755
index 0000000..fd11dbc
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/CLI.pm
@@ -0,0 +1,34 @@
+package HP::Proliant::Component::DiskSubsystem::Fca::CLI;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca);
+
+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;
+ # .....
+ $self->{global_status} =
+ HP::Proliant::Component::DiskSubsystem::Fca::GlobalStatus->new(
+ runtime => $self->{runtime},
+ cpqFcaMibCondition => 'n/a',
+ );
+
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/SNMP.pm
new file mode 100755
index 0000000..fc603e5
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Fca/SNMP.pm
@@ -0,0 +1,303 @@
+package HP::Proliant::Component::DiskSubsystem::Fca::SNMP;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Fca
+ 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};
+
+ # CPQFCA-MIB
+ my $oids = {
+ cpqFcaHostCntlrEntry => '1.3.6.1.4.1.232.16.2.7.1.1',
+ cpqFcaHostCntlrIndex => '1.3.6.1.4.1.232.16.2.7.1.1.1',
+ cpqFcaHostCntlrSlot => '1.3.6.1.4.1.232.16.2.7.1.1.2',
+ cpqFcaHostCntlrModel => '1.3.6.1.4.1.232.16.2.7.1.1.3',
+ cpqFcaHostCntlrStatus => '1.3.6.1.4.1.232.16.2.7.1.1.4',
+ cpqFcaHostCntlrCondition => '1.3.6.1.4.1.232.16.2.7.1.1.5',
+ cpqFcaHostCntlrOverallCondition => '1.3.6.1.4.1.232.16.2.7.1.1.8',
+ cpqFcaHostCntlrModelValue => {
+ 1 => "other",
+ # You may need to upgrade your driver software and\or instrument
+ # agent(s). You have a drive array controller in the system
+ # that the instrument agent does not recognize. (other according to CPQFCAL-MIB)
+ 2 => "fchc-p",
+ 3 => "fchc-e",
+ 4 => "fchc64",
+ 5 => "sa-sam",
+ 6 => "fca-2101",
+ 7 => "sw64-33",
+ 8 => "fca-221x",
+ 9 => "dpfcmc",
+ 10 => 'fca-2404',
+ 11 => 'fca-2214',
+ 12 => 'a7298a',
+ 13 => 'fca-2214dc',
+ 14 => 'a6826a',
+ 15 => 'fcmcG3',
+ 16 => 'fcmcG4',
+ 17 => 'ab46xa',
+ 18 => 'fc-generic',
+ 19 => 'fca-1143',
+ 20 => 'fca-1243',
+ 21 => 'fca-2143',
+ 22 => 'fca-2243',
+ 23 => 'fca-1050',
+ 24 => 'fca-lpe1105',
+ 25 => 'fca-qmh2462',
+ 26 => 'fca-1142sr',
+ 27 => 'fca-1242sr',
+ 28 => 'fca-2142sr',
+ 29 => 'fca-2242sr',
+ 30 => 'fcmc20pe',
+ 31 => 'fca-81q',
+ 32 => 'fca-82q',
+ 33 => 'fca-qmh2562',
+ 34 => 'fca-81e',
+ 35 => 'fca-82e',
+ 36 => 'fca-1205',
+ },
+ cpqFcaHostCntlrStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ 4 => "shutdown",
+ 5 => "loopDegraded",
+ 6 => "loopFailed",
+ 7 => "notConnected",
+ },
+ cpqFcaHostCntlrConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqFcaHostCntlrOverallConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ }, # cntrl + alle associated storage boxes
+ };
+
+ # INDEX { cpqFcaHostCntlrIndex }
+ foreach ($self->get_entries($oids, 'cpqFcaHostCntlrEntry')) {
+ push(@{$self->{host_controllers}},
+ HP::Proliant::Component::DiskSubsystem::Fca::HostController->new(%{$_}));
+ }
+
+ $oids = {
+ cpqFcaCntlrEntry => '1.3.6.1.4.1.232.16.2.2.1.1',
+ cpqFcaCntlrBoxIndex => '1.3.6.1.4.1.232.16.2.2.1.1.1',
+ cpqFcaCntlrBoxIoSlot => '1.3.6.1.4.1.232.16.2.2.1.1.2',
+ cpqFcaCntlrModel => '1.3.6.1.4.1.232.16.2.2.1.1.3',
+ cpqFcaCntlrStatus => '1.3.6.1.4.1.232.16.2.2.1.1.5',
+ cpqFcaCntlrCondition => '1.3.6.1.4.1.232.16.2.2.1.1.6',
+ cpqFcaCntlrModelValue => {
+ 1 => "other",
+ 2 => "fibreArray",
+ 3 => "msa1000",
+ 4 => "smartArrayClusterStorage",
+ 5 => "hsg80",
+ 6 => "hsv110",
+ 7 => "msa500g2",
+ 8 => "msa20",
+ 8 => "msa1510i",
+ },
+ cpqFcaCntlrStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ 4 => "offline",
+ 5 => "redundantPathOffline",
+ 6 => "notConnected",
+ },
+ cpqFcaCntlrConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+
+ # INDEX { cpqFcaCntlrBoxIndex, cpqFcaCntlrBoxIoSlot }
+ foreach ($self->get_entries($oids, 'cpqFcaCntlrEntry')) {
+ push(@{$self->{controllers}},
+ HP::Proliant::Component::DiskSubsystem::Fca::Controller->new(%{$_}));
+ }
+
+ $oids = {
+ cpqFcaAccelEntry => '1.3.6.1.4.1.232.16.2.2.2.1',
+ cpqFcaAccelBoxIndex => '1.3.6.1.4.1.232.16.2.2.2.1.1',
+ cpqFcaAccelBoxIoSlot => '1.3.6.1.4.1.232.16.2.2.2.1.2',
+ cpqFcaAccelStatus => '1.3.6.1.4.1.232.16.2.2.2.1.3',
+ cpqFcaAccelErrCode => '1.3.6.1.4.1.232.16.2.2.2.1.5',
+ cpqFcaAccelBatteryStatus => '1.3.6.1.4.1.232.16.2.2.2.1.6',
+ cpqFcaAccelCondition => '1.3.6.1.4.1.232.16.2.2.2.1.9',
+ cpqFcaAccelStatusValue => {
+ 1 => "other",
+ 2 => "invalid",
+ 3 => "enabled",
+ 4 => "tmpDisabled",
+ 5 => "permDisabled",
+ },
+ cpqFcaAccelErrCodeValue => {
+ 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',
+ 19 => 'postEccErrors',
+ },
+ cpqFcaAccelBatteryStatusValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'recharging',
+ 4 => 'failed',
+ 5 => 'degraded',
+ 6 => 'notPresent',
+ },
+ cpqFcaAccelConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+
+ # INDEX { cpqFcaAccelBoxIndex, cpqFcaAccelBoxIoSlot }
+ foreach ($self->get_entries($oids, 'cpqFcaAccelEntry')) {
+ push(@{$self->{accelerators}},
+ HP::Proliant::Component::DiskSubsystem::Fca::Accelerator->new(%{$_}));
+ }
+
+ $oids = {
+ cpqFcaLogDrvEntry => '1.3.6.1.4.1.232.16.2.3.1.1',
+ cpqFcaLogDrvBoxIndex => '1.3.6.1.4.1.232.16.2.3.1.1.1',
+ cpqFcaLogDrvIndex => '1.3.6.1.4.1.232.16.2.3.1.1.2',
+ cpqFcaLogDrvFaultTol => '1.3.6.1.4.1.232.16.2.3.1.1.3',
+ cpqFcaLogDrvStatus => '1.3.6.1.4.1.232.16.2.3.1.1.4',
+ cpqFcaLogDrvPercentRebuild => '1.3.6.1.4.1.232.16.2.3.1.1.6',
+ cpqFcaLogDrvSize => '1.3.6.1.4.1.232.16.2.3.1.1.9',
+ cpqFcaLogDrvPhyDrvIDs => '1.3.6.1.4.1.232.16.2.3.1.1.10',
+ cpqFcaLogDrvCondition => '1.3.6.1.4.1.232.16.2.3.1.1.11',
+ cpqFcaLogDrvFaultTolValue => {
+ 1 => 'other',
+ 2 => 'none',
+ 3 => 'mirroring',
+ 4 => 'dataGuard',
+ 5 => 'distribDataGuard',
+ 7 => 'advancedDataGuard',
+ },
+ cpqFcaLogDrvStatusValue => {
+ 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',
+ 15 => 'hardError',
+ },
+ cpqFcaLogDrvConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ };
+
+ # INDEX { cpqFcaLogDrvBoxIndex, cpqFcaLogDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqFcaLogDrvEntry')) {
+ push(@{$self->{logical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Fca::LogicalDrive->new(%{$_}));
+ }
+
+ $oids = {
+ cpqFcaPhyDrvEntry => '1.3.6.1.4.1.232.16.2.5.1.1',
+ cpqFcaPhyDrvBoxIndex => '1.3.6.1.4.1.232.16.2.5.1.1.1',
+ cpqFcaPhyDrvIndex => '1.3.6.1.4.1.232.16.2.5.1.1.2',
+ cpqFcaPhyDrvModel => '1.3.6.1.4.1.232.16.2.5.1.1.3',
+ cpqFcaPhyDrvBay => '1.3.6.1.4.1.232.16.2.5.1.1.5',
+ cpqFcaPhyDrvStatus => '1.3.6.1.4.1.232.16.2.5.1.1.6',
+ cpqFcaPhyDrvCondition => '1.3.6.1.4.1.232.16.2.5.1.1.31',
+ cpqFcaPhyDrvSize => '1.3.6.1.4.1.232.16.2.5.1.1.38',
+ cpqFcaPhyDrvBusNumber => '1.3.6.1.4.1.232.16.2.5.1.1.42',
+ cpqFcaPhyDrvStatusValue => {
+ 1 => 'other',
+ 2 => 'unconfigured',
+ 3 => 'ok',
+ 4 => 'threshExceeded',
+ 5 => 'predictiveFailure',
+ 6 => 'failed',
+ },
+ cpqFcaPhyDrvConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ };
+
+ # INDEX { cpqFcaPhyDrvBoxIndex, cpqFcaPhyDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqFcaPhyDrvEntry')) {
+ push(@{$self->{physical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Fca::PhysicalDrive->new(%{$_}));
+ }
+
+ $oids = {
+ cpqFcaMibRevMajor => '1.3.6.1.4.1.232.16.1.1.0',
+ cpqFcaMibRevMinor => '1.3.6.1.4.1.232.16.1.2.0',
+ cpqFcaMibCondition => '1.3.6.1.4.1.232.16.1.3.0',
+ cpqFcaMibConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ };
+ $self->{global_status} =
+ HP::Proliant::Component::DiskSubsystem::Fca::GlobalStatus->new(
+ runtime => $self->{runtime},
+ cpqFcaMibCondition =>
+ SNMP::Utils::get_object_value($snmpwalk,
+ $oids->{cpqFcaMibCondition}, $oids->{cpqFcaMibConditionValue})
+ );
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide.pm
new file mode 100755
index 0000000..fdd3230
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide.pm
@@ -0,0 +1,256 @@
+package HP::Proliant::Component::DiskSubsystem::Ide;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
+
+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},
+ controllers => [],
+ enclosures => [],
+ physical_drives => [],
+ logical_drives => [],
+ spare_drives => [],
+ condition => undef,
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Ide::SNMP';
+ } else {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Ide::CLI';
+ }
+ $self->init();
+ $self->assemble();
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->dump();
+ }
+}
+
+package HP::Proliant::Component::DiskSubsystem::Ide::Controller;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqIdeControllerIndex => $params{cpqIdeControllerIndex},
+ cpqIdeControllerOverallCondition => $params{cpqIdeControllerOverallCondition},
+ cpqIdeControllerModel => $params{cpqIdeControllerModel},
+ cpqIdeControllerSlot => $params{cpqIdeControllerSlot}, # -1 ist sysboard?
+ blacklisted => 0,
+ };
+ $self->{name} = $params{name} || $self->{cpqIdeControllerIndex};
+ $self->{controllerindex} = $self->{cpqIdeControllerIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('ideco', $self->{name});
+ if ($self->{cpqIdeControllerOverallCondition} eq 'other') {
+ if (scalar(@{$self->{physical_drives}})) {
+ $self->add_message(CRITICAL,
+ sprintf 'ide controller %s in slot %s needs attention',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ $self->add_info(sprintf 'ide controller %s in slot %s needs attention',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ } else {
+ $self->add_info(sprintf 'ide controller %s in slot %s is ok and unused',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ $self->{blacklisted} = 1;
+ }
+ } elsif ($self->{cpqIdeControllerOverallCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf 'ide controller %s in slot %s needs attention',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ $self->add_info(sprintf 'ide controller %s in slot %s needs attention',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ } else {
+ $self->add_info(sprintf 'ide controller %s in slot %s is ok',
+ $self->{cpqIdeControllerIndex}, $self->{cpqIdeControllerSlot});
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[IDE_CONTROLLER_%s]\n", $self->{name};
+ foreach (qw(cpqIdeControllerIndex cpqIdeControllerSlot
+ cpqIdeControllerModel cpqIdeControllerOverallCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+ foreach (@{$self->{logical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Ide::LogicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqIdeLogicalDriveControllerIndex => $params{cpqIdeLogicalDriveControllerIndex},
+ cpqIdeLogicalDriveIndex => $params{cpqIdeLogicalDriveIndex},
+ cpqIdeLogicalDriveRaidLevel => $params{cpqIdeLogicalDriveRaidLevel},
+ cpqIdeLogicalDriveCapacity => $params{cpqIdeLogicalDriveCapacity},
+ cpqIdeLogicalDriveStatus => $params{cpqIdeLogicalDriveStatus},
+ cpqIdeLogicalDriveCondition => $params{cpqIdeLogicalDriveCondition},
+ cpqIdeLogicalDriveDiskIds => $params{cpqIdeLogicalDriveDiskIds},
+ cpqIdeLogicalDriveSpareIds => $params{cpqIdeLogicalDriveSpareIds},
+ cpqIdeLogicalDriveRebuildingDisk => $params{cpqIdeLogicalDriveRebuildingDisk},
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqIdeLogicalDriveControllerIndex}.':'.
+ $self->{cpqIdeLogicalDriveIndex};
+ $self->{controllerindex} = $self->{cpqIdeLogicalDriveControllerIndex};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('ideld', $self->{name});
+ if ($self->{cpqIdeLogicalDriveCondition} ne "ok") {
+ if ($self->{cpqIdeLogicalDriveStatus} =~
+ /rebuild/) {
+ $self->add_message(WARNING,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqIdeLogicalDriveStatus});
+ } else {
+ $self->add_message(CRITICAL,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqIdeLogicalDriveStatus});
+ }
+ }
+ $self->add_info(
+ sprintf "logical drive %s is %s", $self->{name},
+ $self->{cpqIdeLogicalDriveStatus});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LOGICAL_DRIVE]\n";
+ foreach (qw(cpqIdeLogicalDriveControllerIndex cpqIdeLogicalDriveIndex
+ cpqIdeLogicalDriveRaidLevel cpqIdeLogicalDriveCapacity
+ cpqIdeLogicalDriveDiskIds cpqIdeLogicalDriveSpareIds
+ cpqIdeLogicalDriveRebuildingDisk cpqIdeLogicalDriveStatus
+ cpqIdeLogicalDriveCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Ide::PhysicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqIdeAtaDiskControllerIndex => $params{cpqIdeAtaDiskControllerIndex},
+ cpqIdeAtaDiskIndex => $params{cpqIdeAtaDiskIndex},
+ cpqIdeAtaDiskModel => $params{cpqIdeAtaDiskModel},
+ cpqIdeAtaDiskStatus => $params{cpqIdeAtaDiskStatus},
+ cpqIdeAtaDiskCondition => $params{cpqIdeAtaDiskCondition},
+ cpqIdeAtaDiskCapacity => $params{cpqIdeAtaDiskCapacity},
+ cpqIdeAtaDiskLogicalDriveMember => $params{cpqIdeAtaDiskLogicalDriveMember},
+ cpqIdeAtaDiskIsSpare => $params{cpqIdeAtaDiskIsSpare},
+ blacklisted => 0,
+ };
+ $self->{name} = $params{name} ||
+ $self->{cpqIdeAtaDiskControllerIndex}.':'.
+ $self->{cpqIdeAtaDiskIndex}; ####vorerst
+ $self->{controllerindex} = $self->{cpqIdeAtaDiskControllerIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('idepd', $self->{name});
+ if ($self->{cpqIdeAtaDiskCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqIdeAtaDiskCondition});
+ }
+ $self->add_info(
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqIdeAtaDiskCondition});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PHYSICAL_DRIVE]\n";
+ foreach (qw(cpqIdeAtaDiskControllerIndex cpqIdeAtaDiskIndex
+ cpqIdeAtaDiskModel cpqIdeAtaDiskCapacity cpqIdeAtaDiskLogicalDriveMember
+ cpqIdeAtaDiskStatus cpqIdeAtaDiskCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Ide::SpareDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub dump {
+ my $self = shift;
+ printf "[SPARE_DRIVE]\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/CLI.pm
new file mode 100755
index 0000000..babc616
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/CLI.pm
@@ -0,0 +1,27 @@
+package HP::Proliant::Component::DiskSubsystem::Ide::CLI;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide);
+
+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;
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/SNMP.pm
new file mode 100755
index 0000000..86f9543
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Ide/SNMP.pm
@@ -0,0 +1,115 @@
+package HP::Proliant::Component::DiskSubsystem::Ide::SNMP;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Ide
+ 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};
+
+ # CPQIDE-MIB
+ my $oids = {
+ cpqIdeControllerEntry => '1.3.6.1.4.1.232.14.2.3.1.1',
+ cpqIdeControllerIndex => '1.3.6.1.4.1.232.14.2.3.1.1.1',
+ cpqIdeControllerOverallCondition => '1.3.6.1.4.1.232.14.2.3.1.1.2',
+ cpqIdeControllerModel => '1.3.6.1.4.1.232.14.2.3.1.1.3',
+ cpqIdeControllerSlot => '1.3.6.1.4.1.232.14.2.3.1.1.5',
+ cpqIdeControllerOverallConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+
+ # INDEX { cpqIdeControllerIndex }
+ foreach ($self->get_entries($oids, 'cpqIdeControllerEntry')) {
+ push(@{$self->{controllers}},
+ HP::Proliant::Component::DiskSubsystem::Ide::Controller->new(%{$_}));
+ }
+
+ $oids = {
+ cpqIdeLogicalDriveEntry => '1.3.6.1.4.1.232.14.2.6.1.1',
+ cpqIdeLogicalDriveControllerIndex => '1.3.6.1.4.1.232.14.2.6.1.1.1',
+ cpqIdeLogicalDriveIndex => '1.3.6.1.4.1.232.14.2.6.1.1.2',
+ cpqIdeLogicalDriveRaidLevel => '1.3.6.1.4.1.232.14.2.6.1.1.3',
+ cpqIdeLogicalDriveCapacity => '1.3.6.1.4.1.232.14.2.6.1.1.4',
+ cpqIdeLogicalDriveStatus => '1.3.6.1.4.1.232.14.2.6.1.1.5',
+ cpqIdeLogicalDriveCondition => '1.3.6.1.4.1.232.14.2.6.1.1.6',
+ cpqIdeLogicalDriveDiskIds => '1.3.6.1.4.1.232.14.2.6.1.1.7',
+ cpqIdeLogicalDriveSpareIds => '1.3.6.1.4.1.232.14.2.6.1.1.9',
+ cpqIdeLogicalDriveRebuildingDisk => '1.3.6.1.4.1.232.14.2.6.1.1.10',
+ cpqIdeLogicalDriveRaidLevelValue => {
+ 1 => "other",
+ 2 => "raid0",
+ 3 => "raid1",
+ 4 => "raid0plus1",
+ },
+ cpqIdeLogicalDriveStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "rebuilding",
+ 5 => "failed",
+ },
+ cpqIdeLogicalDriveConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+ # INDEX { cpqIdeLogicalDriveControllerIndex, cpqIdeLogicalDriveIndex }
+ foreach ($self->get_entries($oids, 'cpqIdeLogicalDriveEntry')) {
+ push(@{$self->{logical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Ide::LogicalDrive->new(%{$_}));
+ }
+
+ $oids = {
+ cpqIdeAtaDiskEntry => '1.3.6.1.4.1.232.14.2.4.1.1',
+ cpqIdeAtaDiskControllerIndex => '1.3.6.1.4.1.232.14.2.4.1.1.1',
+ cpqIdeAtaDiskIndex => '1.3.6.1.4.1.232.14.2.4.1.1.2',
+ cpqIdeAtaDiskModel => '1.3.6.1.4.1.232.14.2.4.1.1.3',
+ cpqIdeAtaDiskStatus => '1.3.6.1.4.1.232.14.2.4.1.1.6',
+ cpqIdeAtaDiskCondition => '1.3.6.1.4.1.232.14.2.4.1.1.7',
+ cpqIdeAtaDiskCapacity => '1.3.6.1.4.1.232.14.2.4.1.1.8',
+ cpqIdeAtaDiskLogicalDriveMember => '1.3.6.1.4.1.232.14.2.4.1.1.13',
+ cpqIdeAtaDiskIsSpare => '1.3.6.1.4.1.232.14.2.4.1.1.14',
+ cpqIdeAtaDiskStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "smartError",
+ 4 => "failed",
+ },
+ cpqIdeAtaDiskConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+ # INDEX { cpqIdeAtaDiskControllerIndex, cpqIdeAtaDiskIndex }
+ foreach ($self->get_entries($oids, 'cpqIdeAtaDiskEntry')) {
+ push(@{$self->{physical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Ide::PhysicalDrive->new(%{$_}));
+ }
+
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas.pm
new file mode 100755
index 0000000..bb417d4
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas.pm
@@ -0,0 +1,251 @@
+package HP::Proliant::Component::DiskSubsystem::Sas;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
+
+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},
+ controllers => [],
+ enclosures => [],
+ physical_drives => [],
+ logical_drives => [],
+ spare_drives => [],
+ condition => undef,
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::SNMP';
+ } else {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Sas::CLI';
+ }
+ $self->init();
+ $self->assemble();
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->dump();
+ }
+}
+
+package HP::Proliant::Component::DiskSubsystem::Sas::Controller;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqSasHbaIndex => $params{cpqSasHbaIndex},
+ cpqSasHbaLocation => $params{cpqSasHbaLocation},
+ cpqSasHbaSlot => $params{cpqSasHbaSlot},
+ cpqSasHbaStatus => $params{cpqSasHbaStatus},
+ cpqSasHbaCondition => $params{cpqSasHbaCondition},
+ blacklisted => 0,
+ };
+ $self->{name} = $params{name} || $self->{cpqSasHbaSlot};
+ $self->{controllerindex} = $self->{cpqSasHbaIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('saco', $self->{cpqSasHbaSlot});
+ if ($self->{cpqSasHbaCondition} eq 'other') {
+ if (scalar(@{$self->{physical_drives}})) {
+ $self->add_message(CRITICAL,
+ sprintf 'sas controller in slot %s needs attention',
+ $self->{cpqSasHbaSlot});
+ $self->add_info(sprintf 'sas controller in slot %s needs attention',
+ $self->{cpqSasHbaSlot});
+ } else {
+ $self->add_info(sprintf 'sas controller in slot %s is ok and unused',
+ $self->{cpqSasHbaSlot});
+ $self->{blacklisted} = 1;
+ }
+ } elsif ($self->{cpqSasHbaCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf 'sas controller in slot %s needs attention',
+ $self->{cpqSasHbaSlot});
+ $self->add_info(sprintf 'sas controller in slot %s needs attention',
+ $self->{cpqSasHbaSlot});
+ } else {
+ $self->add_info(sprintf 'sas controller in slot %s is ok',
+ $self->{cpqSasHbaSlot});
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[SAS_HBA%s]\n", $self->{name};
+ foreach (qw(cpqSasHbaSlot cpqSasHbaIndex cpqSasHbaCondition
+ cpqSasHbaStatus cpqSasHbaLocation)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+ foreach (@{$self->{logical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Sas::LogicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqSasLogDrvHbaIndex => $params{cpqSasLogDrvHbaIndex},
+ cpqSasLogDrvIndex => $params{cpqSasLogDrvIndex},
+ cpqSasLogDrvStatus => $params{cpqSasLogDrvStatus},
+ cpqSasLogDrvCondition => $params{cpqSasLogDrvCondition},
+ cpqSasLogDrvRebuildingPercent => $params{cpqSasLogDrvRebuildingPercent},
+ cpqSasLogDrvRaidLevel => $params{cpqSasLogDrvRaidLevel},
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ $self->{name} = $params{name} ||
+ $self->{cpqSasLogDrvHbaIndex}.':'.$self->{cpqSasLogDrvIndex}; ####vorerst
+ $self->{controllerindex} = $self->{cpqSasLogDrvHbaIndex};
+ if (! $self->{cpqSasLogDrvRebuildingPercent} ||
+ $self->{cpqSasLogDrvRebuildingPercent} == 4294967295) {
+ $self->{cpqSasLogDrvRebuildingPercent} = 100;
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('sald', $self->{name});
+ if ($self->{cpqSasLogDrvCondition} ne "ok") {
+ if ($self->{cpqSasLogDrvStatus} =~
+ /rebuild|recovering|expanding|queued/) {
+ $self->add_message(WARNING,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqSasLogDrvStatus});
+ } else {
+ $self->add_message(CRITICAL,
+ sprintf "logical drive %s is %s",
+ $self->{name}, $self->{cpqSasLogDrvStatus});
+ }
+ }
+ $self->add_info(
+ sprintf "logical drive %s is %s (%s)", $self->{name},
+ $self->{cpqSasLogDrvStatus}, $self->{cpqSasLogDrvRaidLevel});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LOGICAL_DRIVE]\n";
+ foreach (qw(cpqSasLogDrvHbaIndex cpqSasLogDrvIndex cpqSasLogDrvRaidLevel
+ cpqSasLogDrvStatus cpqSasLogDrvCondition
+ cpqSasLogDrvRebuildingPercent)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Sas::PhysicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqSasPhyDrvHbaIndex => $params{cpqSasPhyDrvHbaIndex},
+ cpqSasPhyDrvIndex => $params{cpqSasPhyDrvIndex},
+ cpqSasPhyDrvLocationString => $params{cpqSasPhyDrvLocationString},
+ cpqSasPhyDrvStatus => $params{cpqSasPhyDrvStatus},
+ cpqSasPhyDrvSize => $params{cpqSasPhyDrvSize},
+ cpqSasPhyDrvCondition => $params{cpqSasPhyDrvCondition},
+ blacklisted => 0,
+ };
+ $self->{name} = $params{name} ||
+ $self->{cpqSasPhyDrvHbaIndex}.':'.$self->{cpqSasPhyDrvIndex}; ####vorerst
+ $self->{controllerindex} = $self->{cpqSasPhyDrvHbaIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('sapd', $self->{name});
+ if ($self->{cpqSasPhyDrvCondition} ne 'ok') {
+ $self->add_message(CRITICAL,
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqSasPhyDrvCondition});
+ }
+ $self->add_info(
+ sprintf "physical drive %s is %s",
+ $self->{name}, $self->{cpqSasPhyDrvCondition});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PHYSICAL_DRIVE]\n";
+ foreach (qw(cpqSasPhyDrvHbaIndex cpqSasPhyDrvIndex cpqSasPhyDrvLocationString
+ cpqSasPhyDrvSize cpqSasPhyDrvStatus cpqSasPhyDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Sas::SpareDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub dump {
+ my $self = shift;
+ printf "[SPARE_DRIVE]\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/CLI.pm
new file mode 100755
index 0000000..1a250d3
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/CLI.pm
@@ -0,0 +1,27 @@
+package HP::Proliant::Component::DiskSubsystem::Sas::CLI;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas);
+
+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;
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/SNMP.pm
new file mode 100755
index 0000000..cb493fd
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Sas/SNMP.pm
@@ -0,0 +1,126 @@
+package HP::Proliant::Component::DiskSubsystem::Sas::SNMP;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Sas
+ 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};
+
+ # CPQSCSI-MIB
+ my $oids = {
+ cpqSasHbaEntry => "1.3.6.1.4.1.232.5.5.1.1.1",
+ cpqSasHbaIndex => "1.3.6.1.4.1.232.5.5.1.1.1.1",
+ cpqSasHbaLocation => "1.3.6.1.4.1.232.5.5.1.1.1.2",
+ cpqSasHbaSlot => "1.3.6.1.4.1.232.5.5.1.1.1.6",
+ cpqSasHbaStatus => "1.3.6.1.4.1.232.5.5.1.1.1.4",
+ cpqSasHbaStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ },
+ cpqSasHbaCondition => "1.3.6.1.4.1.232.5.5.1.1.1.5",
+ cpqSasHbaConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ };
+
+ # INDEX { cpqSasHbaIndex }
+ foreach ($self->get_entries($oids, 'cpqSasHbaEntry')) {
+ push(@{$self->{controllers}},
+ HP::Proliant::Component::DiskSubsystem::Sas::Controller->new(%{$_}));
+ }
+
+ $oids = {
+ cpqSasLogDrvEntry => "1.3.6.1.4.1.232.5.5.3.1.1",
+ cpqSasLogDrvHbaIndex => "1.3.6.1.4.1.232.5.5.3.1.1.1",
+ cpqSasLogDrvIndex => "1.3.6.1.4.1.232.5.5.3.1.1.2",
+ cpqSasLogDrvStatus => "1.3.6.1.4.1.232.5.5.3.1.1.4",
+ cpqSasLogDrvCondition => "1.3.6.1.4.1.232.5.5.3.1.1.5",
+ cpqSasLogDrvRebuildingPercent => "1.3.6.1.4.1.232.5.5.3.1.1.12",
+ cpqSasLogDrvRaidLevel => "1.3.6.1.4.1.232.5.5.3.1.1.3",
+ cpqSasLogDrvRaidLevelValue => {
+ 1 => "other",
+ 2 => "raid0",
+ 3 => "raid1",
+ 4 => "raid0plus1",
+ 5 => "raid5",
+ 6 => "raid15",
+ 7 => "volume",
+ },
+ cpqSasLogDrvConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqSasLogDrvStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "rebuilding",
+ 5 => "failed",
+ 6 => "offline",
+ }
+ };
+ # INDEX { cpqSasLogDrvCntlrIndex, cpqSasLogDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqSasLogDrvEntry')) {
+ push(@{$self->{logical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Sas::LogicalDrive->new(%{$_}));
+ }
+
+ $oids = {
+ cpqSasPhyDrvEntry => "1.3.6.1.4.1.232.5.5.2.1.1",
+ cpqSasPhyDrvHbaIndex => "1.3.6.1.4.1.232.5.5.2.1.1.1",
+ cpqSasPhyDrvIndex => "1.3.6.1.4.1.232.5.5.2.1.1.2",
+ cpqSasPhyDrvLocationString => "1.3.6.1.4.1.232.5.5.2.1.1.3",
+ cpqSasPhyDrvStatus => "1.3.6.1.4.1.232.5.5.2.1.1.5",
+ cpqSasPhyDrvSize => "1.3.6.1.4.1.232.5.5.2.1.1.8",
+ cpqSasPhyDrvCondition => "1.3.6.1.4.1.232.5.5.2.1.1.6",
+ cpqSasPhyDrvConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqSasPhyDrvStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "predictiveFailure",
+ 4 => "offline",
+ 5 => "failed",
+ 6 => "missingWasOk",
+ 7 => "missingWasPredictiveFailure",
+ 8 => "missingWasOffline",
+ 9 => "missingWasFailed",
+ },
+ };
+
+ # INDEX { cpqPhyLogDrvCntlrIndex, cpqSasPhyDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqSasPhyDrvEntry')) {
+ push(@{$self->{physical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Sas::PhysicalDrive->new(%{$_}));
+ }
+
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi.pm
new file mode 100755
index 0000000..cf38238
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi.pm
@@ -0,0 +1,227 @@
+package HP::Proliant::Component::DiskSubsystem::Scsi;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem);
+
+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},
+ controllers => [],
+ enclosures => [],
+ physical_drives => [],
+ logical_drives => [],
+ spare_drives => [],
+ condition => undef,
+ blacklisted => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Scsi::SNMP';
+ } else {
+ bless $self, 'HP::Proliant::Component::DiskSubsystem::Scsi::CLI';
+ }
+ $self->init();
+ $self->assemble();
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{controllers}}) {
+ $_->dump();
+ }
+}
+
+package HP::Proliant::Component::DiskSubsystem::Scsi::Controller;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqScsiCntlr/, keys %params;
+ $self->{name} = $params{name} || $params{cpqScsiCntlrIndex}.':'.$params{cpqScsiCntlrBusIndex};
+ $self->{controllerindex} = $self->{cpqScsiCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('scco', $self->{name});
+ my $info = sprintf 'scsi controller %s in slot %s is %s',
+ $self->{name}, $self->{cpqScsiCntlrSlot}, $self->{cpqScsiCntlrCondition};
+ if ($self->{cpqScsiCntlrCondition} eq 'other') {
+ if (scalar(@{$self->{physical_drives}})) {
+ $info .= ' and needs attention';
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $info .= ' and unused';
+ $self->add_info($info);
+ $self->{blacklisted} = 1;
+ }
+ } elsif ($self->{cpqScsiCntlrCondition} ne 'ok') {
+ $info .= ' and needs attention';
+ $self->add_message(CRITICAL, $info);
+ $self->add_info($info);
+ } else {
+ $self->add_info($info);
+ }
+ foreach (@{$self->{logical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->check();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->check();
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[SCSI_CONTROLLER_%s]\n", $self->{name};
+ foreach (qw(cpqScsiCntlrIndex cpqScsiCntlrBusIndex cpqScsiCntlrSlot
+ cpqScsiCntlrStatus cpqScsiCntlrCondition cpqScsiCntlrHwLocation)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+ foreach (@{$self->{logical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_drives}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{spare_drives}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Scsi::LogicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqScsiLogDrv/, keys %params;
+ $self->{name} = $params{name} || $params{cpqScsiLogDrvCntlrIndex}.':'.$params{cpqScsiLogDrvBusIndex}.':'.$params{cpqScsiLogDrvIndex};
+ bless $self, $class;
+ $self->{controllerindex} = $self->{cpqScsiLogDrvCntlrIndex};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('scld', $self->{name});
+ my $info = sprintf 'logical drive %s is %s', $self->{name}, $self->{cpqScsiLogDrvStatus};
+ if ($self->{cpqScsiLogDrvCondition} ne "ok") {
+ if ($self->{cpqScsiLogDrvStatus} =~
+ /rebuild|recovering/) {
+ $self->add_message(WARNING, $info);
+ } else {
+ $self->add_message(CRITICAL, $info);
+ }
+ }
+ $self->add_info($info);
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LOGICAL_DRIVE_%s]\n", $self->{name};
+ foreach (qw(cpqScsiLogDrvCntlrIndex cpqScsiLogDrvBusIndex cpqScsiLogDrvIndex
+ cpqScsiLogDrvFaultTol cpqScsiLogDrvStatus cpqScsiLogDrvSize
+ cpqScsiLogDrvPhyDrvIDs cpqScsiLogDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Scsi::PhysicalDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ map { $self->{$_} = $params{$_} } grep /cpqScsiPhyDrv/, keys %params;
+ $self->{name} = $params{name} ||
+ $self->{cpqScsiPhyDrvCntlrIndex}.':'.$self->{cpqScsiPhyDrvBusIndex}.':'.$self->{cpqScsiPhyDrvIndex};
+ $self->{controllerindex} = $self->{cpqScsiPhyDrvCntlrIndex};
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('scpd', $self->{name});
+ my $info = sprintf 'physical drive %s is %s', $self->{name}, $self->{cpqScsiPhyDrvCondition};
+ if ($self->{cpqScsiPhyDrvCondition} ne 'ok') {
+ $self->add_message(CRITICAL, $info);
+ }
+ $self->add_info($info);
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PHYSICAL_DRIVE_%s]\n", $self->{name};
+ foreach (qw(cpqScsiPhyDrvCntlrIndex cpqScsiPhyDrvBusIndex cpqScsiPhyDrvIndex
+ cpqScsiPhyDrvStatus cpqScsiPhyDrvSize cpqScsiPhyDrvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::DiskSubsystem::Scsi::SpareDrive;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub dump {
+ my $self = shift;
+ printf "[SPARE_DRIVE]\n";
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/CLI.pm
new file mode 100755
index 0000000..69b3926
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/CLI.pm
@@ -0,0 +1,27 @@
+package HP::Proliant::Component::DiskSubsystem::Scsi::CLI;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi);
+
+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;
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/SNMP.pm
new file mode 100755
index 0000000..71a0f66
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/DiskSubsystem/Scsi/SNMP.pm
@@ -0,0 +1,134 @@
+package HP::Proliant::Component::DiskSubsystem::Scsi::SNMP;
+our @ISA = qw(HP::Proliant::Component::DiskSubsystem::Scsi
+ 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};
+
+ # CPQSCSI-MIB
+ my $oids = {
+ cpqScsiCntlrEntry => '1.3.6.1.4.1.232.5.2.2.1.1',
+ cpqScsiCntlrIndex => '1.3.6.1.4.1.232.5.2.2.1.1.1',
+ cpqScsiCntlrBusIndex => '1.3.6.1.4.1.232.5.2.2.1.1.2',
+ cpqScsiCntlrSlot => '1.3.6.1.4.1.232.5.2.2.1.1.6',
+ cpqScsiCntlrStatus => '1.3.6.1.4.1.232.5.2.2.1.1.7',
+ cpqScsiCntlrCondition => '1.3.6.1.4.1.232.5.2.2.1.1.12',
+ cpqScsiCntlrHwLocation => '1.3.6.1.4.1.232.5.2.2.1.1.16',
+ cpqScsiCntlrStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ },
+ cpqScsiCntlrConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ }
+ };
+
+ # INDEX { cpqScsiCntlrIndex, cpqScsiCntlrBusIndex }
+ foreach ($self->get_entries($oids, 'cpqScsiCntlrEntry')) {
+ push(@{$self->{controllers}},
+ HP::Proliant::Component::DiskSubsystem::Scsi::Controller->new(%{$_}));
+ }
+
+ $oids = {
+ cpqScsiLogDrvEntry => '1.3.6.1.4.1.232.5.2.3.1.1',
+ cpqScsiLogDrvCntlrIndex => '1.3.6.1.4.1.232.5.2.3.1.1.1',
+ cpqScsiLogDrvBusIndex => '1.3.6.1.4.1.232.5.2.3.1.1.2',
+ cpqScsiLogDrvIndex => '1.3.6.1.4.1.232.5.2.3.1.1.3',
+ cpqScsiLogDrvFaultTol => '1.3.6.1.4.1.232.5.2.3.1.1.4',
+ cpqScsiLogDrvStatus => '1.3.6.1.4.1.232.5.2.3.1.1.5',
+ cpqScsiLogDrvSize => '1.3.6.1.4.1.232.5.2.3.1.1.6',
+ cpqScsiLogDrvPhyDrvIDs => '1.3.6.1.4.1.232.5.2.3.1.1.7',
+ cpqScsiLogDrvCondition => '1.3.6.1.4.1.232.5.2.3.1.1.8',
+ cpqScsiLogDrvStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ 4 => "unconfigured",
+ 5 => "recovering",
+ 6 => "readyForRebuild",
+ 7 => "rebuilding",
+ 8 => "wrongDrive",
+ 9 => "badConnect",
+ },
+ cpqScsiLogDrvConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqScsiLogDrvFaultTolValue => {
+ 1 => "other",
+ 2 => "none",
+ 3 => "mirroring",
+ 4 => "dataGuard",
+ 5 => "distribDataGuard",
+ },
+
+ };
+ # INDEX { cpqScsiLogDrvCntlrIndex, cpqScsiLogDrvBusIndex, cpqScsiLogDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqScsiLogDrvEntry')) {
+ push(@{$self->{logical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Scsi::LogicalDrive->new(%{$_}));
+ }
+
+ $oids = {
+ cpqScsiPhyDrvEntry => '1.3.6.1.4.1.232.5.2.4.1.1',
+ cpqScsiPhyDrvCntlrIndex => '1.3.6.1.4.1.232.5.2.4.1.1.1',
+ cpqScsiPhyDrvBusIndex => '1.3.6.1.4.1.232.5.2.4.1.1.2',
+ cpqScsiPhyDrvIndex => '1.3.6.1.4.1.232.5.2.4.1.1.3',
+ cpqScsiPhyDrvStatus => '1.3.6.1.4.1.232.5.2.4.1.1.9',
+ cpqScsiPhyDrvSize => '1.3.6.1.4.1.232.5.2.4.1.1.7',
+ cpqScsiPhyDrvCondition => '1.3.6.1.4.1.232.5.2.4.1.1.26',
+ cpqScsiPhyDrvConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqScsiPhyDrvStatusValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "failed",
+ 4 => "notConfigured",
+ 5 => "badCable",
+ 6 => "missingWasOk",
+ 7 => "missingWasFailed",
+ 8 => "predictiveFailure",
+ 9 => "missingWasPredictiveFailure",
+ 10 => "offline",
+ 11 => "missingWasOffline",
+ 12 => "hardError",
+ },
+ };
+
+ # INDEX { cpqScsiPhyDrvCntlrIndex, cpqScsiPhyDrvBusIndex, cpqScsiPhyDrvIndex }
+ foreach ($self->get_entries($oids, 'cpqScsiPhyDrvEntry')) {
+ push(@{$self->{physical_drives}},
+ HP::Proliant::Component::DiskSubsystem::Scsi::PhysicalDrive->new(%{$_}));
+ }
+
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem.pm
new file mode 100755
index 0000000..2a7a378
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem.pm
@@ -0,0 +1,236 @@
+package HP::Proliant::Component::EventSubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ events => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ boottime => 0,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ $self = HP::Proliant::Component::EventSubsystem::SNMP->new(%params);
+ my $sysUpTime = SNMP::Utils::get_object(
+ $self->{rawdata}, '1.3.6.1.2.1.1.3.0') || 3600*24*100;
+ $self->{boottime} = int(time - $sysUpTime / 100);
+ } elsif ($self->{method} eq 'cli') {
+ $self = HP::Proliant::Component::EventSubsystem::CLI->new(%params);
+ my $uptime = do { local (@ARGV, $/) = "/proc/uptime"; my $x = <>; close ARGV; $x };
+ # also watch 10 minutes of booting before the operating system starts ticking
+ $self->{boottime} = time - int((split(/\s+/, $uptime))[0]) - 600;
+ } else {
+ die "unknown method";
+ }
+ # repair dates
+ my $lasttime = 0;
+ for my $event (reverse @{$self->{events}}) {
+ if ($event->{cpqHeEventLogUpdateTime} != 0) {
+ $lasttime = $event->{cpqHeEventLogUpdateTime};
+ } else {
+ $event->{cpqHeEventLogUpdateTime} = $lasttime;
+ }
+ }
+ # maybe the most recent events had zero timestamps.
+ # fill them up with timestamps from the past.
+ for my $event (@{$self->{events}}) {
+ if ($event->{cpqHeEventLogUpdateTime} != 0) {
+ $lasttime = $event->{cpqHeEventLogUpdateTime};
+ } else {
+ $event->{cpqHeEventLogUpdateTime} = $lasttime;
+ }
+ }
+ # we need the boottime in the event's check method
+ for my $event (@{$self->{events}}) {
+ $event->{boottime} = $self->{boottime};
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking events');
+ if (scalar (@{$self->{events}}) == 0) {
+ #$self->overall_check();
+ $self->add_info('no events found');
+ } else {
+ foreach (sort { $a->{cpqHeEventLogEntryNumber} <=> $b->{cpqHeEventLogEntryNumber}}
+ @{$self->{events}}) {
+ $_->check($self->{warningtime}, $self->{criticaltime});
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (sort { $a->{cpqHeEventLogEntryNumber} <=> $b->{cpqHeEventLogEntryNumber} } @{$self->{events}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::EventSubsystem::Event;
+our @ISA = qw(HP::Proliant::Component::EventSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+{
+ our $interesting_events = {
+ # POST Error: 201-Memory Error Multi-bit error occurred during memory initialization, Board 1, Bank B. Bank containing DIMM(s) has been disabled..
+ # POST Error: 201-Memory Error Single-bit error occured during memory initialization, Board 1, DIMM 1. Bank containing DIMM(s) has been disabled..
+ # POST Error: 207-Memory initialization error on Memory Board 5 DIMM 7. The operating system may not have access to all of the memory installed in the system..
+ # POST Error: 207-Invalid Memory Configuration-Mismatched DIMMs within DIMM Bank Memory in Bank A Not Utilized..
+ # POST Error: 210 - Quick Path Interconnect (QPI) Link Degradation. A QPI link is operating in a degraded performace state..
+ 'POST Messages' => [
+ '201-Memory', '207-Memory',
+ '210\s*-\s*Quick Path Interconnect.*degraded.*'
+ ],
+ 'Main Memory' => [
+ 'Corrected Memory Error threshold exceeded',
+ 'Uncorrectable Memory Error',
+ ],
+ };
+}
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeEventLogEntryNumber => $params{cpqHeEventLogEntryNumber},
+ cpqHeEventLogEntrySeverity => lc $params{cpqHeEventLogEntrySeverity},
+ cpqHeEventLogEntryClass => $params{cpqHeEventLogEntryClass},
+ cpqHeEventLogEntryCount => $params{cpqHeEventLogEntryCount} || 1,
+ cpqHeEventLogInitialTime => $params{cpqHeEventLogInitialTime},
+ cpqHeEventLogUpdateTime => $params{cpqHeEventLogUpdateTime},
+ cpqHeEventLogErrorDesc => $params{cpqHeEventLogErrorDesc},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ if (! $self->{cpqHeEventLogInitialTime}) {
+ $self->{cpqHeEventLogInitialTime} = $self->{cpqHeEventLogUpdateTime};
+ }
+ #
+ #
+ #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ # |warn |crit |now
+ #
+ #<----- ignore -------><----- warning ------><---------- critical --------->
+ #
+ # If we have --eventrange <warnlookback>/<critlookback>
+ # Very young events are shown as critical
+ # If the event gets older, it is shown as warning
+ # At some time, the event is no longer shown
+ # Without --eventrange the event is shown as critical until you manually repair it
+ if ($params{runtime}->{options}->{eventrange}) {
+ my ($warningrange, $criticalrange) = split(/\//, $params{runtime}->{options}->{eventrange});
+ if (! $criticalrange) {
+ $criticalrange = $warningrange;
+ }
+ if ($criticalrange =~ /^(\d+)[s]*$/) {
+ $criticalrange = $1;
+ } elsif ($criticalrange =~ /^(\d+)m$/) {
+ $criticalrange = $1 * 60;
+ } elsif ($criticalrange =~ /^(\d+)h$/) {
+ $criticalrange = $1 * 3600;
+ } elsif ($criticalrange =~ /^(\d+)d$/) {
+ $criticalrange = $1 * 3600 * 24;
+ } else {
+ die "range has to be <number>[smhd]";
+ }
+ if ($warningrange =~ /^(\d+)[s]*$/) {
+ $warningrange = $1;
+ } elsif ($warningrange =~ /^(\d+)m$/) {
+ $warningrange = $1 * 60;
+ } elsif ($warningrange =~ /^(\d+)h$/) {
+ $warningrange = $1 * 3600;
+ } elsif ($warningrange =~ /^(\d+)d$/) {
+ $warningrange = $1 * 3600 * 24;
+ } else {
+ die "range has to be <number>[smhd]";
+ }
+ $self->{warningtime} = time - $warningrange;
+ $self->{criticaltime} = time - $criticalrange;
+ } else {
+ $self->{warningtime} = 0;
+ $self->{criticaltime} = 0;
+ }
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('evt', $self->{cpqHeEventLogEntryNumber});
+ # only check severity "critical" and "caution"
+ # optional: only check interesting events
+ # POST events only if they date maximum from reboot-5min
+ # younger than critical? -> critical
+ #
+ $self->add_info(sprintf "Event: %d Added: %s Class: (%s) %s %s",
+ $self->{cpqHeEventLogEntryNumber},
+ $self->{cpqHeEventLogUpdateTime},
+ $self->{cpqHeEventLogEntryClass},
+ $self->{cpqHeEventLogEntrySeverity},
+ $self->{cpqHeEventLogErrorDesc});
+ if ($self->{cpqHeEventLogEntrySeverity} eq "caution" ||
+ $self->{cpqHeEventLogEntrySeverity} eq "critical") {
+ # also watch 10 minutes of booting before the operating system starts ticking
+ if ($self->{cpqHeEventLogUpdateTime} >= $self->{boottime}) {
+ foreach my $class (keys %{$HP::Proliant::Component::EventSubsystem::Event::interesting_events}) {
+ foreach my $pattern (@{$HP::Proliant::Component::EventSubsystem::Event::interesting_events->{$class}}) {
+ if ($self->{cpqHeEventLogErrorDesc} =~ /$pattern/) {
+ if ($self->{cpqHeEventLogUpdateTime} < $self->{warningtime}) {
+ # you didn't care for this problem too long.
+ # don't say i didn't warn you.
+ if (0) {
+ # auto-ack?
+ }
+ last;
+ } elsif ($self->{cpqHeEventLogUpdateTime} < $self->{criticaltime}) {
+ $self->add_message(WARNING, $self->{info});
+ last;
+ } else {
+ $self->add_message(CRITICAL, $self->{info});
+ last;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ # info, repair...
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[EVENT_%s]\n", $self->{cpqHeEventLogEntryNumber};
+ foreach (qw(cpqHeEventLogEntryNumber cpqHeEventLogEntrySeverity
+ cpqHeEventLogEntryCount cpqHeEventLogInitialTime
+ cpqHeEventLogUpdateTime cpqHeEventLogErrorDesc)) {
+ if ($_ =~ /.*Time$/) {
+ printf "%s: %s\n", $_, scalar localtime $self->{$_};
+ } else {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/CLI.pm
new file mode 100755
index 0000000..b75a547
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/CLI.pm
@@ -0,0 +1,78 @@
+package HP::Proliant::Component::EventSubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::EventSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+use Time::Local;
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ events => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my %tmpevent = (
+ runtime => $params{runtime},
+ );
+ my $inblock = 0;
+ foreach (grep(/^iml/, split(/\n/, $self->{rawdata}))) {
+ s/^iml\s*//g;
+ if (/^Event:\s+(\d+)\s+[\w]+:\s+(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+)/) {
+ # Event: 31 Added: 09/22/2011 05:11
+ # 1 2 3 4 5 6
+ $tmpevent{cpqHeEventLogEntryNumber} = $1;
+ if ($4 == 0) {
+ # Event: 29 Added: 00/00/0000 00:00
+ $tmpevent{cpqHeEventLogUpdateTime} = 0;
+ } else {
+ eval {
+ $tmpevent{cpqHeEventLogUpdateTime} = timelocal(0, $6, $5, $3, $2 - 1, $4);
+ };
+ if ($@) {
+ # Event: 10 Added: 27/27/2027 27:27
+ $tmpevent{cpqHeEventLogUpdateTime} = 0;
+ }
+ }
+ $inblock = 1;
+ } elsif (/^(\w+):\s+(.*?)\s+\-\s+(.*)/) {
+ $tmpevent{cpqHeEventLogEntrySeverity} = $1;
+ $tmpevent{cpqHeEventLogEntryClass} = $2;
+ $tmpevent{cpqHeEventLogErrorDesc} = $3;
+ if ($tmpevent{cpqHeEventLogErrorDesc} =~ /.*?:\s+(\d+)/) {
+ $tmpevent{cpqHeEventLogEntryCode} = $1;
+ } else {
+ $tmpevent{cpqHeEventLogEntryCode} = 0;
+ }
+ } elsif (/^\s*$/) {
+ if ($inblock) {
+ $inblock = 0;
+ push(@{$self->{events}},
+ HP::Proliant::Component::EventSubsystem::Event->new(%tmpevent));
+ %tmpevent = (
+ runtime => $params{runtime},
+ );
+ }
+ }
+ }
+ if ($inblock) {
+ push(@{$self->{events}},
+ HP::Proliant::Component::EventSubsystem::Event->new(%tmpevent));
+ }
+}
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/SNMP.pm
new file mode 100755
index 0000000..506732a
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/EventSubsystem/SNMP.pm
@@ -0,0 +1,221 @@
+package HP::Proliant::Component::EventSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::EventSubsystem
+ HP::Proliant::Component::SNMP);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+use Time::Local;
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ events => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->overall_init(%params);
+ $self->init(%params);
+ return $self;
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ # overall
+ my $cpqHeEventLogSupported = '1.3.6.1.4.1.232.6.2.11.1.0';
+ my $cpqHeEventLogSupportedValue = {
+ 1 => 'other',
+ 2 => 'notSupported',
+ 3 => 'supported',
+ 4 => 'clear',
+ };
+ my $cpqHeEventLogCondition = '1.3.6.1.4.1.232.6.2.11.2.0';
+ my $cpqHeEventLogConditionValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ };
+ $self->{eventsupp} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeEventLogSupported,
+ $cpqHeEventLogSupportedValue);
+ $self->{eventstatus} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeEventLogCondition,
+ $cpqHeEventLogConditionValue);
+ $self->{eventsupp} |= lc $self->{eventsupp};
+ $self->{eventstatus} |= lc $self->{eventstatus};
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeEventLogEntry => "1.3.6.1.4.1.232.6.2.11.3.1",
+ cpqHeEventLogEntryNumber => "1.3.6.1.4.1.232.6.2.11.3.1.1",
+ cpqHeEventLogEntrySeverity => "1.3.6.1.4.1.232.6.2.11.3.1.2",
+ cpqHeEventLogEntryClass => "1.3.6.1.4.1.232.6.2.11.3.1.3",
+ cpqHeEventLogEntryCode => "1.3.6.1.4.1.232.6.2.11.3.1.4",
+ cpqHeEventLogEntryCount => "1.3.6.1.4.1.232.6.2.11.3.1.5",
+ cpqHeEventLogInitialTime => "1.3.6.1.4.1.232.6.2.11.3.1.6",
+ cpqHeEventLogUpdateTime => "1.3.6.1.4.1.232.6.2.11.3.1.7",
+ cpqHeEventLogErrorDesc => "1.3.6.1.4.1.232.6.2.11.3.1.8",
+
+ cpqHeEventLogEntryClassValue => {
+ # 2 Fan Failure (Fan 1, Location I/O Board)
+ # Internal Storage System Overheating (Slot 0, Zone 1, Location Storage, Temperature Unknown)
+ # System Fans Not Redundant (Location I/O Board)
+ # MY MUSTARD: only critical events should lead to an alert, if at all. The caution events mean "loss of redundancy".
+ # We monitor temperatures and fan status anyway.
+ #2 => "",
+ # 3 Corrected Memory Error threshold exceeded (System Memory, Memory Module 1)
+ # Uncorrectable Memory Error detected by ROM-based memory validation (Board 1, Memory Module 4)
+ # MY MUSTARD: threshold exceeded is caution. Uncorrectable errors are critical. Both should be detected anyway.
+ 3 => "Main Memory",
+ # 4 Accelerator Cache Memory Parity Error (Socket 1)
+ #4 => "",
+ # 5 Processor Correctable error threshold exceeded (Board 0, Processor 2)
+ #5 => "",
+ # 6 Unrecoverable Intermodule Bus error (Error code 0x00000000)
+ #6 => "",
+ # 8 PCI Bus Error (Slot 0, Bus 0, Device 0, Function 0)
+ 8 => "PCI Bus",
+ # 10 1720-S.M.A.R.T. Hard Drive Detects Imminent Failure
+ # POST Error: 201-Memory Error Multi-bit error occurred during memory initialization, Board 1, Bank B. Bank containing DIMM(s) has been disabled..
+ # POST Error: 201-Memory Error Single-bit error occured during memory initialization, Board 1, DIMM 1. Bank containing DIMM(s) has been disabled..
+ # POST Error: 207-Memory Configuration Warning - memory boards should be installed sequentially.
+ # POST Error: 210-Memory Board Failure on board 4.
+ # POST Error: 210-Memory Board Power Fault on board 3.
+ # POST Error: 207-Memory initialization error on Memory Board 5 DIMM 7. The operating system may not have access to all of the memory installed in the system..
+ # POST Error: 207-Invalid Memory Configuration-Mismatched DIMMs within DIMM Bank Memory in Bank A Not Utilized..
+ 10 => "POST Messages",
+ 11 => "Power Subsystem",
+ 13 => "ASR",
+ # 14 Automatic Operating System Shutdown Initiated Due to Overheat Condition
+ # Automatic Operating System Shutdown Initiated Due to Fan Failure
+ # Blue Screen Trap (BugCheck, STOP: 0x00000050 (0x9CB2C5B4, 0x00000001, 0x00000004, 0x00000000))
+ # Operating System failure (BugCheck, STOP: 0x000000AB (0x00000005, 0x00000488, 0x00000000, 0x00000002))
+ 14 => "OS Class",
+ # 15 Unknown Event (Class 15, Code 255)
+ #15 => "",
+ # 17 Network Adapter Link Down (Slot 0, Port 4)
+ # Network Adapters Redundancy Reduced (Slot 0, Port 1)
+ 17 => "Network Adapter",
+ # 19 Drive Array Device Failure (Slot 0, Bus 2, Bay 4)
+ # Internal SAS Enclosure Device Failure (Bay 1, Box 1, Port 2I, Slot 1)
+ #19 => "",
+ # 20 An Unrecoverable System Error (NMI) has occurred
+ # Unrecoverable System Error has occurred (Error code 0x01AE0E2F, 0x00000000)
+ 20 => "Unrecoverable System Error",
+ # 32 ROM flashed (New version: 01/09/2008)
+ 32 => "System Revision",
+ # 33 IML Cleared (Administrator)
+ # IML cleared through HP ProLiant Health Agent (cmahealthd)
+ # Insight Diagnostics Note: Physisches Festplattenlaufwerk 5, Controller Steckplatz 0-Diagnosis: Fehlgeschlagen
+ 33 => "Maintenance Note",
+ # 34 New Chassis Connected (Enclosure Address 27AC)
+ # Loss Of Chassis Connectivity (Enclosure Serial Number 8004******)
+ # Server Blade Enclosure Server Blade Inserted (Slot 16, Enclosure Address 0000)
+ #34 => "",
+ },
+ cpqHeEventLogEntrySeverityValue => {
+ 2 => "informational",
+ 3 => "infoWithAlert",
+ 6 => "repaired",
+ 9 => "caution",
+ 15 => "critical",
+ },
+ # Time
+ # 07 D8 09 02 11 11
+ };
+ # INDEX { cpqHeEventLogEntryNumber }
+ foreach ($self->get_entries($oids, 'cpqHeEventLogEntry')) {
+ if ($_->{cpqHeEventLogInitialTime} =~ /^(([0-9a-fA-F]{2})( [0-9a-fA-F]{2})*)\s*$/) {
+ $_->{cpqHeEventLogInitialTime} =~ s/ //;
+ my ($year, $month, $day, $hour, $min) = map { hex($_) } split(/\s+/, $_->{cpqHeEventLogInitialTime});
+ if ($year == 0) {
+ $_->{cpqHeEventLogInitialTime} = 0;
+ } else {
+ eval {
+ $_->{cpqHeEventLogInitialTime} = timelocal(0, $min, $hour, $day, $month - 1, $year);
+ };
+ if ($@) {
+ $_->{cpqHeEventLogInitialTime} = 0;
+ }
+ }
+ } elsif ($_->{cpqHeEventLogInitialTime} =~ /^0x([0-9a-fA-F]{4})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/) {
+ my ($year, $month, $day, $hour, $min) = map { hex($_) } ($1, $2, $3, $4, $5);
+ if ($year == 0) {
+ $_->{cpqHeEventLogInitialTime} = 0;
+ } else {
+ eval {
+ $_->{cpqHeEventLogInitialTime} = timelocal(0, $min, $hour, $day, $month - 1, $year);
+ };
+ if ($@) {
+ $_->{cpqHeEventLogInitialTime} = 0;
+ }
+ }
+ } elsif ($_->{cpqHeEventLogInitialTime} =~ /^\0\0\0\0\0\0/) {
+ $_->{cpqHeEventLogInitialTime} = 0;
+ }
+ if ($_->{cpqHeEventLogUpdateTime} =~ /^(([0-9a-fA-F]{2})( [0-9a-fA-F]{2})*)\s*$/) {
+ $_->{cpqHeEventLogUpdateTime} =~ s/ //;
+ my ($year, $month, $day, $hour, $min) = map { hex($_) } split(/\s+/, $_->{cpqHeEventLogUpdateTime});
+ if ($year == 0) {
+ $_->{cpqHeEventLogUpdateTime} = 0;
+ } else {
+ eval {
+ $_->{cpqHeEventLogUpdateTime} = timelocal(0, $min, $hour, $day, $month - 1, $year);
+ };
+ if ($@) {
+ $_->{cpqHeEventLogUpdateTime} = 0;
+ }
+ }
+ } elsif ($_->{cpqHeEventLogUpdateTime} =~ /^0x([0-9a-fA-F]{4})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/) {
+ my ($year, $month, $day, $hour, $min) = map { hex($_) } ($1, $2, $3, $4, $5);
+ if ($year == 0) {
+ $_->{cpqHeEventLogUpdateTime} = 0;
+ } else {
+ eval {
+ $_->{cpqHeEventLogUpdateTime} = timelocal(0, $min, $hour, $day, $month - 1, $year);
+ };
+ if ($@) {
+ $_->{cpqHeEventLogUpdateTime} = 0;
+ }
+ }
+ } elsif ($_->{cpqHeEventLogUpdateTime} =~ /^\0\0\0\0\0\0/) {
+ $_->{cpqHeEventLogUpdateTime} = 0;
+ }
+ if ($_->{cpqHeEventLogErrorDesc} =~ /^(([0-9a-fA-F]{2})(\s+[0-9a-fA-F]{2})*)\s*$/) {
+ $_->{cpqHeEventLogErrorDesc} = join "", map { chr($_) } map { if (hex($_) > 127) { 20; } else { hex($_) } } split(/\s+/, $_->{cpqHeEventLogErrorDesc});
+ }
+ push(@{$self->{events}},
+ HP::Proliant::Component::EventSubsystem::Event->new(%{$_}));
+ }
+}
+
+sub overall_check {
+ my $self = shift;
+ my $result = 0;
+ $self->blacklist('oe', '');
+ if ($self->{eventsupp} && $self->{eventsupp} eq "supported") {
+ if ($self->{eventstatus} eq "ok") {
+ $result = 0;
+ $self->add_info('eventlog system is ok');
+ } else {
+ $result = 0;
+ $self->add_info(sprintf "eventlog system is %s", $self->{eventstatus});
+ }
+ } else {
+ $result = 0;
+ $self->add_info('no event status found');
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem.pm
new file mode 100755
index 0000000..38da57b
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem.pm
@@ -0,0 +1,263 @@
+package HP::Proliant::Component::FanSubsystem;
+our @ISA = qw(HP::Proliant::Component);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+################################## fan_redundancy ##########
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ method => $params{method},
+ condition => $params{condition},
+ status => $params{status},
+ fans => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::FanSubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::FanSubsystem::CLI->new(%params);
+ } else {
+ die 'unknown method';
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking fans');
+ $self->blacklist('ff', '');
+ if (scalar (@{$self->{fans}}) == 0) {
+ $self->overall_check(); # sowas ist mir nur einmal untergekommen
+ # die maschine hatte alles in allem nur 2 oids (cpqHeFltTolFanChassis)
+ # SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.1 = INTEGER: 0
+ # SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.2 = INTEGER: 0
+ } else {
+ my $overallhealth = $self->overall_check();
+ foreach (@{$self->{fans}}) {
+ $_->{overallhealth} = $overallhealth;
+ $_->check();
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{fans}}) {
+ $_->dump();
+ }
+}
+
+sub get_fan_by_index {
+ my $self = shift;
+ my $index;
+ foreach (@{$self->{fans}}) {
+ return $_ if exists $_->{cpqHeFltTolFanIndex} &&
+ $_->{cpqHeFltTolFanIndex} == $index;
+ }
+ return undef;
+}
+
+
+package HP::Proliant::Component::FanSubsystem::Fan;
+our @ISA = qw(HP::Proliant::Component::FanSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ if (exists $params{cpqHeFltTolFanRedundant}) {
+ return HP::Proliant::Component::FanSubsystem::Fan::FTol->new(%params);
+ } else {
+ return HP::Proliant::Component::FanSubsystem::Fan::Thermal->new(%params);
+ }
+}
+
+
+package HP::Proliant::Component::FanSubsystem::Fan::FTol;
+our @ISA = qw(HP::Proliant::Component::FanSubsystem::Fan);
+
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeFltTolFanChassis => $params{cpqHeFltTolFanChassis},
+ cpqHeFltTolFanIndex => $params{cpqHeFltTolFanIndex},
+ cpqHeFltTolFanLocale => $params{cpqHeFltTolFanLocale},
+ cpqHeFltTolFanPresent => $params{cpqHeFltTolFanPresent},
+ cpqHeFltTolFanType => $params{cpqHeFltTolFanType},
+ cpqHeFltTolFanSpeed => $params{cpqHeFltTolFanSpeed},
+ cpqHeFltTolFanRedundant => $params{cpqHeFltTolFanRedundant},
+ cpqHeFltTolFanRedundantPartner => $params{cpqHeFltTolFanRedundantPartner},
+ cpqHeFltTolFanCondition => $params{cpqHeFltTolFanCondition},
+ cpqHeFltTolFanPctMax => $params{cpqHeFltTolFanPctMax}, #!!!
+ cpqHeFltTolFanHotPlug => $params{cpqHeFltTolFanHotPlug}, #!!!
+ partner => $params{partner},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if (($self->{cpqHeFltTolFanRedundant} eq 'redundant') &&
+ ((! defined $self->{cpqHeFltTolFanRedundantPartner}) ||
+ (! $self->{cpqHeFltTolFanRedundantPartner}))) {
+ $self->{cpqHeFltTolFanRedundant} = 'notRedundant';
+ # cpqHeFltTolFanRedundantPartner=0: partner not avail
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('f', $self->{cpqHeFltTolFanIndex});
+ $self->add_info(sprintf 'fan %d is %s, speed is %s, pctmax is %s%%, '.
+ 'location is %s, redundance is %s, partner is %s',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanPresent},
+ $self->{cpqHeFltTolFanSpeed}, $self->{cpqHeFltTolFanPctMax},
+ $self->{cpqHeFltTolFanLocale}, $self->{cpqHeFltTolFanRedundant},
+ $self->{cpqHeFltTolFanRedundantPartner});
+ $self->add_extendedinfo(sprintf 'fan_%s=%d%%',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanPctMax});
+ if ($self->{cpqHeFltTolFanPresent} eq 'present') {
+ if ($self->{cpqHeFltTolFanSpeed} eq 'high') {
+ $self->add_info(sprintf 'fan %d (%s) runs at high speed',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(CRITICAL, $self->{info});
+ } elsif ($self->{cpqHeFltTolFanSpeed} ne 'normal') {
+ $self->add_info(sprintf 'fan %d (%s) needs attention',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(CRITICAL, $self->{info});
+ }
+ if ($self->{cpqHeFltTolFanCondition} eq 'failed') {
+ $self->add_info(sprintf 'fan %d (%s) failed',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(CRITICAL, $self->{info});
+ } elsif ($self->{cpqHeFltTolFanCondition} eq 'degraded') {
+ $self->add_info(sprintf 'fan %d (%s) degraded',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(WARNING, $self->{info});
+ } elsif ($self->{cpqHeFltTolFanCondition} ne 'ok' &&
+ $self->{cpqHeFltTolFanCondition} ne 'other') {
+ $self->add_info(sprintf 'fan %d (%s) is not ok',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(WARNING, $self->{info});
+ }
+ if ($self->{cpqHeFltTolFanRedundant} eq 'notRedundant') {
+ # sieht so aus, als waere notRedundant und partner=0 normal z.b. dl360
+ # das duerfte der fall sein, wenn nur eine cpu verbaut wurde und
+ # statt einem redundanten paar nur dummies drinstecken.
+ # "This specifies if the fan is in a redundant configuration"
+ # notRedundant heisst also sowohl nicht redundant wegen ausfall
+ # des partners als auch von haus aus nicht redundant ausgelegt
+ if ($self->{cpqHeFltTolFanRedundantPartner}) {
+ # nicht redundant, hat aber einen partner. da muss man genauer
+ # hinschauen
+ #if (my $partner = $self->{partner}) {
+ #}
+ if ($self->{overallhealth}) {
+ # da ist sogar das system der meinung, dass etwas faul ist
+ if (! $self->{runtime}->{options}->{ignore_fan_redundancy}) {
+ $self->add_info(sprintf 'fan %d (%s) is not redundant',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(WARNING, $self->{info});
+ }
+ } else {
+ # das ist wohl so gewollt, dass einzelne fans eingebaut werden,
+ # obwohl redundante paerchen vorgesehen sind.
+ # scheint davon abzuhaengen, wieviele cpus geordert wurden.
+ }
+ }
+ } elsif ($self->{cpqHeFltTolFanRedundant} eq 'other') {
+ #seen on a dl320 g5p with bios from 2008.
+ # maybe redundancy is not supported at all
+ }
+ } elsif ($self->{cpqHeFltTolFanPresent} eq 'failed') { # from cli
+ $self->add_info(sprintf 'fan %d (%s) failed',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ $self->add_message(CRITICAL, $self->{info});
+ } elsif ($self->{cpqHeFltTolFanPresent} eq 'absent') {
+ $self->add_info(sprintf 'fan %d (%s) needs attention (is absent)',
+ $self->{cpqHeFltTolFanIndex}, $self->{cpqHeFltTolFanLocale});
+ # weiss nicht, ob absent auch kaputt bedeuten kann
+ # wenn nicht, dann wuerde man sich hier dumm und daemlich blacklisten
+ #$self->add_message(CRITICAL, $self->{info});
+ $self->add_message(WARNING, $self->{info}) if $self->{overallhealth};
+ }
+ if ($self->{runtime}->{options}->{perfdata}) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('fan_%s', $self->{cpqHeFltTolFanIndex}),
+ value => $self->{cpqHeFltTolFanPctMax},
+ uom => '%',
+ );
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FAN_%s]\n", $self->{cpqHeFltTolFanIndex};
+ foreach (qw(cpqHeFltTolFanChassis cpqHeFltTolFanIndex cpqHeFltTolFanLocale
+ cpqHeFltTolFanPresent cpqHeFltTolFanType cpqHeFltTolFanSpeed
+ cpqHeFltTolFanRedundant cpqHeFltTolFanRedundantPartner
+ cpqHeFltTolFanCondition cpqHeFltTolFanHotPlug)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::FanSubsystem::Fan::Thermal;
+our @ISA = qw(HP::Proliant::Component::FanSubsystem::Fan);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeThermalFanIndex => $params{cpqHeThermalFanIndex},
+ cpqHeThermalFanRequired => $params{cpqHeThermalFanRequired},
+ cpqHeThermalFanPresent => $params{cpqHeThermalFanPresent},
+ cpqHeThermalFanCpuFan => $params{cpqHeThermalFanCpuFan},
+ cpqHeThermalFanStatus => $params{cpqHeThermalFanStatus},
+ cpqHeThermalFanHwLocation => $params{cpqHeThermalFanHwLocation},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+}
+
+sub dump {
+ my $self = shift;
+ printf "[FAN_%s]\n", $self->{cpqHeThermalFanIndex};
+ foreach (qw(cpqHeThermalFanIndex cpqHeThermalFanRequired
+ cpqHeThermalFanPresent cpqHeThermalFanCpuFan cpqHeThermalFanStatus
+ cpqHeThermalFanHwLocation)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/CLI.pm
new file mode 100755
index 0000000..f82c770
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/CLI.pm
@@ -0,0 +1,101 @@
+package HP::Proliant::Component::FanSubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::FanSubsystem);
+
+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},
+ fans => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+# partner not available = cpqHeFltTolFanRedundantPartner=0
+# cpqHeFltTolFanTypeValue = other
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my %tmpfan = ();
+ foreach (grep(/^fans/, split(/\n/, $self->{rawdata}))) {
+ s/^fans //g;
+ if (/^#(\d+)\s+([\w#_\/\-]+)\s+(\w+)\s+(\w+)\s+(FAILED|[N\/A\d]+)%*\s+([\w\/]+)\s+(FAILED|[N\/A\d]+)\s+(\w+)/) {
+ %tmpfan = (
+ cpqHeFltTolFanIndex => $1,
+ cpqHeFltTolFanLocale => lc $2,
+ cpqHeFltTolFanPresent => lc $3,
+ cpqHeFltTolFanSpeed => lc $4,
+ cpqHeFltTolFanPctMax => lc $5, # (FAILED|[N\/A\d]+)
+ cpqHeFltTolFanRedundant => lc $6,
+ cpqHeFltTolFanRedundantPartner => lc $7, # (FAILED|[N\/A\d]+)
+ cpqHeFltTolFanHotPlug => lc $8,
+ );
+ } elsif (/^#(\d+)\s+([\w#_\/\-]+?)(Yes|No|N\/A)\s+(\w+)\s+(FAILED|[N\/A\d]+)%*\s+([\w\/]+)\s+(FAILED|[N\/A\d]+)\s+(\w+)/) {
+ # #5 SCSI_BACKPLANE_ZONEYes NORMAL N/A ....
+ %tmpfan = (
+ cpqHeFltTolFanIndex => $1,
+ cpqHeFltTolFanLocale => lc $2,
+ cpqHeFltTolFanPresent => lc $3,
+ cpqHeFltTolFanSpeed => lc $4,
+ cpqHeFltTolFanPctMax => lc $5,
+ cpqHeFltTolFanRedundant => lc $6,
+ cpqHeFltTolFanRedundantPartner => lc $7,
+ cpqHeFltTolFanHotPlug => lc $8,
+ );
+ } elsif (/^#(\d+)\s+([\w#_\/\-]+)\s+[NOno]+\s/) {
+ # Fan is not installed. #2 CPU#2 No - - No N/A -
+ } elsif (/^#(\d+)/) {
+ main::contact_author("FAN", $_);
+ }
+ if (%tmpfan) {
+ $tmpfan{runtime} = $params{runtime};
+ $tmpfan{cpqHeFltTolFanChassis} = 1; # geht aus hpasmcli nicht hervor
+ $tmpfan{cpqHeFltTolFanType} = 'other';
+ if ($tmpfan{cpqHeFltTolFanPctMax} !~ /^\d+$/) {
+ if ($tmpfan{cpqHeFltTolFanSpeed} eq 'normal') {
+ $tmpfan{cpqHeFltTolFanPctMax} = 50;
+ } elsif ($tmpfan{cpqHeFltTolFanSpeed} eq 'high') {
+ $tmpfan{cpqHeFltTolFanPctMax} = 100;
+ } else {
+ $tmpfan{cpqHeFltTolFanPctMax} = 0;
+ }
+ }
+ if($tmpfan{cpqHeFltTolFanSpeed} eq 'failed') {
+ $tmpfan{cpqHeFltTolFanCondition} = 'failed';
+ } elsif($tmpfan{cpqHeFltTolFanSpeed} eq 'n/a') {
+ $tmpfan{cpqHeFltTolFanCondition} = 'other';
+ } else {
+ $tmpfan{cpqHeFltTolFanCondition} = 'ok';
+ }
+ $tmpfan{cpqHeFltTolFanRedundant} =
+ $tmpfan{cpqHeFltTolFanRedundant} eq 'yes' ? 'redundant' :
+ $tmpfan{cpqHeFltTolFanRedundant} eq 'no' ? 'notRedundant' : 'other';
+ $tmpfan{cpqHeFltTolFanPresent} =
+ $tmpfan{cpqHeFltTolFanPresent} eq 'yes' ? 'present' :
+ $tmpfan{cpqHeFltTolFanPresent} eq 'failed' ? 'present' :
+ $tmpfan{cpqHeFltTolFanPresent} eq 'no' ? 'absent' : 'other';
+ $tmpfan{cpqHeFltTolFanHotPlug} =
+ $tmpfan{cpqHeFltTolFanHotPlug} eq 'yes' ? 'hotPluggable' :
+ $tmpfan{cpqHeFltTolFanHotPlug} eq 'no' ? 'nonHotPluggable' : 'other';
+ push(@{$self->{fans}},
+ HP::Proliant::Component::FanSubsystem::Fan->new(%tmpfan));
+ %tmpfan = ();
+ }
+ }
+}
+
+sub overall_check {
+ my $self = shift;
+ # nix. nur wegen der gleichheit mit snmp
+ return 0;
+}
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/SNMP.pm
new file mode 100755
index 0000000..82bd180
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/FanSubsystem/SNMP.pm
@@ -0,0 +1,231 @@
+package HP::Proliant::Component::FanSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::FanSubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ fans => [],
+ he_fans => [],
+ th_fans => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->overall_init(%params);
+ $self->he_init(%params);
+ $self->te_init(%params);
+ $self->unite();
+ return $self;
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ # overall
+ my $cpqHeThermalSystemFanStatus = '1.3.6.1.4.1.232.6.2.6.4.0';
+ my $cpqHeThermalSystemFanStatusValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ };
+ my $cpqHeThermalCpuFanStatus = '1.3.6.1.4.1.232.6.2.6.5.0';
+ my $cpqHeThermalCpuFanStatusValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 4 => 'failed', # shutdown
+ };
+ $self->{sysstatus} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeThermalSystemFanStatus,
+ $cpqHeThermalSystemFanStatusValue);
+ $self->{cpustatus} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeThermalCpuFanStatus,
+ $cpqHeThermalCpuFanStatusValue);
+ $self->{sysstatus} |= lc $self->{sysstatus};
+ $self->{cpustatus} |= lc $self->{cpustatus};
+}
+
+sub te_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ my $ignore_redundancy = $params{ignore_redundancy};
+ # cpqHeThermalFanTable
+ my $oids = {
+ cpqHeThermalFanEntry => '1.3.6.1.4.1.232.6.2.6.6.1',
+ cpqHeThermalFanIndex => '1.3.6.1.4.1.232.6.2.6.6.1.1',
+ cpqHeThermalFanRequired => '1.3.6.1.4.1.232.6.2.6.6.1.2',
+ cpqHeThermalFanPresent => '1.3.6.1.4.1.232.6.2.6.6.1.3',
+ cpqHeThermalFanCpuFan => '1.3.6.1.4.1.232.6.2.6.6.1.4',
+ cpqHeThermalFanStatus => '1.3.6.1.4.1.232.6.2.6.6.1.5',
+ cpqHeThermalFanHwLocation => '1.3.6.1.4.1.232.6.2.6.6.1.6',
+ cpqHeThermalFanRequiredValue => {
+ 1 => 'other',
+ 2 => 'nonRequired',
+ 3 => 'required',
+ },
+ cpqHeThermalFanPresentValue => {
+ 1 => 'other',
+ 2 => 'absent',
+ 3 => 'present',
+ },
+ cpqHeThermalFanCpuFanValue => {
+ 1 => 'other',
+ 2 => 'systemFan',
+ 3 => 'cpuFan',
+ },
+ cpqHeThermalFanStatusValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 4 => 'failed',
+ },
+ };
+ # INDEX { cpqHeThermalFanIndex }
+ foreach ($self->get_entries($oids, 'cpqHeThermalFanEntry')) {
+ next if ! $_->{cpqHeThermalFanPresent};
+ push(@{$self->{th_fans}},
+ HP::Proliant::Component::FanSubsystem::Fan->new(%{$_}));
+ }
+}
+
+sub he_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ my $ignore_redundancy = $params{ignore_redundancy};
+ # cpqHeFltTolFanTable
+ my $oids = {
+ cpqHeFltTolFanEntry => '1.3.6.1.4.1.232.6.2.6.7.1',
+ cpqHeFltTolFanChassis => '1.3.6.1.4.1.232.6.2.6.7.1.1',
+ cpqHeFltTolFanIndex => '1.3.6.1.4.1.232.6.2.6.7.1.2',
+ cpqHeFltTolFanLocale => '1.3.6.1.4.1.232.6.2.6.7.1.3',
+ cpqHeFltTolFanPresent => '1.3.6.1.4.1.232.6.2.6.7.1.4',
+ cpqHeFltTolFanType => '1.3.6.1.4.1.232.6.2.6.7.1.5',
+ cpqHeFltTolFanSpeed => '1.3.6.1.4.1.232.6.2.6.7.1.6',
+ cpqHeFltTolFanRedundant => '1.3.6.1.4.1.232.6.2.6.7.1.7',
+ cpqHeFltTolFanRedundantPartner => '1.3.6.1.4.1.232.6.2.6.7.1.8',
+ cpqHeFltTolFanCondition => '1.3.6.1.4.1.232.6.2.6.7.1.9',
+ cpqHeFltTolFanHotPlug => '1.3.6.1.4.1.232.6.2.6.7.1.10',
+ cpqHeFltTolFanHwLocation => '1.3.6.1.4.1.232.6.2.6.7.1.11',
+ cpqHeFltTolFanCurrentSpeed => '1.3.6.1.4.1.232.6.2.6.7.1.12',
+ cpqHeFltTolFanLocaleValue => {
+ 1 => "other",
+ 2 => "unknown",
+ 3 => "system",
+ 4 => "systemBoard",
+ 5 => "ioBoard",
+ 6 => "cpu",
+ 7 => "memory",
+ 8 => "storage",
+ 9 => "removableMedia",
+ 10 => "powerSupply",
+ 11 => "ambient",
+ 12 => "chassis",
+ 13 => "bridgeCard",
+ },
+ cpqHeFltTolFanPresentValue => {
+ 1 => "other",
+ 2 => "absent",
+ 3 => "present",
+ },
+ cpqHeFltTolFanSpeedValue => {
+ 1 => "other",
+ 2 => "normal",
+ 3 => "high",
+ },
+ cpqHeFltTolFanRedundantValue => {
+ 1 => "other",
+ 2 => "notRedundant",
+ 3 => "redundant",
+ },
+ cpqHeFltTolFanTypeValue => {
+ 1 => "other",
+ 2 => "tachInput",
+ 3 => "spinDetect",
+ },
+ cpqHeFltTolFanConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqHeFltTolFanHotPlugValue => {
+ 1 => "other",
+ 2 => "nonHotPluggable",
+ 3 => "hotPluggable",
+ },
+ };
+ # INDEX { cpqHeFltTolFanChassis, cpqHeFltTolFanIndex }
+ foreach ($self->get_entries($oids, 'cpqHeFltTolFanEntry')) {
+ next if ! defined $_->{cpqHeFltTolFanIndex};
+ # z.b. USM65201WS hat nur solche fragmente. die werden erst gar nicht
+ # als fans akzeptiert. dafuer gibts dann die overall condition
+ # SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.1 = INTEGER: 0
+ # SNMPv2-SMI::enterprises.232.6.2.6.7.1.1.0.2 = INTEGER: 0
+ $_->{cpqHeFltTolFanPctMax} = ($_->{cpqHeFltTolFanPresent} eq 'present') ?
+ 50 : 0;
+ push(@{$self->{he_fans}},
+ HP::Proliant::Component::FanSubsystem::Fan->new(%{$_}));
+ }
+
+}
+
+sub unite {
+ my $self = shift;
+ my $tmpfans = {};
+ foreach (@{$self->{he_fans}}) {
+ $tmpfans->{$_->{cpqHeFltTolFanIndex}} = $_;
+ }
+ foreach (@{$self->{he_fans}}) {
+ if (exists $tmpfans->{$_->{cpqHeFltTolFanRedundantPartner}}) {
+ $_->{partner} = $tmpfans->{$_->{cpqHeFltTolFanRedundantPartner}};
+ } else {
+ $_->{partner} = undef;
+ }
+ }
+ @{$self->{fans}} = @{$self->{he_fans}};
+}
+
+sub overall_check {
+ my $self = shift;
+ my $result = 0;
+ $self->blacklist('ofs', '');
+ if ($self->{sysstatus} && $self->{cpustatus}) {
+ if ($self->{sysstatus} eq 'degraded') {
+ $result = 1;
+ $self->add_message(WARNING,
+ sprintf 'system fan overall status is %s', $self->{sysstatus});
+ } elsif ($self->{sysstatus} eq 'failed') {
+ $result = 2;
+ $self->add_message(CRITICAL,
+ sprintf 'system fan overall status is %s', $self->{sysstatus});
+ }
+ if ($self->{cpustatus} eq 'degraded') {
+ $result = 1;
+ $self->add_message(WARNING,
+ sprintf 'cpu fan overall status is %s', $self->{cpustatus});
+ } elsif ($self->{cpustatus} eq 'failed') {
+ $result = 2;
+ $self->add_message(CRITICAL,
+ sprintf 'cpu fan overall status is %s', $self->{cpustatus});
+ }
+ $self->add_info(sprintf 'overall fan status: system=%s, cpu=%s',
+ $self->{sysstatus}, $self->{cpustatus});
+ } else {
+ $result = 0;
+ $self->add_info('this system seems to be water-cooled. no fans found');
+ }
+ return $result;
+}
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem.pm
new file mode 100755
index 0000000..17a49ea
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem.pm
@@ -0,0 +1,197 @@
+package HP::Proliant::Component::MemorySubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ dimms => [],
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::MemorySubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::MemorySubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking memory');
+ foreach (@{$self->{dimms}}) {
+ $_->check(); # info ausfuellen
+ }
+ if ((scalar(grep {
+ $_->is_present() &&
+ ($_->{condition} ne 'n/a' && $_->{condition} ne 'other' )
+ } @{$self->{dimms}})) != 0) {
+ foreach (@{$self->{dimms}}) {
+ if (($_->is_present()) && ($_->{condition} ne 'ok')) {
+ $_->add_message(CRITICAL, $_->{info});
+ $errorfound++;
+ }
+ }
+ } else {
+ if ($self->{runtime}->{options}->{ignore_dimms}) {
+ $self->add_message(OK,
+ sprintf "ignoring %d dimms with status 'n/a' ",
+ scalar(grep { ($_->is_present()) } @{$self->{dimms}}));
+ } elsif ($self->{runtime}->{options}->{buggy_firmware}) {
+ $self->add_message(OK,
+ sprintf "ignoring %d dimms with status 'n/a' because of buggy firmware",
+ scalar(grep { ($_->is_present()) } @{$self->{dimms}}));
+ } else {
+ $self->add_message(WARNING,
+ sprintf "status of all %d dimms is n/a (please upgrade firmware)",
+ scalar(grep { $_->is_present() } @{$self->{dimms}}));
+ $errorfound++;
+ }
+ }
+ foreach (@{$self->{dimms}}) {
+ printf "%s\n", $_->{info} if $self->{runtime}->{options}->{verbose} >= 2;
+ }
+ if (! $errorfound && $self->is_faulty()) {
+ #if ($self->is_faulty()) {
+ $self->add_message(WARNING,
+ sprintf 'overall memory error found');
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "i dump the memory\n";
+ foreach (@{$self->{dimms}}) {
+ $_->dump();
+ }
+}
+
+package HP::Proliant::Component::MemorySubsystem::Dimm;
+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},
+ cartridge => $params{cartridge},
+ module => $params{module},
+ size => $params{size} || 0,
+ status => $params{status},
+ condition => $params{condition},
+ type => $params{type},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->{name} = sprintf '%s:%s',
+ $self->{cartridge}, $self->{module};
+ $self->{location} = sprintf 'module %s @ cartridge %s',
+ $self->{module}, $self->{cartridge};
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ # check dient nur dazu, info und extended_info zu fuellen
+ # die eigentliche bewertung findet eins hoeher statt
+ $self->blacklist('d', $self->{name});
+ if (($self->{status} eq 'present') || ($self->{status} eq 'good')) {
+ if ($self->{condition} eq 'other') {
+ $self->add_info(sprintf 'dimm %s (%s) is n/a',
+ $self->{name}, $self->{location});
+ } elsif ($self->{condition} ne 'ok') {
+ $self->add_info(
+ sprintf "dimm module %s (%s) needs attention (%s)",
+ $self->{name}, $self->{location}, $self->{condition});
+ } else {
+ $self->add_info(sprintf 'dimm module %s (%s) is %s',
+ $self->{name}, $self->{location}, $self->{condition});
+ }
+ } elsif ($self->{status} eq 'notPresent') {
+ $self->add_info(sprintf 'dimm module %s (%s) is not present',
+ $self->{name}, $self->{location});
+ } else {
+ $self->add_info(
+ sprintf "dimm module %s (%s) needs attention (%s)",
+ $self->{name}, $self->{location}, $self->{condition});
+ }
+}
+
+sub is_present {
+ my $self = shift;
+ my @signs_of_presence = (qw(present good add upgraded doesnotmatch
+ notsupported badconfig degraded));
+ return scalar(grep { $self->{status} eq $_ } @signs_of_presence);
+}
+
+
+sub dump {
+ my $self = shift;
+ #printf "[DIMM_%s_%s]\n", $self->{cartridge}, $self->{module};
+ #foreach (qw(cartridge module size status condition info)) {
+ # printf "%s: %s\n", $_, $self->{$_};
+ #}
+ #printf "status: %s\n", $self->{status} if exists $self->{status};
+ #printf "\n";
+ printf "car %02d mod %02d siz %.0f sta %-12s con %-10s typ %s\n",
+ $self->{cartridge}, $self->{module}, $self->{size},
+ $self->{status}, $self->{condition}, defined $self->{type} ? $self->{type} : "";
+}
+
+
+package HP::Proliant::Component::MemorySubsystem::Cartridge;
+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 = {
+ cpqHeResMemBoardSlotIndex => $params{cpqHeResMemBoardSlotIndex},
+ cpqHeResMemBoardOnlineStatus => $params{cpqHeResMemBoardOnlineStatus},
+ cpqHeResMemBoardErrorStatus => $params{cpqHeResMemBoardErrorStatus},
+ cpqHeResMemBoardNumSockets => $params{cpqHeResMemBoardNumSockets},
+ cpqHeResMemBoardOsMemSize => $params{cpqHeResMemBoardOsMemSize},
+ cpqHeResMemBoardTotalMemSize => $params{cpqHeResMemBoardTotalMemSize},
+ cpqHeResMemBoardCondition => $params{cpqHeResMemBoardCondition},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub dump {
+ my $self = shift;
+ #printf "[CARTRIDGE_%s_%s]\n", $self->{cpqHeResMemBoardSlotIndex};
+ #foreach (qw(cpqHeResMemBoardSlotIndex cpqHeResMemBoardOnlineStatus
+ # cpqHeResMemBoardErrorStatus cpqHeResMemBoardNumSockets
+ # cpqHeResMemBoardOsMemSize cpqHeResMemBoardTotalMemSize
+ # cpqHeResMemBoardCondition)) {
+ # printf "%s: %s\n", $_, $self->{$_};
+ #}
+ #printf "\n";
+}
+
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/CLI.pm
new file mode 100755
index 0000000..f53d77f
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/CLI.pm
@@ -0,0 +1,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;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/SNMP.pm
new file mode 100755
index 0000000..410a858
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/MemorySubsystem/SNMP.pm
@@ -0,0 +1,746 @@
+package HP::Proliant::Component::MemorySubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::MemorySubsystem
+ HP::Proliant::Component::SNMP);
+
+use strict;
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ dimms => [],
+ si_dimms => [],
+ he_dimms => [],
+ h2_dimms => [],
+ he_cartridges => [],
+ h2_cartridges => [],
+ si_overall_condition => undef,
+ he_overall_condition => undef,
+ h2_overall_condition => undef,
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->si_init();
+ $self->he_init();
+ $self->he_cartridge_init();
+ $self->h2_init();
+ #$self->h2_cartridge_init();
+ $self->condense();
+ return $self;
+}
+
+sub si_init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqSiMemModuleEntry => '1.3.6.1.4.1.232.2.2.4.5.1',
+ cpqSiMemBoardIndex => '1.3.6.1.4.1.232.2.2.4.5.1.1',
+ cpqSiMemModuleIndex => '1.3.6.1.4.1.232.2.2.4.5.1.2',
+ cpqSiMemModuleSize => '1.3.6.1.4.1.232.2.2.4.5.1.3',
+ cpqSiMemModuleType => '1.3.6.1.4.1.232.2.2.4.5.1.4',
+ cpqSiMemECCStatus => '1.3.6.1.4.1.232.2.2.4.5.1.11',
+ cpqSiMemModuleHwLocation => '1.3.6.1.4.1.232.2.2.4.5.1.12',
+ cpqSiMemModuleTypeValue => {
+ 1 => 'other',
+ 2 => 'board',
+ 3 => 'cpqSingleWidthModule',
+ 4 => 'cpqDoubleWidthModule',
+ 5 => 'simm',
+ 6 => 'pcmcia',
+ 7 => 'compaq-specific',
+ 8 => 'dimm',
+ 9 => 'smallOutlineDimm',
+ 10 => 'rimm',
+ 11 => 'srimm',
+ },
+ cpqSiMemECCStatusValue => {
+ 0 => "n/a",
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "degradedModuleIndexUnknown",
+ 34 => 'n/a', # es ist zum kotzen...
+ 104 => 'n/a',
+ },
+ };
+ # INDEX { cpqSiMemBoardIndex, cpqSiMemModuleIndex }
+ foreach ($self->get_entries($oids, 'cpqSiMemModuleEntry')) {
+ $_->{cartridge} = $_->{cpqSiMemBoardIndex};
+ $_->{module} = $_->{cpqSiMemModuleIndex};
+ next if (! defined $_->{cartridge} || ! defined $_->{module});
+ $_->{size} = $_->{cpqSiMemModuleSize};
+ $_->{type} = $_->{cpqSiMemModuleType};
+ $_->{condition} = $_->{cpqSiMemECCStatus};
+ $_->{status} = ($_->{cpqSiMemModuleSize} > 0) ? 'present' : 'notPresent';
+ push(@{$self->{si_dimms}},
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(%{$_})
+ );
+ }
+ my $cpqSiMemECCCondition = '1.3.6.1.4.1.232.2.2.4.15.0';
+ my $cpqSiMemECCConditionValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ };
+ $self->{si_overall_condition} = SNMP::Utils::get_object_value(
+ $self->{rawdata}, $cpqSiMemECCCondition,
+ $cpqSiMemECCConditionValue);
+ $self->trace(2, sprintf 'overall si condition is %s',
+ $self->{si_overall_condition} || 'undefined');
+}
+
+sub he_init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeResMemModuleEntry => '1.3.6.1.4.1.232.6.2.14.11.1',
+ cpqHeResMemBoardIndex => '1.3.6.1.4.1.232.6.2.14.11.1.1',
+ cpqHeResMemModuleIndex => '1.3.6.1.4.1.232.6.2.14.11.1.2',
+ cpqHeResMemModuleStatus => '1.3.6.1.4.1.232.6.2.14.11.1.4',
+ cpqHeResMemModuleCondition => '1.3.6.1.4.1.232.6.2.14.11.1.5',
+ cpqHeResMemModuleStatusValue => {
+ 1 => "other", # unknown or could not be determined
+ 2 => "notPresent", # not present or un-initialized
+ 3 => "present", # present but not in use
+ 4 => "good", # present and in use. ecc threshold not exceeded
+ 5 => "add", # added but not yet in use
+ 6 => "upgrade", # upgraded but not yet in use
+ 7 => "missing", # expected but missing
+ 8 => "doesNotMatch", # does not match the other modules in the bank
+ 9 => "notSupported", # module not supported
+ 10 => "badConfig", # violates add/upgrade configuration
+ 11 => "degraded", # ecc exceeds threshold
+ },
+ # condition = status of the correctable memory errors
+ cpqHeResMemModuleConditionValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ },
+ };
+ my $tablesize = SNMP::Utils::get_size($snmpwalk,
+ $oids->{cpqHeResMemModuleEntry});
+ # INDEX { cpqHeResMemBoardIndex, cpqHeResMemModuleIndex }
+ foreach ($self->get_entries($oids, 'cpqHeResMemModuleEntry')) {
+ $_->{cartridge} = $_->{cpqHeResMemBoardIndex};
+ $_->{module} = $_->{cpqHeResMemModuleIndex};
+ $_->{present} = $_->{cpqHeResMemModuleStatus};
+ $_->{status} = $_->{cpqHeResMemModuleStatus};
+ $_->{condition} = $_->{cpqHeResMemModuleCondition};
+ if ((! defined $_->{module}) && ($_->{cartridge} == 0)) {
+ $_->{module} = $_->{index2}; # auf dem systemboard verbaut
+ }
+
+ push(@{$self->{he_dimms}},
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(%{$_})
+ ) unless (! defined $_->{cartridge} || ! defined $_->{module} ||
+ $tablesize == 1);
+ }
+ my $cpqHeResilientMemCondition = '1.3.6.1.4.1.232.6.2.14.4.0';
+ my $cpqHeResilientMemConditionValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ };
+ $self->{he_overall_condition} = SNMP::Utils::get_object_value(
+ $self->{rawdata}, $cpqHeResilientMemCondition,
+ $cpqHeResilientMemConditionValue);
+ $self->trace(2, sprintf 'overall he condition is %s',
+ $self->{hei_overall_condition} || 'undefined');
+}
+
+sub he_cartridge_init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeResMemBoardEntry => '1.3.6.1.4.1.232.6.2.14.10.1',
+ cpqHeResMemBoardSlotIndex => '1.3.6.1.4.1.232.6.2.14.10.1.1',
+ cpqHeResMemBoardOnlineStatus => '1.3.6.1.4.1.232.6.2.14.10.1.2',
+ cpqHeResMemBoardErrorStatus => '1.3.6.1.4.1.232.6.2.14.10.1.3',
+ cpqHeResMemBoardNumSockets => '1.3.6.1.4.1.232.6.2.14.10.1.5',
+ cpqHeResMemBoardOsMemSize => '1.3.6.1.4.1.232.6.2.14.10.1.6',
+ cpqHeResMemBoardTotalMemSize => '1.3.6.1.4.1.232.6.2.14.10.1.7',
+ cpqHeResMemBoardCondition => '1.3.6.1.4.1.232.6.2.14.10.1.8',
+ # onlinestatus
+ cpqHeResMemBoardOnlineStatusValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "present",
+ 3 => "absent",
+ },
+ cpqHeResMemBoardErrorStatusValue => {
+ 1 => "other", #
+ 2 => "noError", #
+ 3 => "dimmEccError", #
+ 4 => "unlockError", #
+ 5 => "configError", #
+ 6 => "busError", #
+ 7 => "powerError", #
+ },
+ # condition = status of the correctable memory errors
+ cpqHeResMemBoardConditionValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ },
+ };
+ my $tablesize = SNMP::Utils::get_size($snmpwalk,
+ $oids->{cpqHeResMemBoardEntry});
+ # INDEX { cpqHeResMemBoardIndex, cpqHeResMemBoardIndex }
+ foreach ($self->get_entries($oids, 'cpqHeResMemBoardEntry')) {
+ push(@{$self->{he_cartridges}},
+ HP::Proliant::Component::MemorySubsystem::Cartridge->new(%{$_})
+ ) unless (! defined $_->{cpqHeResMemBoardSlotIndex} || $tablesize == 1);
+ }
+}
+
+sub h2_init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeResMem2ModuleEntry => '1.3.6.1.4.1.232.6.2.14.13.1',
+ cpqHeResMem2BoardNum => '1.3.6.1.4.1.232.6.2.14.13.1.2',
+ cpqHeResMem2ModuleNum => '1.3.6.1.4.1.232.6.2.14.13.1.5',
+ cpqHeResMem2ModuleStatus => '1.3.6.1.4.1.232.6.2.14.13.1.19',
+ cpqHeResMem2ModuleCondition => '1.3.6.1.4.1.232.6.2.14.13.1.20',
+ cpqHeResMem2ModuleSize => '1.3.6.1.4.1.232.6.2.14.13.1.6',
+
+ cpqHeResMem2ModuleStatusValue => {
+ 1 => "other", # unknown or could not be determined
+ 2 => "notPresent", # not present or un-initialized
+ 3 => "present", # present but not in use
+ 4 => "good", # present and in use. ecc threshold not exceeded
+ 5 => "add", # added but not yet in use
+ 6 => "upgrade", # upgraded but not yet in use
+ 7 => "missing", # expected but missing
+ 8 => "doesNotMatch", # does not match the other modules in the bank
+ 9 => "notSupported", # module not supported
+ 10 => "badConfig", # violates add/upgrade configuration
+ 11 => "degraded", # ecc exceeds threshold
+ },
+ # condition = status of the correctable memory errors
+ cpqHeResMem2ModuleConditionValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ },
+ };
+ # INDEX { cpqHeResMem2ModuleNum }
+ my $lastboard = 0;
+ my $lastmodule = 0;
+ my $myboard= 0;
+ my $hpboard = 0;
+ foreach (sort { $a->{index1} <=> $b->{index1} }
+ $self->get_entries($oids, 'cpqHeResMem2ModuleEntry')) {
+ $hpboard = $_->{cpqHeResMem2BoardNum};
+ # dass hier faelschlicherweise 0 zurueckkommt, wundert mich schon
+ # gar nicht mehr
+ $_->{module} = $_->{cpqHeResMem2ModuleNum};
+ if ($_->{module} < $lastmodule) {
+ # sieht so aus, als haette man es mit einem neuen board zu tun
+ # da hp zu bloed ist, selber hochzuzaehlen, muss ich das tun
+ $myboard++;
+ }
+ $lastmodule = $_->{cpqHeResMem2ModuleNum};
+ $_->{cartridge} = ($myboard != $hpboard) ? $myboard : $hpboard;
+ $_->{present} = $_->{cpqHeResMem2ModuleStatus};
+ $_->{status} = $_->{cpqHeResMem2ModuleStatus};
+ $_->{condition} = $_->{cpqHeResMem2ModuleCondition};
+ $_->{size} = $_->{cpqHeResMem2ModuleSize};
+ push(@{$self->{h2_dimms}},
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(%{$_})
+ ) unless (! defined $_->{cpqHeResMem2BoardNum} ||
+ ! defined $_->{cpqHeResMem2ModuleNum});
+ }
+}
+
+sub h2_cartridge_init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeResMem2BoardEntry => '1.3.6.1.4.1.232.6.2.14.12.1',
+ cpqHeResMem2BoardIndex => '1.3.6.1.4.1.232.6.2.14.12.1.1',
+ cpqHeResMem2BoardOnlineStatus => '1.3.6.1.4.1.232.6.2.14.12.1.5',
+ cpqHeResMem2BoardErrorStatus => '1.3.6.1.4.1.232.6.2.14.12.1.6',
+ cpqHeResMem2BoardNumSockets => '1.3.6.1.4.1.232.6.2.14.12.1.8',
+ cpqHeResMem2BoardOsMemSize => '1.3.6.1.4.1.232.6.2.14.12.1.9',
+ cpqHeResMem2BoardTotalMemSize => '1.3.6.1.4.1.232.6.2.14.12.1.10',
+ cpqHeResMem2BoardCondition => '1.3.6.1.4.1.232.6.2.14.12.1.11',
+ # onlinestatus
+ cpqHeResMem2BoardOnlineStatusValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "present",
+ 3 => "absent",
+ },
+ cpqHeResMem2BoardErrorStatusValue => {
+ 1 => "other", #
+ 2 => "noError", #
+ 3 => "dimmEccError", #
+ 4 => "unlockError", #
+ 5 => "configError", #
+ 6 => "busError", #
+ 7 => "powerError", #
+ },
+ # condition = status of the correctable memory errors
+ cpqHeResMem2BoardConditionValue => {
+ 0 => "n/a", # this appears only with buggy firmwares.
+ # (only 1 module shows up)
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ },
+ };
+ my $tablesize = SNMP::Utils::get_size($snmpwalk,
+ $oids->{cpqHeResMemBoardEntry});
+ # INDEX { cpqHeResMem2BoardIndex, cpqHeResMem2BoardIndex }
+ foreach ($self->get_entries($oids, 'cpqHeResMem2BoardEntry')) {
+ push(@{$self->{h2_cartridges}},
+ HP::Proliant::Component::MemorySubsystem::Cartridge->new(%{$_})
+ ) unless (! defined $_->{cpqHeRes2MemBoardIndex} || $tablesize == 1);
+ }
+}
+
+sub condense {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ # wenn saemtliche dimms n/a sind
+ # wenn ignore dimms: ignoring %d dimms with status 'n/a'
+ # wenn buggyfirmware: ignoring %d dimms with status 'n/a' because of buggy firmware
+ # if buggy firmware : condition n/a ist normal
+ # ignore-dimms :
+ # es gibt si_dimms und he_dimms
+ my $si_dimms = scalar(@{$self->{si_dimms}});
+ my $he_dimms = scalar(@{$self->{he_dimms}});
+ my $h2_dimms = scalar(@{$self->{h2_dimms}});
+ $self->trace(2, sprintf "SI: %02d HE: %02d H2: %02d",
+ $si_dimms, $he_dimms, $h2_dimms)
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ foreach ($self->get_si_boards()) {
+ printf "SI%02d-> ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ foreach ($self->get_si_modules($_)) {
+ printf "%02d ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ printf "\n" if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ foreach ($self->get_he_boards()) {
+ printf "HE%02d-> ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ foreach ($self->get_he_modules($_)) {
+ printf "%02d ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ printf "\n" if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ foreach ($self->get_h2_boards()) {
+ printf "H2%02d-> ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ foreach ($self->get_h2_modules($_)) {
+ printf "%02d ", $_ if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ printf "\n" if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ if (($h2_dimms == 0) && ($he_dimms == 0) && ($si_dimms > 0)) {
+ printf "TYP1 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_si_with_si();
+ } elsif (($h2_dimms == 0) && ($he_dimms > 0) && ($si_dimms > 0)) {
+ printf "TYP2 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_si_with_he();
+ } elsif (($h2_dimms == 0) && ($he_dimms > 0) && ($si_dimms == 0)) {
+ printf "TYP3 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_he_with_he();
+ } elsif (($h2_dimms > 0) && ($he_dimms == 0) && ($si_dimms == 0)) {
+ printf "TYP4 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_h2_with_h2();
+ } elsif (($h2_dimms > 0) && ($he_dimms > 0) && ($si_dimms == 0)) {
+ printf "TYP5 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_he_with_h2();
+ } elsif (($h2_dimms > 0) && ($he_dimms == 0) && ($si_dimms > 0)) {
+ printf "TYP6 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_si_with_h2();
+ } elsif (($h2_dimms > 0) && ($he_dimms > 0) && ($si_dimms > 0)) {
+ if ($h2_dimms > $si_dimms) {
+ printf "TYP7 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_he_with_h2();
+ } else {
+ printf "TYP8 %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ @{$self->{dimms}} = $self->update_si_with_he();
+ }
+ } else {
+ printf "TYPX %s\n", $self->{runtime}->{product}
+ if ($self->{runtime}->{options}->{verbose} >= 2);
+ }
+ my $all_dimms = scalar(@{$self->{dimms}});
+ $self->trace(2, sprintf "ALL: %02d", $all_dimms);
+}
+
+sub dump {
+ my $self = shift;
+ if ($self->{runtime}->{options}->{verbose} > 2) {
+ printf "[SI]\n";
+ foreach (@{$self->{si_dimms}}) {
+ $_->dump();
+ }
+ printf "[HE]\n";
+ foreach (@{$self->{he_dimms}}) {
+ $_->dump();
+ }
+ printf "[H2]\n";
+ foreach (@{$self->{h2_dimms}}) {
+ $_->dump();
+ }
+ }
+ $self->SUPER::dump();
+}
+
+sub update_si_with_si {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my @dimms = ();
+ my $repaircondition = undef;
+ # wenn si keine statusinformationen liefert, dann besteht die chance
+ # dass ein undokumentiertes he-fragment vorliegt
+ # 1.3.6.1.4.1.232.6.2.14.11.1.1.0.<anzahl der dimms>
+ my $cpqHeResMemModuleEntry = "1.3.6.1.4.1.232.6.2.14.11.1";
+ if (SNMP::Utils::get_size($snmpwalk, $cpqHeResMemModuleEntry) == 1) {
+ $repaircondition = lc SNMP::Utils::get_object(
+ $snmpwalk, $cpqHeResMemModuleEntry.'.1.0.'.scalar(@{$self->{si_dimms}}));
+ # repaircondition 0 (ok) biegt alles wieder gerade
+ } else {
+ # anderer versuch
+ if ($self->{si_overall_condition} &&
+ $self->{si_overall_condition} eq 'ok') {
+ $repaircondition = 0;
+ }
+ }
+ foreach my $si_dimm (@{$self->{si_dimms}}) {
+ if (($si_dimm->{condition} eq 'n/a') ||
+ ($si_dimm->{condition} eq 'other')) {
+ $si_dimm->{condition} = 'ok' if
+ (defined $repaircondition && $repaircondition == 0);
+ }
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $si_dimm->{runtime},
+ cartridge => $si_dimm->{cartridge},
+ module => $si_dimm->{module},
+ size => $si_dimm->{size},
+ status => $si_dimm->{status},
+ condition => $si_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub update_si_with_he {
+ my $self = shift;
+ my @dimms = ();
+ my $first_si_cartridge = ($self->get_si_boards())[0];
+ my $first_he_cartridge = ($self->get_he_boards())[0];
+ my $offset = 0;
+ if (scalar(@{$self->{si_dimms}}) == scalar(@{$self->{he_dimms}})) {
+ # aufpassen! sowas kann vorkommen: si cartridge 0...6, he cartridge 1...7
+ if ($first_si_cartridge != $first_he_cartridge) {
+ # README case 5
+ $offset = $first_si_cartridge - $first_he_cartridge;
+ }
+ } elsif ((scalar(@{$self->{si_dimms}}) > 1) &&
+ (scalar(@{$self->{he_dimms}}) == 1)) {
+ # siehe update_si_with_si. he-fragment
+ return $self->update_si_with_si();
+ } else {
+ # z.b. 4 si notpresent, 4 si present, 4 he
+ }
+ foreach my $si_dimm (@{$self->{si_dimms}}) {
+ if (($si_dimm->{condition} eq 'n/a') ||
+ ($si_dimm->{condition} eq 'other')) {
+ if (my $he_dimm = $self->get_he_module(
+ $si_dimm->{cartridge} - $offset, $si_dimm->{module})) {
+ # vielleicht hat he mehr ahnung
+ $si_dimm->{condition} = $he_dimm->{condition};
+ if (($si_dimm->{condition} eq 'n/a') ||
+ ($si_dimm->{condition} eq 'other')) {
+ # wenns immer noch kein brauchbares ergebnis gibt....
+ if ($self->{he_overall_condition} &&
+ $self->{he_overall_condition} eq 'ok') {
+ # wird schon stimmen...
+ $si_dimm->{condition} = 'ok';
+ } else {
+ # ansonsten stellen wir uns dumm
+ $si_dimm->{status} = 'notPresent';
+ }
+ }
+ } else {
+ # in dem fall zeigt si unbestueckte cartridges an
+ }
+ }
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $si_dimm->{runtime},
+ cartridge => $si_dimm->{cartridge},
+ module => $si_dimm->{module},
+ size => $si_dimm->{size},
+ status => $si_dimm->{status},
+ condition => $si_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub update_he_with_he {
+ my $self = shift;
+ my @dimms = ();
+ foreach my $he_dimm (@{$self->{he_dimms}}) {
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $he_dimm->{runtime},
+ cartridge => $he_dimm->{cartridge},
+ module => $he_dimm->{module},
+ size => $he_dimm->{size},
+ status => $he_dimm->{status},
+ condition => $he_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub update_si_with_h2 {
+ my $self = shift;
+ my @dimms = ();
+ my $first_si_cartridge = ($self->get_si_boards())[0];
+ my $first_h2_cartridge = ($self->get_h2_boards())[0];
+ my $offset = 0;
+ if (scalar(@{$self->{si_dimms}}) == scalar(@{$self->{h2_dimms}})) {
+ # aufpassen! sowas kann vorkommen: si cartridge 0...6, he cartridge 1...7
+ if ($first_si_cartridge != $first_h2_cartridge) {
+ # README case 5
+ $offset = $first_si_cartridge - $first_h2_cartridge;
+ }
+ } else {
+ # z.b. 4 si notpresent, 4 si present, 4 he
+ }
+ foreach my $si_dimm (@{$self->{si_dimms}}) {
+ if (($si_dimm->{condition} eq 'n/a') ||
+ ($si_dimm->{condition} eq 'other')) {
+ if (my $h2_dimm = $self->get_h2_module(
+ $si_dimm->{cartridge} - $offset, $si_dimm->{module})) {
+ # vielleicht hat h2 mehr ahnung
+ $si_dimm->{condition} = $h2_dimm->{condition};
+ if (1) {
+ # ist zwar da, aber irgendwie auskonfiguriert
+ $si_dimm->{status} = 'notPresent' if $h2_dimm->{status} eq 'other';
+ }
+ } else {
+ # in dem fall zeigt si unbestueckte cartridges an
+ }
+ }
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $si_dimm->{runtime},
+ cartridge => $si_dimm->{cartridge},
+ module => $si_dimm->{module},
+ size => $si_dimm->{size},
+ status => $si_dimm->{status},
+ condition => $si_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub update_he_with_h2 {
+ my $self = shift;
+ my @dimms = ();
+ my $first_he_cartridge = ($self->get_he_boards())[0];
+ my $first_h2_cartridge = ($self->get_h2_boards())[0];
+ my $offset = 0;
+ # auch hier koennte sowas u.u.vorkommen: he cartridge 0..6, h2 cartridge 1..7
+ # ich habs zwar nie gesehen, aber wer weiss...
+ if ($first_h2_cartridge != $first_he_cartridge) {
+ $offset = $first_h2_cartridge - $first_he_cartridge;
+ }
+ foreach my $he_dimm (@{$self->{he_dimms}}) {
+ if (($he_dimm->{condition} eq 'n/a') ||
+ ($he_dimm->{condition} eq 'other')) {
+ if (my $h2_dimm = $self->get_h2_module(
+ $he_dimm->{cartridge} + $offset, $he_dimm->{module})) {
+ # vielleicht hat h2 mehr ahnung
+ $he_dimm->{condition} = $h2_dimm->{condition};
+ if (1) {
+ # ist zwar da, aber irgendwie auskonfiguriert
+ $he_dimm->{status} = 'notPresent' if $h2_dimm->{status} eq 'other';
+ }
+ } else {
+ # in dem fall weiss he mehr als h2
+ }
+ }
+ if ($he_dimm->{size} == 0) {
+ if (my $h2_dimm = $self->get_h2_module(
+ $he_dimm->{cartridge} + $offset, $he_dimm->{module})) {
+ $he_dimm->{size} = $h2_dimm->{size};
+ # h2 beinhaltet eine size-oid
+ }
+ }
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $he_dimm->{runtime},
+ cartridge => $he_dimm->{cartridge},
+ module => $he_dimm->{module},
+ size => $he_dimm->{size},
+ status => $he_dimm->{status},
+ condition => $he_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub update_h2_with_h2 {
+ my $self = shift;
+ my @dimms = ();
+ foreach my $h2_dimm (@{$self->{h2_dimms}}) {
+ push(@dimms,
+ HP::Proliant::Component::MemorySubsystem::Dimm->new(
+ runtime => $h2_dimm->{runtime},
+ cartridge => $h2_dimm->{cartridge},
+ module => $h2_dimm->{module},
+ size => $h2_dimm->{size},
+ status => $h2_dimm->{status},
+ condition => $h2_dimm->{condition},
+ ));
+ }
+ return @dimms;
+}
+
+sub is_faulty {
+ my $self = shift;
+ if (scalar(@{$self->{si_dimms}}) > 0 &&
+ scalar(@{$self->{he_dimms}}) > 0) {
+ return $self->si_is_faulty() || $self->he_is_faulty();
+ } elsif (scalar(@{$self->{si_dimms}}) > 0 &&
+ scalar(@{$self->{he_dimms}}) == 0) {
+ return $self->si_is_faulty();
+ } elsif (scalar(@{$self->{si_dimms}}) == 0 &&
+ scalar(@{$self->{he_dimms}}) > 0) {
+ return $self->he_is_faulty();
+ } else {
+ return 0;
+ }
+}
+
+sub si_is_faulty {
+ my $self = shift;
+ return ! defined $self->{si_overall_condition} ? 0 :
+ $self->{si_overall_condition} eq 'degraded' ? 1 : 0;
+}
+
+sub si_is_ok {
+ my $self = shift;
+ return ! defined $self->{si_overall_condition} ? 1 :
+ $self->{si_overall_condition} eq 'ok' ? 1 : 0;
+}
+
+sub he_is_faulty {
+ my $self = shift;
+ return ! defined $self->{he_overall_condition} ? 0 :
+ $self->{he_overall_condition} eq 'degraded' ? 1 : 0;
+}
+
+sub he_is_ok {
+ my $self = shift;
+ return ! defined $self->{he_overall_condition} ? 1 :
+ $self->{he_overall_condition} eq 'ok' ? 1 : 0;
+}
+
+sub get_si_boards {
+ my $self = shift;
+ my %found = ();
+ foreach (@{$self->{si_dimms}}) {
+ $found{$_->{cartridge}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_si_modules {
+ my $self = shift;
+ my $board = shift;
+ my %found = ();
+ foreach (grep { $_->{cartridge} == $board } @{$self->{si_dimms}}) {
+ $found{$_->{module}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_he_boards {
+ my $self = shift;
+ my %found = ();
+ foreach (@{$self->{he_dimms}}) {
+ $found{$_->{cartridge}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_he_modules {
+ my $self = shift;
+ my $board = shift;
+ my %found = ();
+ foreach (grep { $_->{cartridge} == $board } @{$self->{he_dimms}}) {
+ $found{$_->{module}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_he_module {
+ my $self = shift;
+ my $board = shift;
+ my $module = shift;
+ my $found = (grep { $_->{cartridge} == $board && $_->{module} == $module }
+ @{$self->{he_dimms}})[0];
+ return $found;
+}
+
+sub get_h2_boards {
+ my $self = shift;
+ my %found = ();
+ #
+ foreach (@{$self->{h2_dimms}}) {
+ $found{$_->{cartridge}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_h2_modules {
+ my $self = shift;
+ my $board = shift;
+ my %found = ();
+ foreach (grep { $_->{cartridge} == $board } @{$self->{h2_dimms}}) {
+ $found{$_->{module}} = 1;
+ }
+ return sort { $a <=> $b } keys %found;
+}
+
+sub get_h2_module {
+ my $self = shift;
+ my $board = shift;
+ my $module = shift;
+ my $found = (grep { $_->{cartridge} == $board && $_->{module} == $module }
+ @{$self->{h2_dimms}})[0];
+ return $found;
+}
+
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem.pm
new file mode 100755
index 0000000..02e5703
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem.pm
@@ -0,0 +1,202 @@
+package HP::Proliant::Component::NicSubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ logical_nics => [],
+ physical_nics => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::NicSubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::NicSubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking nic teams');
+ if (scalar (@{$self->{logical_nics}}) == 0) {
+ $self->add_info('no logical nics found');
+ $self->overall_check();
+ } else {
+ foreach (@{$self->{logical_nics}}) {
+ $_->check();
+ }
+ }
+ if (scalar (@{$self->{physical_nics}}) == 0) {
+ $self->add_info('no physical nics found. do you connect with slip?');
+ } else {
+ foreach (@{$self->{physical_nics}}) {
+ $_->check();
+ }
+ }
+}
+
+sub num_logical_nics {
+ my $self = shift;
+ return scalar @{$self->{logical_nics}};
+}
+
+sub num_physical_nics {
+ my $self = shift;
+ return scalar @{$self->{physical_nics}};
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{logical_nics}}) {
+ $_->dump();
+ }
+ foreach (@{$self->{physical_nics}}) {
+ $_->dump();
+ }
+}
+
+sub overall_check {
+ my $self = shift;
+ if ($self->{lognicstatus} ne "ok") {
+ $self->add_info(sprintf 'overall logical nic status is %s',
+ $self->{lognicstatus});
+ }
+}
+
+
+package HP::Proliant::Component::NicSubsystem::LogicalNic;
+our @ISA = qw(HP::Proliant::Component::NicSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ foreach (qw(cpqNicIfLogMapIndex cpqNicIfLogMapIfNumber cpqNicIfLogMapDescription cpqNicIfLogMapGroupType cpqNicIfLogMapAdapterCount cpqNicIfLogMapAdapterOKCount cpqNicIfLogMapPhysicalAdapters cpqNicIfLogMapSwitchoverMode cpqNicIfLogMapCondition cpqNicIfLogMapStatus cpqNicIfLogMapNumSwitchovers cpqNicIfLogMapHwLocation cpqNicIfLogMapSpeed cpqNicIfLogMapVlanCount cpqNicIfLogMapVlans)) {
+ $self->{$_} = $params{$_};
+ }
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('lni', $self->{cpqNicIfLogMapIndex});
+ if ($self->{cpqNicIfLogMapAdapterCount} > 0) {
+ if ($self->{cpqNicIfLogMapCondition} eq "other") {
+ # simply ignore this. if there is a physical nic
+ # it is usually unknown/other/scheissegal
+ $self->add_info(sprintf "logical nic %d (%s) is %s",
+ $self->{cpqNicIfLogMapIndex}, $self->{cpqNicIfLogMapDescription},
+ $self->{cpqNicIfLogMapCondition});
+ } elsif ($self->{cpqNicIfLogMapCondition} ne "ok") {
+ $self->add_info(sprintf "logical nic %d (%s) is %s (%s)",
+ $self->{cpqNicIfLogMapIndex}, $self->{cpqNicIfLogMapDescription},
+ $self->{cpqNicIfLogMapCondition}, $self->{cpqNicIfLogMapStatus});
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info(sprintf "logical nic %d (%s) is %s",
+ $self->{cpqNicIfLogMapIndex}, $self->{cpqNicIfLogMapDescription},
+ $self->{cpqNicIfLogMapCondition});
+ }
+ } else {
+ $self->add_info(sprintf "logical nic %d (%s) has 0 physical nics",
+ $self->{cpqNicIfLogMapIndex}, $self->{cpqNicIfLogMapDescription});
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[LNIC_%s]\n", $self->{cpqNicIfLogMapIndex};
+ foreach (qw(cpqNicIfLogMapIndex cpqNicIfLogMapIfNumber cpqNicIfLogMapDescription cpqNicIfLogMapAdapterCount cpqNicIfLogMapGroupType cpqNicIfLogMapSwitchoverMode cpqNicIfLogMapCondition cpqNicIfLogMapStatus cpqNicIfLogMapNumSwitchovers cpqNicIfLogMapHwLocation cpqNicIfLogMapSpeed)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+
+package HP::Proliant::Component::NicSubsystem::PhysicalNic;
+our @ISA = qw(HP::Proliant::Component::NicSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ foreach (qw(cpqNicIfPhysAdapterIndex cpqNicIfPhysAdapterIfNumber cpqNicIfPhysAdapterRole cpqNicIfPhysAdapterDuplexState cpqNicIfPhysAdapterCondition cpqNicIfPhysAdapterState cpqNicIfPhysAdapterStatus cpqNicIfPhysAdapterBadTransmits cpqNicIfPhysAdapterBadReceives)) {
+ $self->{$_} = $params{$_};
+ }
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('pni', $self->{cpqNicIfPhysAdapterIndex});
+ if ($self->{cpqNicIfPhysAdapterCondition} eq "other") {
+ # hp doesnt output a clear status. i am optimistic, unknown/other
+ # means "dont care"
+ $self->add_info(sprintf "physical nic %d (%s) is %s",
+ $self->{cpqNicIfPhysAdapterIndex}, $self->{cpqNicIfPhysAdapterRole},
+ $self->{cpqNicIfPhysAdapterCondition});
+ } elsif ($self->{cpqNicIfPhysAdapterCondition} ne "ok") {
+ $self->add_info(sprintf "physical nic %d (%s) is %s (%s,%s)",
+ $self->{cpqNicIfPhysAdapterIndex}, $self->{cpqNicIfPhysAdapterRole},
+ $self->{cpqNicIfPhysAdapterCondition},
+ $self->{cpqNicIfPhysAdapterState}, $self->{cpqNicIfPhysAdapterStatus});
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ if ($self->{cpqNicIfPhysAdapterDuplexState} ne "full") {
+ $self->add_info(sprintf "physical nic %d (%s) is %s duplex",
+ $self->{cpqNicIfPhysAdapterIndex}, $self->{cpqNicIfPhysAdapterRole},
+ $self->{cpqNicIfPhysAdapterDuplexState});
+ } else {
+ $self->add_info(sprintf "physical nic %d (%s) is %s",
+ $self->{cpqNicIfPhysAdapterIndex}, $self->{cpqNicIfPhysAdapterRole},
+ $self->{cpqNicIfPhysAdapterCondition});
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ printf "[PNIC_%s]\n", $self->{cpqNicIfPhysAdapterIndex};
+ foreach (qw(cpqNicIfPhysAdapterIndex cpqNicIfPhysAdapterIfNumber cpqNicIfPhysAdapterRole cpqNicIfPhysAdapterDuplexState cpqNicIfPhysAdapterCondition cpqNicIfPhysAdapterState cpqNicIfPhysAdapterStatus cpqNicIfPhysAdapterBadTransmits cpqNicIfPhysAdapterBadReceives)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n", $self->{info};
+ printf "\n";
+}
+
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem/SNMP.pm
new file mode 100755
index 0000000..85f1fd4
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/NicSubsystem/SNMP.pm
@@ -0,0 +1,189 @@
+package HP::Proliant::Component::NicSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::NicSubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ logical_nics => [],
+ physical_nics => [],
+ };
+ bless $self, $class;
+ $self->overall_init(%params);
+ $self->init();
+ return $self;
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ # overall
+ my $cpqNicIfLogMapOverallCondition = '1.3.6.1.4.1.232.18.2.2.2.0';
+ my $cpqNicIfLogMapOverallConditionValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ };
+ $self->{lognicstatus} = SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqNicIfLogMapOverallCondition,
+ $cpqNicIfLogMapOverallConditionValue);
+}
+
+sub init {
+ my $self = shift;
+ my $snmpwalk = $self->{rawdata};
+ my $ifconnect = {};
+ # CPQNIC-MIB
+ my $oids = {
+ cpqNicIfLogMapEntry => '1.3.6.1.4.1.232.18.2.2.1.1',
+ cpqNicIfLogMapIndex => '1.3.6.1.4.1.232.18.2.2.1.1.1',
+ cpqNicIfLogMapIfNumber => '1.3.6.1.4.1.232.18.2.2.1.1.2',
+ cpqNicIfLogMapDescription => '1.3.6.1.4.1.232.18.2.2.1.1.3',
+ cpqNicIfLogMapGroupType => '1.3.6.1.4.1.232.18.2.2.1.1.4',
+ cpqNicIfLogMapAdapterCount => '1.3.6.1.4.1.232.18.2.2.1.1.5',
+ cpqNicIfLogMapAdapterOKCount => '1.3.6.1.4.1.232.18.2.2.1.1.6',
+ cpqNicIfLogMapPhysicalAdapters => '1.3.6.1.4.1.232.18.2.2.1.1.7',
+ cpqNicIfLogMapMACAddress => '1.3.6.1.4.1.232.18.2.2.1.1.8',
+ cpqNicIfLogMapSwitchoverMode => '1.3.6.1.4.1.232.18.2.2.1.1.9',
+ cpqNicIfLogMapCondition => '1.3.6.1.4.1.232.18.2.2.1.1.10',
+ cpqNicIfLogMapStatus => '1.3.6.1.4.1.232.18.2.2.1.1.11',
+ cpqNicIfLogMapNumSwitchovers => '1.3.6.1.4.1.232.18.2.2.1.1.12',
+ cpqNicIfLogMapHwLocation => '1.3.6.1.4.1.232.18.2.2.1.1.13',
+ cpqNicIfLogMapSpeed => '1.3.6.1.4.1.232.18.2.2.1.1.14',
+ cpqNicIfLogMapVlanCount => '1.3.6.1.4.1.232.18.2.2.1.1.15',
+ cpqNicIfLogMapVlans => '1.3.6.1.4.1.232.18.2.2.1.1.16',
+
+ cpqNicIfLogMapGroupTypeValue => {
+ 1 => "unknown",
+ 2 => "none",
+ 3 => "redundantPair",
+ 4 => "nft",
+ 5 => "alb",
+ 6 => "fec",
+ 7 => "gec",
+ 8 => "ad",
+ 9 => "slb",
+ 10 => "tlb",
+ 11 => "redundancySet",
+ },
+ cpqNicIfLogMapConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqNicIfLogMapStatusValue => {
+ 1 => "unknown",
+ 2 => "ok",
+ 3 => "primaryFailed",
+ 4 => "standbyFailed",
+ 5 => "groupFailed",
+ 6 => "redundancyReduced",
+ 7 => "redundancyLost",
+ },
+ cpqNicIfLogMapSwitchoverModeValue => {
+ 1 => "unknown",
+ 2 => "none",
+ 3 => "manual",
+ 4 => "switchOnFail",
+ 5 => "preferredPrimary",
+ },
+ };
+
+ # INDEX { cpqNicIfLogMapIndex }
+ foreach ($self->get_entries($oids, 'cpqNicIfLogMapEntry')) {
+ push(@{$self->{logical_nics}},
+ HP::Proliant::Component::NicSubsystem::LogicalNic->new(%{$_})
+ );
+ }
+
+ $oids = {
+ cpqNicIfPhysAdapterEntry => '1.3.6.1.4.1.232.18.2.3.1.1',
+ cpqNicIfPhysAdapterIndex => '1.3.6.1.4.1.232.18.2.3.1.1.1',
+ cpqNicIfPhysAdapterIfNumber => '1.3.6.1.4.1.232.18.2.3.1.1.2',
+ cpqNicIfPhysAdapterRole => '1.3.6.1.4.1.232.18.2.3.1.1.3',
+ cpqNicIfPhysAdapterMACAddress => '1.3.6.1.4.1.232.18.2.3.1.1.4',
+ cpqNicIfPhysAdapterSlot => '1.3.6.1.4.1.232.18.2.3.1.1.5',
+ cpqNicIfPhysAdapterIoAddr => '1.3.6.1.4.1.232.18.2.3.1.1.6',
+ cpqNicIfPhysAdapterIrq => '1.3.6.1.4.1.232.18.2.3.1.1.7',
+ cpqNicIfPhysAdapterDma => '1.3.6.1.4.1.232.18.2.3.1.1.8',
+ cpqNicIfPhysAdapterMemAddr => '1.3.6.1.4.1.232.18.2.3.1.1.9',
+ cpqNicIfPhysAdapterPort => '1.3.6.1.4.1.232.18.2.3.1.1.10',
+ cpqNicIfPhysAdapterDuplexState => '1.3.6.1.4.1.232.18.2.3.1.1.11',
+ cpqNicIfPhysAdapterCondition => '1.3.6.1.4.1.232.18.2.3.1.1.12',
+ cpqNicIfPhysAdapterState => '1.3.6.1.4.1.232.18.2.3.1.1.13',
+ cpqNicIfPhysAdapterStatus => '1.3.6.1.4.1.232.18.2.3.1.1.14',
+ cpqNicIfPhysAdapterStatsValid => '1.3.6.1.4.1.232.18.2.3.1.1.15',
+ cpqNicIfPhysAdapterGoodTransmits => '1.3.6.1.4.1.232.18.2.3.1.1.16',
+ cpqNicIfPhysAdapterGoodReceives => '1.3.6.1.4.1.232.18.2.3.1.1.17',
+ cpqNicIfPhysAdapterBadTransmits => '1.3.6.1.4.1.232.18.2.3.1.1.18',
+ cpqNicIfPhysAdapterBadReceives => '1.3.6.1.4.1.232.18.2.3.1.1.19',
+ cpqNicIfPhysAdapterAlignmentErrors => '1.3.6.1.4.1.232.18.2.3.1.1.20',
+ cpqNicIfPhysAdapterFCSErrors => '1.3.6.1.4.1.232.18.2.3.1.1.21',
+ cpqNicIfPhysAdapterSingleCollisionFrames => '1.3.6.1.4.1.232.18.2.3.1.1.22',
+ cpqNicIfPhysAdapterMultipleCollisionFrames => '1.3.6.1.4.1.232.18.2.3.1.1.23',
+ cpqNicIfPhysAdapterDeferredTransmissions => '1.3.6.1.4.1.232.18.2.3.1.1.24',
+ cpqNicIfPhysAdapterLateCollisions => '1.3.6.1.4.1.232.18.2.3.1.1.25',
+ cpqNicIfPhysAdapterExcessiveCollisions => '1.3.6.1.4.1.232.18.2.3.1.1.26',
+ cpqNicIfPhysAdapterInternalMacTransmitErrors => '1.3.6.1.4.1.232.18.2.3.1.1.27',
+ cpqNicIfPhysAdapterCarrierSenseErrors => '1.3.6.1.4.1.232.18.2.3.1.1.28',
+ cpqNicIfPhysAdapterFrameTooLongs => '1.3.6.1.4.1.232.18.2.3.1.1.29',
+ cpqNicIfPhysAdapterInternalMacReceiveErrors => '1.3.6.1.4.1.232.18.2.3.1.1.30',
+ cpqNicIfPhysAdapterHwLocation => '1.3.6.1.4.1.232.18.2.3.1.1.31',
+ cpqNicIfPhysAdapterPartNumber => '1.3.6.1.4.1.232.18.2.3.1.1.32',
+ cpqNicIfPhysAdapterRoleValue => {
+ 1 => "unknown",
+ 2 => "primary",
+ 3 => "secondary",
+ 4 => "member",
+ 5 => "txRx",
+ 6 => "tx",
+ 7 => "standby",
+ 8 => "none",
+ 255 => "notApplicable",
+ },
+ cpqNicIfPhysAdapterDuplexStateValue => {
+ 1 => "unknown",
+ 2 => "half",
+ 3 => "full",
+ },
+ cpqNicIfPhysAdapterConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqNicIfPhysAdapterStateValue => {
+ 1 => "unknown",
+ 2 => "ok",
+ 3 => "standby",
+ 4 => "failed",
+ },
+ cpqNicIfPhysAdapterStatusValue => {
+ 1 => "unknown",
+ 2 => "ok",
+ 3 => "generalFailure",
+ 4 => "linkFailure",
+ },
+
+ };
+ # INDEX { cpqNicIfPhysAdapterIndex }
+ foreach ($self->get_entries($oids, 'cpqNicIfPhysAdapterEntry')) {
+ push(@{$self->{physical_nics}},
+ HP::Proliant::Component::NicSubsystem::PhysicalNic->new(%{$_}));
+ }
+
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem.pm
new file mode 100755
index 0000000..6abba29
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem.pm
@@ -0,0 +1,214 @@
+package HP::Proliant::Component::PowersupplySubsystem;
+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},
+ condition => $params{condition},
+ status => $params{status},
+ powersupplies => [],
+ powerconverters => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::PowersupplySubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::PowersupplySubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking power supplies');
+ if (scalar (@{$self->{powersupplies}}) == 0) {
+ #$self->overall_check();
+ } else {
+ foreach (@{$self->{powersupplies}}) {
+ $_->check();
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{powersupplies}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::PowersupplySubsystem::Powersupply;
+our @ISA = qw(HP::Proliant::Component::PowersupplySubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeFltTolPowerSupplyChassis => $params{cpqHeFltTolPowerSupplyChassis},
+ cpqHeFltTolPowerSupplyBay => $params{cpqHeFltTolPowerSupplyBay},
+ cpqHeFltTolPowerSupplyPresent => $params{cpqHeFltTolPowerSupplyPresent},
+ cpqHeFltTolPowerSupplyCondition => $params{cpqHeFltTolPowerSupplyCondition},
+ cpqHeFltTolPowerSupplyRedundant => $params{cpqHeFltTolPowerSupplyRedundant},
+ cpqHeFltTolPowerSupplyCapacityUsed => $params{cpqHeFltTolPowerSupplyCapacityUsed} || 0,
+ cpqHeFltTolPowerSupplyCapacityMaximum => $params{cpqHeFltTolPowerSupplyCapacityMaximum} || 0,
+ blacklisted => 0,
+ info => undef,
+ extendexinfo => undef,
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('p', $self->{cpqHeFltTolPowerSupplyBay});
+ if ($self->{cpqHeFltTolPowerSupplyPresent} eq "present") {
+ if ($self->{cpqHeFltTolPowerSupplyCondition} ne "ok") {
+ if ($self->{cpqHeFltTolPowerSupplyCondition} eq "other") {
+ $self->add_info(sprintf "powersupply %d is missing",
+ $self->{cpqHeFltTolPowerSupplyBay});
+ } else {
+ $self->add_info(sprintf "powersupply %d needs attention (%s)",
+ $self->{cpqHeFltTolPowerSupplyBay},
+ $self->{cpqHeFltTolPowerSupplyCondition});
+ }
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info(sprintf "powersupply %d is %s",
+ $self->{cpqHeFltTolPowerSupplyBay},
+ $self->{cpqHeFltTolPowerSupplyCondition});
+ }
+ $self->add_extendedinfo(sprintf "ps_%s=%s",
+ $self->{cpqHeFltTolPowerSupplyBay},
+ $self->{cpqHeFltTolPowerSupplyCondition});
+ if ($self->{cpqHeFltTolPowerSupplyCapacityUsed} &&
+ $self->{cpqHeFltTolPowerSupplyCapacityMaximum}) {
+ if ($self->{runtime}->{options}->{perfdata}) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf("pc_%s", $self->{cpqHeFltTolPowerSupplyBay}),
+ value => $self->{cpqHeFltTolPowerSupplyCapacityUsed},
+ warning => $self->{cpqHeFltTolPowerSupplyCapacityMaximum},
+ critical => $self->{cpqHeFltTolPowerSupplyCapacityMaximum}
+ );
+ }
+ } elsif ($self->{cpqHeFltTolPowerSupplyCapacityUsed}) {
+ if ($self->{runtime}->{options}->{perfdata}) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf("pc_%s", $self->{cpqHeFltTolPowerSupplyBay}),
+ value => $self->{cpqHeFltTolPowerSupplyCapacityUsed}
+ );
+ }
+ }
+ } else {
+ $self->add_info(sprintf "powersupply %d is %s",
+ $self->{cpqHeFltTolPowerSupplyBay},
+ $self->{cpqHeFltTolPowerSupplyPresent});
+ $self->add_extendedinfo(sprintf "ps_%s=%s",
+ $self->{cpqHeFltTolPowerSupplyBay},
+ $self->{cpqHeFltTolPowerSupplyPresent});
+ }
+}
+
+
+sub dump {
+ my $self = shift;
+ printf "[PS_%s]\n", $self->{cpqHeFltTolPowerSupplyBay};
+ foreach (qw(cpqHeFltTolPowerSupplyBay cpqHeFltTolPowerSupplyChassis
+ cpqHeFltTolPowerSupplyPresent cpqHeFltTolPowerSupplyCondition
+ cpqHeFltTolPowerSupplyRedundant cpqHeFltTolPowerSupplyCapacityUsed
+ cpqHeFltTolPowerSupplyCapacityMaximum)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+
+package HP::Proliant::Component::PowersupplySubsystem::Powerconverter;
+our @ISA = qw(HP::Proliant::Component::PowersupplySubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+
+ cpqHePowerConvEntry => $params{cpqHePowerConvEntry},
+ cpqHePowerConvChassis => $params{cpqHePowerConvChassis},
+ cpqHePowerConvIndex => $params{cpqHePowerConvIndex},
+ cpqHePowerConvPresent => $params{cpqHePowerConvPresent},
+ cpqHePowerConvRedundant => $params{cpqHePowerConvRedundant},
+ cpqHePowerConvCondition => $params{cpqHePowerConvCondition},
+ cpqHePowerConvHwLocation => $params{cpqHePowerConvHwLocation},
+ blacklisted => 0,
+ info => undef,
+ extendexinfo => undef,
+ };
+ bless $self, $class;
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('pc', $self->{cpqHePowerConvIndex});
+ if ($self->{cpqHePowerConvPresent} eq "present") {
+ if ($self->{cpqHePowerConvCondition} ne "ok") {
+ if ($self->{cpqHePowerConvCondition} eq "other") {
+ $self->add_info(sprintf "powerconverter %d is missing",
+ $self->{cpqHePowerConvIndex});
+ } else {
+ $self->add_info(sprintf "powerconverter %d needs attention (%s)",
+ $self->{cpqHePowerConvIndex},
+ $self->{cpqHePowerConvCondition});
+ }
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info(sprintf "powerconverter %d is %s",
+ $self->{cpqHePowerConvIndex},
+ $self->{cpqHePowerConvCondition});
+ }
+ $self->add_extendedinfo(sprintf "pc_%s=%s",
+ $self->{cpqHePowerConvIndex},
+ $self->{cpqHePowerConvCondition});
+ } else {
+ $self->add_info(sprintf "powerconverter %d is %s",
+ $self->{cpqHePowerConvIndex},
+ $self->{cpqHePowerConvPresent});
+ $self->add_extendedinfo(sprintf "pc_%s=%s",
+ $self->{cpqHePowerConvIndex},
+ $self->{cpqHePowerConvPresent});
+ }
+}
+
+
+sub dump {
+ my $self = shift;
+ printf "[PS_%s]\n", ($self->{cpqHePowerConvChassis} ? $self->{cpqHePowerConvChassis}.":" : "").$self->{cpqHePowerConvIndex};
+ foreach (qw(cpqHePowerConvIndex cpqHePowerConvPresent cpqHePowerConvRedundant cpqHePowerConvCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/CLI.pm
new file mode 100755
index 0000000..c218975
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/CLI.pm
@@ -0,0 +1,81 @@
+package HP::Proliant::Component::PowersupplySubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::PowersupplySubsystem);
+
+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},
+ powersupplies => [],
+ powerconverters => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my %tmpps = (
+ runtime => $self->{runtime},
+ cpqHeFltTolPowerSupplyChassis => 1,
+ );
+ my $inblock = 0;
+ foreach (grep(/^powersupply/, split(/\n/, $self->{rawdata}))) {
+ s/^powersupply\s*//g;
+ if (/^Power supply #(\d+)/) {
+ if ($inblock) {
+ $inblock = 0;
+ push(@{$self->{powersupplies}},
+ HP::Proliant::Component::PowersupplySubsystem::Powersupply->new(%tmpps));
+ %tmpps = (
+ runtime => $self->{runtime},
+ cpqHeFltTolPowerSupplyChassis => 1,
+ );
+ }
+ $tmpps{cpqHeFltTolPowerSupplyBay} = $1;
+ $inblock = 1;
+ } elsif (/\s*Present\s+:\s+(\w+)/) {
+ $tmpps{cpqHeFltTolPowerSupplyPresent} = lc $1 eq 'yes' ? 'present' :
+ lc $1 eq 'no' ? 'absent': 'other';
+ } elsif (/\s*Redundant\s*:\s+(\w+)/) {
+ $tmpps{cpqHeFltTolPowerSupplyRedundant} = lc $1 eq 'yes' ? 'redundant' :
+ lc $1 eq 'no' ? 'notRedundant' : 'other';
+ } elsif (/\s*Condition\s*:\s+(\w+)/) {
+ $tmpps{cpqHeFltTolPowerSupplyCondition} = lc $1;
+ } elsif (/\s*Power\s*:\s+(\d+)/) {
+ $tmpps{cpqHeFltTolPowerSupplyCapacityUsed} = $1;
+ } elsif (/\s*Power Supply not present/) {
+ $tmpps{cpqHeFltTolPowerSupplyPresent} = "absent";
+ $tmpps{cpqHeFltTolPowerSupplyCondition} = "other";
+ $tmpps{cpqHeFltTolPowerSupplyRedundant} = "notRedundant";
+ } elsif (/^\s*$/) {
+ if ($inblock) {
+ $inblock = 0;
+ push(@{$self->{powersupplies}},
+ HP::Proliant::Component::PowersupplySubsystem::Powersupply->new(%tmpps));
+ %tmpps = (
+ runtime => $self->{runtime},
+ cpqHeFltTolPowerSupplyChassis => 1,
+ );
+ }
+ }
+ }
+ if ($inblock) {
+ push(@{$self->{powersupplies}},
+ HP::Proliant::Component::PowersupplySubsystem::Powersupply->new(%tmpps));
+ %tmpps = (
+ runtime => $params{runtime},
+ );
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/SNMP.pm
new file mode 100755
index 0000000..3fa8599
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/PowersupplySubsystem/SNMP.pm
@@ -0,0 +1,96 @@
+package HP::Proliant::Component::PowersupplySubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::PowersupplySubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ powersupplies => [],
+ powerconverters => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeFltTolPowerSupplyEntry => "1.3.6.1.4.1.232.6.2.9.3.1",
+ cpqHeFltTolPowerSupplyChassis => "1.3.6.1.4.1.232.6.2.9.3.1.1",
+ cpqHeFltTolPowerSupplyBay => "1.3.6.1.4.1.232.6.2.9.3.1.2",
+ cpqHeFltTolPowerSupplyPresent => "1.3.6.1.4.1.232.6.2.9.3.1.3",
+ cpqHeFltTolPowerSupplyCondition => "1.3.6.1.4.1.232.6.2.9.3.1.4",
+ cpqHeFltTolPowerSupplyRedundant => "1.3.6.1.4.1.232.6.2.9.3.1.9",
+ cpqHeFltTolPowerSupplyPresentValue => {
+ 1 => "other",
+ 2 => "absent",
+ 3 => "present",
+ },
+ cpqHeFltTolPowerSupplyConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqHeFltTolPowerSupplyCapacityUsed => '1.3.6.1.4.1.232.6.2.9.3.1.7',
+ cpqHeFltTolPowerSupplyCapacityMaximum => '1.3.6.1.4.1.232.6.2.9.3.1.8',
+ cpqHeFltTolPowerSupplyRedundantValue => {
+ 1 => "other",
+ 2 => "notRedundant",
+ 3 => "redundant",
+ },
+ };
+
+ # INDEX { cpqHeFltTolPowerSupplyChassis, cpqHeFltTolPowerSupplyBay }
+ foreach ($self->get_entries($oids, 'cpqHeFltTolPowerSupplyEntry')) {
+ push(@{$self->{powersupplies}},
+ HP::Proliant::Component::PowersupplySubsystem::Powersupply->new(%{$_}));
+ }
+
+ $oids = {
+ cpqHePowerConvEntry => "1.3.6.1.4.1.232.6.2.13.3.1",
+ cpqHePowerConvChassis => "1.3.6.1.4.1.232.6.2.13.3.1.1",
+ cpqHePowerConvIndex => "1.3.6.1.4.1.232.6.2.13.3.1.2",
+ cpqHePowerConvPresent => "1.3.6.1.4.1.232.6.2.13.3.1.3",
+ cpqHePowerConvRedundant => "1.3.6.1.4.1.232.6.2.13.3.1.6",
+ cpqHePowerConvCondition => "1.3.6.1.4.1.232.6.2.13.3.1.8",
+ cpqHePowerConvPresentValue => {
+ 1 => "other",
+ 2 => "absent",
+ 3 => "present",
+ },
+ cpqHePowerConvRedundantValue => {
+ 1 => "other",
+ 2 => "notRedundant",
+ 3 => "redundant",
+ },
+ cpqHePowerConvConditionValue => {
+ 1 => "other",
+ 2 => "ok",
+ 3 => "degraded",
+ 4 => "failed",
+ },
+ cpqHePowerConvHwLocation => "1.3.6.1.4.1.232.6.2.13.3.1.9",
+ };
+
+ # INDEX { cpqHePowerConvChassis cpqHePowerConvIndex }
+ foreach ($self->get_entries($oids, 'cpqHePowerConvEntry')) {
+ push(@{$self->{powerconverters}},
+ HP::Proliant::Component::PowersupplySubsystem::Powerconverter->new(%{$_}));
+ }
+ # keine ahnung, was man damit machen kann
+
+}
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/SNMP.pm
new file mode 100755
index 0000000..708f7f6
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/SNMP.pm
@@ -0,0 +1,67 @@
+package HP::Proliant::Component::SNMP;
+
+sub get_entries {
+ my $self = shift;
+ my $oids = shift;
+ my $entry = shift;
+ my $snmpwalk = $self->{rawdata};
+ my @params = ();
+ my @indices = SNMP::Utils::get_indices($snmpwalk, $oids->{$entry});
+ foreach (@indices) {
+ my @idx = @{$_};
+ my %params = (
+ runtime => $self->{runtime},
+ );
+ my $maxdimension = scalar(@idx) - 1;
+ foreach my $idxnr (1..scalar(@idx)) {
+ $params{'index'.$idxnr} = $_->[$idxnr - 1];
+ }
+ foreach my $oid (keys %{$oids}) {
+ next if $oid =~ /Entry$/;
+ next if $oid =~ /Value$/;
+ if (exists $oids->{$oid.'Value'}) {
+ $params{$oid} = SNMP::Utils::get_object_value(
+ $snmpwalk, $oids->{$oid}, $oids->{$oid.'Value'}, @idx);
+ if (! defined $params{$oid}) {
+ my $numerical_value = SNMP::Utils::get_object(
+ $snmpwalk, $oids->{$oid}, @idx);
+ if (! defined $numerical_value) {
+ # maschine liefert schrott
+ $params{$oid} = 'value_unknown';
+ } else {
+ $params{$oid} = 'value_'.SNMP::Utils::get_object(
+ $snmpwalk, $oids->{$oid}, @idx);
+ }
+ }
+ } else {
+ $params{$oid} = SNMP::Utils::get_object(
+ $snmpwalk, $oids->{$oid}, @idx);
+ }
+ }
+ push(@params, \%params);
+ }
+ return @params;
+}
+
+sub mib {
+ my $self = shift;
+ my $mib = shift;
+ my $condition = {
+ 0 => 'other',
+ 1 => 'ok',
+ 2 => 'degraded',
+ 3 => 'failed',
+ };
+ my $MibRevMajor = $mib.'.1.0';
+ my $MibRevMinor = $mib.'.2.0';
+ my $MibRevCondition = $mib.'.3.0';
+ return (
+ $self->SNMP::Utils::get_object($self->{rawdata},
+ $MibRevMajor),
+ $self->SNMP::Utils::get_object($self->{rawdata},
+ $MibRevMinor),
+ $self->SNMP::Utils::get_object_value($self->{rawdata},
+ $MibRevCondition, $condition));
+};
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem.pm
new file mode 100755
index 0000000..7c82a11
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem.pm
@@ -0,0 +1,205 @@
+package HP::Proliant::Component::TemperatureSubsystem;
+our @ISA = qw(HP::Proliant::Component);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+################################## custom_thresholds
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ method => $params{method},
+ condition => $params{condition},
+ status => $params{status},
+ temperatures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($params{runtime}->{options}->{customthresholds}) {
+ if (-f $params{runtime}->{options}->{customthresholds}) {
+ $params{runtime}->{options}->{customthresholds} =
+ do { local (@ARGV, $/) =
+ $params{runtime}->{options}->{customthresholds}; <> };
+ }
+ foreach my $ct_items
+ (split(/\//, $params{runtime}->{options}->{customthresholds})) {
+ if ($ct_items =~ /^(\d+):(\d+)$/) {
+ $params{runtime}->{options}->{thresholds}->{$1} = $2;
+ } else {
+ die sprintf "invalid threshold %s", $ct_items;
+ }
+ }
+ }
+ if ($self->{method} eq 'snmp') {
+ return HP::Proliant::Component::TemperatureSubsystem::SNMP->new(%params);
+ } elsif ($self->{method} eq 'cli') {
+ return HP::Proliant::Component::TemperatureSubsystem::CLI->new(%params);
+ } else {
+ die "unknown method";
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ my $errorfound = 0;
+ $self->add_info('checking temperatures');
+ if (scalar (@{$self->{temperatures}}) == 0) {
+ #$self->overall_check();
+ $self->add_info('no temperatures found');
+ } else {
+ foreach (sort { $a->{cpqHeTemperatureIndex} <=> $b->{cpqHeTemperatureIndex}}
+ @{$self->{temperatures}}) {
+ $_->check();
+ }
+ }
+}
+
+sub dump {
+ my $self = shift;
+ foreach (@{$self->{temperatures}}) {
+ $_->dump();
+ }
+}
+
+
+package HP::Proliant::Component::TemperatureSubsystem::Temperature;
+our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ cpqHeTemperatureChassis => $params{cpqHeTemperatureChassis},
+ cpqHeTemperatureIndex => $params{cpqHeTemperatureIndex},
+ cpqHeTemperatureLocale => $params{cpqHeTemperatureLocale},
+ cpqHeTemperatureCelsius => $params{cpqHeTemperatureCelsius},
+ cpqHeTemperatureThresholdCelsius => $params{cpqHeTemperatureThresholdCelsius},
+ cpqHeTemperatureCondition => $params{cpqHeTemperatureCondition},
+ cpqHeTemperatureThresholdType => $params{cpqHeTemperatureThresholdType} || "unknown",
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ if ($params{runtime}->{options}->{celsius}) {
+ $self->{cpqHeTemperatureUnits} = 'C';
+ $self->{cpqHeTemperature} = $self->{cpqHeTemperatureCelsius};
+ $self->{cpqHeTemperatureThreshold} =
+ $self->{cpqHeTemperatureThresholdCelsius};
+ } else {
+ $self->{cpqHeTemperatureUnits} = 'F';
+ $self->{cpqHeTemperature} =
+ (($self->{cpqHeTemperatureCelsius} * 9) / 5) + 32;
+ $self->{cpqHeTemperatureThreshold} =
+ (($self->{cpqHeTemperatureThresholdCelsius} * 9) / 5) + 32;
+ }
+ my $index = $self->{cpqHeTemperatureIndex};
+ if (exists $params{runtime}->{options}->{thresholds}->{$index}) {
+ $self->{cpqHeTemperatureThreshold} =
+ $params{runtime}->{options}->{thresholds}->{$index};
+
+ }
+ if ($self->{cpqHeTemperatureThresholdCelsius} == -99) {
+ bless $self, 'HP::Proliant::Component::TemperatureSubsystem::SoSTemperature';
+ } elsif ($self->{cpqHeTemperatureThresholdCelsius} == 0) {
+ # taucht auf, seit man gen8 ueber das ilo abfragen kann
+ bless $self, 'HP::Proliant::Component::TemperatureSubsystem::SoSTemperature';
+ }
+ return $self;
+}
+
+sub check {
+ my $self = shift;
+ $self->blacklist('t', $self->{cpqHeTemperatureIndex});
+ if ($self->{cpqHeTemperature} > $self->{cpqHeTemperatureThreshold}) {
+ $self->add_info(sprintf "%d %s temperature too high (%d%s, %d max)",
+ $self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
+ $self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits},
+ $self->{cpqHeTemperatureThreshold});
+ $self->add_message(CRITICAL, $self->{info});
+ } elsif ($self->{cpqHeTemperature} < 0) {
+ # #21 SCSI_BACKPLANE_ZONE -1C/31F 60C/140F OK - can't be true
+ $self->add_info(sprintf "%d %s temperature too low (%d%s)",
+ $self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
+ $self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits});
+ $self->add_message(CRITICAL, $self->{info});
+ } else {
+ $self->add_info(sprintf "%d %s temperature is %d%s (%d max)",
+ $self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
+ $self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits},
+ $self->{cpqHeTemperatureThreshold});
+ }
+ if ($self->{runtime}->{options}->{perfdata} == 2) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s', $self->{cpqHeTemperatureIndex}),
+ value => $self->{cpqHeTemperature},
+ warning => $self->{cpqHeTemperatureThreshold},
+ critical => $self->{cpqHeTemperatureThreshold}
+ );
+ } elsif ($self->{runtime}->{options}->{perfdata} == 1) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s_%s', $self->{cpqHeTemperatureIndex},
+ $self->{cpqHeTemperatureLocale}),
+ value => $self->{cpqHeTemperature},
+ warning => $self->{cpqHeTemperatureThreshold},
+ critical => $self->{cpqHeTemperatureThreshold}
+ );
+ }
+ $self->add_extendedinfo(sprintf "temp_%s=%d",
+ $self->{cpqHeTemperatureIndex},
+ $self->{cpqHeTemperature});
+}
+
+sub dump {
+ my $self = shift;
+ printf "[TEMP_%s]\n", $self->{cpqHeTemperatureIndex};
+ foreach (qw(cpqHeTemperatureChassis cpqHeTemperatureIndex
+ cpqHeTemperatureLocale cpqHeTemperatureCelsius cpqHeTemperatureThreshold
+ cpqHeTemperatureThresholdType cpqHeTemperatureCondition)) {
+ printf "%s: %s\n", $_, $self->{$_};
+ }
+ printf "info: %s\n\n", $self->{info};
+}
+
+
+package HP::Proliant::Component::TemperatureSubsystem::SoSTemperature;
+our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem::Temperature);
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub check {
+ my $self = shift;
+ $self->blacklist('t', $self->{cpqHeTemperatureIndex});
+ $self->add_info(sprintf "%d %s temperature is %d%s (no thresh.)",
+ $self->{cpqHeTemperatureIndex}, $self->{cpqHeTemperatureLocale},
+ $self->{cpqHeTemperature}, $self->{cpqHeTemperatureUnits});
+ if ($self->{runtime}->{options}->{perfdata} == 2) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s', $self->{cpqHeTemperatureIndex}),
+ value => $self->{cpqHeTemperature},
+ );
+ } elsif ($self->{runtime}->{options}->{perfdata} == 1) {
+ $self->{runtime}->{plugin}->add_perfdata(
+ label => sprintf('temp_%s_%s', $self->{cpqHeTemperatureIndex},
+ $self->{cpqHeTemperatureLocale}),
+ value => $self->{cpqHeTemperature},
+ );
+ }
+ $self->add_extendedinfo(sprintf "temp_%s=%d",
+ $self->{cpqHeTemperatureIndex},
+ $self->{cpqHeTemperature});
+}
+
+1;
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/CLI.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/CLI.pm
new file mode 100755
index 0000000..9e8e6be
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/CLI.pm
@@ -0,0 +1,56 @@
+package HP::Proliant::Component::TemperatureSubsystem::CLI;
+our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem);
+
+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},
+ temperatures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->init(%params);
+ return $self;
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $tempcnt = 1;
+ foreach (grep(/^temp/, split(/\n/, $params{rawdata}))) {
+ s/^temp\s*//g;
+ if (/^#(\d+)\s+([\w_\/\-#]+)\s+(-*\d+)C\/(\d+)F\s+(\d+)C\/(\d+)F/) {
+ my %params = ();
+ $params{runtime} = $self->{runtime};
+ $params{cpqHeTemperatureChassis} = 1;
+ $params{cpqHeTemperatureIndex} = $1;
+ $params{cpqHeTemperatureLocale} = lc $2;
+ $params{cpqHeTemperatureCelsius} = $3;
+ $params{cpqHeTemperatureThresholdCelsius} = $5;
+ $params{cpqHeTemperatureCondition} = 'unknown';
+ push(@{$self->{temperatures}},
+ HP::Proliant::Component::TemperatureSubsystem::Temperature->new(
+ %params));
+ } elsif (/^#(\d+)\s+([\w_\/\-#]+)\s+\-\s+(\d+)C\/(\d+)F/) {
+ # #3 CPU#2 - 0C/0F
+ $self->trace(2, sprintf "skipping temperature %s", $_);
+ } elsif (/^#(\d+)\s+([\w_\/\-#]+)\s+(\d+)C\/(\d+)F\s+\-/) {
+ # #3 CPU#2 0C/0F -
+ $self->trace(2, sprintf "skipping temperature %s", $_);
+ } elsif (/^#(\d+)\s+([\w_\/\-#]+)\s+\-\s+\-/) {
+ # #3 CPU#2 - -
+ $self->trace(2, sprintf "skipping temperature %s", $_);
+ } elsif (/^#(\d+)/) {
+ $self->trace(0, sprintf "send this to lausser: %s", $_);
+ }
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/SNMP.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/SNMP.pm
new file mode 100755
index 0000000..de8e4cb
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Proliant/Component/TemperatureSubsystem/SNMP.pm
@@ -0,0 +1,119 @@
+package HP::Proliant::Component::TemperatureSubsystem::SNMP;
+our @ISA = qw(HP::Proliant::Component::TemperatureSubsystem
+ 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 = {
+ runtime => $params{runtime},
+ rawdata => $params{rawdata},
+ temperatures => [],
+ blacklisted => 0,
+ info => undef,
+ extendedinfo => undef,
+ };
+ bless $self, $class;
+ $self->overall_init(%params);
+ $self->init(%params);
+ return $self;
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $params{rawdata};
+ # overall
+ my $cpqHeThermalTempStatus = '1.3.6.1.4.1.232.6.2.6.3.0';
+ my $cpqHeThermalTempStatusValue = {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ };
+ $self->{tempstatus} = lc SNMP::Utils::get_object_value(
+ $snmpwalk, $cpqHeThermalTempStatus,
+ $cpqHeThermalTempStatusValue);
+ $self->{tempstatus} |= lc $self->{tempstatus};
+}
+
+sub init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $oids = {
+ cpqHeTemperatureEntry => "1.3.6.1.4.1.232.6.2.6.8.1",
+ cpqHeTemperatureChassis => "1.3.6.1.4.1.232.6.2.6.8.1.1",
+ cpqHeTemperatureIndex => "1.3.6.1.4.1.232.6.2.6.8.1.2",
+ cpqHeTemperatureLocale => "1.3.6.1.4.1.232.6.2.6.8.1.3",
+ cpqHeTemperatureCelsius => "1.3.6.1.4.1.232.6.2.6.8.1.4",
+ cpqHeTemperatureThresholdCelsius => "1.3.6.1.4.1.232.6.2.6.8.1.5",
+ cpqHeTemperatureCondition => "1.3.6.1.4.1.232.6.2.6.8.1.6",
+ cpqHeTemperatureThresholdType => "1.3.6.1.4.1.232.6.2.6.8.1.7",
+ cpqHeTemperatureLocaleValue => {
+ 1 => "other",
+ 2 => "unknown",
+ 3 => "system",
+ 4 => "systemBoard",
+ 5 => "ioBoard",
+ 6 => "cpu",
+ 7 => "memory",
+ 8 => "storage",
+ 9 => "removableMedia",
+ 10 => "powerSupply",
+ 11 => "ambient",
+ 12 => "chassis",
+ 13 => "bridgeCard",
+ },
+ cpqHeTemperatureConditionValue => {
+ 1 => 'other',
+ 2 => 'ok',
+ 3 => 'degraded',
+ 4 => 'failed',
+ },
+ cpqHeTemperatureThresholdTypeValue => {
+ 1 => 'other',
+ 5 => 'blowout',
+ 9 => 'caution',
+ 15 => 'critical',
+ },
+ };
+ # INDEX { cpqHeTemperatureChassis, cpqHeTemperatureIndex }
+ foreach ($self->get_entries($oids, 'cpqHeTemperatureEntry')) {
+ # sieht aus, als wurden die gar nicht existieren.
+ # im ilo4 werden sie als n/a angezeigt
+ next if $_->{cpqHeTemperatureThresholdType} eq "caution" && $_->{cpqHeTemperatureThresholdCelsius} == 0;
+ push(@{$self->{temperatures}},
+ HP::Proliant::Component::TemperatureSubsystem::Temperature->new(%{$_}));
+ }
+}
+
+sub overall_check {
+ my $self = shift;
+ my $result = 0;
+ $self->blacklist('ots', '');
+ if ($self->{tempstatus}) {
+ if ($self->{tempstatus} eq "ok") {
+ $result = 0;
+ $self->add_info('all temp sensors are within normal operating range');
+ } elsif ($self->{tempstatus} eq "degraded") {
+ $result = 1;
+ $self->add_info('a temp sensor is outside of normal operating range');
+ } elsif ($self->{tempstatus} eq "failed") {
+ $result = 2;
+ $self->add_info('a temp sensor detects a condition that could permanently
+damage the system');
+ } elsif ($self->{tempstatus} eq "other") {
+ $result = 0;
+ $self->add_info('temp sensing is not supported by this system or driver');
+ }
+ } else {
+ $result = 0;
+ $self->add_info('no global temp status found');
+ }
+}
+
+1;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/SNMP/Utils.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/SNMP/Utils.pm
new file mode 100755
index 0000000..f2d31a9
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/SNMP/Utils.pm
@@ -0,0 +1,103 @@
+package SNMP::Utils;
+
+use strict;
+
+{
+ sub get_indices {
+ my $oids = shift;
+ my $entry = shift;
+ my $numindices = shift;
+ # find all oids beginning with $entry
+ # then skip one field for the sequence
+ # then read the next numindices fields
+ my $entrypat = $entry;
+ $entrypat =~ s/\./\\\./g;
+ my @indices = map {
+ /^$entrypat\.\d+\.(.*)/ && $1;
+ } grep {
+ /^$entrypat/
+ } keys %{$oids};
+ my %seen = ();
+ my @o = map {[split /\./]} sort grep !$seen{$_}++, @indices;
+ return @o;
+ }
+
+ sub get_size {
+ my $oids = shift;
+ my $entry = shift;
+ my $entrypat = $entry;
+ $entrypat =~ s/\./\\\./g;
+ my @entries = grep {
+ /^$entrypat/
+ } keys %{$oids};
+ return scalar(@entries);
+ }
+
+ sub get_object {
+ my $oids = shift;
+ my $object = shift;
+ my @indices = @_;
+ #my $oid = $object.'.'.join('.', @indices);
+ my $oid = $object;
+ $oid .= '.'.join('.', @indices) if (@indices);
+ return $oids->{$oid};
+ }
+
+ sub get_object_value {
+ my $oids = shift;
+ my $object = shift;
+ my $values = shift;
+ my @indices = @_;
+ my $key = get_object($oids, $object, @indices);
+ if (defined $key) {
+ return $values->{$key};
+ } else {
+ return undef;
+ }
+ }
+
+ #SNMP::Utils::counter([$idxs1, $idxs2], $idx1, $idx2),
+ # this flattens a n-dimensional array and returns the absolute position
+ # of the element at position idx1,idx2,...,idxn
+ # element 1,2 in table 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2 is at pos 6
+ sub get_number {
+ my $indexlists = shift; #, zeiger auf array aus [1, 2]
+ my @element = @_;
+ my $dimensions = scalar(@{$indexlists->[0]});
+ my @sorted = ();
+ my $number = 0;
+ if ($dimensions == 1) {
+ @sorted =
+ sort { $a->[0] <=> $b->[0] } @{$indexlists};
+ } elsif ($dimensions == 2) {
+ @sorted =
+ sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @{$indexlists};
+ } elsif ($dimensions == 3) {
+ @sorted =
+ sort { $a->[0] <=> $b->[0] ||
+ $a->[1] <=> $b->[1] ||
+ $a->[2] <=> $b->[2] } @{$indexlists};
+ }
+ foreach (@sorted) {
+ if ($dimensions == 1) {
+ if ($_->[0] == $element[0]) {
+ last;
+ }
+ } elsif ($dimensions == 2) {
+ if ($_->[0] == $element[0] && $_->[1] == $element[1]) {
+ last;
+ }
+ } elsif ($dimensions == 3) {
+ if ($_->[0] == $element[0] &&
+ $_->[1] == $element[1] &&
+ $_->[2] == $element[2]) {
+ last;
+ }
+ }
+ $number++;
+ }
+ return ++$number;
+ }
+
+}
+
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Server.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Server.pm
new file mode 100755
index 0000000..7477c40
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/Server.pm
@@ -0,0 +1,447 @@
+package HP::Server;
+
+use strict;
+use constant { OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3 };
+
+sub new {
+ my $class = shift;
+ my %params = @_;
+ my $self = {
+ runtime => $params{runtime},
+ productname => 'unknown',
+ };
+ bless $self, $class;
+ if (! ($self->{runtime}->{plugin}->opts->hostname ||
+ $self->{runtime}->{plugin}->opts->snmpwalk)) {
+ bless $self, 'HP::Proliant::CLI';
+ $self->{method} = 'cli';
+ } else {
+ $self->check_snmp_and_model();
+ if ($self->{runtime}->{options}->{servertype}) {
+ $self->{productname} = 'ProLiant' if
+ $self->{runtime}->{options}->{servertype} eq 'proliant';
+ $self->{productname} = 'BladeSystem' if
+ $self->{runtime}->{options}->{servertype} eq 'bladesystem';
+ $self->{productname} = 'Storage' if
+ $self->{runtime}->{options}->{servertype} eq 'storage';
+ }
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ if ($self->{productname} =~ /ProLiant/) {
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /^DL\d+\s*G\d+/) {
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /OpenView .* appliance/) {
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /Synergy.*Gen/i) {
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /Superdome.*Enclosure/i) {
+ bless $self, 'HP::BladeSystem';
+ $self->trace(3, 'using HP::BladeSystem');
+ } elsif ($self->{productname} =~ /BladeSystem/) {
+ bless $self, 'HP::BladeSystem';
+ $self->trace(3, 'using HP::BladeSystem');
+ } elsif ($self->{productname} =~ /PROLIANT 4LEE/) {
+ bless $self, 'HP::Storage';
+ $self->trace(3, 'using HP::Storage');
+ } elsif ($self->{productname} =~ /X\d+[\s\w]* Network Storage/) {
+ # HP X1600 Network Storage System
+ # HP X1600 G2 Network Storage System
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /StorageWorks/i) {
+ bless $self, 'HP::StorageWorks';
+ $self->trace(3, 'using HP::StorageWorks');
+ } elsif ($self->{productname} =~ /MSA/i) {
+ bless $self, 'HP::StorageWorks';
+ $self->trace(3, 'using HP::StorageWorks');
+ } elsif ($self->{productname} =~ /StoreEasy/i) {
+ bless $self, 'HP::Proliant::SNMP';
+ $self->trace(3, 'using HP::Proliant::SNMP');
+ } elsif ($self->{productname} =~ /Storage/) { # fake
+ bless $self, 'HP::Storage';
+ $self->trace(3, 'using HP::Storage');
+ } else {
+ $self->add_message(CRITICAL,
+ sprintf('unknown device%s', $self->{productname} eq 'unknown' ?
+ '' : '('.$self->{productname}.')'));
+ }
+ $self->{method} = 'snmp';
+ }
+ }
+ if ($self->{runtime}->{options}->{blacklist} &&
+ -f $self->{runtime}->{options}->{blacklist}) {
+ $self->{runtime}->{options}->{blacklist} = do {
+ local (@ARGV, $/) = $self->{runtime}->{options}->{blacklist}; <> };
+ }
+ return $self;
+}
+
+sub check_snmp_and_model {
+# uptime pruefen
+# dann whoami
+ my $self = shift;
+ if ($self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $response = {};
+ if (! -f $self->{runtime}->{plugin}->opts->snmpwalk) {
+ $self->{runtime}->{plugin}->add_message(CRITICAL,
+ sprintf 'file %s not found',
+ $self->{runtime}->{plugin}->opts->snmpwalk);
+ } elsif (-x $self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $cmd = sprintf "%s -On -v%s -c%s %s:%s 1.3.6.1.4.1.232 2>&1",
+ $self->{runtime}->{plugin}->opts->snmpwalk,
+ $self->{runtime}->{plugin}->opts->protocol,
+ $self->{runtime}->{plugin}->opts->community,
+ $self->{runtime}->{plugin}->opts->domain,
+ $self->{runtime}->{plugin}->opts->hostname;
+ open(WALK, "$cmd |");
+ while (<WALK>) {
+ if (/^.*?\.(232\.[\d\.]+) = .*?: (\-*\d+)/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ } elsif (/^.*?\.(232\.[\d\.]+) = .*?: "(.*?)"/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $response->{'1.3.6.1.4.1.'.$1} =~ s/\s+$//;
+ }
+ }
+ close WALK;
+ } else {
+ open(MESS, $self->{runtime}->{plugin}->opts->snmpwalk);
+ my $in_string = 0;
+ my $in_hex_string = 0;
+ my $hex_oid = 0;
+ while(<MESS>) {
+ chomp;
+ if ($in_hex_string && /^(([0-9a-fA-F]{2})( [0-9a-fA-F]{2})*)\s*$/) {
+ $response->{$hex_oid} .= " ".$1;
+ } elsif ($in_string) {
+ if (/(.*)"$/) {
+ $response->{$hex_oid} .= $1;
+ $in_string = 0;
+ } else {
+ $response->{$hex_oid} .= $_;
+ }
+ } elsif (/^.*?\.(232\.[\d\.]+) = .*?: (\-*\d+)\s*$/) {
+ # SNMPv2-SMI::enterprises.232.6.2.6.7.1.3.1.4 = INTEGER: 6
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $in_hex_string = 0;
+ } elsif (/^.*?\.(232\.[\d\.]+) = .*?: "(.*?)"/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $response->{'1.3.6.1.4.1.'.$1} =~ s/\s+$//;
+ $in_hex_string = 0;
+ } elsif (/^.*?\.(232\.[\d\.]+) = (\-*\d+)/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $in_hex_string = 0;
+ } elsif (/^.*?\.(232\.[\d\.]+) = "(.*?)"/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $response->{'1.3.6.1.4.1.'.$1} =~ s/\s+$//;
+ $in_hex_string = 0;
+ } elsif (/^.*?\.(232\.[\d\.]+) = STRING: "(.*?[^"])$/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $response->{'1.3.6.1.4.1.'.$1} =~ s/\s+$//;
+ $in_string = 0;
+ $in_hex_string = 0;
+ } elsif (/^.*?\.(232\.[\d\.]+) = Hex-STRING: (.*)/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $in_hex_string = 1;
+ $hex_oid = '1.3.6.1.4.1.'.$1;
+ } elsif (/^.*?\.(232\.[\d\.]+) =[ ]{1,2}Hex: (.*)/) {
+ $response->{'1.3.6.1.4.1.'.$1} = $2;
+ $in_hex_string = 1;
+ $hex_oid = '1.3.6.1.4.1.'.$1;
+ }
+ }
+ close MESS;
+ }
+ map { $response->{$_} =~ s/^\s+//; $response->{$_} =~ s/\s+$//; }
+ keys %$response;
+ $self->{rawdata} = $response;
+ $self->whoami();
+ } else {
+ if (eval "require Net::SNMP") {
+ my %params = ();
+ my $net_snmp_version = Net::SNMP->VERSION(); # 5.002000 or 6.000000
+ $params{'-translate'} = [
+ -timeticks => 0x0
+ ];
+ $params{'-hostname'} = $self->{runtime}->{plugin}->opts->hostname;
+ $params{'-domain'} = $self->{runtime}->{plugin}->opts->domain;
+ $params{'-version'} = $self->{runtime}->{plugin}->opts->protocol;
+ if ($self->{runtime}->{plugin}->opts->port) {
+ $params{'-port'} = $self->{runtime}->{plugin}->opts->port;
+ }
+ if ($self->{runtime}->{plugin}->opts->protocol eq '3') {
+ $params{'-username'} = $self->{runtime}->{plugin}->opts->username;
+ if ($self->{runtime}->{plugin}->opts->authpassword) {
+ $params{'-authpassword'} = $self->decode_password($self->{runtime}->{plugin}->opts->authpassword);
+ }
+ if ($self->{runtime}->{plugin}->opts->authprotocol) {
+ $params{'-authprotocol'} = $self->{runtime}->{plugin}->opts->authprotocol;
+ }
+ if ($self->{runtime}->{plugin}->opts->privpassword) {
+ $params{'-privpassword'} = $self->decode_password($self->{runtime}->{plugin}->opts->privpassword);
+ }
+ if ($self->{runtime}->{plugin}->opts->privprotocol) {
+ $params{'-privprotocol'} = $self->{runtime}->{plugin}->opts->privprotocol;
+ }
+ } elsif ($self->decode_password($self->{runtime}->{plugin}->opts->community) =~ /^snmpv3(.)(.+)/) {
+ my $separator = $1;
+ my ($authprotocol, $authpassword, $privprotocol, $privpassword,
+ $username, $contextengineid, $contextname) = split(/$separator/, $2);
+ $params{'-version'} = 3;
+ $params{'-username'} = $self->decode_password($username) if $username;
+ $params{'-authprotocol'} = $self->decode_password($authprotocol) if $authprotocol;
+ $params{'-authpassword'} = $self->decode_password($authpassword) if $authpassword;
+ $params{'-privprotocol'} = $self->decode_password($privprotocol) if $privprotocol;
+ $params{'-privpassword'} = $self->decode_password($privpassword) if $privpassword;
+ } else {
+ $params{'-community'} = $self->decode_password($self->{runtime}->{plugin}->opts->community);
+ }
+ $self->{runtime}->{snmpparams} = \%params;
+ my ($session, $error) = Net::SNMP->session(%params);
+ $self->{session} = $session;
+ if (! defined $session) {
+ $self->add_message(CRITICAL, 'cannot create session object (maybe wrong hostname)');
+ $self->trace(1, Data::Dumper::Dumper(\%params));
+ } else {
+ my $sysUpTime = '1.3.6.1.2.1.1.3.0';
+ my $result = $session->get_request(
+ -varbindlist => [$sysUpTime]
+ );
+ if (!defined($result)) {
+ $self->add_message(CRITICAL,
+ 'could not contact snmp agent');
+ $session->close;
+ } else {
+ $self->trace(3, 'snmp agent answered');
+ $self->whoami();
+ }
+ }
+ } else {
+ $self->add_message(CRITICAL,
+ 'could not find Net::SNMP module');
+ }
+ }
+}
+
+sub whoami {
+ my $self = shift;
+ my $productname = undef;
+ if ($self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $cpqSiProductName = '1.3.6.1.4.1.232.2.2.4.2.0';
+ my $cpqSsMibRevMajor = '1.3.6.1.4.1.232.8.1.1.0';
+ my $cpqSsBackplaneModel = '1.3.6.1.4.1.232.8.2.2.6.1.9'.'.1.1';
+ my $cpqHoMibStatusArray = '1.3.6.1.4.1.232.11.2.10.1.0';
+ if ($productname = $self->{rawdata}->{$cpqSiProductName}) {
+ if (! $productname) {
+ $self->{productname} = 'ProLiant';
+ } else {
+ $self->{productname} = $self->{rawdata}->{$cpqSiProductName};
+ }
+ } elsif (exists $self->{rawdata}->{$cpqSsBackplaneModel}) {
+ $self->{productname} = $self->{rawdata}->{$cpqSsBackplaneModel};
+ } elsif (exists $self->{rawdata}->{$cpqSsMibRevMajor}) {
+ # at least there is a CPQSTSYS-MIB
+ $self->{productname} = 'Storage'
+ } else {
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no product name (cpqsinfo-mib)');
+ }
+ } else {
+ my $cpqSiProductName = '1.3.6.1.4.1.232.2.2.4.2.0';
+ my $cpqSsMibRevMajor = '1.3.6.1.4.1.232.8.1.1.0';
+ my $cpqSsBackplaneModel = '1.3.6.1.4.1.232.8.2.2.6.1.9'.'.1.1';
+ my $cpqHoMibStatusArray = '1.3.6.1.4.1.232.11.2.10.1.0';
+ my $dummy = '1.3.6.1.2.1.1.5.0';
+ if ($productname = $self->valid_response($cpqSiProductName)) {
+ if ($productname =~ /HP P\d+ .*SAS/ && $self->valid_response($cpqHoMibStatusArray)) {
+ $self->{productname} = 'StorageWorks'
+ } elsif ($productname eq '') {
+ $self->{productname} = 'ProLiant';
+ } else {
+ $self->{productname} = $productname;
+ }
+ } elsif ($productname = $self->valid_response($cpqSsBackplaneModel)) {
+ $self->{productname} = $productname;
+ } elsif ($self->valid_response($cpqSsMibRevMajor)) {
+ # at least there is a CPQSTSYS-MIB
+ $self->{productname} = 'Storage'
+ } elsif ($self->valid_response($cpqHoMibStatusArray)) {
+ $self->{productname} = 'StorageWorks'
+ } else {
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no product name (cpqsinfo-mib)');
+ $self->{session}->close;
+ }
+ $self->trace(3, 'whoami: '.$self->{productname});
+ }
+}
+
+sub valid_response {
+ my $self = shift;
+ my $oid = shift;
+ my $result = $self->{session}->get_request(
+ -varbindlist => [$oid]
+ );
+ if (!defined($result) ||
+ ! defined $result->{$oid} ||
+ $result->{$oid} eq 'noSuchInstance' ||
+ $result->{$oid} eq 'noSuchObject' ||
+ $result->{$oid} eq 'endOfMibView') {
+ return undef;
+ } else {
+ return $result->{$oid};
+ }
+}
+
+sub trace {
+ my $self = shift;
+ my $level = shift;
+ my $message = shift;
+ if ($self->{runtime}->{options}->{verbose} >= $level) {
+ printf "%s\n", $message;
+ }
+}
+
+sub blacklist {
+ my $self = shift;
+ my $type = shift;
+ my $name = shift;
+ $self->{blacklisted} = $self->is_blacklisted($type, $name);
+}
+
+sub add_blacklist {
+ my $self = shift;
+ my $list = shift;
+ $self->{runtime}->{options}->{blacklist} = join('/',
+ (split('/', $self->{runtime}->{options}->{blacklist}), $list));
+}
+
+sub is_blacklisted {
+ my $self = shift;
+ my $type = shift;
+ my $name = shift;
+ my $blacklisted = 0;
+# $name =~ s/\:/-/g;
+ foreach my $bl_items (split(/\//, $self->{runtime}->{options}->{blacklist})) {
+ if ($bl_items =~ /^(\w+):([\:\w\-,]+)$/) {
+ my $bl_type = $1;
+ my $bl_names = $2;
+ foreach my $bl_name (split(/,/, $bl_names)) {
+ if ($bl_type eq $type && $bl_name eq $name) {
+ $blacklisted = 1;
+ }
+ }
+ } elsif ($bl_items =~ /^(\w+)$/) {
+ my $bl_type = $1;
+ if ($bl_type eq $type) {
+ $blacklisted = 1;
+ }
+ }
+ }
+ return $blacklisted;
+}
+
+sub add_message {
+ my $self = shift;
+ my $level = shift;
+ my $message = shift;
+ $self->{runtime}->{plugin}->add_message($level, $message)
+ unless $self->{blacklisted};
+ if (exists $self->{failed}) {
+ if ($level == UNKNOWN && $self->{failed} == OK) {
+ $self->{failed} = $level;
+ } elsif ($level > $self->{failed}) {
+ $self->{failed} = $level;
+ }
+ }
+}
+
+sub remove_message {
+ my $self = shift;
+ my $level = shift;
+ my $message = shift;
+ $self->{runtime}->{plugin}->remove_message($level) ;
+}
+
+sub has_failed {
+ my $self = shift;
+ return $self->{failed};
+}
+
+sub add_info {
+ my $self = shift;
+ my $info = shift;
+ $info = $self->{blacklisted} ? $info.' (blacklisted)' : $info;
+ $self->{info} = $info;
+ if (! exists $self->{runtime}->{plugin}->{info}) {
+ $self->{runtime}->{plugin}->{info} = [];
+ }
+ push(@{$self->{runtime}->{plugin}->{info}}, $info);
+}
+
+sub annotate_info {
+ my $self = shift;
+ my $annotation = shift;
+ my $lastinfo = pop(@{$self->{runtime}->{plugin}->{info}});
+ $lastinfo .= sprintf ' (%s)', $annotation;
+ push(@{$self->{runtime}->{plugin}->{info}}, $lastinfo);
+}
+
+sub add_extendedinfo {
+ my $self = shift;
+ my $info = shift;
+ $self->{extendedinfo} = $info;
+ return if ! $self->{runtime}->{options}->{extendedinfo};
+ if (! exists $self->{runtime}->{plugin}->{extendedinfo}) {
+ $self->{runtime}->{plugin}->{extendedinfo} = [];
+ }
+ push(@{$self->{runtime}->{plugin}->{extendedinfo}}, $info);
+}
+
+sub get_extendedinfo {
+ my $self = shift;
+ if (! exists $self->{runtime}->{plugin}->{extendedinfo}) {
+ $self->{runtime}->{plugin}->{extendedinfo} = [];
+ }
+ return join(' ', @{$self->{runtime}->{plugin}->{extendedinfo}});
+}
+
+sub add_summary {
+ my $self = shift;
+ my $summary = shift;
+ if (! exists $self->{runtime}->{plugin}->{summary}) {
+ $self->{runtime}->{plugin}->{summary} = [];
+ }
+ push(@{$self->{runtime}->{plugin}->{summary}}, $summary);
+}
+
+sub get_summary {
+ my $self = shift;
+ if (! exists $self->{runtime}->{plugin}->{summary}) {
+ $self->{runtime}->{plugin}->{summary} = [];
+ }
+ return join(', ', @{$self->{runtime}->{plugin}->{summary}});
+}
+
+sub dumper {
+ my $self = shift;
+ my $object = shift;
+ my $run = $object->{runtime};
+ delete $object->{runtime};
+ printf STDERR "%s\n", Data::Dumper::Dumper($object);
+ $object->{runtime} = $run;
+}
+
+sub decode_password {
+ my $self = shift;
+ my $password = shift;
+ if ($password && $password =~ /^rfc3986:\/\/(.*)/) {
+ $password = $1;
+ $password =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
+ }
+ return $password;
+}
+
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;
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/StorageWorks.pm b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/StorageWorks.pm
new file mode 100755
index 0000000..5792961
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/StorageWorks.pm
@@ -0,0 +1,157 @@
+package HP::StorageWorks;
+
+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->{serial} = 'unknown';
+ $self->{product} = 'unknown';
+ $self->{romversion} = 'unknown';
+ $self->collect();
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ $self->set_serial();
+ $self->overall_init();
+ $self->overall_check();
+ }
+}
+
+sub overall_init {
+ my $self = shift;
+ my %params = @_;
+ my $snmpwalk = $self->{rawdata};
+ my $cpqHoMibStatusArray = '1.3.6.1.4.1.232.11.2.10.1.0';
+ $self->{cpqHoMibStatusArray} = SNMP::Utils::get_object(
+ $snmpwalk, $cpqHoMibStatusArray);
+ if ($self->{cpqHoMibStatusArray} =~ /^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
+ $self->{cpqHoMibStatusArray} = 1 * $2;
+ } elsif ($self->{cpqHoMibStatusArray} =~ /^0x.*(\d\d)(\d\d)(\d\d)(\d\d)$/) {
+ $self->{cpqHoMibStatusArray} = 1 * $2;
+ }
+}
+
+sub overall_check {
+ my $self = shift;
+ if ($self->{cpqHoMibStatusArray} == 4) {
+ $self->add_info('overall status is failed');
+ $self->add_message(CRITICAL, 'overall status is failed');
+ } elsif ($self->{cpqHoMibStatusArray} == 3) {
+ $self->add_info('overall status is degraded');
+ $self->add_message(WARNING, 'overall status is degraded');
+ } elsif ($self->{cpqHoMibStatusArray} == 2) {
+ $self->add_info('overall status is ok');
+ $self->add_message(OK, 'overall status is ok');
+ } elsif ($self->{cpqHoMibStatusArray} == 1) {
+ $self->add_info('overall status is other');
+ $self->add_message(UNKNOWN, 'overall status is other');
+ }
+}
+
+sub identify {
+ my $self = shift;
+ return $self->{productname};
+}
+
+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 collect {
+ my $self = shift;
+ if ($self->{runtime}->{plugin}->opts->snmpwalk) {
+ my $cpqHoMibStatusArray = '1.3.6.1.4.1.232.11.2.10.1.0';
+ if (! exists $self->{rawdata}->{$cpqHoMibStatusArray}) {
+ $self->add_message(CRITICAL,
+ 'snmpwalk returns no health data (cpqhost-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}));
+ }
+ if (! $self->{runtime}->{plugin}->check_messages()) {
+ # snmp peer is alive
+ $self->trace(2, sprintf "Protocol is %s",
+ $self->{runtime}->{snmpparams}->{'-version'});
+ my $cpqHoMibStatusArray = '1.3.6.1.4.1.232.11.2.10.1.0';
+ $session->translate;
+ my $tic = time;
+ my $response = $session->get_request(
+ -varbindlist => [$cpqHoMibStatusArray]
+ );
+ my $tac = time;
+ $self->trace(2, sprintf "%03d seconds for walk cpqHoMibStatusArray (%d oids)",
+ $tac - $tic, scalar(keys %{$response}));
+ $session->close;
+ 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;