From f9907cda21012c7a88d6d8436996b52fa4e32218 Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu39@users.noreply.github.com> Date: Fri, 5 Dec 2025 15:46:35 -0800 Subject: [PATCH 1/3] ref(explorer): support start/end in nav links --- static/app/views/seerExplorer/utils.tsx | 124 +++++++----------------- 1 file changed, 34 insertions(+), 90 deletions(-) diff --git a/static/app/views/seerExplorer/utils.tsx b/static/app/views/seerExplorer/utils.tsx index 7655d9984f6a30..156bf71e4720e1 100644 --- a/static/app/views/seerExplorer/utils.tsx +++ b/static/app/views/seerExplorer/utils.tsx @@ -403,32 +403,37 @@ export function buildToolLinkUrl( ): LocationDescriptor | null { switch (toolLink.kind) { case 'telemetry_live_search': { - const {dataset, query, stats_period, project_slugs, sort} = toolLink.params; - - if (dataset === 'issues') { - // Build URL for issues search - const queryParams: Record = { - query: query || '', - }; - - // If project_slugs is provided, look up the project IDs - if (project_slugs && project_slugs.length > 0 && projects) { - const projectIds = project_slugs - .map((slug: string) => projects.find(p => p.slug === slug)?.id) - .filter((id: string | undefined) => id !== undefined); - if (projectIds.length > 0) { - queryParams.project = projectIds; - } - } + const {dataset, project_slugs, query, sort, stats_period, start, end} = + toolLink.params; - if (stats_period) { - queryParams.statsPeriod = stats_period; - } + const queryParams: Record = { + query: query || '', + project: null, + }; + if (stats_period) { + queryParams.statsPeriod = stats_period; + } + if (sort) { + queryParams.sort = sort; + } + if (start) { + queryParams.start = start; + } + if (end) { + queryParams.end = end; + } - if (sort) { - queryParams.sort = sort; + // If project_slugs is provided, look up the project IDs + if (project_slugs && project_slugs.length > 0 && projects) { + const projectIds = project_slugs + .map((slug: string) => projects.find(p => p.slug === slug)?.id) + .filter((id: string | undefined) => id !== undefined); + if (projectIds.length > 0) { + queryParams.project = projectIds; } + } + if (dataset === 'issues') { return { pathname: `/organizations/${orgSlug}/issues/`, query: queryParams, @@ -436,36 +441,14 @@ export function buildToolLinkUrl( } if (dataset === 'errors') { - const queryParams: Record = { - dataset: 'errors', - queryDataset: 'error-events', - query: query || '', - project: null, - }; - - if (stats_period) { - queryParams.statsPeriod = stats_period; - } - - // If project_slugs is provided, look up the project IDs - if (project_slugs && project_slugs.length > 0 && projects) { - const projectIds = project_slugs - .map((slug: string) => projects.find(p => p.slug === slug)?.id) - .filter((id: string | undefined) => id !== undefined); - if (projectIds.length > 0) { - queryParams.project = projectIds; - } - } + queryParams.dataset = 'errors'; + queryParams.queryDataset = 'error-events'; const {y_axes} = toolLink.params; if (y_axes) { queryParams.yAxis = y_axes; } - if (sort) { - queryParams.sort = sort; - } - return { pathname: `/organizations/${orgSlug}/explore/discover/homepage/`, query: queryParams, @@ -473,28 +456,10 @@ export function buildToolLinkUrl( } if (dataset === 'logs') { - const queryParams: Record = { - [LOGS_QUERY_KEY]: query || '', - project: null, - }; - - if (stats_period) { - queryParams.statsPeriod = stats_period; - } - - // If project_slugs is provided, look up the project IDs - if (project_slugs && project_slugs.length > 0 && projects) { - const projectIds = project_slugs - .map((slug: string) => projects.find(p => p.slug === slug)?.id) - .filter((id: string | undefined) => id !== undefined); - if (projectIds.length > 0) { - queryParams.project = projectIds; - } - } - - if (sort) { - queryParams[LOGS_SORT_BYS_KEY] = sort; - } + queryParams[LOGS_QUERY_KEY] = query || ''; + queryParams[LOGS_SORT_BYS_KEY] = sort; + delete queryParams.query; + delete queryParams.sort; return { pathname: `/organizations/${orgSlug}/explore/logs/`, @@ -504,26 +469,8 @@ export function buildToolLinkUrl( // Default to spans (traces) search const {y_axes, group_by, mode} = toolLink.params; - - const queryParams: Record = { - query: query || '', - project: null, - }; - - // If project_slugs is provided, look up the project IDs - if (project_slugs && project_slugs.length > 0 && projects) { - const projectIds = project_slugs - .map((slug: string) => projects.find(p => p.slug === slug)?.id) - .filter((id: string | undefined) => id !== undefined); - if (projectIds.length > 0) { - queryParams.project = projectIds; - } - } - const aggregateFields: any[] = []; - if (stats_period) { - queryParams.statsPeriod = stats_period; - } + if (y_axes) { const axes = Array.isArray(y_axes) ? y_axes : [y_axes]; const stringifiedAxes = axes.map(axis => JSON.stringify(axis)); @@ -536,9 +483,6 @@ export function buildToolLinkUrl( queryParams.groupBy = groupByValue; aggregateFields.push(JSON.stringify({groupBy: groupByValue})); } - if (sort) { - queryParams.sort = sort; - } if (mode) { queryParams.mode = mode === 'aggregates' ? 'aggregate' : 'samples'; } From 0a68d660323f89d9ebb422e189ae5282eb126c96 Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu39@users.noreply.github.com> Date: Fri, 5 Dec 2025 16:37:49 -0800 Subject: [PATCH 2/3] review --- static/app/views/seerExplorer/utils.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/static/app/views/seerExplorer/utils.tsx b/static/app/views/seerExplorer/utils.tsx index 156bf71e4720e1..421f522f571dc0 100644 --- a/static/app/views/seerExplorer/utils.tsx +++ b/static/app/views/seerExplorer/utils.tsx @@ -408,7 +408,7 @@ export function buildToolLinkUrl( const queryParams: Record = { query: query || '', - project: null, + project: '-1', }; if (stats_period) { queryParams.statsPeriod = stats_period; @@ -423,7 +423,7 @@ export function buildToolLinkUrl( queryParams.end = end; } - // If project_slugs is provided, look up the project IDs + // If project_slugs is provided, look up the IDs and include them in qparams if (project_slugs && project_slugs.length > 0 && projects) { const projectIds = project_slugs .map((slug: string) => projects.find(p => p.slug === slug)?.id) @@ -457,9 +457,12 @@ export function buildToolLinkUrl( if (dataset === 'logs') { queryParams[LOGS_QUERY_KEY] = query || ''; - queryParams[LOGS_SORT_BYS_KEY] = sort; delete queryParams.query; - delete queryParams.sort; + + if (sort) { + queryParams[LOGS_SORT_BYS_KEY] = sort; + delete queryParams.sort; + } return { pathname: `/organizations/${orgSlug}/explore/logs/`, From 4f5f09017d42824142479a7dcec8bb1cba9b09f0 Mon Sep 17 00:00:00 2001 From: Andrew Liu <159852527+aliu39@users.noreply.github.com> Date: Fri, 5 Dec 2025 16:54:27 -0800 Subject: [PATCH 3/3] Change project parameter from '-1' to null --- static/app/views/seerExplorer/utils.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/seerExplorer/utils.tsx b/static/app/views/seerExplorer/utils.tsx index 421f522f571dc0..c6109d6f62d3be 100644 --- a/static/app/views/seerExplorer/utils.tsx +++ b/static/app/views/seerExplorer/utils.tsx @@ -408,7 +408,7 @@ export function buildToolLinkUrl( const queryParams: Record = { query: query || '', - project: '-1', + project: null, }; if (stats_period) { queryParams.statsPeriod = stats_period;