From fe365d4115a027ef93db33e83d740f970a815127 Mon Sep 17 00:00:00 2001 From: qgarnier Date: Fri, 15 Jan 2021 16:21:57 +0100 Subject: [PATCH] Fix #2517 (#2518) --- .../rfc1628/snmp/mode/batterystatus.pm | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/centreon-plugins/hardware/ups/standard/rfc1628/snmp/mode/batterystatus.pm b/centreon-plugins/hardware/ups/standard/rfc1628/snmp/mode/batterystatus.pm index 5717b4f61..4c5d80722 100644 --- a/centreon-plugins/hardware/ups/standard/rfc1628/snmp/mode/batterystatus.pm +++ b/centreon-plugins/hardware/ups/standard/rfc1628/snmp/mode/batterystatus.pm @@ -24,7 +24,7 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub custom_status_output { my ($self, %options) = @_; @@ -35,7 +35,8 @@ sub custom_status_output { sub custom_load_output { my ($self, %options) = @_; - return sprintf("charge remaining: %s%% (%s minutes remaining)", + return sprintf( + "charge remaining: %s%% (%s minutes remaining)", $self->{result_values}->{charge_remain}, $self->{result_values}->{minute_remain} ); @@ -49,54 +50,59 @@ sub set_counters { ]; $self->{maps_counters}->{global} = [ - { label => 'status', threshold => 0, set => { + { + label => 'status', + type => 2, + unknown_default => '%{status} =~ /unknown/i', + warning_default => '%{status} =~ /low/i', + critical_default => '%{status} =~ /depleted/i', + set => { key_values => [ { name => 'status' } ], - closure_custom_calc => \&catalog_status_calc, closure_custom_output => $self->can('custom_status_output'), closure_custom_perfdata => sub { return 0; }, - closure_custom_threshold_check => \&catalog_status_threshold, + closure_custom_threshold_check => \&catalog_status_threshold_ng } }, { label => 'charge-remaining', nlabel => 'battery.charge.remaining.percent', set => { key_values => [ { name => 'charge_remain' }, { name => 'minute_remain' } ], closure_custom_output => $self->can('custom_load_output'), perfdatas => [ - { label => 'load', value => 'charge_remain', template => '%s', min => 0, max => 100, unit => '%' }, - ], + { label => 'load', template => '%s', min => 0, max => 100, unit => '%' } + ] } }, { label => 'charge-remaining-minutes', nlabel => 'battery.charge.remaining.minutes', display_ok => 0, set => { key_values => [ { name => 'minute_remain' } ], output_template => 'minutes remaining: %s', perfdatas => [ - { label => 'charge_remaining', value => 'minute_remain', template => '%s', min => 0, unit => 'minutes' }, - ], + { label => 'charge_remaining', template => '%s', min => 0, unit => 'minutes' } + ] } }, { label => 'current', nlabel => 'battery.current.ampere', display_ok => 0, set => { key_values => [ { name => 'current', no_value => 0 } ], output_template => 'current: %s A', perfdatas => [ - { label => 'current', value => 'current', template => '%s', min => 0, unit => 'A' }, - ], + { label => 'current', template => '%s', min => 0, unit => 'A' } + ] } }, { label => 'voltage', nlabel => 'battery.voltage.volt', display_ok => 0, set => { key_values => [ { name => 'voltage', no_value => 0 } ], output_template => 'voltage: %s V', perfdatas => [ - { label => 'voltage', value => 'voltage', template => '%s', unit => 'V' }, - ], + { label => 'voltage', template => '%s', unit => 'V' } + ] } }, { label => 'temperature', nlabel => 'battery.temperature.celsius', display_ok => 0, set => { key_values => [ { name => 'temperature', no_value => 0 } ], output_template => 'temperature: %s C', perfdatas => [ - { label => 'temp', value => 'temperature', template => '%s', unit => 'C' }, - ], + { label => 'temp', template => '%s', unit => 'C' } + ] } - }, + } ]; } @@ -105,22 +111,12 @@ sub new { my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - $options{options}->add_options(arguments => { - 'unknown-status:s' => { name => 'unknown_status', default => '%{status} =~ /unknown/i' }, - 'warning-status:s' => { name => 'warning_status', default => '%{status} =~ /low/i' }, - 'critical-status:s' => { name => 'critical_status', default => '%{status} =~ /depleted/i' }, + $options{options}->add_options(arguments => { }); return $self; } -sub check_options { - my ($self, %options) = @_; - $self->SUPER::check_options(%options); - - $self->change_macros(macros => ['unknown_status', 'warning_status', 'critical_status']); -} - my $map_status = { 1 => 'unknown', 2 => 'normal', 3 => 'low', 4 => 'depleted' }; my $mapping = { @@ -129,7 +125,7 @@ my $mapping = { upsEstimatedChargeRemaining => { oid => '.1.3.6.1.2.1.33.1.2.4' }, upsBatteryVoltage => { oid => '.1.3.6.1.2.1.33.1.2.5' }, # in dV upsBatteryCurrent => { oid => '.1.3.6.1.2.1.33.1.2.6' }, # in dA - upsBatteryTemperature => { oid => '.1.3.6.1.2.1.33.1.2.7' }, # in degrees Centigrade + upsBatteryTemperature => { oid => '.1.3.6.1.2.1.33.1.2.7' } # in degrees Centigrade }; sub manage_selection { @@ -137,7 +133,12 @@ sub manage_selection { my $oid_upsBattery = '.1.3.6.1.2.1.33.1.2'; my $snmp_result = $options{snmp}->get_table(oid => $oid_upsBattery, nothing_quit => 1); - my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => '0'); + + # some ups doesn't set the instance... + my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result); + if (!defined($result->{upsBatteryStatus})) { + $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => 0); + } $self->{global} = { current => (defined($result->{upsBatteryCurrent}) && $result->{upsBatteryCurrent} =~ /\d/) ? $result->{upsBatteryCurrent} * 0.1 : 0, @@ -145,7 +146,7 @@ sub manage_selection { temperature => $result->{upsBatteryTemperature}, minute_remain => (defined($result->{upsEstimatedMinutesRemaining}) && $result->{upsEstimatedMinutesRemaining} =~ /\d/) ? $result->{upsEstimatedMinutesRemaining} : 'unknown', charge_remain => (defined($result->{upsEstimatedChargeRemaining}) && $result->{upsEstimatedChargeRemaining} =~ /\d/) ? $result->{upsEstimatedChargeRemaining} : undef, - status => $result->{upsBatteryStatus}, + status => $result->{upsBatteryStatus} }; }