New pack LatenceTech : mode latency

Co-authored-by: thibaults-centreon <tscheitenberger@centreon.com>
This commit is contained in:
Sophie Depassio 2025-07-25 13:56:28 +02:00
parent 6b2e02bbd9
commit 9cfbac377e
4 changed files with 411 additions and 1 deletions

View File

@ -0,0 +1,172 @@
#
# 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 apps::monitoring::latencetech::restapi::mode::latency;
use base qw(centreon::plugins::templates::counter);
use strict;
use warnings;
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters_type} = [
{ name => 'latency', type => 1, cb_prefix_output => 'prefix_output', message_multiple => 'All latencies are OK', skipped_code => { -10 => 1 } }
];
$self->{maps_counters}->{latency} = [
{ label => 'latency-average', nlabel => 'latency.average.milliseconds', set => {
key_values => [ { name => 'latency_average' }, { name => 'points' }, { name => 'display' },{ name => 'protocol' } ],
output_template => 'average: %.2fms',
perfdatas => [
{ value => 'latency_average', template => '%.2f',
min => 0, unit => 'ms', label_extra_instance => 1, instance_use => 'protocol' },
],
}
},
{ label => 'latency-minimum', nlabel => 'latency.minimum.milliseconds', set => {
key_values => [ { name => 'latency_minimum' }, { name => 'protocol' } ],
output_template => 'minimum: %.2fms',
perfdatas => [
{ value => 'latency_minimum', template => '%.2f',
min => 0, unit => 'ms', label_extra_instance => 1, instance_use => 'protocol' },
],
}
},
{ label => 'latency-maximum', nlabel => 'latency.maximum.milliseconds', set => {
key_values => [ { name => 'latency_maximum' }, { name => 'protocol' } ],
output_template => 'maximum: %.2fms',
perfdatas => [
{ value => 'latency_maximum', template => '%.2f',
min => 0, unit => 'ms', label_extra_instance => 1, instance_use => 'protocol' },
],
}
}
];
}
sub prefix_output {
my ($self, %options) = @_;
return sprintf('Latency for Agent %s, Protocol %s (%s points): ', $options{instance_value}->{display}, $options{instance_value}->{protocol}, $options{instance_value}->{points});
}
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 => {
'filter-protocol:s' => { name => 'filter_protocol' },
'timerange:s' => { name => 'time_range', default => '300'}
});
return $self;
}
sub check_options {
my ($self, %options) = @_;
$self->SUPER::check_options(%options);
}
sub manage_selection {
my ($self, %options) = @_;
foreach my $protocol ('tcp', 'udp', 'http', 'https', 'icmp', 'twamp') {
next if (defined($self->{option_results}->{filter_protocol}) && $self->{option_results}->{filter_protocol} ne '' &&
$protocol !~ /$self->{option_results}->{filter_protocol}/i);
my @get_param = [
"protocol=$protocol",
"time_range=$self->{option_results}->{time_range}"
];
my $results = $options{custom}->request_api(endpoint => '/latency', get_param => @get_param);
foreach my $timeserie (@{$results}) {
$self->{latency}->{$protocol}->{display} = $timeserie->{agentID};
$self->{latency}->{$protocol}->{protocol} = $timeserie->{measurement};
$self->{timeseries}->{$protocol}->{points}++;
$self->{timeseries}->{$protocol}->{total} += $timeserie->{value};
$self->{timeseries}->{$protocol}->{metrics}->{minimum} = $timeserie->{value}
if (!defined($self->{timeseries}->{$protocol}->{metrics}->{minimum}) || $timeserie->{value} < $self->{timeseries}->{$protocol}->{metrics}->{minimum});
$self->{timeseries}->{$protocol}->{metrics}->{maximum} = $timeserie->{value}
if (!defined($self->{timeseries}->{$protocol}->{metrics}->{maximum}) || $timeserie->{value} > $self->{timeseries}->{$protocol}->{metrics}->{maximum});
}
$self->{timeseries}->{$protocol}->{metrics}->{average} = $self->{timeseries}->{$protocol}->{total} / $self->{timeseries}->{$protocol}->{points}++;
$self->{latency}->{$protocol}->{points} = $self->{timeseries}->{$protocol}->{points};
foreach (keys %{$self->{timeseries}->{$protocol}->{metrics}}) {
$self->{latency}->{$protocol}->{"latency_" . $_} = $self->{timeseries}->{$protocol}->{metrics}->{$_};
}
}
}
1;
__END__
=head1 MODE
Check agent latency statistics.
=over 8
=item B<--agent-id>
Set the ID of the agent (mandatory option).
=item B<--filter-protocol>
Filter protocol if needed (can be a regexp)
Accepted values are C<tcp>, C<udp>, C<http>, C<https>, C<icmp>, C<twamp>.
=item B<--timerange>
Choose a timerange of values on wich datas shoud be aggregated (in seconds).
(default: '300')
=item B<--warning-latency-average>
Warning thresholds for average latency.
=item B<--critical-latency-average>
Critical thresholds for average latency.
=item B<--warning-latency-minimum>
Warning thresholds for minimum latency.
=item B<--critical-latency-minimum>
Critical thresholds for minimum latency.
=item B<--warning-latency-maximum>
Warning thresholds for maximum latency.
=item B<--critical-latency-maximum>
Critical thresholds for maximum latency.
=back
=cut

View File

@ -33,7 +33,8 @@ sub new {
$self->{modes} = {
'connectivity' => 'apps::monitoring::latencetech::restapi::mode::connectivity',
'discovery' => 'apps::monitoring::latencetech::restapi::mode::discovery',
'forecast' => 'apps::monitoring::latencetech::restapi::mode::forecast'
'forecast' => 'apps::monitoring::latencetech::restapi::mode::forecast',
'latency' => 'apps::monitoring::latencetech::restapi::mode::latency'
};
$self->{custom_modes}->{api} = 'apps::monitoring::latencetech::restapi::custom::api';

View File

@ -0,0 +1,61 @@
*** Settings ***
Documentation Check the LatenceTech latency mode with api custom mode
Resource ${CURDIR}${/}..${/}..${/}..${/}..${/}resources/import.resource
Suite Setup Start Mockoon ${MOCKOON_JSON}
Suite Teardown Stop Mockoon
Test Timeout 120s
*** Variables ***
${MOCKOON_JSON} ${CURDIR}${/}mockoon.json
${cmd} ${CENTREON_PLUGINS}
... --plugin=apps::monitoring::latencetech::restapi::plugin
... --custommode=api
... --mode=latency
... --hostname=${HOSTNAME}
... --api-key=key
... --port=${APIPORT}
... --proto=http
*** Test Cases ***
Latency ${tc}
[Documentation] Check the agent latency statistics
[Tags] apps monitoring latencetech restapi
${command} Catenate
... ${cmd}
... --customer-id=0
... --agent-id=2
... ${extraoptions}
Log ${cmd}
Ctn Run Command And Check Result As Strings ${command} ${expected_result}
Examples: tc extraoptions expected_result --
... 1 ${EMPTY}
... OK: All latencies are OK | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;;0; 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;;0;
... 2 --filter-protocol=tcp
... OK: Latency for Agent 2, Protocol tcp_result (150 points): average: 9.35ms, minimum: 8.38ms, maximum: 22.56ms | 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0;
... 3 --filter-protocol='http.*'
... OK: All latencies are OK | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0;
... 4 --filter-protocol='http(s)?'
... OK: All latencies are OK | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0;
... 5 --filter-protocol='https|icmp'
... OK: All latencies are OK | 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0;
... 6 --warning-latency-average=8
... WARNING: Latency for Agent 2, Protocol http_result (149 points): average: 9.18ms - Latency for Agent 2, Protocol https_result (146 points): average: 18.05ms - Latency for Agent 2, Protocol icmp_result (149 points): average: 9.16ms - Latency for Agent 2, Protocol tcp_result (150 points): average: 9.35ms - Latency for Agent 2, Protocol twamp_result (142 points): average: 9.16ms - Latency for Agent 2, Protocol udp_result (150 points): average: 9.36ms | 'http_result#latency.average.milliseconds'=9.18ms;0:8;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;0:8;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;0:8;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;0:8;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;0:8;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;;0; 'udp_result#latency.average.milliseconds'=9.36ms;0:8;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;;0;
... 7 --critical-latency-average=9
... CRITICAL: Latency for Agent 2, Protocol http_result (149 points): average: 9.18ms - Latency for Agent 2, Protocol https_result (146 points): average: 18.05ms - Latency for Agent 2, Protocol icmp_result (149 points): average: 9.16ms - Latency for Agent 2, Protocol tcp_result (150 points): average: 9.35ms - Latency for Agent 2, Protocol twamp_result (142 points): average: 9.16ms - Latency for Agent 2, Protocol udp_result (150 points): average: 9.36ms | 'http_result#latency.average.milliseconds'=9.18ms;;0:9;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;0:9;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;0:9;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;0:9;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;0:9;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;;0; 'udp_result#latency.average.milliseconds'=9.36ms;;0:9;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;;0;
... 8 --warning-latency-minimum=7
... WARNING: Latency for Agent 2, Protocol http_result (149 points): minimum: 8.51ms - Latency for Agent 2, Protocol https_result (146 points): minimum: 16.72ms - Latency for Agent 2, Protocol icmp_result (149 points): minimum: 8.37ms - Latency for Agent 2, Protocol tcp_result (150 points): minimum: 8.38ms - Latency for Agent 2, Protocol twamp_result (142 points): minimum: 8.36ms - Latency for Agent 2, Protocol udp_result (150 points): minimum: 8.57ms | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;0:7;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;0:7;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;0:7;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;0:7;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;0:7;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;;0; 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;0:7;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;;0;
... 9 --critical-latency-minimum=8
... CRITICAL: Latency for Agent 2, Protocol http_result (149 points): minimum: 8.51ms - Latency for Agent 2, Protocol https_result (146 points): minimum: 16.72ms - Latency for Agent 2, Protocol icmp_result (149 points): minimum: 8.37ms - Latency for Agent 2, Protocol tcp_result (150 points): minimum: 8.38ms - Latency for Agent 2, Protocol twamp_result (142 points): minimum: 8.36ms - Latency for Agent 2, Protocol udp_result (150 points): minimum: 8.57ms | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;0:8;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;0:8;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;0:8;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;0:8;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;0:8;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;;0; 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;0:8;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;;0;
... 10 --warning-latency-maximum=14
... WARNING: Latency for Agent 2, Protocol http_result (149 points): maximum: 15.62ms - Latency for Agent 2, Protocol https_result (146 points): maximum: 27.29ms - Latency for Agent 2, Protocol icmp_result (149 points): maximum: 22.10ms - Latency for Agent 2, Protocol tcp_result (150 points): maximum: 22.56ms - Latency for Agent 2, Protocol twamp_result (142 points): maximum: 15.86ms - Latency for Agent 2, Protocol udp_result (150 points): maximum: 22.13ms | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;0:14;;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;0:14;;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;0:14;;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;0:14;;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;0:14;;0; 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;0:14;;0;
... 11 --critical-latency-maximum=15
... CRITICAL: Latency for Agent 2, Protocol http_result (149 points): maximum: 15.62ms - Latency for Agent 2, Protocol https_result (146 points): maximum: 27.29ms - Latency for Agent 2, Protocol icmp_result (149 points): maximum: 22.10ms - Latency for Agent 2, Protocol tcp_result (150 points): maximum: 22.56ms - Latency for Agent 2, Protocol twamp_result (142 points): maximum: 15.86ms - Latency for Agent 2, Protocol udp_result (150 points): maximum: 22.13ms | 'http_result#latency.average.milliseconds'=9.18ms;;;0; 'http_result#latency.minimum.milliseconds'=8.51ms;;;0; 'http_result#latency.maximum.milliseconds'=15.62ms;;0:15;0; 'https_result#latency.average.milliseconds'=18.05ms;;;0; 'https_result#latency.minimum.milliseconds'=16.72ms;;;0; 'https_result#latency.maximum.milliseconds'=27.29ms;;0:15;0; 'icmp_result#latency.average.milliseconds'=9.16ms;;;0; 'icmp_result#latency.minimum.milliseconds'=8.37ms;;;0; 'icmp_result#latency.maximum.milliseconds'=22.10ms;;0:15;0; 'tcp_result#latency.average.milliseconds'=9.35ms;;;0; 'tcp_result#latency.minimum.milliseconds'=8.38ms;;;0; 'tcp_result#latency.maximum.milliseconds'=22.56ms;;0:15;0; 'twamp_result#latency.average.milliseconds'=9.16ms;;;0; 'twamp_result#latency.minimum.milliseconds'=8.36ms;;;0; 'twamp_result#latency.maximum.milliseconds'=15.86ms;;0:15;0; 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;0:15;0;
... 12 --filter-protocol=udp --critical-latency-maximum=20
... CRITICAL: Latency for Agent 2, Protocol udp_result (150 points): maximum: 22.13ms | 'udp_result#latency.average.milliseconds'=9.36ms;;;0; 'udp_result#latency.minimum.milliseconds'=8.57ms;;;0; 'udp_result#latency.maximum.milliseconds'=22.13ms;;0:20;0;

File diff suppressed because one or more lines are too long