diff --git a/public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx b/public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx index 3d26676d89b..0d1eec582c8 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx @@ -21,18 +21,22 @@ export type Props = QueryEditorProps { const { datasource, query: oldQ, onRunQuery, onChange, range } = props; const [modalIsOpen, setModalIsOpen] = useState(false); - // Migrate query if needed - const [migrated, setMigrated] = useState(false); + const [migratedQuery, setMigratedQuery] = useState(); const query = useMemo(() => { - if (!migrated) { - setMigrated(true); + if (!migratedQuery) { const migratedQuery = datasource.migrateQuery(oldQ); + setMigratedQuery(migratedQuery); // Update the query once the migrations have been completed. onChange({ ...migratedQuery }); return migratedQuery; } + + if (migratedQuery) { + return migratedQuery; + } + return oldQ; - }, [oldQ, datasource, onChange, migrated]); + }, [oldQ, datasource, onChange, migratedQuery]); const [currentQuery, setCurrentQuery] = useState(query); const [queryHasBeenEdited, setQueryHasBeenEdited] = useState(false); diff --git a/public/app/plugins/datasource/cloud-monitoring/datasource.test.ts b/public/app/plugins/datasource/cloud-monitoring/datasource.test.ts index aff5ccd9100..f2f86e1d097 100644 --- a/public/app/plugins/datasource/cloud-monitoring/datasource.test.ts +++ b/public/app/plugins/datasource/cloud-monitoring/datasource.test.ts @@ -222,6 +222,68 @@ describe('Cloud Monitoring Datasource', () => { sloQuery: {}, }, }, + { + description: 'legacy metrics query with metricType defined', + input: { + refId: 'A', + queryType: 'metrics', + intervalMs: 1000, + metricType: 'test-metric-type', + }, + expected: { + queryType: QueryType.TIME_SERIES_LIST, + timeSeriesList: { + filters: ['metric.type', '=', 'test-metric-type'], + }, + }, + }, + { + description: 'legacy metrics query with metricType and additional filters defined', + input: { + refId: 'A', + queryType: 'metrics', + intervalMs: 1000, + metricType: 'test-metric-type', + filters: ['test.filter', '=', 'test-filter-value'], + }, + expected: { + queryType: QueryType.TIME_SERIES_LIST, + timeSeriesList: { + filters: ['test.filter', '=', 'test-filter-value', 'AND', 'metric.type', '=', 'test-metric-type'], + }, + }, + }, + { + description: 'legacy metrics query without projectName defined', + input: { + refId: 'A', + queryType: 'metrics', + intervalMs: 1000, + metricType: 'test-metric-type', + }, + expected: { + queryType: QueryType.TIME_SERIES_LIST, + timeSeriesList: { + projectName: 'test-project', + }, + }, + }, + { + description: 'legacy metrics query with projectName defined', + input: { + refId: 'A', + queryType: 'metrics', + intervalMs: 1000, + metricType: 'test-metric-type', + projectName: 'test-project-defined', + }, + expected: { + queryType: QueryType.TIME_SERIES_LIST, + timeSeriesList: { + projectName: 'test-project-defined', + }, + }, + }, ].forEach((t) => it(t.description, () => { const mockInstanceSettings = createMockInstanceSetttings(); diff --git a/public/app/plugins/datasource/cloud-monitoring/datasource.ts b/public/app/plugins/datasource/cloud-monitoring/datasource.ts index cdde6ea4763..7a38863e8f0 100644 --- a/public/app/plugins/datasource/cloud-monitoring/datasource.ts +++ b/public/app/plugins/datasource/cloud-monitoring/datasource.ts @@ -240,6 +240,11 @@ export default class CloudMonitoringDatasource extends DataSourceWithBackend< !query.hasOwnProperty('timeSeriesQuery') && !query.hasOwnProperty('timeSeriesList') ) { + let filters = rest.filters || []; + if (rest.metricType) { + filters = this.migrateMetricTypeFilter(rest.metricType, filters); + } + return { datasource, key, @@ -249,6 +254,8 @@ export default class CloudMonitoringDatasource extends DataSourceWithBackend< queryType: type === 'annotationQuery' ? QueryType.ANNOTATION : QueryType.TIME_SERIES_LIST, timeSeriesList: { ...rest, + projectName: get(query, 'projectName') || this.getDefaultProject(), + filters, view: rest.view || 'FULL', }, }; @@ -265,7 +272,7 @@ export default class CloudMonitoringDatasource extends DataSourceWithBackend< query.queryType = QueryType.TIME_SERIES_QUERY; } else { query.timeSeriesList = { - projectName: metricQuery.projectName, + projectName: metricQuery.projectName || this.getDefaultProject(), crossSeriesReducer: metricQuery.crossSeriesReducer, alignmentPeriod: metricQuery.alignmentPeriod, perSeriesAligner: metricQuery.perSeriesAligner,