mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
CloudMonitoring: Improve legacy query migrations (#86069)
* Match backend and correctly migrate metricType Update tests * Ensure project is migrated or set if not defined * Improve migrations logic
This commit is contained in:
parent
b226ddfa53
commit
95667f6a53
@ -21,18 +21,22 @@ export type Props = QueryEditorProps<CloudMonitoringDatasource, CloudMonitoringQ
|
||||
export const QueryEditor = (props: Props) => {
|
||||
const { datasource, query: oldQ, onRunQuery, onChange, range } = props;
|
||||
const [modalIsOpen, setModalIsOpen] = useState<boolean>(false);
|
||||
// Migrate query if needed
|
||||
const [migrated, setMigrated] = useState(false);
|
||||
const [migratedQuery, setMigratedQuery] = useState<CloudMonitoringQuery | undefined>();
|
||||
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<CloudMonitoringQuery>(query);
|
||||
const [queryHasBeenEdited, setQueryHasBeenEdited] = useState<boolean>(false);
|
||||
|
||||
|
@ -249,6 +249,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();
|
||||
|
@ -241,6 +241,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,
|
||||
@ -250,6 +255,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',
|
||||
},
|
||||
};
|
||||
@ -266,7 +273,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,
|
||||
|
Loading…
Reference in New Issue
Block a user