mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-27 15:44:21 +02:00
(plugin) network::oneaccess::snmp - mode cells-radio add option --custom-perfdata-instances (#4492)
This commit is contained in:
parent
5c3626bf1b
commit
be1a646699
@ -766,7 +766,31 @@ sub change_macros {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub custom_perfdata_instances {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
my $instances = [];
|
||||||
|
foreach (split(/\s+/, $options{instances})) {
|
||||||
|
while (/%\((.+?)\)/g) {
|
||||||
|
my $name = $1;
|
||||||
|
if (!defined($options{labels}->{$name})) {
|
||||||
|
$self->{output}->add_option_msg(short_msg => "option $options{option_name} unsupported label: %($name)");
|
||||||
|
$self->{output}->option_exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
push @$instances, $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scalar(@$instances) <= 0) {
|
||||||
|
$self->{output}->add_option_msg(short_msg => "option $options{option_name} need at least one label");
|
||||||
|
$self->{output}->option_exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $instances;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
@ -29,12 +29,14 @@ use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_
|
|||||||
sub custom_signal_perfdata {
|
sub custom_signal_perfdata {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
|
|
||||||
|
my $instances = [];
|
||||||
|
foreach (@{$self->{instance_mode}->{custom_perfdata_instances}}) {
|
||||||
|
push @$instances, $self->{result_values}->{$_};
|
||||||
|
}
|
||||||
|
|
||||||
$self->{output}->perfdata_add(
|
$self->{output}->perfdata_add(
|
||||||
nlabel => $self->{nlabel},
|
nlabel => $self->{nlabel},
|
||||||
instances => [
|
instances => $instances,
|
||||||
$self->{result_values}->{cellId},
|
|
||||||
$self->{result_values}->{operator}
|
|
||||||
],
|
|
||||||
value => $self->{result_values}->{ $self->{key_values}->[0]->{name} },
|
value => $self->{result_values}->{ $self->{key_values}->[0]->{name} },
|
||||||
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
|
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
|
||||||
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
|
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
|
||||||
@ -57,8 +59,9 @@ sub cell_long_output {
|
|||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
return sprintf(
|
return sprintf(
|
||||||
"checking cellular radio module '%s' [operator: %s]",
|
"checking cellular radio module '%s' [icci: %s, operator: %s]",
|
||||||
$options{instance_value}->{cellId},
|
$options{instance_value}->{cellId},
|
||||||
|
$options{instance_value}->{icci},
|
||||||
$options{instance_value}->{operator}
|
$options{instance_value}->{operator}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -67,8 +70,9 @@ sub prefix_cell_output {
|
|||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
return sprintf(
|
return sprintf(
|
||||||
"cellular radio module '%s' [operator: %s] ",
|
"cellular radio module '%s' [icci: %s, operator: %s] ",
|
||||||
$options{instance_value}->{cellId},
|
$options{instance_value}->{cellId},
|
||||||
|
$options{instance_value}->{icci},
|
||||||
$options{instance_value}->{operator}
|
$options{instance_value}->{operator}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -112,7 +116,7 @@ sub set_counters {
|
|||||||
critical_default => '%{simStatus} eq "notPresent" || %{signalQuality} =~ /none/',
|
critical_default => '%{simStatus} eq "notPresent" || %{signalQuality} =~ /none/',
|
||||||
set => {
|
set => {
|
||||||
key_values => [
|
key_values => [
|
||||||
{ name => 'cellId' }, { name => 'operator' }, { name => 'imsi' },
|
{ name => 'cellId' }, { name => 'operator' }, { name => 'imsi' }, { name => 'icci' },
|
||||||
{ name => 'simStatus' }, { name => 'signalQuality' }
|
{ name => 'simStatus' }, { name => 'signalQuality' }
|
||||||
],
|
],
|
||||||
closure_custom_output => $self->can('custom_status_output'),
|
closure_custom_output => $self->can('custom_status_output'),
|
||||||
@ -124,19 +128,25 @@ sub set_counters {
|
|||||||
|
|
||||||
$self->{maps_counters}->{signal} = [
|
$self->{maps_counters}->{signal} = [
|
||||||
{ label => 'module-cellradio-rsrp', nlabel => 'module.cellradio.rsrp.dbm', set => {
|
{ label => 'module-cellradio-rsrp', nlabel => 'module.cellradio.rsrp.dbm', set => {
|
||||||
key_values => [ { name => 'rsrp' }, { name => 'cellId' }, { name => 'operator' } ],
|
key_values => [ { name => 'rsrp' }, { name => 'cellId' }, { name => 'icci' }, { name => 'operator' } ],
|
||||||
output_template => 'rsrp: %s dBm',
|
output_template => 'rsrp: %s dBm',
|
||||||
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{ label => 'module-cellradio-rsrq', nlabel => 'module.cellradio.rsrq.dbm', set => {
|
||||||
|
key_values => [ { name => 'rsrq' }, { name => 'cellId' }, { name => 'icci' }, { name => 'operator' } ],
|
||||||
|
output_template => 'rsrq: %s dBm',
|
||||||
|
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
||||||
|
}
|
||||||
|
},
|
||||||
{ label => 'module-cellradio-rssi', nlabel => 'module.cellradio.rssi.dbm', set => {
|
{ label => 'module-cellradio-rssi', nlabel => 'module.cellradio.rssi.dbm', set => {
|
||||||
key_values => [ { name => 'rssi' }, { name => 'cellId' }, { name => 'operator' } ],
|
key_values => [ { name => 'rssi' }, { name => 'cellId' }, { name => 'icci' }, { name => 'operator' } ],
|
||||||
output_template => 'rssi: %s dBm',
|
output_template => 'rssi: %s dBm',
|
||||||
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ label => 'module-cellradio-snr', nlabel => 'module.cellradio.snr.db', set => {
|
{ label => 'module-cellradio-snr', nlabel => 'module.cellradio.snr.db', set => {
|
||||||
key_values => [ { name => 'snr' }, { name => 'cellId' }, { name => 'operator' } ],
|
key_values => [ { name => 'snr' }, { name => 'cellId' }, { name => 'icci' }, { name => 'operator' } ],
|
||||||
output_template => 'snr: %s dB',
|
output_template => 'snr: %s dB',
|
||||||
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
closure_custom_perfdata => $self->can('custom_signal_perfdata')
|
||||||
}
|
}
|
||||||
@ -150,12 +160,28 @@ sub new {
|
|||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
$options{options}->add_options(arguments => {
|
$options{options}->add_options(arguments => {
|
||||||
'filter-cell-id:s' => { name => 'filter_cell_id' }
|
'filter-cell-id:s' => { name => 'filter_cell_id' },
|
||||||
|
'custom-perfdata-instances:s' => { name => 'custom_perfdata_instances' }
|
||||||
});
|
});
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub check_options {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
$self->SUPER::check_options(%options);
|
||||||
|
|
||||||
|
if (!defined($self->{option_results}->{custom_perfdata_instances}) || $self->{option_results}->{custom_perfdata_instances} eq '') {
|
||||||
|
$self->{option_results}->{custom_perfdata_instances} = '%(cellId) %(operator)';
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->{custom_perfdata_instances} = $self->custom_perfdata_instances(
|
||||||
|
option_name => '--custom-perfdata-instances',
|
||||||
|
instances => $self->{option_results}->{custom_perfdata_instances},
|
||||||
|
labels => { cellId => 1, operator => 1, icci => 1 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
my $mapping_id = {
|
my $mapping_id = {
|
||||||
imei => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.14' }, # oacCellIMEI
|
imei => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.14' }, # oacCellIMEI
|
||||||
meid => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.15' } # oacCellMEID
|
meid => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.15' } # oacCellMEID
|
||||||
@ -163,8 +189,10 @@ my $mapping_id = {
|
|||||||
my $mapping = {
|
my $mapping = {
|
||||||
simStatus => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.20' }, # oacCellSIMStatus
|
simStatus => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.20' }, # oacCellSIMStatus
|
||||||
imsi => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.21' }, # oacCellIMSI
|
imsi => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.21' }, # oacCellIMSI
|
||||||
|
icci => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.22' }, # oacCellICCI
|
||||||
operator => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.40' }, # oacCellSelectedOperator
|
operator => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.40' }, # oacCellSelectedOperator
|
||||||
rssi => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.41' }, # oacCellSignalStrength
|
rssi => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.41' }, # oacCellSignalStrength
|
||||||
|
rsrq => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.43' }, # oacCellRSRQ
|
||||||
rsrp => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.44' }, # oacCellRSRP
|
rsrp => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.44' }, # oacCellRSRP
|
||||||
snr => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.45' }, # oacCellSNR
|
snr => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.45' }, # oacCellSNR
|
||||||
techno => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.46' } # oacCellRadioAccessTechnology
|
techno => { oid => '.1.3.6.1.4.1.13191.10.3.9.2.1.46' } # oacCellRadioAccessTechnology
|
||||||
@ -245,7 +273,7 @@ sub manage_selection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return if (scalar(keys %{$self->{cells}}) <= 0);
|
return if (scalar(keys %{$self->{cells}}) <= 0);
|
||||||
|
|
||||||
$options{snmp}->load(
|
$options{snmp}->load(
|
||||||
oids => [ map($_->{oid}, values(%$mapping)) ],
|
oids => [ map($_->{oid}, values(%$mapping)) ],
|
||||||
instances => [ map($_, keys %{$self->{cells}}) ],
|
instances => [ map($_, keys %{$self->{cells}}) ],
|
||||||
@ -256,10 +284,13 @@ sub manage_selection {
|
|||||||
foreach (keys %{$self->{cells}}) {
|
foreach (keys %{$self->{cells}}) {
|
||||||
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
|
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
|
||||||
|
|
||||||
|
$self->{cells}->{$_}->{icci} = $result->{icci};
|
||||||
$self->{cells}->{$_}->{operator} = $result->{operator};
|
$self->{cells}->{$_}->{operator} = $result->{operator};
|
||||||
$self->{cells}->{$_}->{status}->{operator} = $result->{operator};
|
$self->{cells}->{$_}->{status}->{operator} = $result->{operator};
|
||||||
|
$self->{cells}->{$_}->{status}->{icci} = $result->{icci};
|
||||||
$self->{cells}->{$_}->{status}->{imsi} = defined($result->{imsi}) && $result->{imsi} =~ /^(?:[0-9]+)$/ ? $result->{imsi} : '-';
|
$self->{cells}->{$_}->{status}->{imsi} = defined($result->{imsi}) && $result->{imsi} =~ /^(?:[0-9]+)$/ ? $result->{imsi} : '-';
|
||||||
$self->{cells}->{$_}->{signal}->{operator} = $result->{operator};
|
$self->{cells}->{$_}->{signal}->{operator} = $result->{operator};
|
||||||
|
$self->{cells}->{$_}->{signal}->{icci} = $result->{icci};
|
||||||
|
|
||||||
$self->{cells}->{$_}->{status}->{simStatus} = $result->{simStatus} =~ /is present/ ? 'present' : 'notPresent';
|
$self->{cells}->{$_}->{status}->{simStatus} = $result->{simStatus} =~ /is present/ ? 'present' : 'notPresent';
|
||||||
$self->{cells}->{$_}->{status}->{signalQuality} = $self->get_signal_quality(
|
$self->{cells}->{$_}->{status}->{signalQuality} = $self->get_signal_quality(
|
||||||
@ -271,6 +302,7 @@ sub manage_selection {
|
|||||||
if ($self->{cells}->{$_}->{status}->{simStatus} eq 'present') {
|
if ($self->{cells}->{$_}->{status}->{simStatus} eq 'present') {
|
||||||
$self->{cells}->{$_}->{signal}->{rssi} = $result->{rssi};
|
$self->{cells}->{$_}->{signal}->{rssi} = $result->{rssi};
|
||||||
$self->{cells}->{$_}->{signal}->{rsrp} = $result->{rsrp};
|
$self->{cells}->{$_}->{signal}->{rsrp} = $result->{rsrp};
|
||||||
|
$self->{cells}->{$_}->{signal}->{rsrq} = $result->{rsrq};
|
||||||
$self->{cells}->{$_}->{signal}->{snr} = $result->{snr};
|
$self->{cells}->{$_}->{signal}->{snr} = $result->{snr};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,25 +324,29 @@ Check cellular radio modules.
|
|||||||
|
|
||||||
Filter cell modules by id (IMEI or MEID).
|
Filter cell modules by id (IMEI or MEID).
|
||||||
|
|
||||||
|
=item B<--custom-perfdata-instances>
|
||||||
|
|
||||||
|
Define perfdatas instance (default: '%(cellId) %(operator)')
|
||||||
|
|
||||||
=item B<--unknown-status>
|
=item B<--unknown-status>
|
||||||
|
|
||||||
Define the conditions to match for the status to be UNKNOWN.
|
Define the conditions to match for the status to be UNKNOWN.
|
||||||
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{operator}, %{imsi}
|
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{icci}, %{operator}, %{imsi}
|
||||||
|
|
||||||
=item B<--warning-status>
|
=item B<--warning-status>
|
||||||
|
|
||||||
Define the conditions to match for the status to be WARNING (Default: '%{signalQuality} =~ /poor/').
|
Define the conditions to match for the status to be WARNING (default: '%{signalQuality} =~ /poor/').
|
||||||
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{operator}, %{imsi}
|
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{icci}, %{operator}, %{imsi}
|
||||||
|
|
||||||
=item B<--critical-status>
|
=item B<--critical-status>
|
||||||
|
|
||||||
Define the conditions to match for the status to be CRITICAL (Default: '%{simStatus} eq "notPresent" || %{signalQuality} =~ /none/').
|
Define the conditions to match for the status to be CRITICAL (default: '%{simStatus} eq "notPresent" || %{signalQuality} =~ /none/').
|
||||||
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{operator}, %{imsi}
|
You can use the following variables: %{simStatus}, %{signalQuality}, %{cellId}, %{icci}, %{operator}, %{imsi}
|
||||||
|
|
||||||
=item B<--warning-*> B<--critical-*>
|
=item B<--warning-*> B<--critical-*>
|
||||||
|
|
||||||
Thresholds.
|
Thresholds.
|
||||||
Can be: 'modules-cellradio-detected', 'module-cellradio-rsrp',
|
Can be: 'modules-cellradio-detected', 'module-cellradio-rsrp', ''module-cellradio-rsrq',
|
||||||
'module-cellradio-rssi', 'module-cellradio-snr'.
|
'module-cellradio-rssi', 'module-cellradio-snr'.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
Loading…
x
Reference in New Issue
Block a user