(plugin) hardware::ups::socomec::netvision - netvision v5 supported (#3914)

This commit is contained in:
qgarnier 2022-09-26 10:54:05 +02:00 committed by GitHub
parent e4c7f13446
commit b261b6fad4
5 changed files with 129 additions and 45 deletions

View File

@ -49,8 +49,7 @@ sub new {
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {});
});
return $self; return $self;
} }
@ -58,10 +57,19 @@ sub new {
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
my $oid_upsAlarmsPresent = '.1.3.6.1.4.1.4555.1.1.7.1.6.1.0'; my $oid_upsAlarmsPresent_netvisionv6 = '.1.3.6.1.4.1.4555.1.1.7.1.6.1.0';
my $snmp_result = $options{snmp}->get_leef(oids => [ $oid_upsAlarmsPresent ], nothing_quit => 1); my $oid_upsAlarmsPresent_netvisionv5 = '.1.3.6.1.4.1.4555.1.1.1.1.6.1.0';
my $snmp_result = $options{snmp}->get_leef(
oids => [
$oid_upsAlarmsPresent_netvisionv6,
$oid_upsAlarmsPresent_netvisionv5
],
nothing_quit => 1
);
$self->{global} = { current_alarms => $snmp_result->{$oid_upsAlarmsPresent} }; $self->{global} = {
current_alarms => defined($snmp_result->{$oid_upsAlarmsPresent_netvisionv6}) ? $snmp_result->{$oid_upsAlarmsPresent_netvisionv6} : $snmp_result->{$oid_upsAlarmsPresent_netvisionv5}
};
} }
1; 1;

View File

@ -72,7 +72,7 @@ sub set_counters {
} }
}, },
{ label => 'charge-remaining-minutes', nlabel => 'battery.charge.remaining.minutes', display_ok => 0, set => { { label => 'charge-remaining-minutes', nlabel => 'battery.charge.remaining.minutes', display_ok => 0, set => {
key_values => [ { name => 'minute_remain' } ], key_values => [ { name => 'minute_remain', no_value => 'unknown' } ],
output_template => 'minutes remaining: %s', output_template => 'minutes remaining: %s',
perfdatas => [ perfdatas => [
{ template => '%s', min => 0 } { template => '%s', min => 0 }
@ -117,35 +117,57 @@ sub new {
return $self; return $self;
} }
my $map_status = { my $map_status_v6 = {
1 => 'unknown', 2 => 'normal', 3 => 'charging', 4 => 'test', 1 => 'unknown', 2 => 'normal', 3 => 'charging', 4 => 'test',
5 => 'discharging', 6 => 'low', 7 => 'depleted', 8 => 'failure', 5 => 'discharging', 6 => 'low', 7 => 'depleted', 8 => 'failure',
9 => 'disconnected' 9 => 'disconnected'
}; };
my $map_status_v5 = {
1 => 'unknown', 2 => 'normal', 3 => 'low',
4 => 'depleted', 5 => 'discharging',
6 => 'failure', 7 => 'upsOff'
};
my $mapping = { my $mapping = {
status => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.1', map => $map_status }, # upsBatteryStatus netvision5 => {
minute_remain => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.3' }, # upsEstimatedMinutesRemaining status => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.2.1', map => $map_status_v5 }, # upsBatteryStatus
charge_remain => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.4' }, # upsEstimatedChargeRemaining minute_remain => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.2.3' }, # upsEstimatedMinutesRemaining
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.5' }, # upsBatteryVoltage (dV) charge_remain => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.2.4' }, # upsEstimatedChargeRemaining
temperature => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.6' }, # upsBatteryTemperature (degrees Centigrade) voltage => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.2.5' }, # upsBatteryVoltage (dV)
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.8' } # upsBatteryCurrent (dA) temperature => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.2.6' } # upsBatteryTemperature (degrees Centigrade)
},
netvision6 => {
status => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.1', map => $map_status_v6 }, # upsBatteryStatus
minute_remain => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.3' }, # upsEstimatedMinutesRemaining
charge_remain => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.4' }, # upsEstimatedChargeRemaining
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.5' }, # upsBatteryVoltage (dV)
temperature => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.6' }, # upsBatteryTemperature (degrees Centigrade)
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.2.8' } # upsBatteryCurrent (dA)
}
}; };
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
my $label = 'netvision6';
my $snmp_result = $options{snmp}->get_leef( my $snmp_result = $options{snmp}->get_leef(
oids => [ map($_->{oid} . '.0', values(%$mapping)) ], oids => [ map($_->{oid} . '.0', values(%{$mapping->{$label}})) ]
nothing_quit => 1
); );
$self->{global} = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => 0); if (!defined($snmp_result->{ $mapping->{netvision6}->{status} . '.0' })) {
$label = 'netvision5';
$snmp_result = $options{snmp}->get_leef(
oids => [ map($_->{oid} . '.0', values(%{$mapping->{$label}})) ],
nothing_quit => 1
);
}
$self->{global} = $options{snmp}->map_instance(mapping => $mapping->{$label}, results => $snmp_result, instance => 0);
$self->{global}->{current} = (defined($self->{global}->{current}) && $self->{global}->{current} =~ /\d/ && $self->{global}->{current} != -1 && $self->{global}->{current} != 65535) ? $self->{global}->{current} = (defined($self->{global}->{current}) && $self->{global}->{current} =~ /\d/ && $self->{global}->{current} != -1 && $self->{global}->{current} != 65535) ?
$self->{global}->{current} * 0.1 : 0; $self->{global}->{current} * 0.1 : 0;
$self->{global}->{voltage} = (defined($self->{global}->{voltage}) && $self->{global}->{voltage} =~ /\d/ && $self->{global}->{voltage} != -1 && $self->{global}->{voltage} != 65535) ? $self->{global}->{voltage} = (defined($self->{global}->{voltage}) && $self->{global}->{voltage} =~ /\d/ && $self->{global}->{voltage} != -1 && $self->{global}->{voltage} != 65535) ?
$self->{global}->{voltage} * 0.1 : 0; $self->{global}->{voltage} * 0.1 : 0;
$self->{global}->{temperature} = (defined($self->{global}->{temperature}) && $self->{global}->{temperature} =~ /\d/) ? $self->{global}->{temperature} * 0.1 : 0; $self->{global}->{temperature} = (defined($self->{global}->{temperature}) && $self->{global}->{temperature} =~ /\d/) ? $self->{global}->{temperature} * 0.1 : 0;
$self->{global}->{minute_remain} = (defined($self->{global}->{minute_remain}) && $self->{global}->{minute_remain} =~ /\d/) ? $self->{global}->{minute_remain} : 'unknown'; $self->{global}->{minute_remain} = (defined($self->{global}->{minute_remain}) && $self->{global}->{minute_remain} =~ /\d/ && $self->{global}->{minute_remain} != -1) ? $self->{global}->{minute_remain} : 'unknown';
$self->{global}->{charge_remain} = (defined($self->{global}->{charge_remain}) && $self->{global}->{charge_remain} =~ /\d/) ? $self->{global}->{charge_remain} : undef; $self->{global}->{charge_remain} = (defined($self->{global}->{charge_remain}) && $self->{global}->{charge_remain} =~ /\d/) ? $self->{global}->{charge_remain} : undef;
} }

View File

@ -82,34 +82,61 @@ sub new {
} }
my $mapping = { my $mapping = {
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1.2' }, # upsInputVoltage (dV) netvision5 => {
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1.3' } # upsInputCurrent (dA) voltage => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.3.3.1.2' }, # upsInputVoltage (dV)
current => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.3.3.1.3' } # upsInputCurrent (dA)
},
netvision6 => {
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1.2' }, # upsInputVoltage (dV)
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1.3' } # upsInputCurrent (dA)
}
}; };
my $mapping2 = { my $mapping2 = {
frequency => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.2' } # upsInputFrequency (dHZ) netvision5 => {
frequency => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.3.2' } # upsInputFrequency (dHZ)
},
netvision6 => {
frequency => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.3.2' } # upsInputFrequency (dHZ)
}
};
my $tables = {
netvision5 => {
upsInput => '.1.3.6.1.4.1.4555.1.1.1.1.3',
upsInputEntry => '.1.3.6.1.4.1.4555.1.1.1.1.3.3.1'
},
netvision6 => {
upsInput => '.1.3.6.1.4.1.4555.1.1.7.1.3',
upsInputEntry => '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1'
}
}; };
my $oid_upsInput = '.1.3.6.1.4.1.4555.1.1.7.1.3';
my $oid_upsInputEntry = '.1.3.6.1.4.1.4555.1.1.7.1.3.3.1';
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
my $label = 'netvision6';
my $snmp_result = $options{snmp}->get_table( my $snmp_result = $options{snmp}->get_table(
oid => $oid_upsInput, oid => $tables->{$label}->{upsInput},
start => $mapping2->{frequency}->{oid}, start => $mapping2->{$label}->{frequency}->{oid},
end => $mapping->{current}->{oid}, end => $mapping->{$label}->{current}->{oid}
nothing_quit => 1
); );
if (scalar(keys %$snmp_result) <= 0) {
$label = 'netvision5';
$snmp_result = $options{snmp}->get_table(
oid => $tables->{$label}->{upsInput},
start => $mapping2->{$label}->{frequency}->{oid},
end => $mapping->{$label}->{current}->{oid},
nothing_quit => 1
);
}
$self->{iline} = {}; $self->{iline} = {};
foreach my $oid (keys %$snmp_result) { foreach my $oid (keys %$snmp_result) {
next if ($oid !~ /^$oid_upsInputEntry\.\d+\.(.*)$/); next if ($oid !~ /^$tables->{$label}->{upsInputEntry}\.\d+\.(.*)$/);
my $instance = $1; my $instance = $1;
next if (defined($self->{iline}->{$instance})); next if (defined($self->{iline}->{$instance}));
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); my $result = $options{snmp}->map_instance(mapping => $mapping->{$label}, results => $snmp_result, instance => $instance);
foreach (('current', 'voltage')) { foreach ('current', 'voltage') {
$result->{$_} = 0 if (defined($result->{$_}) && ( $result->{$_} = 0 if (defined($result->{$_}) && (
$result->{$_} eq '' || $result->{$_} == -1 || $result->{$_} == 65535 || $result->{$_} == 655350)); $result->{$_} eq '' || $result->{$_} == -1 || $result->{$_} == 65535 || $result->{$_} == 655350));
$result->{$_} *= 0.1; $result->{$_} *= 0.1;
@ -126,7 +153,7 @@ sub manage_selection {
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
$self->{global} = $options{snmp}->map_instance(mapping => $mapping2, results => $snmp_result, instance => 0); $self->{global} = $options{snmp}->map_instance(mapping => $mapping2->{$label}, results => $snmp_result, instance => 0);
$self->{global}->{frequency} = defined($self->{global}->{frequency}) && $self->{global}->{frequency} != -1 && $self->{global}->{frequency} != 65535 $self->{global}->{frequency} = defined($self->{global}->{frequency}) && $self->{global}->{frequency} != -1 && $self->{global}->{frequency} != 65535
? ($self->{global}->{frequency} * 0.1) : 0; ? ($self->{global}->{frequency} * 0.1) : 0;
} }

View File

@ -107,32 +107,60 @@ my $map_status = {
}; };
my $mapping = { my $mapping = {
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.2' }, # upsOutputVoltage (Volt) netvision5 => {
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.3' }, # upsOutputCurrent (dA) voltage => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.4.4.1.2' }, # upsOutputVoltage (Volt)
percent_load => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.4' } # upsOutputPercentLoad current => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.4.4.1.3' }, # upsOutputCurrent (dA)
percent_load => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.4.4.1.4' } # upsOutputPercentLoad
},
netvision6 => {
voltage => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.2' }, # upsOutputVoltage (Volt)
current => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.3' }, # upsOutputCurrent (dA)
percent_load => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1.4' } # upsOutputPercentLoad
}
}; };
my $mapping2 = { my $mapping2 = {
status => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.1', map => $map_status } # upsOutputSource netvision5 => {
status => { oid => '.1.3.6.1.4.1.4555.1.1.1.1.4.1', map => $map_status } # upsOutputSource
},
netvision6 => {
status => { oid => '.1.3.6.1.4.1.4555.1.1.7.1.4.1', map => $map_status } # upsOutputSource
}
};
my $tables = {
netvision5 => {
upsOutput => '.1.3.6.1.4.1.4555.1.1.1.1.4',
upsOutputEntry => '.1.3.6.1.4.1.4555.1.1.1.1.4.4.1'
},
netvision6 => {
upsOutput => '.1.3.6.1.4.1.4555.1.1.7.1.4',
upsOutputEntry => '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1'
}
}; };
my $oid_upsOutput = '.1.3.6.1.4.1.4555.1.1.7.1.4';
my $oid_upsOutputEntry = '.1.3.6.1.4.1.4555.1.1.7.1.4.4.1';
sub manage_selection { sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
my $label = 'netvision6';
my $snmp_result = $options{snmp}->get_table( my $snmp_result = $options{snmp}->get_table(
oid => $oid_upsOutput, oid => $tables->{$label}->{upsOutput},
end => $mapping->{percent_load}->{oid}, end => $mapping->{$label}->{percent_load}->{oid}
nothing_quit => 1
); );
if (scalar(keys %$snmp_result) <= 0) {
$label = 'netvision5';
$snmp_result = $options{snmp}->get_table(
oid => $tables->{$label}->{upsOutput},
end => $mapping->{$label}->{percent_load}->{oid},
nothing_quit => 1
);
}
$self->{oline} = {}; $self->{oline} = {};
foreach my $oid (keys %$snmp_result) { foreach my $oid (keys %$snmp_result) {
next if ($oid !~ /^$oid_upsOutputEntry\.\d+\.(.*)$/); next if ($oid !~ /^$tables->{$label}->{upsOutputEntry}\.\d+\.(.*)$/);
my $instance = $1; my $instance = $1;
next if (defined($self->{oline}->{$instance})); next if (defined($self->{oline}->{$instance}));
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $instance); my $result = $options{snmp}->map_instance(mapping => $mapping->{$label}, results => $snmp_result, instance => $instance);
foreach (keys %$result) { foreach (keys %$result) {
delete $result->{$_} if ( delete $result->{$_} if (
(defined($self->{option_results}->{ignore_zero_counters}) && $result->{$_} == 0) || (defined($self->{option_results}->{ignore_zero_counters}) && $result->{$_} == 0) ||
@ -146,7 +174,7 @@ sub manage_selection {
} }
} }
$self->{global} = $options{snmp}->map_instance(mapping => $mapping2, results => $snmp_result, instance => 0); $self->{global} = $options{snmp}->map_instance(mapping => $mapping2->{$label}, results => $snmp_result, instance => 0);
} }
1; 1;

View File

@ -29,7 +29,6 @@ sub new {
my $self = $class->SUPER::new(package => __PACKAGE__, %options); my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class; bless $self, $class;
$self->{version} = '0.1';
$self->{modes} = { $self->{modes} = {
'alarms' => 'hardware::ups::socomec::netvision::snmp::mode::alarms', 'alarms' => 'hardware::ups::socomec::netvision::snmp::mode::alarms',
'battery' => 'hardware::ups::socomec::netvision::snmp::mode::battery', 'battery' => 'hardware::ups::socomec::netvision::snmp::mode::battery',