The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/cloudwatch/migrations/metricQueryMigrations.ts

39 lines
1.2 KiB

import deepEqual from 'fast-deep-equal';
import { CloudWatchMetricsQuery } from '../types';
// Call this function to migrate queries from within the plugin.
export function migrateMetricQuery(query: CloudWatchMetricsQuery): CloudWatchMetricsQuery {
//add metric query migrations here
const migratedQuery = migrateAliasPatterns(query);
return deepEqual(migratedQuery, query) ? query : migratedQuery;
}
const aliasPatterns: Record<string, string> = {
metric: `PROP('MetricName')`,
namespace: `PROP('Namespace')`,
period: `PROP('Period')`,
region: `PROP('Region')`,
stat: `PROP('Stat')`,
label: `LABEL`,
};
// migrateAliasPatterns in the context of https://github.com/grafana/grafana/issues/48434
export function migrateAliasPatterns(query: CloudWatchMetricsQuery): CloudWatchMetricsQuery {
if (!query.hasOwnProperty('label')) {
const newQuery = { ...query };
if (!query.hasOwnProperty('label')) {
const regex = /{{\s*(.+?)\s*}}/g;
newQuery.label =
query.alias?.replace(regex, (_, value) => {
if (aliasPatterns.hasOwnProperty(value)) {
return `\${${aliasPatterns[value]}}`;
}
return `\${PROP('Dim.${value}')}`;
}) ?? '';
}
return newQuery;
}
return query;
}