enh(F5OS): New pack f5 os snmp (#5567)

Co-authored-by: Sylvain Cresto <scresto@chezwouam.home>

Refs:CTOR-293
This commit is contained in:
scresto 2025-05-06 11:22:54 +02:00 committed by GitHub
parent 51df89411c
commit dcd186de24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 892 additions and 0 deletions

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"libsnmp-perl"
]
}

View File

@ -0,0 +1,10 @@
{
"pkg_name": "centreon-plugin-Operatingsystems-F5os-Snmp",
"pkg_summary": "Centreon Plugin",
"plugin_name": "centreon_f5os_snmp.pl",
"files": [
"centreon/plugins/script_snmp.pm",
"centreon/plugins/snmp.pm",
"os/f5os/snmp/"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"perl(SNMP)"
]
}

View File

@ -0,0 +1,248 @@
#
# Copyright 2025 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package os::f5os::snmp::mode::cpuusage;
use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'cpu_avg', type => 0 },
{ name => 'cpu_core', type => 1, cb_prefix_output => 'prefix_cpu_output' },
];
$self->{maps_counters}->{cpu_avg} = [
{ label => 'average', nlabel => 'cpu.usage.percent', set => {
key_values => [ { name => 'average' } ],
output_template => 'CPU(s) average usage is: %.2f %%',
perfdatas => [
{ label => 'total_cpu_avg', value => 'average', template => '%.2f',
min => 0, max => 100, unit => '%' },
]
}
}
];
$self->{maps_counters}->{cpu_core} = [
{ label => 'core-current', nlabel => 'cpu.core.current.usage.percent', set => {
key_values => [ { name => 'CoreCurrent' }, { name => 'display' } ],
output_template => 'CPU Usage Current : %s %%', output_error_template => "CPU Usage Current : %s",
perfdatas => [
{ value => 'CoreCurrent', template => '%s',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
{ label => 'core-avg-5s', nlabel => 'cpu.core.usage.avg.5s.percent', set => {
key_values => [ { name => 'CoreTotal5secAvg' }, { name => 'display' } ],
output_template => 'CPU Usage 5sec : %s %%', output_error_template => "CPU Usage 5sec : %s",
perfdatas => [
{ value => 'CoreTotal5secAvg', template => '%s',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
{ label => 'core-avg-1m', nlabel => 'cpu.core.usage.avg.1m.percent', set => {
key_values => [ { name => 'CoreTotal1minAvg' }, { name => 'display' } ],
output_template => 'CPU Usage 1min : %s %%', output_error_template => "CPU Usage 1min : %s",
perfdatas => [
{ value => 'CoreTotal1minAvg', template => '%s',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
{ label => 'core-avg-5m', nlabel => 'cpu.core.usage.avg.5m.percent', set => {
key_values => [ { name => 'CoreTotal5minAvg' }, { name => 'display' } ],
output_template => 'CPU Usage 5min : %s %%', output_error_template => "CPU Usage 5min : %s",
perfdatas => [
{ value => 'CoreTotal5minAvg', template => '%s',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
];
}
sub prefix_cpu_output {
my ($self, %options) = @_;
return "CPU '" . $options{instance_value}->{display} . "' "
unless $self->{output}->is_verbose();
return "CPU '" . $options{instance_value}->{display} . " [" . $options{instance_value}->{CoreName}. "]' ";
}
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1 );
bless $self, $class;
$options{options}->add_options(arguments => {
'include-name:s' => { name => 'include_name', default => '' },
'include-id:s' => { name => 'include_id', default => '' },
'exclude-name:s' => { name => 'exclude_name', default => '' },
'exclude-id:s' => { name => 'exclude_id', default => '' },
});
return $self;
}
my $mapping = {
CoreIndex => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.1' },
CoreName => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.2' },
CoreCurrent => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.3' },
CoreTotal5secAvg => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.4' },
CoreTotal1minAvg => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.5' },
CoreTotal5minAvg => { oid => '.1.3.6.1.4.1.12276.1.2.1.1.3.1.6' },
};
my $oid_cpuCoreStatsEntry = '.1.3.6.1.4.1.12276.1.2.1.1.3.1';
sub manage_selection {
my ($self, %options) = @_;
my $results = $options{snmp}->get_table(
oid => $oid_cpuCoreStatsEntry,
nothing_quit => 1
);
$self->{cpu_core} = {};
$self->{cpu_avg} = {};
my $cpu = 0;
foreach my $oid (keys %$results) {
next if ($oid !~ /^$mapping->{CoreIndex}->{oid}\.(.*)$/);
my $instance = $1;
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $results, instance => $instance);
if ($self->{option_results}->{include_name} ne '' || $self->{option_results}->{include_id} ne '') {
my $whitelist = 0;
$whitelist = 1 if $self->{option_results}->{include_name} ne '' && $result->{CoreName} =~ /$self->{option_results}->{include_name}/;
$whitelist = 1 if $self->{option_results}->{include_id} ne '' && $result->{CoreIndex} =~ /$self->{option_results}->{include_id}/;
if ($whitelist == 0) {
$self->{output}->output_add(long_msg => "skipping '" . $result->{CoreIndex} .'-'. $result->{CoreName}. "': no including filter match.", debug => 1);
next
}
}
if (($self->{option_results}->{exclude_name} ne '' && $result->{CoreName} =~ /$self->{option_results}->{exclude_name}/) ||
($self->{option_results}->{exclude_id} ne '' && $result->{CoreIndex} =~ /$self->{option_results}->{exclude_id}/)) {
$self->{output}->output_add(long_msg => "skipping '" . $result->{CoreIndex} .'-'. $result->{CoreName}. "': excluding filter match.", debug => 1);
next
}
$self->{cpu_core}->{$result->{CoreIndex}} = {
display => $result->{CoreIndex},
%$result
};
$cpu += $result->{CoreCurrent};
}
my $num_core = scalar(keys %{$self->{cpu_core}});
if ($num_core <= 0) {
$self->{output}->add_option_msg(short_msg => "No CPU found.");
$self->{output}->option_exit();
} else {
$self->{cpu_avg}->{average} = $cpu / $num_core;
}
}
1;
__END__
=head1 MODE
Check CPU usages.
- cpu.core.current.usage.percent CPU core current utilization percentage.
- cpu.core.usage.avg.5s.percent CPU core utilization average over the last five second.
- cpu.core.usage.avg.1m.percent CPU core utilization average over the last one minute.
- cpu.core.usage.avg.5m.percent CPU core utilization average over the last five minute.
=over 8
=item B<--filter-counters>
Only display some counters (regexp can be used).
Can be : core-current, core-avg-5s, core-avg-1m, core-avg-5m
Example : --filter-counters='^core-current$'
=item B<--include-id>
Filter by CPU id (regexp can be used).
Example : --include-id='2'
=item B<--include-name>
Filter by CPU name (regexp can be used).
Example : --include-name='cpu02'
=item B<--exclude-id>
Exclude CPU id from check (regexp can be used).
Example : --exclude-id='21'
=item B<--exclude-name>
Exclude CPU name from check (regexp can be used).
Example : --exclude-name='cpu02'
=item B<--warning-core-current>
Threshold in percentage.
=item B<--critical-core-current>
Threshold in percentage.
=item B<--warning-core-avg-5s>
Threshold in percentage.
=item B<--critical-core-avg-5s>
Threshold in percentage.
=item B<--warning-core-avg-1m>
Threshold in percentage.
=item B<--critical-core-avg-1m>
Threshold in percentage.
=item B<--warning-core-avg-5m>
Threshold in percentage.
=item B<--critical-core-avg-5m>
Threshold in percentage.
=back
=cut

View File

@ -0,0 +1,255 @@
#
# Copyright 2024 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package os::f5os::snmp::mode::hardware;
use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
sub prefix_fan_output {
my ($self, %options) = @_;
return "fan '" . $options{instance} . "' ";
}
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'temperature', type => 0, skipped_code => { -10 => 1 } },
{ name => 'fans', type => 1, cb_prefix_output => 'prefix_fan_output', message_multiple => 'All fans are ok', skipped_code => { -10 => 1 } }
];
$self->{maps_counters}->{temperature} = [
{ label => 'current-temperature', nlabel => 'temperature.current.celsius', set => {
key_values => [ { name => 'tempCurrent' } ],
output_template => 'Current temperature: %s C',
perfdatas => [
{ template => '%.1f', unit => 'C', label_extra_instance => 0 }
]
}
},
{ label => 'average-temperature', nlabel => 'temperature.average.1h.celsius', set => {
key_values => [ { name => 'tempAverage' } ],
output_template => 'average: %s C',
perfdatas => [
{ template => '%.1f', unit => 'C', label_extra_instance => 0 }
]
}
},
{ label => 'min-temperature', nlabel => 'temperature.min.1h.celsius', set => {
key_values => [ { name => 'tempMinimum' } ],
output_template => 'minimum: %s C',
perfdatas => [
{ template => '%.1f', unit => 'C', label_extra_instance => 0 }
]
}
},
{ label => 'max-temperature', nlabel => 'temperature.max.1h.celsius', set => {
key_values => [ { name => 'tempMaximum' } ],
output_template => 'maximum: %s C',
perfdatas => [
{ template => '%.1f', unit => 'C', label_extra_instance => 1 }
]
}
}
];
$self->{maps_counters}->{fans} = [
{ label => 'fantray-fan-speed', nlabel => 'fantray.fanspeed.rpm', set => {
key_values => [ { name => 'speed' } ],
output_template => 'speed is %s rpm',
perfdatas => [
{ template => '%s', unit => 'rpm', min => 0, label_extra_instance => 1 }
]
}
}
];
}
my $mapping = {
tempCurrent => { oid => '.1.3.6.1.4.1.12276.1.2.1.3.1.1.2' },
tempAverage => { oid => '.1.3.6.1.4.1.12276.1.2.1.3.1.1.3' },
tempMinimum => { oid => '.1.3.6.1.4.1.12276.1.2.1.3.1.1.4' },
tempMaximum => { oid => '.1.3.6.1.4.1.12276.1.2.1.3.1.1.5' },
};
my $oid_temperatureStatsEntry = '.1.3.6.1.4.1.12276.1.2.1.3.1.1';
my $oid_fantrayStatsEntry = '.1.3.6.1.4.1.12276.1.2.1.7.1.1';
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class;
$options{options}->add_options(arguments => {
'component:s' => { name => 'component', default => '.*' },
'no-component:s' => { name => 'no_component', default => 'CRITICAL' },
'include-id:s' => { name => 'include_id', default => '' },
'exclude-id:s' => { name => 'exclude_id', default => '' },
});
return $self;
}
sub manage_selection {
my ($self, %options) = @_;
my $results = $options{snmp}->get_multiple_table(
oids => [
{ oid => $oid_temperatureStatsEntry },
{ oid => $oid_fantrayStatsEntry },
]);
if ('temperature' =~ /$self->{option_results}->{component}/) {
my $result;
foreach (keys %{$results->{$oid_temperatureStatsEntry}}) {
next unless /^$mapping->{tempCurrent}->{oid}\.(.*)$/;
$result = $options{snmp}->map_instance(mapping => $mapping, results => $results->{$oid_temperatureStatsEntry}, instance => $1);
$result->{$_} *= 0.1 for keys %{$result};
last
}
if ($result) {
$self->{temperature} = $result;
} else {
$self->{output}->output_add(
severity => $self->{option_results}->{no_component},
short_msg => 'Temperature not retrieved.'
);
}
}
if ('fantray' =~ /$self->{option_results}->{component}/) {
while (my ($oid, $values) = each %{$results->{$oid_fantrayStatsEntry}}) {
next unless $oid =~ /^$oid_fantrayStatsEntry\.(\d+)/;
my $fan_id = $1;
if ($self->{option_results}->{include_id} && $fan_id !~ /$self->{option_results}->{include_id}/) {
$self->{output}->output_add(long_msg => "skipping fantray fan '$fan_id': no including filter match.", debug => 1);
next
}
if ($self->{option_results}->{exclude_id} && $fan_id =~ /$self->{option_results}->{exclude_id}/) {
$self->{output}->output_add(long_msg => "skipping fantray fan '$fan_id': excluding filter match.", debug => 1);
next
}
$self->{fans}->{$fan_id} = { speed => $values };
}
unless ($self->{fans}) {
$self->{output}->output_add(
severity => $self->{option_results}->{no_component},
short_msg => 'Fantray Fan speed not retrieved.'
);
}
}
}
1;
__END__
=head1 MODE
Check hardware.
- temperature.current.celsius The current temperature in celsius
- temperature.average.1h.celsius The arithmetic mean value of the temperature
- temperature.min.1h.celsius The minimum value of the temperature statistic over the past hour
- temperature.max.1h.celsius The maximum value of the temperature statistic over the past hour
- fantray.fanspeed.rpm The current fan speed in RPM
=over 8
=item B<--component>
Which component to check (default: '.*').
Can be: 'temperature', 'fantray'.
=item B<--no-component>
Define the expected status if no components are found (default: critical).
=item B<--filter-counters>
Only display some counters (regexp can be used).
Can be : fantray-fan-speed current-temperature average-temperature min-temperature max-temperature
Example : --filter-counters='^current-temperature$'
=item B<--include-id>
Filter by fan id (regexp can be used).
Example : --include-id='2'
=item B<--exclude-id>
Exclude fan id from check (can be a regexp).
Example : --exclude-id='10'
=item B<--warning-current-temperature>
Threshold in C.
=item B<--critical-current-temperature>
Threshold in C.
=item B<--warning-average-temperature>
Threshold in C.
=item B<--critical-average-temperature>
Threshold in C.
=item B<--warning-min-temperature>
Threshold in C.
=item B<--critical-min-temperature>
Threshold in C.
=item B<--warning-max-temperature>
Threshold in C.
=item B<--critical-max-temperature>
Threshold in C.
=item B<--warning-fantray-speed>
Threshold in rpm.
=item B<--critical-fantray-speed>
Threshold in rpm.
=back
=cut

View File

@ -0,0 +1,192 @@
#
# Copyright 2024 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package os::f5os::snmp::mode::memory;
use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
sub custom_usage_output {
my ($self, %options) = @_;
return sprintf(
'total: %s %s used: %s %s (%.2f%%) free: %s %s (%.2f%%)',
$self->{perfdata}->change_bytes(value => $self->{result_values}->{total}),
$self->{perfdata}->change_bytes(value => $self->{result_values}->{used}),
$self->{result_values}->{prct_used},
$self->{perfdata}->change_bytes(value => $self->{result_values}->{free}),
$self->{result_values}->{prct_free}
);
}
sub prefix_memory_output {
my ($self, %options) = @_;
return "Memory ";
}
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'memory', type => 0, cb_prefix_output => 'prefix_memory_output', message_multiple => 'All memory usages are ok', skipped_code => { -10 => 1 } }
];
$self->{maps_counters}->{memory} = [
{ label => 'usage', nlabel => 'memory.usage.bytes', set => {
key_values => [ { name => 'used' }, { name => 'free' }, { name => 'prct_used' }, { name => 'total'}, { name => 'prct_free' }],
closure_custom_output => $self->can('custom_usage_output'),
perfdatas => [
{ template => '%d', min => 0, max => 'total', unit => 'B', cast_int => 1 }
]
}
},
{ label => 'free', display_ok => 0, nlabel => 'memory.free.bytes', display_ok => 0, set => {
key_values => [ { name => 'free' }, { name => 'used' }, { name => 'prct_used' }, { name => 'total' }, { name => 'prct_free' } ],
closure_custom_output => $self->can('custom_usage_output'),
perfdatas => [
{ template => '%d', min => 0, max => 'total', unit => 'B', cast_int => 1 }
]
}
},
{ label => 'usage-prct', nlabel => 'memory.usage.percent', display_ok => 0, set => {
key_values => [ { name => 'prct_used' }, { name => 'used' }, { name => 'free' }, { name => 'total' }, { name => 'prct_free' },],
closure_custom_output => $self->can('custom_usage_output'),
perfdatas => [
{ template => '%.2f', min => 0, max => 100, unit => '%' }
]
}
},
{ label => 'free-prct', nlabel => 'memory.free.percent', display_ok => 0, set => {
key_values => [ { name => 'prct_free' }, { name => 'used' }, { name => 'free' }, { name => 'total' }, { name => 'prct_used' }, ],
closure_custom_output => $self->can('custom_usage_output'),
perfdatas => [
{ template => '%.2f', min => 0, max => 100, unit => '%' }
]
}
}
];
}
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class;
$options{options}->add_options(arguments => {});
return $self;
}
my $mapping = {
memPlatformTotal => { oid => '.1.3.6.1.4.1.12276.1.2.1.4.1.1.5' },
memPlatformUsed => { oid => '.1.3.6.1.4.1.12276.1.2.1.4.1.1.6' },
};
my $oid_memoryStatsEntry = '.1.3.6.1.4.1.12276.1.2.1.4.1.1';
sub manage_selection {
my ($self, %options) = @_;
if ($options{snmp}->is_snmpv1()) {
$self->{output}->add_option_msg(short_msg => "Need to use SNMP v2c or v3.");
$self->{output}->option_exit();
}
my $results = $options{snmp}->get_table(
oid => $oid_memoryStatsEntry,
nothing_quit => 1
);
my $result;
foreach (keys %$results) {
if (/^$mapping->{memPlatformUsed}->{oid}\.(.*)$/) {
$result = $options{snmp}->map_instance(mapping => $mapping, results => $results, instance => $1);
last
}
}
my $free = $result->{memPlatformTotal} - $result->{memPlatformUsed};
$self->{memory} = {
total => $result->{memPlatformTotal},
used => $result->{memPlatformUsed},
free => $free,
prct_used => ($result->{memPlatformUsed} / $result->{memPlatformTotal}) * 100,
prct_free => $free * 100 / $result->{memPlatformTotal},
};
}
1;
__END__
=head1 MODE
Check memory usage.
- memory.free.bytes Total amount of platform free memory in bytes
- memory.free.percent Total amount of platform used memory in percent
- memory.usage.bytes Total amount of platform used memory in bytes
- memory.usage.percent Total amount of platform used memory in percent
=over 8
=item B<--filter-counters>
Only display some counters (regexp can be used).
Can be : usage free usage-prct free-prct
Example : --filter-counters='^usage$'
=item B<--warning-free>
Threshold in bytes.
=item B<--critical-free>
Threshold in bytes.
=item B<--warning-free-prct>
Threshold in percentage.
=item B<--critical-free-prct>
Threshold in percentage.
=item B<--warning-usage>
Threshold in bytes.
=item B<--critical-usage>
Threshold in bytes.
=item B<--warning-usage-prct>
Threshold in percentage.
=item B<--critical-usage-prct>
Threshold in percentage.
=back
=cut

View File

@ -0,0 +1,50 @@
#
# Copyright 2025 Centreon (http://www.centreon.com/)
#
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package os::f5os::snmp::plugin;
use strict;
use warnings;
use base qw(centreon::plugins::script_snmp);
sub new {
my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options);
bless $self, $class;
$self->{modes} = {
'cpu-usage' => 'os::f5os::snmp::mode::cpuusage',
'hardware' => 'os::f5os::snmp::mode::hardware',
'memory' => 'os::f5os::snmp::mode::memory',
};
return $self;
}
1;
__END__
=head1 PLUGIN DESCRIPTION
Check F5OS in SNMP.
Please use the SNMP F5OS plugin for system checks (CPU, memory, hardware, ...).
=cut

View File

@ -0,0 +1,32 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Suite Setup Ctn Generic Suite Setup
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS} --plugin=os::f5os::snmp::plugin
*** Test Cases ***
cpu-usage ${tc}
[Tags] os f5os snmp
${command} Catenate
... ${CMD}
... --mode=cpu-usage
... --hostname=${HOSTNAME}
... --snmp-version=${SNMPVERSION}
... --snmp-port=${SNMPPORT}
... --snmp-community=os/f5os/snmp/f5os
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} OK: CPU(s) average usage is: 8.00 % | 'cpu.usage.percent'=8.00%;;;0;100 '0#cpu.core.current.usage.percent'=0%;;;0;100 '0#cpu.core.usage.avg.5s.percent'=0%;;;0;100 '0#cpu.core.usage.avg.1m.percent'=1%;;;0;100 '0#cpu.core.usage.avg.5m.percent'=1%;;;0;100 '1#cpu.core.current.usage.percent'=16%;;;0;100 '1#cpu.core.usage.avg.5s.percent'=10%;;;0;100 '1#cpu.core.usage.avg.1m.percent'=15%;;;0;100 '1#cpu.core.usage.avg.5m.percent'=50%;;;0;100
... 2 --include-id='1' OK: CPU(s) average usage is: 16.00 % - CPU '1' CPU Usage Current : 16 %, CPU Usage 5sec : 10 %, CPU Usage 1min : 15 %, CPU Usage 5min : 50 % | 'cpu.usage.percent'=16.00%;;;0;100 '1#cpu.core.current.usage.percent'=16%;;;0;100 '1#cpu.core.usage.avg.5s.percent'=10%;;;0;100 '1#cpu.core.usage.avg.1m.percent'=15%;;;0;100 '1#cpu.core.usage.avg.5m.percent'=50%;;;0;100
... 3 --include-name='Anonymized 118' OK: CPU(s) average usage is: 0.00 % - CPU '0' CPU Usage Current : 0 %, CPU Usage 5sec : 0 %, CPU Usage 1min : 1 %, CPU Usage 5min : 1 % | 'cpu.usage.percent'=0.00%;;;0;100 '0#cpu.core.current.usage.percent'=0%;;;0;100 '0#cpu.core.usage.avg.5s.percent'=0%;;;0;100 '0#cpu.core.usage.avg.1m.percent'=1%;;;0;100 '0#cpu.core.usage.avg.5m.percent'=1%;;;0;100
... 4 --critical-core-avg-1m=10 CRITICAL: CPU '1' CPU Usage 1min : 15 % | 'cpu.usage.percent'=8.00%;;;0;100 '0#cpu.core.current.usage.percent'=0%;;;0;100 '0#cpu.core.usage.avg.5s.percent'=0%;;;0;100 '0#cpu.core.usage.avg.1m.percent'=1%;;0:10;0;100 '0#cpu.core.usage.avg.5m.percent'=1%;;;0;100 '1#cpu.core.current.usage.percent'=16%;;;0;100 '1#cpu.core.usage.avg.5s.percent'=10%;;;0;100 '1#cpu.core.usage.avg.1m.percent'=15%;;0:10;0;100 '1#cpu.core.usage.avg.5m.percent'=50%;;;0;100
... 5 --warning-core-avg-5m=20 WARNING: CPU '1' CPU Usage 5min : 50 % | 'cpu.usage.percent'=8.00%;;;0;100 '0#cpu.core.current.usage.percent'=0%;;;0;100 '0#cpu.core.usage.avg.5s.percent'=0%;;;0;100 '0#cpu.core.usage.avg.1m.percent'=1%;;;0;100 '0#cpu.core.usage.avg.5m.percent'=1%;0:20;;0;100 '1#cpu.core.current.usage.percent'=16%;;;0;100 '1#cpu.core.usage.avg.5s.percent'=10%;;;0;100 '1#cpu.core.usage.avg.1m.percent'=15%;;;0;100 '1#cpu.core.usage.avg.5m.percent'=50%;0:20;;0;100
... 6 --include-id=1 --include-name='Anonymized 118' OK: CPU(s) average usage is: 8.00 % | 'cpu.usage.percent'=8.00%;;;0;100 '0#cpu.core.current.usage.percent'=0%;;;0;100 '0#cpu.core.usage.avg.5s.percent'=0%;;;0;100 '0#cpu.core.usage.avg.1m.percent'=1%;;;0;100 '0#cpu.core.usage.avg.5m.percent'=1%;;;0;100 '1#cpu.core.current.usage.percent'=16%;;;0;100 '1#cpu.core.usage.avg.5s.percent'=10%;;;0;100 '1#cpu.core.usage.avg.1m.percent'=15%;;;0;100 '1#cpu.core.usage.avg.5m.percent'=50%;;;0;100

View File

@ -0,0 +1,29 @@
.1.3.6.1.4.1.12276.1.2.1.1.3.1.1.8.112.108.97.116.102.111.114.109.0 = INTEGER: 0
.1.3.6.1.4.1.12276.1.2.1.1.3.1.1.8.112.108.97.116.102.111.114.109.1 = INTEGER: 1
.1.3.6.1.4.1.12276.1.2.1.1.3.1.2.8.112.108.97.116.102.111.114.109.0 = STRING: Anonymized 118
.1.3.6.1.4.1.12276.1.2.1.1.3.1.2.8.112.108.97.116.102.111.114.109.1 = STRING: Anonymized 040
.1.3.6.1.4.1.12276.1.2.1.1.3.1.3.8.112.108.97.116.102.111.114.109.0 = INTEGER: 0
.1.3.6.1.4.1.12276.1.2.1.1.3.1.3.8.112.108.97.116.102.111.114.109.1 = INTEGER: 16
.1.3.6.1.4.1.12276.1.2.1.1.3.1.4.8.112.108.97.116.102.111.114.109.0 = INTEGER: 0
.1.3.6.1.4.1.12276.1.2.1.1.3.1.4.8.112.108.97.116.102.111.114.109.1 = INTEGER: 10
.1.3.6.1.4.1.12276.1.2.1.1.3.1.5.8.112.108.97.116.102.111.114.109.0 = INTEGER: 1
.1.3.6.1.4.1.12276.1.2.1.1.3.1.5.8.112.108.97.116.102.111.114.109.1 = INTEGER: 15
.1.3.6.1.4.1.12276.1.2.1.1.3.1.6.8.112.108.97.116.102.111.114.109.0 = INTEGER: 1
.1.3.6.1.4.1.12276.1.2.1.1.3.1.6.8.112.108.97.116.102.111.114.109.1 = INTEGER: 50
.1.3.6.1.4.1.12276.1.2.1.3.1.1.2.8.112.108.97.116.102.111.114.109 = INTEGER: 316
.1.3.6.1.4.1.12276.1.2.1.3.1.1.3.8.112.108.97.116.102.111.114.109 = INTEGER: 321
.1.3.6.1.4.1.12276.1.2.1.3.1.1.4.8.112.108.97.116.102.111.114.109 = INTEGER: 312
.1.3.6.1.4.1.12276.1.2.1.3.1.1.5.8.112.108.97.116.102.111.114.109 = INTEGER: 338
.1.3.6.1.4.1.12276.1.2.1.4.1.1.2.8.112.108.97.116.102.111.114.109 = Counter64: 9355182080
.1.3.6.1.4.1.12276.1.2.1.4.1.1.3.8.112.108.97.116.102.111.114.109 = Counter64: 1082265600
.1.3.6.1.4.1.12276.1.2.1.4.1.1.4.8.112.108.97.116.102.111.114.109 = INTEGER: 93
.1.3.6.1.4.1.12276.1.2.1.4.1.1.5.8.112.108.97.116.102.111.114.109 = Counter64: 16107667456
.1.3.6.1.4.1.12276.1.2.1.4.1.1.6.8.112.108.97.116.102.111.114.109 = Counter64: 7085105152
.1.3.6.1.4.1.12276.1.2.1.7.1.1.1.8.112.108.97.116.102.111.114.109 = INTEGER: 15482
.1.3.6.1.4.1.12276.1.2.1.7.1.1.2.8.112.108.97.116.102.111.114.109 = INTEGER: 17323
.1.3.6.1.4.1.12276.1.2.1.7.1.1.3.8.112.108.97.116.102.111.114.109 = INTEGER: 17121
.1.3.6.1.4.1.12276.1.2.1.7.1.1.4.8.112.108.97.116.102.111.114.109 = INTEGER: 17512
.1.3.6.1.4.1.12276.1.2.1.7.1.1.5.8.112.108.97.116.102.111.114.109 = INTEGER: 17695
.1.3.6.1.4.1.12276.1.2.1.7.1.1.6.8.112.108.97.116.102.111.114.109 = INTEGER: 13543
.1.3.6.1.4.1.12276.1.2.1.7.1.1.7.8.112.108.97.116.102.111.114.109 = INTEGER: 16678
.1.3.6.1.4.1.12276.1.2.1.7.1.1.8.8.112.108.97.116.102.111.114.109 = INTEGER: 17843

View File

@ -0,0 +1,34 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Suite Setup Ctn Generic Suite Setup
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS} --plugin=os::f5os::snmp::plugin
*** Test Cases ***
hardware ${tc}
[Tags] os f5os snmp
${command} Catenate
... ${CMD}
... --mode=hardware
... --hostname=${HOSTNAME}
... --snmp-version=${SNMPVERSION}
... --snmp-port=${SNMPPORT}
... --snmp-community=os/f5os/snmp/f5os
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} OK: Current temperature: 31.6 C, average: 32.1 C, minimum: 31.2 C, maximum: 33.8 C - All fans are ok | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;;; '1#fantray.fanspeed.rpm'=15482rpm;;;0; '2#fantray.fanspeed.rpm'=17323rpm;;;0; '3#fantray.fanspeed.rpm'=17121rpm;;;0; '4#fantray.fanspeed.rpm'=17512rpm;;;0; '5#fantray.fanspeed.rpm'=17695rpm;;;0; '6#fantray.fanspeed.rpm'=13543rpm;;;0; '7#fantray.fanspeed.rpm'=16678rpm;;;0; '8#fantray.fanspeed.rpm'=17843rpm;;;0;
... 2 --filter-counters=min-temperature OK: minimum: 31.2 C | 'temperature.min.1h.celsius'=31.2C;;;;
... 3 --include-id=2 OK: Current temperature: 31.6 C, average: 32.1 C, minimum: 31.2 C, maximum: 33.8 C - fan '2' speed is 17323 rpm | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;;; '2#fantray.fanspeed.rpm'=17323rpm;;;0;
... 4 --warning-current-temperature=10 WARNING: Current temperature: 31.6 C | 'temperature.current.celsius'=31.6C;0:10;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;;; '1#fantray.fanspeed.rpm'=15482rpm;;;0; '2#fantray.fanspeed.rpm'=17323rpm;;;0; '3#fantray.fanspeed.rpm'=17121rpm;;;0; '4#fantray.fanspeed.rpm'=17512rpm;;;0; '5#fantray.fanspeed.rpm'=17695rpm;;;0; '6#fantray.fanspeed.rpm'=13543rpm;;;0; '7#fantray.fanspeed.rpm'=16678rpm;;;0; '8#fantray.fanspeed.rpm'=17843rpm;;;0;
... 5 --warning-average-temperature=10 WARNING: average: 32.1 C | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;0:10;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;;; '1#fantray.fanspeed.rpm'=15482rpm;;;0; '2#fantray.fanspeed.rpm'=17323rpm;;;0; '3#fantray.fanspeed.rpm'=17121rpm;;;0; '4#fantray.fanspeed.rpm'=17512rpm;;;0; '5#fantray.fanspeed.rpm'=17695rpm;;;0; '6#fantray.fanspeed.rpm'=13543rpm;;;0; '7#fantray.fanspeed.rpm'=16678rpm;;;0; '8#fantray.fanspeed.rpm'=17843rpm;;;0;
... 6 --critical-min-temperature=20 CRITICAL: minimum: 31.2 C | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;0:20;; 'temperature#temperature.max.1h.celsius'=33.8C;;;; '1#fantray.fanspeed.rpm'=15482rpm;;;0; '2#fantray.fanspeed.rpm'=17323rpm;;;0; '3#fantray.fanspeed.rpm'=17121rpm;;;0; '4#fantray.fanspeed.rpm'=17512rpm;;;0; '5#fantray.fanspeed.rpm'=17695rpm;;;0; '6#fantray.fanspeed.rpm'=13543rpm;;;0; '7#fantray.fanspeed.rpm'=16678rpm;;;0; '8#fantray.fanspeed.rpm'=17843rpm;;;0;
... 7 --critical-max-temperature=10 CRITICAL: maximum: 33.8 C | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;0:10;; '1#fantray.fanspeed.rpm'=15482rpm;;;0; '2#fantray.fanspeed.rpm'=17323rpm;;;0; '3#fantray.fanspeed.rpm'=17121rpm;;;0; '4#fantray.fanspeed.rpm'=17512rpm;;;0; '5#fantray.fanspeed.rpm'=17695rpm;;;0; '6#fantray.fanspeed.rpm'=13543rpm;;;0; '7#fantray.fanspeed.rpm'=16678rpm;;;0; '8#fantray.fanspeed.rpm'=17843rpm;;;0;
... 8 --component=temperature OK: Current temperature: 31.6 C, average: 32.1 C, minimum: 31.2 C, maximum: 33.8 C | 'temperature.current.celsius'=31.6C;;;; 'temperature.average.1h.celsius'=32.1C;;;; 'temperature.min.1h.celsius'=31.2C;;;; 'temperature#temperature.max.1h.celsius'=33.8C;;;;

View File

@ -0,0 +1,31 @@
*** Settings ***
Resource ${CURDIR}${/}..${/}..${/}..${/}resources/import.resource
Suite Setup Ctn Generic Suite Setup
Test Timeout 120s
*** Variables ***
${CMD} ${CENTREON_PLUGINS} --plugin=os::f5os::snmp::plugin
*** Test Cases ***
memory ${tc}
[Tags] os f5os snmp
${command} Catenate
... ${CMD}
... --mode=memory
... --hostname=${HOSTNAME}
... --snmp-version=${SNMPVERSION}
... --snmp-port=${SNMPPORT}
... --snmp-community=os/f5os/snmp/f5os
... ${extra_options}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extra_options expected_result --
... 1 ${EMPTY} OK: Memory total: 15.00 GB used: 6.60 GB (43.99%) free: 8.40 GB (56.01%) | 'memory.usage.bytes'=7085105152B;;;0;16107667456 'memory.free.bytes'=9022562304B;;;0;16107667456 'memory.usage.percent'=43.99%;;;0;100 'memory.free.percent'=56.01%;;;0;100
... 2 --warning-usage=:5GB WARNING: Memory total: 15.00 GB used: 6.60 GB (43.99%) free: 8.40 GB (56.01%) | 'memory.usage.bytes'=7085105152B;0:5368709120;;0;16107667456 'memory.free.bytes'=9022562304B;;;0;16107667456 'memory.usage.percent'=43.99%;;;0;100 'memory.free.percent'=56.01%;;;0;100
... 3 --critical-free=:6GB CRITICAL: Memory total: 15.00 GB used: 6.60 GB (43.99%) free: 8.40 GB (56.01%) | 'memory.usage.bytes'=7085105152B;;;0;16107667456 'memory.free.bytes'=9022562304B;;0:6442450944;0;16107667456 'memory.usage.percent'=43.99%;;;0;100 'memory.free.percent'=56.01%;;;0;100
... 4 --critical-usage-prct=40 CRITICAL: Memory total: 15.00 GB used: 6.60 GB (43.99%) free: 8.40 GB (56.01%) | 'memory.usage.bytes'=7085105152B;;;0;16107667456 'memory.free.bytes'=9022562304B;;;0;16107667456 'memory.usage.percent'=43.99%;;0:40;0;100 'memory.free.percent'=56.01%;;;0;100
... 5 --warning-free-prct=60: WARNING: Memory total: 15.00 GB used: 6.60 GB (43.99%) free: 8.40 GB (56.01%) | 'memory.usage.bytes'=7085105152B;;;0;16107667456 'memory.free.bytes'=9022562304B;;;0;16107667456 'memory.usage.percent'=43.99%;;;0;100 'memory.free.percent'=56.01%;60:;;0;100

View File

@ -76,6 +76,7 @@ eth
Exense Exense
ext4 ext4
F5 F5
F5OS
failover failover
fanspeed fanspeed
FCCapacity FCCapacity