From c363a818068628cbffab1126691e6faa900bffde Mon Sep 17 00:00:00 2001 From: Kristina Date: Mon, 13 Mar 2023 07:53:19 -0500 Subject: [PATCH] Dashboards: Filter out expressions when going to Explore (#64654) * Filter out expressions when going from dashboard to explore * Move expression UID constant to types --- public/app/core/utils/explore.test.ts | 8 +++++++- public/app/core/utils/explore.ts | 7 ++++++- .../query-and-alert-condition/reducer.test.tsx | 7 ++----- .../rule-editor/query-and-alert-condition/reducer.ts | 7 ++----- .../unified/components/rules/RuleDetailsDataSources.tsx | 2 +- public/app/features/alerting/unified/utils/query.test.ts | 2 +- public/app/features/alerting/unified/utils/rule-form.ts | 3 +-- .../features/alerting/utils/dataSourceFromExpression.ts | 2 +- public/app/features/expressions/ExpressionDatasource.ts | 7 +------ public/app/features/expressions/types.ts | 5 +++++ public/app/features/plugins/datasource_srv.ts | 2 +- 11 files changed, 28 insertions(+), 24 deletions(-) diff --git a/public/app/core/utils/explore.test.ts b/public/app/core/utils/explore.test.ts index 1792d869240..281d17acbea 100644 --- a/public/app/core/utils/explore.test.ts +++ b/public/app/core/utils/explore.test.ts @@ -197,7 +197,10 @@ describe('getExploreUrl', () => { const args = { panel: { getSavedId: () => 1, - targets: [{ refId: 'A', expr: 'query1', legendFormat: 'legendFormat1' }], + targets: [ + { refId: 'A', expr: 'query1', legendFormat: 'legendFormat1' }, + { refId: 'B', expr: 'query2', datasource: { type: '__expr__', uid: '__expr__' } }, + ], }, datasourceSrv: { get() { @@ -215,6 +218,9 @@ describe('getExploreUrl', () => { it('should omit legendFormat in explore url', () => { expect(getExploreUrl(args).then((data) => expect(data).not.toMatch(/legendFormat1/g))); }); + it('should omit expression target in explore url', () => { + expect(getExploreUrl(args).then((data) => expect(data).not.toMatch(/__expr__/g))); + }); }); describe('updateHistory()', () => { diff --git a/public/app/core/utils/explore.ts b/public/app/core/utils/explore.ts index 22eeca3a8c6..022045c3b72 100644 --- a/public/app/core/utils/explore.ts +++ b/public/app/core/utils/explore.ts @@ -30,6 +30,7 @@ import { RefreshPicker } from '@grafana/ui'; import store from 'app/core/store'; import { TimeSrv } from 'app/features/dashboard/services/TimeSrv'; import { PanelModel } from 'app/features/dashboard/state'; +import { ExpressionDatasourceUID } from 'app/features/expressions/types'; import { ExploreId, QueryOptions, QueryTransaction } from 'app/types/explore'; import { config } from '../config'; @@ -67,8 +68,12 @@ export async function getExploreUrl(args: GetExploreUrlArguments): Promise omit(t, 'legendFormat')); + let exploreTargets: DataQuery[] = panel.targets + .map((t) => omit(t, 'legendFormat')) + .filter((t) => t.datasource?.uid !== ExpressionDatasourceUID); let url: string | undefined; // if the mixed datasource is not enabled for explore, choose only one datasource if ( diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.test.tsx b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.test.tsx index 3fdf79b5e8d..f452aacbeed 100644 --- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.test.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.test.tsx @@ -1,10 +1,7 @@ import { getDefaultRelativeTimeRange, RelativeTimeRange } from '@grafana/data'; import { getDataSourceSrv } from '@grafana/runtime/src/services/__mocks__/dataSourceSrv'; -import { - dataSource as expressionDatasource, - ExpressionDatasourceUID, -} from 'app/features/expressions/ExpressionDatasource'; -import { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types'; +import { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource'; +import { ExpressionQuery, ExpressionQueryType, ExpressionDatasourceUID } from 'app/features/expressions/types'; import { defaultCondition } from 'app/features/expressions/utils/expressionTypes'; import { AlertQuery } from 'app/types/unified-alerting-dto'; diff --git a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts index fdd6c8396e8..4c4426b9f6b 100644 --- a/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts +++ b/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/reducer.ts @@ -3,12 +3,9 @@ import { createAction, createReducer } from '@reduxjs/toolkit'; import { DataQuery, getDefaultRelativeTimeRange, RelativeTimeRange } from '@grafana/data'; import { getNextRefIdChar } from 'app/core/utils/query'; import { findDataSourceFromExpressionRecursive } from 'app/features/alerting/utils/dataSourceFromExpression'; -import { - dataSource as expressionDatasource, - ExpressionDatasourceUID, -} from 'app/features/expressions/ExpressionDatasource'; +import { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource'; import { isExpressionQuery } from 'app/features/expressions/guards'; -import { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types'; +import { ExpressionQuery, ExpressionQueryType, ExpressionDatasourceUID } from 'app/features/expressions/types'; import { defaultCondition } from 'app/features/expressions/utils/expressionTypes'; import { AlertQuery } from 'app/types/unified-alerting-dto'; diff --git a/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx b/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx index 39facac253a..0734db52c61 100644 --- a/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx +++ b/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx @@ -4,7 +4,7 @@ import React, { useMemo } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { getDataSourceSrv } from '@grafana/runtime'; import { useStyles2 } from '@grafana/ui'; -import { ExpressionDatasourceUID } from 'app/features/expressions/ExpressionDatasource'; +import { ExpressionDatasourceUID } from 'app/features/expressions/types'; import { CombinedRule, RulesSource } from 'app/types/unified-alerting'; import { isCloudRulesSource } from '../../utils/datasource'; diff --git a/public/app/features/alerting/unified/utils/query.test.ts b/public/app/features/alerting/unified/utils/query.test.ts index d2382585750..875ecedfa29 100644 --- a/public/app/features/alerting/unified/utils/query.test.ts +++ b/public/app/features/alerting/unified/utils/query.test.ts @@ -1,5 +1,5 @@ import { DataSourceJsonData, PluginMeta } from '@grafana/data'; -import { ExpressionDatasourceUID } from 'app/features/expressions/ExpressionDatasource'; +import { ExpressionDatasourceUID } from 'app/features/expressions/types'; import { CombinedRule } from 'app/types/unified-alerting'; import { GrafanaAlertStateDecision } from 'app/types/unified-alerting-dto'; diff --git a/public/app/features/alerting/unified/utils/rule-form.ts b/public/app/features/alerting/unified/utils/rule-form.ts index 1c7ac452a7f..339dd0ca46f 100644 --- a/public/app/features/alerting/unified/utils/rule-form.ts +++ b/public/app/features/alerting/unified/utils/rule-form.ts @@ -12,8 +12,7 @@ import { getDataSourceSrv } from '@grafana/runtime'; import { ExpressionDatasourceRef } from '@grafana/runtime/src/utils/DataSourceWithBackend'; import { getNextRefIdChar } from 'app/core/utils/query'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; -import { ExpressionDatasourceUID } from 'app/features/expressions/ExpressionDatasource'; -import { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types'; +import { ExpressionQuery, ExpressionQueryType, ExpressionDatasourceUID } from 'app/features/expressions/types'; import { PromQuery } from 'app/plugins/datasource/prometheus/types'; import { RuleWithLocation } from 'app/types/unified-alerting'; import { diff --git a/public/app/features/alerting/utils/dataSourceFromExpression.ts b/public/app/features/alerting/utils/dataSourceFromExpression.ts index 9cb150ac2dd..eec3f1182f5 100644 --- a/public/app/features/alerting/utils/dataSourceFromExpression.ts +++ b/public/app/features/alerting/utils/dataSourceFromExpression.ts @@ -1,4 +1,4 @@ -import { ExpressionDatasourceUID } from 'app/features/expressions/ExpressionDatasource'; +import { ExpressionDatasourceUID } from 'app/features/expressions/types'; import { AlertQuery } from 'app/types/unified-alerting-dto'; export const hasCyclicalReferences = (queries: AlertQuery[]) => { diff --git a/public/app/features/expressions/ExpressionDatasource.ts b/public/app/features/expressions/ExpressionDatasource.ts index 92ffba071bd..5ad53694354 100644 --- a/public/app/features/expressions/ExpressionDatasource.ts +++ b/public/app/features/expressions/ExpressionDatasource.ts @@ -12,7 +12,7 @@ import { DataSourceWithBackend, getDataSourceSrv, getTemplateSrv } from '@grafan import { ExpressionDatasourceRef } from '@grafana/runtime/src/utils/DataSourceWithBackend'; import { ExpressionQueryEditor } from './ExpressionQueryEditor'; -import { ExpressionQuery, ExpressionQueryType } from './types'; +import { ExpressionDatasourceUID, ExpressionQuery, ExpressionQueryType } from './types'; /** * This is a singleton instance that just pretends to be a DataSource @@ -60,11 +60,6 @@ export class ExpressionDatasourceApi extends DataSourceWithBackend