mirror of
https://github.com/grafana/grafana.git
synced 2025-09-26 17:33:57 +08:00

* add support for code editor and builder * refactor cloudwatch migration * Add tooltip to editor field (#56) * add tooltip * add old tooltips * Bug bash feedback fixes (#58) * make ASC the default option * update sql preview whenever sql changes * don't allow queries without aggregation * set default value for aggregation * use new input field * cleanup * pr feedback * prevent unnecessary rerenders * use frame error instead of main error * remove not used snapshot * Use dimension filter in schema picker (#63) * use dimension key filter in group by and schema labels * add dimension filter also to code editor * add tests * fix build error * fix strict error * remove debug code * fix annotation editor (#64) * fix annotation editor * fix broken test * revert annotation backend change * PR feedback (#67) * pr feedback * removed dimension filter from group by * add spacing between common fields and rest * do not generate deep link for metric queries (#70) * update docs (#69) Co-authored-by: Erik Sundell <erik.sundell87@gmail.com> * fix lint problem caused by merge conflict Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com>
71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
import { useEffect, useState } from 'react';
|
|
import { SelectableValue, toOption } from '@grafana/data';
|
|
import { appendTemplateVariables } from './utils/utils';
|
|
import { Dimensions } from './types';
|
|
import { CloudWatchDatasource } from './datasource';
|
|
import { useDeepCompareEffect } from 'react-use';
|
|
|
|
export const useRegions = (datasource: CloudWatchDatasource): [Array<SelectableValue<string>>, boolean] => {
|
|
const [regionsIsLoading, setRegionsIsLoading] = useState<boolean>(false);
|
|
const [regions, setRegions] = useState<Array<SelectableValue<string>>>([{ label: 'default', value: 'default' }]);
|
|
|
|
useEffect(() => {
|
|
setRegionsIsLoading(true);
|
|
|
|
const variableOptionGroup = {
|
|
label: 'Template Variables',
|
|
options: datasource.getVariables().map(toOption),
|
|
};
|
|
|
|
datasource
|
|
.getRegions()
|
|
.then((regions: Array<SelectableValue<string>>) => setRegions([...regions, variableOptionGroup]))
|
|
.finally(() => setRegionsIsLoading(false));
|
|
}, [datasource]);
|
|
|
|
return [regions, regionsIsLoading];
|
|
};
|
|
|
|
export const useNamespaces = (datasource: CloudWatchDatasource) => {
|
|
const [namespaces, setNamespaces] = useState<Array<SelectableValue<string>>>([]);
|
|
useEffect(() => {
|
|
datasource.getNamespaces().then((namespaces) => {
|
|
setNamespaces(appendTemplateVariables(datasource, namespaces));
|
|
});
|
|
}, [datasource]);
|
|
|
|
return namespaces;
|
|
};
|
|
|
|
export const useMetrics = (datasource: CloudWatchDatasource, region: string, namespace: string | undefined) => {
|
|
const [metrics, setMetrics] = useState<Array<SelectableValue<string>>>([]);
|
|
useEffect(() => {
|
|
datasource.getMetrics(namespace, region).then((result: Array<SelectableValue<string>>) => {
|
|
setMetrics(appendTemplateVariables(datasource, result));
|
|
});
|
|
}, [datasource, region, namespace]);
|
|
|
|
return metrics;
|
|
};
|
|
|
|
export const useDimensionKeys = (
|
|
datasource: CloudWatchDatasource,
|
|
region: string,
|
|
namespace: string | undefined,
|
|
metricName: string | undefined,
|
|
dimensionFilter?: Dimensions
|
|
) => {
|
|
const [dimensionKeys, setDimensionKeys] = useState<Array<SelectableValue<string>>>([]);
|
|
|
|
// doing deep comparison to avoid making new api calls to list metrics unless dimension filter object props changes
|
|
useDeepCompareEffect(() => {
|
|
datasource
|
|
.getDimensionKeys(namespace, region, dimensionFilter, metricName)
|
|
.then((result: Array<SelectableValue<string>>) => {
|
|
setDimensionKeys(appendTemplateVariables(datasource, result));
|
|
});
|
|
}, [datasource, region, namespace, metricName, dimensionFilter]);
|
|
|
|
return dimensionKeys;
|
|
};
|