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/BladeSystem.pm
diff options
context:
space:
mode:
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm')
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/check_hpasm/check_hpasm-4.8/plugins-scripts/HP/BladeSystem.pm240
1 files changed, 240 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};
+}
+