# Initialization and global variables
#---------------------------------------------------------------------
-# Small subrouting to collect any perl warnings during execution
+# Small subroutine to collect any perl warnings during execution
sub collect_perl_warning {
push @perl_warnings, [@_];
}
# Version and similar info
$NAME = 'check_openmanage';
-$VERSION = '3.5.4-beta6';
+$VERSION = '3.5.6-beta6';
$AUTHOR = 'Trond H. Amundsen';
$CONTACT = 't.h.amundsen@usit.uio.no';
-i, --info Prefix any alerts with the service tag
-e, --extinfo Append system info to alerts
-s, --state Prefix alerts with alert state
- --short-state Prefix alerts with alert state (abbreviated)
+ -S, --short-state Prefix alerts with alert state (abbreviated)
-o, --okinfo Verbosity when check result is OK
- --htmlinfo HTML output with clickable links
+ -I, --htmlinfo HTML output with clickable links
CHECK CONTROL AND BLACKLISTING:
'privpassword' => undef, # SMNP v3
'privkey' => undef, # SMNP v3
'privprotocol' => undef, # SMNP v3
+ 'use_get_table' => 0,
);
# Get options
'p|perfdata:s' => \$opt{perfdata},
'i|info' => \$opt{info},
'e|extinfo' => \$opt{extinfo},
- 'htmlinfo:s' => \$opt{htmlinfo},
+ 'I|htmlinfo:s' => \$opt{htmlinfo},
'postmsg=s' => \$opt{postmsg},
's|state' => \$opt{state},
- 'short-state' => \$opt{shortstate},
+ 'S|short-state' => \$opt{shortstate},
'o|ok-info=i' => \$opt{okinfo},
- 'l|linebreak=s' => \$opt{linebreak},
+ 'linebreak=s' => \$opt{linebreak},
'a|all' => \$opt{all},
'only=s' => \$opt{only},
'omreport=s' => \$opt{omreport},
'privpassword=s' => \$opt{privpassword},
'privkey=s' => \$opt{privkey},
'privprotocol=s' => \$opt{privprotocol},
+ 'use-get_table' => \$opt{use_get_table},
) or do { print $USAGE; exit $E_UNKNOWN };
# If user requested help
# Identify blade. Older models (4th and 5th gen models) and/or old
# OMSA (4.x) don't have this OID. If we get "noSuchInstance" or
# similar, we assume that this isn't a blade
- if ($result->{$DellBaseBoardType} eq '3') {
+ if (exists $result->{$DellBaseBoardType} && $result->{$DellBaseBoardType} eq '3') {
$blade = 1;
}
return;
| No\scontrollers\sfound # No RAID controller
| No\sbattery\sprobes\sfound\son\sthis\ssystem # No battery probes
| Invalid\scommand:\spwrmonitoring # Older OMSAs lack this command(?)
-# | Current\sprobes\snot\sfound # No power monitoring capability
+# | Current\sprobes\snot\sfound # OMSA + RHEL5.4 bug
}xms;
# Errors that are OK on blade servers
# Gets the output from SNMP result according to the OIDs checked
sub get_snmp_output {
my ($result,$oidref) = @_;
+ my @temp = ();
my @output = ();
foreach my $oid (keys %{ $result }) {
- my @dummy = split /\./xms, $oid;
- my $id = pop @dummy;
- --$id;
- my $foo = join q{.}, @dummy;
- if (exists $oidref->{$foo}) {
- $output[$id]{$oidref->{$foo}} = $result->{$oid};
+ my $short = $oid;
+ $short =~ s{\s}{}gxms; # remove whitespace
+ $short =~ s{\A (.+) \. (\d+) \z}{$1}xms; # remove last number
+ my $id = $2;
+ if (exists $oidref->{$short}) {
+ $temp[$id]{$oidref->{$short}} = $result->{$oid};
}
}
+
+ # Remove any empty indexes
+ foreach my $out (@temp) {
+ if (defined $out) {
+ push @output, $out;
+ }
+ }
+
return \@output;
}
# STORAGE: Check controllers
#-----------------------------------------
sub check_controllers {
+ return if blacklisted('ctrl', 'all');
+
my $id = undef;
my $nexus = undef;
my $name = undef;
my $mindr = undef;
my $firmware = undef;
my $driver = undef;
- my $minstdr = undef; # Minimum required Storport driver version (whats this?)
- my $stdr = undef; # Storport driver version (whats this?)
+ my $minstdr = undef; # Minimum required Storport driver version
+ my $stdr = undef; # Storport driver version
my @output = ();
if ($snmp) {
$minstdr = exists $out->{'FIXME_StorportMinDriverVersion'}
? $out->{FIXME_StorportMinDriverVersion} : undef;
$stdr = exists $out->{FIXME_StorportDriverVersion}
- ? $out->{FIXME_StorportDriverVersion} : 'N/A';
+ ? $out->{FIXME_StorportDriverVersion} : undef;
$nexus = convert_nexus($out->{controllerNexusID});
}
else {
? $out->{'Firmware Version'} : 'N/A';
$driver = $out->{'Driver Version'} ne 'Not Applicable'
? $out->{'Driver Version'} : 'N/A';
- $minstdr = $out->{'Minimum Required Storport Driver Version'} ne 'Not Applicable'
+ $minstdr = (exists $out->{'Minimum Required Storport Driver Version'}
+ and $out->{'Minimum Required Storport Driver Version'} ne 'Not Applicable')
? $out->{'Minimum Required Storport Driver Version'} : undef;
- $stdr = $out->{'Storport Driver Version'} ne 'Not Applicable'
- ? $out->{'Storport Driver Version'} : 'N/A';
+ $stdr = (exists $out->{'Storport Driver Version'}
+ and $out->{'Storport Driver Version'} ne 'Not Applicable')
+ ? $out->{'Storport Driver Version'} : undef;
$nexus = $id;
}
$sysinfo{'controller'}{$id}{'name'} = $name;
$sysinfo{'controller'}{$id}{'driver'} = $driver;
$sysinfo{'controller'}{$id}{'firmware'} = $firmware;
+ $sysinfo{'controller'}{$id}{'storport'} = $stdr;
next CTRL if blacklisted('ctrl', $nexus);
}
# Ok
if ($status eq 'Ok' or ($status eq 'Non-Critical'
- and (defined $minfw or defined $mindr))) {
+ and (defined $minfw or defined $mindr or defined $minstdr))) {
my $msg = sprintf 'Controller %d [%s] is %s',
$id, $name, $state;
report('storage', $msg, $E_OK, $nexus);
#-----------------------------------------
sub check_physical_disks {
return if $#controllers == -1;
+ return if blacklisted('pdisk', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.4.1.24' => 'arrayDiskComponentStatus',
'1.3.6.1.4.1.674.10893.1.20.130.4.1.26' => 'arrayDiskNexusID',
'1.3.6.1.4.1.674.10893.1.20.130.4.1.31' => 'arrayDiskSmartAlertIndication',
- '1.3.6.1.4.1.674.10893.1.20.130.5.1.5' => 'arrayDiskEnclosureConnectionEnclosureNumber',
'1.3.6.1.4.1.674.10893.1.20.130.5.1.7' => 'arrayDiskEnclosureConnectionControllerNumber',
+ '1.3.6.1.4.1.674.10893.1.20.130.6.1.7' => 'arrayDiskChannelConnectionControllerNumber',
);
- my $result = $snmp_session->get_entries(-columns => [keys %pdisk_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $arrayDiskTable = '1.3.6.1.4.1.674.10893.1.20.130.4';
+ my $arrayDiskEnclosureConnectionControllerNumber = '1.3.6.1.4.1.674.10893.1.20.130.5.1.7';
+ my $arrayDiskChannelConnectionControllerNumber = '1.3.6.1.4.1.674.10893.1.20.130.6.1.7';
+
+ $result = $snmp_session->get_table(-baseoid => $arrayDiskTable);
+ my $ext1 = $snmp_session->get_table(-baseoid => $arrayDiskEnclosureConnectionControllerNumber);
+ my $ext2 = $snmp_session->get_table(-baseoid => $arrayDiskChannelConnectionControllerNumber);
+
+ if (defined $result) {
+ defined $ext1 && map { $$result{$_} = $$ext1{$_} } keys %{ $ext1 };
+ defined $ext2 && map { $$result{$_} = $$ext2{$_} } keys %{ $ext2 };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %pdisk_oid]);
+ }
if (!defined $result) {
printf "SNMP ERROR [storage / pdisk]: %s.\n", $snmp_session->error;
}
else {
foreach my $c (@controllers) {
+ # This blacklists disks with broken firmware, which includes
+ # illegal XML characters that makes openmanage choke on itself
+ next if blacklisted('ctrl_pdisk', $c);
+
push @output, @{ run_omreport("storage pdisk controller=$c") };
map_item('ctrl', $c, \@output);
}
foreach my $out (@output) {
if ($snmp) {
$name = $out->{arrayDiskName};
- if ($name =~ m{.*\d+:\d+:\d+\z}xms) {
+ if (exists $out->{arrayDiskEnclosureID}) {
$id = join q{:}, ($out->{arrayDiskChannel}, $out->{arrayDiskEnclosureID},
- $out->{arrayDiskTargetID});
+ $out->{arrayDiskTargetID});
}
else {
$id = join q{:}, ($out->{arrayDiskChannel}, $out->{arrayDiskTargetID});
$status = $snmp_status{$out->{arrayDiskComponentStatus}};
$fpred = $out->{arrayDiskSmartAlertIndication} == 2 ? 1 : 0;
$progr = q{};
- $ctrl = exists $out->{arrayDiskEnclosureConnectionControllerNumber}
- ? $out->{arrayDiskEnclosureConnectionControllerNumber} - 1
- : -1;
$nexus = convert_nexus($out->{arrayDiskNexusID});
$vendor = $out->{arrayDiskVendor};
$product = $out->{arrayDiskProductID};
$capacity = $out->{arrayDiskLengthInMB} * 1024**2;
+ if (exists $out->{arrayDiskEnclosureConnectionControllerNumber}) {
+ $ctrl = $out->{arrayDiskEnclosureConnectionControllerNumber} - 1;
+ }
+ elsif (exists $out->{arrayDiskChannelConnectionControllerNumber}) {
+ $ctrl = $out->{arrayDiskChannelConnectionControllerNumber} - 1;
+ }
+ else {
+ $ctrl = -1;
+ }
}
else {
$id = $out->{'ID'};
#-----------------------------------------
sub check_virtual_disks {
return if $#controllers == -1;
+ return if blacklisted('vdisk', 'all');
my $id = undef;
my $name = undef;
'1.3.6.1.4.1.674.10893.1.20.140.1.1.20' => 'virtualDiskComponentStatus',
'1.3.6.1.4.1.674.10893.1.20.140.1.1.21' => 'virtualDiskNexusID',
);
- my $result = $snmp_session->get_entries(-columns => [keys %vdisk_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $virtualDiskTable = '1.3.6.1.4.1.674.10893.1.20.140.1';
+ $result = $snmp_session->get_table(-baseoid => $virtualDiskTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %vdisk_oid]);
+ }
# No logical drives is OK
return if !defined $result;
#-----------------------------------------
sub check_cache_battery {
return if $#controllers == -1;
+ return if blacklisted('bat', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.15.1.12' => 'batteryLearnState',
'1.3.6.1.4.1.674.10893.1.20.130.16.1.5' => 'batteryConnectionControllerNumber',
);
- my $result = $snmp_session->get_entries(-columns => [keys %bat_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $batteryTable = '1.3.6.1.4.1.674.10893.1.20.130.15';
+ my $batteryConnectionTable = '1.3.6.1.4.1.674.10893.1.20.130.16';
+
+ $result = $snmp_session->get_table(-baseoid => $batteryTable);
+ my $ext = $snmp_session->get_table(-baseoid => $batteryConnectionTable);
+
+ if (defined $result) {
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %bat_oid]);
+ }
# No cache battery is OK
return if !defined $result;
#-----------------------------------------
sub check_connectors {
return if $#controllers == -1;
+ return if blacklisted('conn', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.2.1.9' => 'channelNexusID',
'1.3.6.1.4.1.674.10893.1.20.130.2.1.11' => 'channelBusType',
);
- my $result = $snmp_session->get_entries(-columns => [keys %conn_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $channelTable = '1.3.6.1.4.1.674.10893.1.20.130.2';
+ $result = $snmp_session->get_table(-baseoid => $channelTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %conn_oid]);
+ }
if (!defined $result) {
printf "SNMP ERROR [storage / channel]: %s.\n", $snmp_session->error;
# STORAGE: Check enclosures
#-----------------------------------------
sub check_enclosures {
+ return if blacklisted('encl', 'all');
+
my $id = undef;
my $nexus = undef;
my $name = undef;
'1.3.6.1.4.1.674.10893.1.20.130.3.1.25' => 'enclosureNexusID',
'1.3.6.1.4.1.674.10893.1.20.130.3.1.26' => 'enclosureFirmwareVersion',
);
- my $result = $snmp_session->get_entries(-columns => [keys %encl_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $enclosureTable = '1.3.6.1.4.1.674.10893.1.20.130.3';
+ $result = $snmp_session->get_table(-baseoid => $enclosureTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %encl_oid]);
+ }
# No enclosures is OK
return if !defined $result;
#-----------------------------------------
sub check_enclosure_fans {
return if $#controllers == -1;
+ return if blacklisted('encl_fan', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.8.1.4' => 'fanConnectionEnclosureName',
'1.3.6.1.4.1.674.10893.1.20.130.8.1.5' => 'fanConnectionEnclosureNumber',
);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $fanTable = '1.3.6.1.4.1.674.10893.1.20.130.7';
+ my $fanConnectionTable = '1.3.6.1.4.1.674.10893.1.20.130.8';
+
+ $result = $snmp_session->get_table(-baseoid => $fanTable);
+ my $ext = $snmp_session->get_table(-baseoid => $fanConnectionTable);
- my $result = $snmp_session->get_entries(-columns => [keys %fan_oid]);
+ if (defined $result) {
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %fan_oid]);
+ }
# No enclosure fans is OK
return if !defined $result;
#-----------------------------------------
sub check_enclosure_pwr {
return if $#controllers == -1;
+ return if blacklisted('encl_ps', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.10.1.4' => 'powerSupplyConnectionEnclosureName',
'1.3.6.1.4.1.674.10893.1.20.130.10.1.5' => 'powerSupplyConnectionEnclosureNumber',
);
- my $result = $snmp_session->get_entries(-columns => [keys %ps_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $powerSupplyTable = '1.3.6.1.4.1.674.10893.1.20.130.9';
+ my $powerSupplyConnectionTable = '1.3.6.1.4.1.674.10893.1.20.130.10';
+
+ $result = $snmp_session->get_table(-baseoid => $powerSupplyTable);
+ my $ext = $snmp_session->get_table(-baseoid => $powerSupplyConnectionTable);
+
+ if (defined $result) {
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %ps_oid]);
+ }
# No enclosure power supplies is OK
return if !defined $result;
#-----------------------------------------
sub check_enclosure_temp {
return if $#controllers == -1;
+ return if blacklisted('encl_temp', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.12.1.4' => 'temperatureConnectionEnclosureName',
'1.3.6.1.4.1.674.10893.1.20.130.12.1.5' => 'temperatureConnectionEnclosureNumber',
);
- my $result = $snmp_session->get_entries(-columns => [keys %temp_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $temperatureProbeTable = '1.3.6.1.4.1.674.10893.1.20.130.11';
+ my $temperatureConnectionTable = '1.3.6.1.4.1.674.10893.1.20.130.12';
+
+ $result = $snmp_session->get_table(-baseoid => $temperatureProbeTable);
+ my $ext = $snmp_session->get_table(-baseoid => $temperatureConnectionTable);
+
+ if (defined $result) {
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %temp_oid]);
+ }
# No enclosure temperature probes is OK
return if !defined $result;
#-----------------------------------------
sub check_enclosure_emms {
return if $#controllers == -1;
+ return if blacklisted('encl_emm', 'all');
my $id = undef;
my $nexus = undef;
'1.3.6.1.4.1.674.10893.1.20.130.14.1.4' => 'enclosureManagementModuleConnectionEnclosureName',
'1.3.6.1.4.1.674.10893.1.20.130.14.1.5' => 'enclosureManagementModuleConnectionEnclosureNumber',
);
- my $result = $snmp_session->get_entries(-columns => [keys %emms_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $enclosureManagementModuleTable = '1.3.6.1.4.1.674.10893.1.20.130.13';
+ my $enclosureManagementModuleConnectionTable = '1.3.6.1.4.1.674.10893.1.20.130.14';
+
+ $result = $snmp_session->get_table(-baseoid => $enclosureManagementModuleTable);
+ my $ext = $snmp_session->get_table(-baseoid => $enclosureManagementModuleConnectionTable);
+
+ if (defined $result) {
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %emms_oid]);
+ }
# No enclosure EMMs is OK
return if !defined $result;
# CHASSIS: Check memory modules
#-----------------------------------------
sub check_memory {
+ return if blacklisted('dimm', 'all');
+
my $index = undef;
my $status = undef;
my $location = undef;
'1.3.6.1.4.1.674.10892.1.1100.50.1.14.1' => 'memoryDeviceSize',
'1.3.6.1.4.1.674.10892.1.1100.50.1.20.1' => 'memoryDeviceFailureModes',
);
- my $result = $snmp_session->get_entries(-columns => [keys %dimm_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $memoryDeviceTable = '1.3.6.1.4.1.674.10892.1.1100.50.1';
+ $result = $snmp_session->get_table(-baseoid => $memoryDeviceTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %dimm_oid]);
+ }
if (!defined $result) {
printf "SNMP ERROR [memory]: %s.\n", $snmp_session->error;
# CHASSIS: Check fans
#-----------------------------------------
sub check_fans {
+ return if blacklisted('fan', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
'1.3.6.1.4.1.674.10892.1.700.12.1.10.1' => 'coolingDeviceUpperCriticalThreshold',
'1.3.6.1.4.1.674.10892.1.700.12.1.11.1' => 'coolingDeviceUpperNonCriticalThreshold',
);
- my $result = $snmp_session->get_entries(-columns => [keys %cool_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $coolingDeviceTable = '1.3.6.1.4.1.674.10892.1.700.12.1';
+ $result = $snmp_session->get_table(-baseoid => $coolingDeviceTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %cool_oid]);
+ }
if ($blade && !defined $result) {
return 0;
# CHASSIS: Check power supplies
#-----------------------------------------
sub check_powersupplies {
+ return if blacklisted('ps', 'all');
+
my $index = undef;
my $status = undef;
my $type = undef;
'1.3.6.1.4.1.674.10892.1.600.12.1.11.1' => 'powerSupplySensorState',
'1.3.6.1.4.1.674.10892.1.600.12.1.12.1' => 'powerSupplyConfigurationErrorType',
);
- my $result = $snmp_session->get_entries(-columns => [keys %ps_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $powerDeviceTable = '1.3.6.1.4.1.674.10892.1.600.12.1';
+ $result = $snmp_session->get_table(-baseoid => $powerDeviceTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %ps_oid]);
+ }
# No instrumented PSU is OK (blades, low-end servers)
return 0 if !defined $result;
# CHASSIS: Check temperatures
#-----------------------------------------
sub check_temperatures {
+ return if blacklisted('temp', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
# CHASSIS: Check processors
#-----------------------------------------
sub check_processors {
+ return if blacklisted('cpu', 'all');
+
my $index = undef;
my $status = undef;
my $state = undef;
'1.3.6.1.4.1.674.10892.1.1100.32.1.5.1' => 'processorDeviceStatusStatus',
'1.3.6.1.4.1.674.10892.1.1100.32.1.6.1' => 'processorDeviceStatusReading',
);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $processorDeviceTable = '1.3.6.1.4.1.674.10892.1.1100.30.1';
+ my $processorDeviceStatusTable = '1.3.6.1.4.1.674.10892.1.1100.32.1';
+
+ $result = $snmp_session->get_table(-baseoid => $processorDeviceTable);
+ my $ext = $snmp_session->get_table(-baseoid => $processorDeviceStatusTable);
- my $result = $snmp_session->get_entries(-columns => [keys %cpu_oid]);
+ defined $ext && map { $$result{$_} = $$ext{$_} } keys %{ $ext };
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %cpu_oid]);
+ }
if (!defined $result) {
printf "SNMP ERROR [processors]: %s.\n", $snmp_session->error;
# CHASSIS: Check voltage probes
#-----------------------------------------
sub check_volts {
+ return if blacklisted('volt', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
foreach my $out (@output) {
if ($snmp) {
$index = $out->{voltageProbeIndex} - 1;
- $status = $snmp_status{$out->{voltageProbeStatus}};
+ $status = $snmp_probestatus{$out->{voltageProbeStatus}};
$reading = exists $out->{voltageProbeReading}
? sprintf('%.3f V', $out->{voltageProbeReading}/1000)
: $volt_discrete_reading{$out->{voltageProbeDiscreteReading}};
# CHASSIS: Check batteries
#-----------------------------------------
sub check_batteries {
+ return if blacklisted('bp', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
'1.3.6.1.4.1.674.10892.1.600.50.1.6.1' => 'batteryReading',
'1.3.6.1.4.1.674.10892.1.600.50.1.7.1' => 'batteryLocationName',
);
- my $result = $snmp_session->get_entries(-columns => [keys %bat_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $batteryTable = '1.3.6.1.4.1.674.10892.1.600.50.1';
+ $result = $snmp_session->get_table(-baseoid => $batteryTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %bat_oid]);
+ }
# No batteries is OK
return 0 if !defined $result;
# CHASSIS: Check amperage probes (power monitoring)
#-----------------------------------------
sub check_pwrmonitoring {
+ return if blacklisted('amp', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
'1.3.6.1.4.1.674.10892.1.600.30.1.11.1' => 'amperageProbeUpperNonCriticalThreshold',
'1.3.6.1.4.1.674.10892.1.600.30.1.16.1' => 'amperageProbeDiscreteReading',
);
- my $result = $snmp_session->get_entries(-columns => [keys %amp_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $amperageProbeTable = '1.3.6.1.4.1.674.10892.1.600.30.1';
+ $result = $snmp_session->get_table(-baseoid => $amperageProbeTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %amp_oid]);
+ }
# No pwrmonitoring is OK
return 0 if !defined $result;
# CHASSIS: Check intrusion
#-----------------------------------------
sub check_intrusion {
+ return if blacklisted('intr', 'all');
+
my $index = undef;
my $status = undef;
my $reading = undef;
'1.3.6.1.4.1.674.10892.1.300.70.1.5.1' => 'intrusionStatus',
'1.3.6.1.4.1.674.10892.1.300.70.1.6.1' => 'intrusionReading',
);
- my $result = $snmp_session->get_entries(-columns => [keys %int_oid]);
+ my $result = undef;
+ if ($opt{use_get_table}) {
+ my $intrusionTable = '1.3.6.1.4.1.674.10892.1.300.70.1';
+ $result = $snmp_session->get_table(-baseoid => $intrusionTable);
+ }
+ else {
+ $result = $snmp_session->get_entries(-columns => [keys %int_oid]);
+ }
# No intrusion is OK
return 0 if !defined $result;
my @storageprint = ();
foreach my $id (sort keys %{ $sysinfo{controller} }) {
chomp $sysinfo{controller}{$id}{driver};
- push @storageprint, sprintf q{----- CTRL %s (%s): FW='%s', DR='%s'},
+ my $msg = sprintf q{----- Ctrl %s [%s]: Fw='%s', Dr='%s'},
$sysinfo{controller}{$id}{id}, $sysinfo{controller}{$id}{name},
$sysinfo{controller}{$id}{firmware}, $sysinfo{controller}{$id}{driver};
+ if (defined $sysinfo{controller}{$id}{storport}) {
+ $msg .= sprintf q{, Storport: '%s'}, $sysinfo{controller}{$id}{storport};
+ }
+ push @storageprint, $msg;
}
foreach my $id (sort keys %{ $sysinfo{enclosure} }) {
- push @storageprint, sprintf q{----- ENCL %s (%s): FW='%s'},
+ push @storageprint, sprintf q{----- Encl %s [%s]: Fw='%s'},
$sysinfo{enclosure}{$id}->{id}, $sysinfo{enclosure}{$id}->{name},
$sysinfo{enclosure}{$id}->{firmware};
}