diff --git a/web/src/components/dashboards/panels/ChartRenderer.vue b/web/src/components/dashboards/panels/ChartRenderer.vue index 8bc4a54677..fafbbff2bd 100644 --- a/web/src/components/dashboards/panels/ChartRenderer.vue +++ b/web/src/components/dashboards/panels/ChartRenderer.vue @@ -848,7 +848,14 @@ export default defineComponent({ }, { deep: true }, ); - return { chartRef, hoveredSeriesState, handleNativeContextMenu }; + return { + chartRef, + hoveredSeriesState, + handleNativeContextMenu, + get chart() { + return chart; + } + }; }, }); diff --git a/web/src/plugins/traces/Index.vue b/web/src/plugins/traces/Index.vue index 0162240002..8d7c928e45 100644 --- a/web/src/plugins/traces/Index.vue +++ b/web/src/plugins/traces/Index.vue @@ -44,9 +44,9 @@ style="min-height: auto">
- +
@@ -208,6 +208,7 @@ import { b64DecodeUnicode, formatTimeWithSuffix, timestampToTimezoneDate, + escapeSingleQuotes, } from "@/utils/zincutils"; import segment from "@/services/segment_analytics"; import config from "@/aws-exports"; @@ -1374,6 +1375,44 @@ watch(moveSplitter, () => { // }, // ); +// Handler for service graph view traces event +const handleServiceGraphViewTraces = (data: any) => { + // Switch to search tab + activeTab.value = 'search'; + + // Set the selected stream in dropdown + if (data.stream) { + searchObj.data.stream.selectedStream = { + label: data.stream, + value: data.stream, + }; + } + + // Set the filter query (just the WHERE condition, no SELECT or ORDER BY) + if (data.serviceName) { + const escapedServiceName = escapeSingleQuotes(data.serviceName); + const filterQuery = `service_name = '${escapedServiceName}'`; + searchObj.data.editorValue = filterQuery; + searchObj.data.query = filterQuery; + searchObj.meta.sqlMode = false; // Traces doesn't use SQL mode + } + + // Set the time range + if (data.timeRange) { + searchObj.data.datetime = { + startTime: data.timeRange.startTime, + endTime: data.timeRange.endTime, + relativeTimePeriod: null, + type: "absolute", + }; + } + + // Run the query + nextTick(() => { + runQueryFn(); + }); +}; + watch(updateSelectedColumns, () => { searchObj.meta.resultGrid.manualRemoveFields = true; setTimeout(() => { diff --git a/web/src/plugins/traces/ServiceGraph.vue b/web/src/plugins/traces/ServiceGraph.vue index 3391947d4a..87eeee752b 100644 --- a/web/src/plugins/traces/ServiceGraph.vue +++ b/web/src/plugins/traces/ServiceGraph.vue @@ -1,6 +1,6 @@