2022-05-02 10:09:24 +02:00
|
|
|
import deepEqual from 'fast-deep-equal';
|
|
|
|
|
import { useEffect, useMemo } from 'react';
|
|
|
|
|
|
2022-05-04 07:36:18 +02:00
|
|
|
import { migrateMetricQuery } from '../../migrations/metricQueryMigrations';
|
|
|
|
|
import { CloudWatchMetricsQuery, MetricEditorMode, MetricQueryType } from '../../types';
|
2022-05-02 10:09:24 +02:00
|
|
|
|
|
|
|
|
export const DEFAULT_QUERY: Omit<CloudWatchMetricsQuery, 'refId'> = {
|
|
|
|
|
queryMode: 'Metrics',
|
|
|
|
|
namespace: '',
|
|
|
|
|
metricName: '',
|
|
|
|
|
expression: '',
|
|
|
|
|
dimensions: {},
|
|
|
|
|
region: 'default',
|
|
|
|
|
id: '',
|
|
|
|
|
statistic: 'Average',
|
|
|
|
|
period: '',
|
|
|
|
|
metricQueryType: MetricQueryType.Search,
|
|
|
|
|
metricEditorMode: MetricEditorMode.Builder,
|
|
|
|
|
sqlExpression: '',
|
|
|
|
|
matchExact: true,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const prepareQuery = (query: CloudWatchMetricsQuery) => {
|
|
|
|
|
const withDefaults = { ...DEFAULT_QUERY, ...query };
|
2022-05-03 13:52:17 +02:00
|
|
|
const migratedQuery = migrateMetricQuery(withDefaults);
|
2022-05-02 10:09:24 +02:00
|
|
|
|
|
|
|
|
// If we didn't make any changes to the object, then return the original object to keep the
|
|
|
|
|
// identity the same, and not trigger any other useEffects or anything.
|
2022-05-03 13:52:17 +02:00
|
|
|
return deepEqual(migratedQuery, query) ? query : migratedQuery;
|
2022-05-02 10:09:24 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns queries with some defaults + migrations, and calls onChange function to notify if it changes
|
|
|
|
|
*/
|
|
|
|
|
const usePreparedMetricsQuery = (
|
|
|
|
|
query: CloudWatchMetricsQuery,
|
|
|
|
|
onChangeQuery: (newQuery: CloudWatchMetricsQuery) => void
|
|
|
|
|
) => {
|
|
|
|
|
const preparedQuery = useMemo(() => prepareQuery(query), [query]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (preparedQuery !== query) {
|
|
|
|
|
onChangeQuery(preparedQuery);
|
|
|
|
|
}
|
|
|
|
|
}, [preparedQuery, query, onChangeQuery]);
|
|
|
|
|
|
|
|
|
|
return preparedQuery;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default usePreparedMetricsQuery;
|