diff --git a/public/app/features/trails/DataTrail.tsx b/public/app/features/trails/DataTrail.tsx index 367cf34c1b5..85549d3dbb1 100644 --- a/public/app/features/trails/DataTrail.tsx +++ b/public/app/features/trails/DataTrail.tsx @@ -9,6 +9,7 @@ import { getUrlSyncManager, SceneComponentProps, SceneControlsSpacer, + sceneGraph, SceneObject, SceneObjectBase, SceneObjectState, @@ -27,7 +28,7 @@ import { DataTrailHistory, DataTrailHistoryStep } from './DataTrailsHistory'; import { MetricScene } from './MetricScene'; import { MetricSelectScene } from './MetricSelectScene'; import { getTrailStore } from './TrailStore/TrailStore'; -import { MetricSelectedEvent, trailDS, LOGS_METRIC, VAR_DATASOURCE } from './shared'; +import { MetricSelectedEvent, trailDS, LOGS_METRIC, VAR_DATASOURCE, VAR_FILTERS } from './shared'; import { getUrlForTrail } from './utils'; export interface DataTrailState extends SceneObjectState { @@ -112,6 +113,14 @@ export class DataTrail extends SceneObjectBase { } else { locationService.partial({ metric: evt.payload, actionView: null }); } + + // Add metric to adhoc filters baseFilter + const filterVar = sceneGraph.lookupVariable(VAR_FILTERS, this); + if (filterVar instanceof AdHocFiltersVariable) { + filterVar.state.set.setState({ + baseFilters: getBaseFiltersForMetric(evt.payload), + }); + } } private getSceneUpdatesForNewMetricValue(metric: string | undefined) { @@ -183,6 +192,7 @@ function getVariableSet(initialDS?: string, metric?: string, initialFilters?: Ad datasource: trailDS, layout: 'vertical', filters: initialFilters ?? [], + baseFilters: getBaseFiltersForMetric(metric), }), ], }); @@ -211,3 +221,10 @@ function getStyles(theme: GrafanaTheme2) { }), }; } + +function getBaseFiltersForMetric(metric?: string): AdHocVariableFilter[] { + if (metric) { + return [{ key: '__name__', operator: '=', value: metric }]; + } + return []; +}