From 8486e3592a5f2cdb2182992fc224b6148c369eba Mon Sep 17 00:00:00 2001 From: Lucie Dubrunfaut Date: Thu, 13 Feb 2025 14:23:17 +0100 Subject: [PATCH 1/3] enh(iplabel::ekara::restapi::scenarios): reworked defaults status --- src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm index 740d244431..b04251b3fa 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm @@ -61,9 +61,9 @@ sub set_counters { $self->{maps_counters}->{global} = [ { label => 'scenario-status', type => 2, - warning_default => '%{status} =~ /(Aborted|Stopped|Excluded|Degraded)/', + warning_default => '%{status} =~ "Degraded"', critical_default => '%{status} =~ "Failure"', - unknown_default => '%{status} =~ /(Unknown|No execution)/', + unknown_default => '%{status} =~ /(Unknown|No execution|Aborted|Stopped|Excluded)/', set => { key_values => [ { name => 'status' }, { name => 'num_status' }, { name => 'display' } ], closure_custom_output => $self->can('custom_status_output'), From 1b7b8d7468a014ec88e16d83d36be12990db68aa Mon Sep 17 00:00:00 2001 From: EvanAdam Date: Mon, 24 Feb 2025 14:31:33 +0100 Subject: [PATCH 2/3] fix(iplabel): don't show perfdata when the last execution don't have perfdata Refs:CTOR-1394 --- .../iplabel/ekara/restapi/mode/scenarios.pm | 15 ++++- .../restapi/monitoring-iplabel-ekara.json | 66 ++++++++++++++++++- .../iplabel/ekara/restapi/scenarios.robot | 14 +++- 3 files changed, 88 insertions(+), 7 deletions(-) diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm index b04251b3fa..c0d68cabfd 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm @@ -43,7 +43,7 @@ sub prefix_scenario_output { sub prefix_steps_output { my ($self, %options) = @_; - return sprintf(" Step: %s, last exec: %s, ", $options{instance_value}->{display}, $options{instance_value}->{last_exec}); + return sprintf("Step: %s, last exec: %s, ", $options{instance_value}->{display}, $options{instance_value}->{last_exec}); } sub set_counters { @@ -182,7 +182,7 @@ sub manage_selection { } }; if (!defined $scenario_detail->{results} or scalar(@{$scenario_detail->{results}}) <= 0) { - $self->{output}->add_option_msg(short_msg => "Scenario '" . $scenario->{scenarioName} . "' Don't have any performance data, please try to add a bigger timeframe"); + $self->{output}->add_option_msg(short_msg => "No execution, please try again with a bigger timeframe"); next; } foreach my $kpi (@{$scenario_detail->{kpis}}) { @@ -194,8 +194,17 @@ sub manage_selection { $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{$steps->{index} - 1} = $steps->{name}; } } - + # api is expected to sort the output to get the most recent data at the end of the array. + # we store the last execution date, and check it for every data point sent back by the api. + # If a step fail, no data is sent by the api for this step, but the older execution are present. + # this allow to get perfdata for the last execution with a successfull first step. + # if the first step fail, the script will take older data. + my $last_execution = @{$scenario_detail->{results}}[-1]->{planningTime}; foreach my $step_metrics (@{$scenario_detail->{results}}) { + if ($step_metrics->{planningTime} ne $last_execution){ + $self->{output}->add_option_msg(long_msg => "Execution $step_metrics->{planningTime} of step $step_metrics->{stepId} is older than $last_execution, not taking it into account.", debug => 1); + next; + } my $exec_time = str2time($step_metrics->{planningTime}, 'GMT'); $self->{scenarios}->{ $scenario->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{ $step_metrics->{metric} } = $step_metrics->{value}; $self->{scenarios}->{ $scenario->{scenarioName} }->{steps}->{ $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{ $step_metrics->{stepId} } }->{last_exec} = POSIX::strftime('%d-%m-%Y %H:%M:%S %Z', localtime($exec_time)); diff --git a/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json b/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json index d4cd686c6f..ee3c257c93 100644 --- a/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json +++ b/tests/monitoring/iplabel/ekara/restapi/monitoring-iplabel-ekara.json @@ -113,7 +113,7 @@ "responses": [ { "uuid": "e68a70e7-5eef-4f78-808c-e3cdaa19606c", - "body": "[\n {\n \"scenarioId\": \"09fe2561-315b-470f-a7ac-9c30fbd2e0fb\",\n \"scenarioName\": \"AKILA - (Web) \",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:21:03Z\"\n },\n {\n \"scenarioId\": \"127a149b-0fa6-4859-820e-9c4db23b6454\",\n \"scenarioName\": \"AKILA - (Browser Page Load)\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T07:20:08Z\"\n },\n {\n \"scenarioId\": \"41d36b91-a4d3-4b00-a3ca-9e4fcf737d30\",\n \"scenarioName\": \"Centreon Demo Parcours - Custom views\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:48:39Z\"\n },\n {\n \"scenarioId\": \"425bff8b-51eb-4b68-8529-6258e7b7888c\",\n \"scenarioName\": \"Centreon Demo ping Paris\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-04T06:15:00Z\"\n },\n {\n \"scenarioId\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scenarioName\": \"Centreon Demo Navigation\",\n \"currentStatus\": 2,\n \"startTime\": \"2024-12-30T10:06:04Z\"\n },\n {\n \"scenarioId\": \"4fa9f25d-ae49-4848-823a-945e7f865f4b\",\n \"scenarioName\": \"Centreon Demo ping NA\",\n \"currentStatus\": 8,\n \"startTime\": \"2024-12-30T10:30:21Z\"\n },\n {\n \"scenarioId\": \"7622678e-ffec-49f5-8a67-7d1b4452bff6\",\n \"scenarioName\": \"wrong currentstatus, no perfdata\",\n \"currentStatus\": 14,\n \"startTime\": \"2024-12-30T02:00:45Z\"\n },\n {\n \"scenarioId\": \"8d0a798c-1b47-4142-869d-9bdabc9c126c\",\n \"scenarioName\": \"Centreon Demo Parcours - Login\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:51:35Z\"\n },\n {\n \"scenarioId\": \"eae701ac-4231-4fc5-94e3-08601ac591e9\",\n \"scenarioName\": \"Centreon Demo ping Singapore\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:15:11Z\"\n },\n {\n \"scenarioId\": \"fc6b739e-c18c-40ab-917c-61d20dff830c\",\n \"scenarioName\": \"AKILA - Business App\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T09:30:23Z\"\n },\n {\n \"scenarioId\": \"fe1ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"AKILA - (API) \",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n }\n]", + "body": "[\n {\n \"scenarioId\": \"09fe2561-315b-470f-a7ac-9c30fbd2e0fb\",\n \"scenarioName\": \"AKILA - (Web)\",\n \"currentStatus\": 2,\n \"startTime\": \"2024-12-30T10:21:03Z\"\n },\n {\n \"scenarioId\": \"127a149b-0fa6-4859-820e-9c4db23b6454\",\n \"scenarioName\": \"AKILA - (Browser Page Load)\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T07:20:08Z\"\n },\n {\n \"scenarioId\": \"41d36b91-a4d3-4b00-a3ca-9e4fcf737d30\",\n \"scenarioName\": \"Centreon Demo Parcours - Custom views\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:48:39Z\"\n },\n {\n \"scenarioId\": \"425bff8b-51eb-4b68-8529-6258e7b7888c\",\n \"scenarioName\": \"Centreon Demo ping Paris\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-04T06:15:00Z\"\n },\n {\n \"scenarioId\": \"478a6915-1c00-4e85-9fe2-7d919e28ce88\",\n \"scenarioName\": \"Centreon Demo Navigation\",\n \"currentStatus\": 2,\n \"startTime\": \"2024-12-30T10:06:04Z\"\n },\n {\n \"scenarioId\": \"4fa9f25d-ae49-4848-823a-945e7f865f4b\",\n \"scenarioName\": \"Centreon Demo ping NA\",\n \"currentStatus\": 8,\n \"startTime\": \"2024-12-30T10:30:21Z\"\n },\n {\n \"scenarioId\": \"7622678e-ffec-49f5-8a67-7d1b4452bff6\",\n \"scenarioName\": \"wrong currentstatus, no perfdata\",\n \"currentStatus\": 14,\n \"startTime\": \"2024-12-30T02:00:45Z\"\n },\n {\n \"scenarioId\": \"8d0a798c-1b47-4142-869d-9bdabc9c126c\",\n \"scenarioName\": \"Centreon Demo Parcours - Login\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-29T23:51:35Z\"\n },\n {\n \"scenarioId\": \"eae701ac-4231-4fc5-94e3-08601ac591e9\",\n \"scenarioName\": \"Centreon Demo ping Singapore\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:15:11Z\"\n },\n {\n \"scenarioId\": \"fc6b739e-c18c-40ab-917c-61d20dff830c\",\n \"scenarioName\": \"AKILA - Business App\",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T09:30:23Z\"\n },\n {\n \"scenarioId\": \"fe1ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"AKILA - (API) \",\n \"currentStatus\": 1,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 0\",\n \"currentStatus\": 0,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 3\",\n \"currentStatus\": 3,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 4\",\n \"currentStatus\": 4,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 5\",\n \"currentStatus\": 5,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 6\",\n \"currentStatus\": 6,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n },\n {\n \"scenarioId\": \"121ca10e-1cf6-45c8-a7e9-b9b85272c086\",\n \"scenarioName\": \"unknown Status 7\",\n \"currentStatus\": 7,\n \"startTime\": \"2024-12-30T10:10:55Z\"\n }\n]", "latency": 0, "statusCode": 200, "label": "", @@ -205,7 +205,7 @@ "responses": [ { "uuid": "debf59fb-35ca-4482-b957-5cdf3b7777da", - "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Total time for all steps\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 5822\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 9215,\n \"count\": 2,\n \"value\": 4608\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 109,\n \"count\": 1,\n \"value\": 109\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 87,\n \"count\": 1,\n \"value\": 87\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"eco_index\",\n \"mtr_name\": \"Eco Efficiency\",\n \"mtr_order\": 300,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"nb_dom_elements\",\n \"mtr_name\": \"Number of DOM Elements\",\n \"mtr_order\": -1,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"rum_speedindex\",\n \"mtr_name\": \"RUM Speed Index\",\n \"mtr_order\": 40,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"start_render\",\n \"mtr_name\": \"Start render time\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_appcache\",\n \"mtr_name\": \"Application cache\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_interaction\",\n \"mtr_name\": \"Time to interact\",\n \"mtr_order\": 20,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 20,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_pageload\",\n \"mtr_name\": \"Page load time\",\n \"mtr_order\": 280,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 270,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Total time for all steps\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 30,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fcp\",\n \"mtr_name\": \"First Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fid\",\n \"mtr_name\": \"First Input Delay\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_inp\",\n \"mtr_name\": \"Interaction to Next Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_lcp\",\n \"mtr_name\": \"Largest Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wv_cls\",\n \"mtr_name\": \"Cumulative Layout Shift\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Home\",\n \"index\": 1\n },\n {\n \"name\": \"Dashboard v2\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard v3\",\n \"index\": 3\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_multi_step\",\n \"time_total_allsteps\"\n ]\n }\n ],\n \"plugin_id\": \"WEB\",\n \"plugin_name\": \"Web\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": true,\n \"hasWaterfall\": true,\n \"hasEcoEfficiency\": true,\n \"showThirdPartyContent\": true\n },\n \"scenarioName\": \"AKILA - (Web) \",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T10:21:03Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"51cd37fd-2210-4e92-9690-f6bfd833e560.32\",\n \"planningTime\": \"2024-12-30T10:20:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 45.76\n },\n {\n \"name\": \"Total time for all steps\",\n \"order\": 100,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 4733\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2025-02-24T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 10288,\n \"count\": 2,\n \"value\": 5144\n },\n {\n \"planningTime\": \"2025-02-24T10:40:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 7320,\n \"count\": 2,\n \"value\": 3660\n },\n {\n \"planningTime\": \"2025-02-24T10:40:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 126,\n \"count\": 1,\n \"value\": 126\n },\n {\n \"planningTime\": \"2025-02-24T10:40:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 78,\n \"count\": 1,\n \"value\": 78\n },\n {\n \"planningTime\": \"2025-02-24T10:50:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 6347,\n \"count\": 2,\n \"value\": 3174\n },\n {\n \"planningTime\": \"2025-02-24T10:50:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 152,\n \"count\": 1,\n \"value\": 152\n },\n {\n \"planningTime\": \"2025-02-24T10:50:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 109,\n \"count\": 1,\n \"value\": 109\n },\n {\n \"planningTime\": \"2025-02-24T11:00:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 9041,\n \"count\": 2,\n \"value\": 4521\n },\n {\n \"planningTime\": \"2025-02-24T11:00:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 4623,\n \"count\": 1,\n \"value\": 4623\n },\n {\n \"planningTime\": \"2025-02-24T11:00:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 78,\n \"count\": 1,\n \"value\": 78\n },\n {\n \"planningTime\": \"2025-02-24T11:15:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 5565,\n \"count\": 2,\n \"value\": 2783\n },\n {\n \"planningTime\": \"2025-02-24T11:15:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 1531,\n \"count\": 1,\n \"value\": 1531\n },\n {\n \"planningTime\": \"2025-02-24T11:15:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 124,\n \"count\": 1,\n \"value\": 124\n },\n {\n \"planningTime\": \"2025-02-24T11:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 7322,\n \"count\": 2,\n \"value\": 3661\n },\n {\n \"planningTime\": \"2025-02-24T11:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 127,\n \"count\": 1,\n \"value\": 127\n },\n {\n \"planningTime\": \"2025-02-24T11:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 1975,\n \"count\": 1,\n \"value\": 1975\n },\n {\n \"planningTime\": \"2025-02-24T11:45:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 5449,\n \"count\": 2,\n \"value\": 2725\n },\n {\n \"planningTime\": \"2025-02-24T11:45:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 76,\n \"count\": 1,\n \"value\": 76\n },\n {\n \"planningTime\": \"2025-02-24T11:45:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 25,\n \"count\": 1,\n \"value\": 25\n },\n {\n \"planningTime\": \"2025-02-24T12:00:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 5702,\n \"count\": 2,\n \"value\": 2851\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"eco_index\",\n \"mtr_name\": \"Eco Efficiency\",\n \"mtr_order\": 300,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"nb_dom_elements\",\n \"mtr_name\": \"Number of DOM Elements\",\n \"mtr_order\": -1,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"rum_speedindex\",\n \"mtr_name\": \"RUM Speed Index\",\n \"mtr_order\": 40,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 10,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"start_render\",\n \"mtr_name\": \"Start render time\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_appcache\",\n \"mtr_name\": \"Application cache\",\n \"mtr_order\": 220,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_connect\",\n \"mtr_name\": \"Connection time\",\n \"mtr_order\": 240,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_interaction\",\n \"mtr_name\": \"Time to interact\",\n \"mtr_order\": 20,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 20,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_namelookup\",\n \"mtr_name\": \"Lookup time\",\n \"mtr_order\": 230,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_pageload\",\n \"mtr_name\": \"Page load time\",\n \"mtr_order\": 280,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_received\",\n \"mtr_name\": \"Response time\",\n \"mtr_order\": 270,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_redirect\",\n \"mtr_name\": \"Redirection time\",\n \"mtr_order\": 210,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_request\",\n \"mtr_name\": \"First byte time\",\n \"mtr_order\": 260,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_security_connect\",\n \"mtr_name\": \"TLS time\",\n \"mtr_order\": 250,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Total time for all steps\",\n \"mtr_order\": 100,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": 30,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fcp\",\n \"mtr_name\": \"First Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_fid\",\n \"mtr_name\": \"First Input Delay\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_inp\",\n \"mtr_name\": \"Interaction to Next Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_wv_lcp\",\n \"mtr_name\": \"Largest Contentful Paint\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \"ms\",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wv_cls\",\n \"mtr_name\": \"Cumulative Layout Shift\",\n \"mtr_order\": -1,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"WEB\",\n \"mtr_unit\": \" \",\n \"mtr_preferred_metric\": -1,\n \"filterEnabled\": false,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Home\",\n \"index\": 1\n },\n {\n \"name\": \"Dashboard v2\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard v3\",\n \"index\": 3\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_multi_step\",\n \"time_total_allsteps\"\n ]\n }\n ],\n \"plugin_id\": \"WEB\",\n \"plugin_name\": \"Web\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": true,\n \"hasWaterfall\": true,\n \"hasEcoEfficiency\": true,\n \"showThirdPartyContent\": true\n },\n \"scenarioName\": \"AKILA - (Web)\",\n \"default_plugin\": false\n },\n \"timelineDetails\": [\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T10:24:54Z\",\n \"endTime\": \"2025-02-24T10:51:48Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T10:23:46Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"75ecc8db-889f-4b83-84f2-f6cc2aec96b1.32\",\n \"planningTime\": \"2025-02-24T10:20:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T10:51:48Z\",\n \"endTime\": \"2025-02-24T10:51:53Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T10:51:48Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"af7db903-9888-438a-bc7f-854699e93025.35\",\n \"planningTime\": \"2025-02-24T10:50:00Z\",\n \"thresholdExceeded\": \"PT4.017S\"\n }\n ]\n },\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T10:51:53Z\",\n \"endTime\": \"2025-02-24T11:00:07Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T10:51:53Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"c34f64af-d16d-413a-a1b8-909be6ea2067.35\",\n \"planningTime\": \"2025-02-24T10:50:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T11:00:07Z\",\n \"endTime\": \"2025-02-24T11:04:23Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T11:00:07Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"df59373d-f667-4152-8aa2-d9c45166f49e.0\",\n \"planningTime\": \"2025-02-24T11:00:00Z\",\n \"thresholdExceeded\": \"PT10.323S\"\n }\n ]\n },\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T11:04:23Z\",\n \"endTime\": \"2025-02-24T11:16:09Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T11:04:23Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"f12c4245-5a29-4439-ae8b-866c4d569917.0\",\n \"planningTime\": \"2025-02-24T11:00:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T11:16:09Z\",\n \"endTime\": \"2025-02-24T11:34:53Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T11:16:09Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"79367bab-2548-4774-8f81-b960d9a8c6df.1\",\n \"planningTime\": \"2025-02-24T11:15:00Z\",\n \"thresholdExceeded\": \"PT4.58S\"\n }\n ]\n },\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T11:34:53Z\",\n \"endTime\": \"2025-02-24T11:37:24Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T11:34:53Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"05bf238a-12d0-48b0-be61-5be12c98967f.2\",\n \"planningTime\": \"2025-02-24T11:30:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T11:37:24Z\",\n \"endTime\": \"2025-02-24T11:49:36Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T11:37:24Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"116cd0c5-e74c-4eb6-9322-a54552358081.2\",\n \"planningTime\": \"2025-02-24T11:30:00Z\",\n \"thresholdExceeded\": \"PT5.551S\"\n }\n ]\n },\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T11:49:36Z\",\n \"endTime\": \"2025-02-24T11:52:01Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T11:49:36Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"8774c789-7ade-4d9e-b4df-06c8d3231a84.3\",\n \"planningTime\": \"2025-02-24T11:45:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T11:52:01Z\",\n \"endTime\": \"2025-02-24T12:03:28Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T11:52:01Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"a30965e7-22f5-483b-afd9-61c2d03ca235.3\",\n \"planningTime\": \"2025-02-24T11:45:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 2,\n \"startTime\": \"2025-02-24T12:03:28Z\",\n \"endTime\": \"2025-02-24T12:19:26Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"status\": 2,\n \"execTime\": \"2025-02-24T12:03:28Z\",\n \"siteName\": \"Paris (SFR)\",\n \"executionId\": \"5ba8e6c1-884d-4292-b3a7-6f821ea939d8.4\",\n \"planningTime\": \"2025-02-24T12:00:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n },\n {\n \"status\": 1,\n \"startTime\": \"2025-02-24T12:19:26Z\",\n \"endTime\": \"2025-02-24T12:29:54Z\",\n \"execs\": [\n {\n \"period\": \"PT15M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2025-02-24T12:19:26Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"2ee138ba-6670-400e-b285-ef43fe768c39.5\",\n \"planningTime\": \"2025-02-24T12:15:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", "latency": 0, "statusCode": 200, "label": "", @@ -891,6 +891,64 @@ "responseMode": null, "streamingMode": null, "streamingInterval": 0 + }, + { + "uuid": "3684b9e7-c4bf-4313-855f-b223a727eb21", + "type": "http", + "documentation": "", + "method": "post", + "endpoint": "results-api/results/121ca10e-1cf6-45c8-a7e9-b9b85272c086", + "responses": [ + { + "uuid": "a5ac5470-43e9-4665-ba3b-bd4b43bec14b", + "body": "{\n \"kpis\": [\n {\n \"name\": \"Availability\",\n \"order\": 0,\n \"type\": \"User\",\n \"unit\": \"percent\",\n \"label\": \"availability\",\n \"value\": 100\n },\n {\n \"name\": \"Time Total Allsteps\",\n \"order\": 10,\n \"type\": \"User\",\n \"unit\": \"ms\",\n \"label\": \"time_total_allsteps\",\n \"value\": 192\n }\n ],\n \"results\": [\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"0\",\n \"metric\": \"time_step\",\n \"duration\": 307,\n \"count\": 2,\n \"value\": 154\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"1\",\n \"metric\": \"time_step\",\n \"duration\": 45,\n \"count\": 2,\n \"value\": 23\n },\n {\n \"planningTime\": \"2024-12-30T10:30:00Z\",\n \"stepId\": \"2\",\n \"metric\": \"time_step\",\n \"duration\": 31,\n \"count\": 2,\n \"value\": 16\n }\n ],\n \"siteIds\": [\n {\n \"id\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"name\": \"Paris (Iliad)\"\n },\n {\n \"id\": \"d1c377bf-745f-4d63-b25f-904b16582649\",\n \"name\": \"Paris (SFR)\"\n }\n ],\n \"metrics\": [\n {\n \"mtr_id\": \"dns\",\n \"mtr_name\": \"Dns\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"download\",\n \"mtr_name\": \"Download\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"firstByte\",\n \"mtr_name\": \"FirstByte\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"prepare\",\n \"mtr_name\": \"Prepare\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"process\",\n \"mtr_name\": \"Process\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"responseTime\",\n \"mtr_name\": \"ResponseTime\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"secureHandshake\",\n \"mtr_name\": \"SecureHandshake\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"tcp\",\n \"mtr_name\": \"Tcp\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_step\",\n \"mtr_name\": \"Time Step\",\n \"mtr_order\": 10,\n \"mtr_type\": \"Technical\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": true,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_total_allsteps\",\n \"mtr_name\": \"Time Total Allsteps\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": false,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": true\n },\n {\n \"mtr_id\": \"total\",\n \"mtr_name\": \"Total\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"wait\",\n \"mtr_name\": \"Wait\",\n \"mtr_order\": 10,\n \"mtr_type\": \"User\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": true,\n \"filterDisabledOnMultiStep\": true,\n \"filterDisabledOnAllStep\": false,\n \"filterDisabledOnPartialStep\": false\n },\n {\n \"mtr_id\": \"time_multi_step\",\n \"mtr_name\": \"Cumulative Time Step\",\n \"mtr_order\": 100,\n \"mtr_type\": \"Cumulative\",\n \"mtr_scn_type\": \"API\",\n \"mtr_unit\": \"ms\",\n \"filterEnabled\": false\n }\n ],\n \"retries\": [],\n \"replays\": [],\n \"updates\": [],\n \"runningReplayId\": null,\n \"steps\": [\n {\n \"name\": \"Dashboard v1\",\n \"index\": 1\n },\n {\n \"name\": \"Dashboard v2\",\n \"index\": 2\n },\n {\n \"name\": \"Dashboard v3\",\n \"index\": 3\n }\n ],\n \"infos\": {\n \"active_filter\": [\n {\n \"type\": \"measurementIds\",\n \"items\": [\n \"time_step\",\n \"time_total_allsteps\",\n \"time_multi_step\"\n ]\n }\n ],\n \"plugin_id\": \"API\",\n \"plugin_name\": \"Api\",\n \"info\": {\n \"hasStep\": true,\n \"showKPI\": false,\n \"hasWaterfall\": false\n },\n \"scenarioName\": \"AKILA - (API) \",\n \"default_plugin\": true\n },\n \"timelineDetails\": [\n {\n \"status\": 1,\n \"startTime\": \"2024-12-30T10:23:11Z\",\n \"endTime\": \"2024-12-30T10:38:11Z\",\n \"execs\": [\n {\n \"period\": \"PT10M\",\n \"siteId\": \"76300f93-1714-4235-aa20-105d0815b4e0\",\n \"status\": 1,\n \"execTime\": \"2024-12-30T10:10:55Z\",\n \"siteName\": \"Paris (Iliad)\",\n \"executionId\": \"B5KPKPSB34GYUQB532O0N076XYX.31\",\n \"planningTime\": \"2024-12-30T10:10:00Z\",\n \"thresholdExceeded\": null\n }\n ]\n }\n ],\n \"aggregate\": \"rowdata\",\n \"emptyResults\": [],\n \"retentionDateExceeded\": false\n}", + "latency": 0, + "statusCode": 200, + "label": "", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "authorization", + "value": "Bearer VeryLongTokenToAuthenticate", + "invert": false, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "cd248f5d-0bf0-4a5b-9800-2f6f114d6b14", + "body": "{\"success\":false,\"code\":\"AUTH40001\",\"message\":\"No token provided.\"}", + "latency": 0, + "statusCode": 400, + "label": "if token not present don't send back data.", + "headers": [], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null, + "streamingMode": null, + "streamingInterval": 0 } ], "rootChildren": [ @@ -953,6 +1011,10 @@ { "type": "route", "uuid": "a184ab53-5369-4916-b204-5fd1e5146bbd" + }, + { + "type": "route", + "uuid": "3684b9e7-c4bf-4313-855f-b223a727eb21" } ], "proxyMode": false, diff --git a/tests/monitoring/iplabel/ekara/restapi/scenarios.robot b/tests/monitoring/iplabel/ekara/restapi/scenarios.robot index 2854a49477..e8ec539190 100644 --- a/tests/monitoring/iplabel/ekara/restapi/scenarios.robot +++ b/tests/monitoring/iplabel/ekara/restapi/scenarios.robot @@ -33,10 +33,20 @@ scenario ${tc} Examples: tc extra_options expected_result -- ... 1 --filter-name='Centreon Demo Navigation|Centreon Demo ping NA' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) WARNING: Scenario 'Centreon Demo ping NA': status: Degraded (8) ... 2 --filter-name='AKILA - Business App' OK: Scenario 'AKILA - Business App': status: Success (1), availability: 100%, time total all steps: 4280ms - All steps are ok | 'AKILA - Business App#scenario.availability.percentage'=100%;;;0;100 'AKILA - Business App#scenario.time.allsteps.total.milliseconds'=4280ms;;;0; 'AKILA - Business App~Dashboard 2#scenario.step.time.milliseconds'=898ms;;;0; 'AKILA - Business App~Dashboard 3#scenario.step.time.milliseconds'=848ms;;;0; 'AKILA - Business App~Run Chrome#scenario.step.time.milliseconds'=2534ms;;;0; - ... 3 --filter-name='wrong currentstatus.*' WARNING: Scenario 'wrong currentstatus, no perfdata': status: Unknown (14) - Scenario 'wrong currentstatus, no perfdata' Don't have any performance data, please try to add a bigger timeframe + ... 3 --filter-name='wrong currentstatus.*' UNKNOWN: Scenario 'wrong currentstatus, no perfdata': status: Unknown (14) - No execution, please try again with a bigger timeframe ... 4 --filter-name='not a scenario name' UNKNOWN: No scenario found - ... 5 --filter-id='09fe2561.*' --warning-time-total-allsteps='30' --output-ignore-perfdata WARNING: Scenario 'AKILA - (Web) ': time total all steps: 5822ms + ... 5 --filter-id='127a149b.*' --warning-time-total='30' --output-ignore-perfdata WARNING: Scenario 'AKILA - (Browser Page Load)': Step: Default, last exec: 30-12-2024 10:30:00 UTC, time total: 1097 ms ... 6 --filter-status='2' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) ... 7 --filter-status='2' --filter-siteid='site' --filter-workspaceid='workspace' --output-ignore-perfdata CRITICAL: Scenario 'Centreon Demo Navigation': status: Failure (2) ... 8 --filter-type='not a scenario type' UNKNOWN: No scenario found ... 9 --api-password='Wrongpassword' --api-username='wrongUsername' UNKNOWN: Authentication endpoint returns error code 'Wrong email or password' (add --debug option for detailed message) + # This scenario failed the second step. we show only the first step perfdata, and not the perfdata of the other step for another timestamp. + ... 10 --filter-name='AKILA - .Web.' CRITICAL: Scenario 'AKILA - (Web)': status: Failure (2) | 'AKILA - (Web)#scenario.availability.percentage'=45.76%;;;0;100 'AKILA - (Web)#scenario.time.allsteps.total.milliseconds'=4733ms;;;0; 'AKILA - (Web)~Home#scenario.step.time.milliseconds'=2851ms;;;0; + # without any filter-name of filter-id, every scenario are taken into account of this type. + ... 11 --filter-type='WEB' --output-ignore-perfdata CRITICAL: Scenario 'AKILA - (Web)': status: Failure (2) - Scenario 'Centreon Demo Navigation': status: Failure (2) + # Check the unknown default parameter. These scenario are not real and go to the same scenarioId, which is not possible in real life. + ... 12 --filter-name='unknown Status 0' --output-ignore-perfdata UNKNOWN: Scenario 'unknown Status 0': status: Unknown (0) + ... 13 --filter-name='unknown Status 3' --output-ignore-perfdata UNKNOWN: Scenario 'unknown Status 3': status: Aborted (3) + ... 14 --filter-name='unknown Status 4' --output-ignore-perfdata UNKNOWN: Scenario 'unknown Status 4': status: No execution (4) + ... 15 --filter-name='unknown Status 5' --output-ignore-perfdata UNKNOWN: Scenario 'unknown Status 5': status: No execution (5) + ... 16 --filter-name='unknown Status 6' --output-ignore-perfdata UNKNOWN: Scenario 'unknown Status 6': status: Stopped (6) From 148030bf667bfe059b3cbae4013d19df18352b31 Mon Sep 17 00:00:00 2001 From: Evan-Adam <152897682+Evan-Adam@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:52:09 +0100 Subject: [PATCH 3/3] Update src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm Co-authored-by: omercier <32134301+omercier@users.noreply.github.com> --- .../monitoring/iplabel/ekara/restapi/mode/scenarios.pm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm index c0d68cabfd..1641aa12d1 100644 --- a/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm +++ b/src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm @@ -194,11 +194,11 @@ sub manage_selection { $self->{scenarios}->{ $scenario->{scenarioName} }->{steps_index}->{$steps->{index} - 1} = $steps->{name}; } } - # api is expected to sort the output to get the most recent data at the end of the array. - # we store the last execution date, and check it for every data point sent back by the api. - # If a step fail, no data is sent by the api for this step, but the older execution are present. - # this allow to get perfdata for the last execution with a successfull first step. - # if the first step fail, the script will take older data. + # The API is expected to sort the output to get the most recent data at the end of the array. + # We store the last execution date, and check it for every data point sent back by the api. + # If a step has failed, no data is sent by the api for this step, but the results of the previous executions are present. + # This allows to get perfdata for the last execution with a successful first step. + # If the first step fails, the script will take older data. my $last_execution = @{$scenario_detail->{results}}[-1]->{planningTime}; foreach my $step_metrics (@{$scenario_detail->{results}}) { if ($step_metrics->{planningTime} ne $last_execution){