From b972ff00f415c7227a75bbb86fe3d5763ccece67 Mon Sep 17 00:00:00 2001 From: Subhra264 Date: Mon, 16 Sep 2024 14:09:08 +0530 Subject: [PATCH] fix: for enrichment tables values api should use the ingested timerange (#4554) ## Summary by CodeRabbit - **New Features** - Enhanced time value determination for enrichment tables by sourcing from statistics instead of user input. - Expanded the `AddSettingVariable` component to support an additional stream type: "enrichment_tables." - **Bug Fixes** - Improved control flow to ensure correct application behavior based on stream type. --------- Co-authored-by: ktx-abhay --- src/handler/http/request/search/mod.rs | 66 +++++++++++++++---- .../settings/AddSettingVariable.vue | 2 +- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/src/handler/http/request/search/mod.rs b/src/handler/http/request/search/mod.rs index b412c582a9..93b1b87977 100644 --- a/src/handler/http/request/search/mod.rs +++ b/src/handler/http/request/search/mod.rs @@ -29,7 +29,7 @@ use config::{ utils::{base64, json}, DISTINCT_FIELDS, }; -use infra::errors; +use infra::{cache::stats, errors}; use tracing::{Instrument, Span}; use crate::{ @@ -810,18 +810,38 @@ async fn values_v1( let size = query .get("size") .map_or(10, |v| v.parse::().unwrap_or(10)); - let start_time = query - .get("start_time") - .map_or(0, |v| v.parse::().unwrap_or(0)); + // If this is a enrichment table, we need to get the start_time and end_time from the stats + let stats = if stream_type.eq(&StreamType::EnrichmentTables) { + Some(stats::get_stream_stats(org_id, stream_name, stream_type)) + } else { + None + }; + let start_time = if stream_type.eq(&StreamType::EnrichmentTables) { + stats.as_ref().unwrap().doc_time_min + } else { + query + .get("start_time") + .map_or(0, |v| v.parse::().unwrap_or(0)) + }; + if start_time == 0 { return Ok(MetaHttpResponse::bad_request("start_time is empty")); } - let end_time = query - .get("end_time") - .map_or(0, |v| v.parse::().unwrap_or(0)); + let end_time = if stream_type.eq(&StreamType::EnrichmentTables) { + stats.as_ref().unwrap().doc_time_max + } else { + query + .get("end_time") + .map_or(0, |v| v.parse::().unwrap_or(0)) + }; if end_time == 0 { return Ok(MetaHttpResponse::bad_request("end_time is empty")); } + let (start_time, end_time) = if start_time == end_time { + (start_time - 1, end_time + 1) + } else { + (start_time, end_time) + }; let regions = query.get("regions").map_or(vec![], |regions| { regions @@ -1074,18 +1094,38 @@ async fn values_v2( let size = query .get("size") .map_or(10, |v| v.parse::().unwrap_or(10)); - let start_time = query - .get("start_time") - .map_or(0, |v| v.parse::().unwrap_or(0)); + // If this is a enrichment table, we need to get the start_time and end_time from the stats + let stats = if stream_type.eq(&StreamType::EnrichmentTables) { + Some(stats::get_stream_stats(org_id, stream_name, stream_type)) + } else { + None + }; + let start_time = if stream_type.eq(&StreamType::EnrichmentTables) { + stats.as_ref().unwrap().doc_time_min + } else { + query + .get("start_time") + .map_or(0, |v| v.parse::().unwrap_or(0)) + }; + if start_time == 0 { return Ok(MetaHttpResponse::bad_request("start_time is empty")); } - let end_time = query - .get("end_time") - .map_or(0, |v| v.parse::().unwrap_or(0)); + let end_time = if stream_type.eq(&StreamType::EnrichmentTables) { + stats.as_ref().unwrap().doc_time_max + } else { + query + .get("end_time") + .map_or(0, |v| v.parse::().unwrap_or(0)) + }; if end_time == 0 { return Ok(MetaHttpResponse::bad_request("end_time is empty")); } + let (start_time, end_time) = if start_time == end_time { + (start_time - 1, end_time + 1) + } else { + (start_time, end_time) + }; if no_count { query_sql = format!("{query_sql} GROUP BY zo_sql_key ORDER BY zo_sql_key ASC LIMIT {size}") } else { diff --git a/web/src/components/dashboards/settings/AddSettingVariable.vue b/web/src/components/dashboards/settings/AddSettingVariable.vue index 10c59609eb..60e157bcb5 100644 --- a/web/src/components/dashboards/settings/AddSettingVariable.vue +++ b/web/src/components/dashboards/settings/AddSettingVariable.vue @@ -614,7 +614,7 @@ export default defineComponent({ const addVariableForm: Ref = ref(null); const data: any = reactive({ schemaResponse: [], - streamType: ["logs", "metrics", "traces"], + streamType: ["logs", "metrics", "traces", "enrichment_tables"], streams: [], currentFieldsList: [],