From 61b7443aaf7f0e456905bc89fc9d41da7f576022 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 5 Feb 2025 17:13:49 +0000 Subject: [PATCH] [Bug] Traces/Services remove toast message on empty data (#2346) * remove toast message on empty data with early returns Signed-off-by: Adam Tackett * make sure errors on request still trigger toast Signed-off-by: Adam Tackett --------- Signed-off-by: Adam Tackett Co-authored-by: Adam Tackett (cherry picked from commit 5703582de56ff0f6a2d269af1a235b5a3d304623) Signed-off-by: github-actions[bot] --- .../requests/services_request_handler.ts | 58 +++++++++++-------- .../requests/traces_request_handler.ts | 15 +++++ 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/public/components/trace_analytics/requests/services_request_handler.ts b/public/components/trace_analytics/requests/services_request_handler.ts index d1a5aeffc..fddffd4af 100644 --- a/public/components/trace_analytics/requests/services_request_handler.ts +++ b/public/components/trace_analytics/requests/services_request_handler.ts @@ -47,6 +47,12 @@ export const handleServicesRequest = async ( dataSourceMDSId, setServiceMap ); + + if (!serviceObject || Object.keys(serviceObject).length === 0) { + setItems([]); + return []; + } + return Promise.all( response.aggregations.service.buckets .filter((bucket: any) => serviceObject[bucket.key]) @@ -103,35 +109,39 @@ export const handleServiceMapRequest = async ( getServiceNodesQuery(mode), mode, dataSourceMDSId - ) - .then((response) => { - response.aggregations.service_name.buckets.map( - (bucket: any) => - (map[bucket.key] = { - serviceName: bucket.key, - id: id++, - targetResources: bucket.target_resource.buckets.map((res: any) => res.key), - targetServices: [], - destServices: [], - }) - ); - return true; - }) - .catch((error) => { - console.error('Error retrieving service nodes:', error); - coreRefs.core?.notifications.toasts.addError(error, { - title: 'Failed to retrieve service nodes', - toastLifeTimeMs: 10000, - }); - return false; + ).catch((error) => { + console.error('Error retrieving service nodes:', error); + coreRefs.core?.notifications.toasts.addError(error, { + title: 'Failed to retrieve service nodes', + toastLifeTimeMs: 10000, }); + return null; + }); - // Early return if service node not found - if (!serviceNodesResponse) { + if ( + !serviceNodesResponse || + !serviceNodesResponse.aggregations || + !serviceNodesResponse.aggregations.service_name || + !serviceNodesResponse.aggregations.service_name.buckets || + serviceNodesResponse.aggregations.service_name.buckets.length === 0 + ) { + if (setItems) { + setItems(map); + } return map; } - const targets = {}; + serviceNodesResponse.aggregations.service_name.buckets.forEach((bucket: any) => { + map[bucket.key] = { + serviceName: bucket.key, + id: id++, + targetResources: bucket.target_resource.buckets.map((res: any) => res.key), + targetServices: [], + destServices: [], + }; + }); + + const targets: Record = {}; await handleDslRequest(http, null, getServiceEdgesQuery('target', mode), mode, dataSourceMDSId) .then((response) => response.aggregations.service_name.buckets.map((bucket: any) => { diff --git a/public/components/trace_analytics/requests/traces_request_handler.ts b/public/components/trace_analytics/requests/traces_request_handler.ts index 603f979a5..b0a0ab8f4 100644 --- a/public/components/trace_analytics/requests/traces_request_handler.ts +++ b/public/components/trace_analytics/requests/traces_request_handler.ts @@ -153,6 +153,21 @@ export const handleTracesRequest = async ( percentileRangesResult.status === 'fulfilled' ? percentileRangesResult.value : {}; const response = responseResult.value; + if ((response.statusCode && response.statusCode >= 400) || response.error) { + return Promise.reject(response); + } + + if ( + !response || + !response.aggregations || + !response.aggregations.traces || + !response.aggregations.traces.buckets || + response.aggregations.traces.buckets.length === 0 + ) { + setItems([]); + return []; + } + return response.aggregations.traces.buckets.map((bucket: any) => { if (mode === 'data_prepper' || mode === 'custom_data_prepper') { return {