From ef48f619398f312ae235892a453e97f43670a886 Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Thu, 26 Dec 2019 11:57:27 +0100 Subject: [PATCH] enhance apc input-lines --- .../hardware/ups/apc/snmp/mode/inputlines.pm | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/centreon-plugins/hardware/ups/apc/snmp/mode/inputlines.pm b/centreon-plugins/hardware/ups/apc/snmp/mode/inputlines.pm index e53ccdd1f..5934b70fe 100644 --- a/centreon-plugins/hardware/ups/apc/snmp/mode/inputlines.pm +++ b/centreon-plugins/hardware/ups/apc/snmp/mode/inputlines.pm @@ -24,51 +24,43 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc); sub custom_status_output { my ($self, %options) = @_; - - my $msg = sprintf("Last input line fail cause is '%s'", $self->{result_values}->{last_cause}); - return $msg; -} -sub custom_status_calc { - my ($self, %options) = @_; - - $self->{result_values}->{last_cause} = $options{new_datas}->{$self->{instance} . '_upsAdvInputLineFailCause'}; - return 0; + return sprintf("last input line fail cause is '%s'", $self->{result_values}->{last_cause}); } sub set_counters { my ($self, %options) = @_; - + $self->{maps_counters_type} = [ { name => 'global', type => 0 }, ]; - + $self->{maps_counters}->{global} = [ { label => 'voltage', set => { - key_values => [ { name => 'upsAdvInputLineVoltage' } ], - output_template => 'Voltage: %s V', + key_values => [ { name => 'voltage' } ], + output_template => 'voltage: %s V', perfdatas => [ - { label => 'voltage', value => 'upsAdvInputLineVoltage_absolute', template => '%s', + { label => 'voltage', value => 'voltage_absolute', template => '%s', unit => 'V' }, ], } }, { label => 'frequence', set => { - key_values => [ { name => 'upsAdvInputFrequency' } ], - output_template => 'Frequence: %s Hz', + key_values => [ { name => 'frequency' } ], + output_template => 'frequence: %s Hz', perfdatas => [ - { label => 'frequence', value => 'upsAdvInputFrequency_absolute', template => '%s', + { label => 'frequence', value => 'frequency_absolute', template => '%s', unit => 'Hz' }, ], } }, { label => 'status', threshold => 0, set => { - key_values => [ { name => 'upsAdvInputLineFailCause' } ], - closure_custom_calc => $self->can('custom_status_calc'), + key_values => [ { name => 'last_cause' } ], + 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, @@ -81,7 +73,7 @@ sub new { my ($class, %options) = @_; my $self = $class->SUPER::new(package => __PACKAGE__, %options); bless $self, $class; - + $options{options}->add_options(arguments => { 'warning-status:s' => { name => 'warning_status', default => '' }, 'critical-status:s' => { name => 'critical_status', default => '' }, @@ -97,24 +89,25 @@ sub check_options { $self->change_macros(macros => ['warning_status', 'critical_status']); } -my %map_status = ( +my $map_status = { 1 => 'noTransfer', 2 => 'highLineVoltage', 3 => 'brownout', 4 => 'blackout', 5 => 'smallMomentarySag', 6 => 'deepMomentarySag', 7 => 'smallMomentarySpike', 8 => 'largeMomentarySpike', 9 => 'selfTest', 10 => 'rateOfVoltageChange', -); +}; my $mapping = { upsAdvInputLineVoltage => { oid => '.1.3.6.1.4.1.318.1.1.1.3.2.1' }, upsAdvInputFrequency => { oid => '.1.3.6.1.4.1.318.1.1.1.3.2.4' }, - upsAdvInputLineFailCause => { oid => '.1.3.6.1.4.1.318.1.1.1.3.2.5', map => \%map_status }, + upsAdvInputLineFailCause => { oid => '.1.3.6.1.4.1.318.1.1.1.3.2.5', map => $map_status }, upsAdvConfigHighTransferVolt => { oid => '.1.3.6.1.4.1.318.1.1.1.5.2.2' }, upsAdvConfigLowTransferVolt => { oid => '.1.3.6.1.4.1.318.1.1.1.5.2.3' }, + upsHighPrecInputLineVoltage => { oid => '.1.3.6.1.4.1.318.1.1.1.3.3.1' }, + upsHighPrecInputFrequency => { oid => '.1.3.6.1.4.1.318.1.1.1.3.3.4' }, }; sub manage_selection { my ($self, %options) = @_; - $self->{global} = {}; my $snmp_result = $options{snmp}->get_leef( oids => [ map($_->{oid} . '.0', values(%$mapping)) ], nothing_quit => 1 @@ -130,9 +123,13 @@ sub manage_selection { $self->{perfdata}->threshold_validate(label => 'critical-voltage', value => $th) if ($th ne ''); } - foreach my $name (keys %{$mapping}) { - $self->{global}->{$name} = $result->{$name}; - } + $self->{global} = { + last_cause => $result->{upsAdvInputLineFailCause}, + voltage => defined($result->{upsHighPrecInputLineVoltage}) && $result->{upsHighPrecInputLineVoltage} =~ /\d/ ? + $result->{upsHighPrecInputLineVoltage} * 0.1 : $result->{upsAdvInputLineVoltage}, + frequency => defined($result->{upsHighPrecInputFrequency}) && $result->{upsHighPrecInputFrequency} =~ /\d/ ? + $result->{upsHighPrecInputFrequency} * 0.1 : $result->{upsAdvInputFrequency}, + }; } 1;