[v9.5.x] Alerting: Fix creating a recording rule when having multiple datasources (#66448)

Alerting: Fix creating a recording rule when having multiple datasources (#66415)

Fix creating recording rules when having multiple datasources

(cherry picked from commit 2991d4c213)

Co-authored-by: Virginia Cepeda <virginia.cepeda@grafana.com>
This commit is contained in:
Grot (@grafanabot)
2023-04-13 12:18:40 +02:00
committed by GitHub
co-authored by Virginia Cepeda
parent 12d121a1fc
commit fde8d81de3
3 changed files with 17 additions and 6 deletions
@@ -57,17 +57,19 @@ export const RecordingRuleEditor: FC<RecordingRuleEditorProps> = ({
const handleChangedQuery = (changedQuery: DataQuery) => {
const query = queries[0];
const dataSourceId = getDataSourceSrv().getInstanceSettings(dataSourceName)?.uid;
if (!isPromOrLokiQuery(query.model)) {
if (!isPromOrLokiQuery(changedQuery) || !dataSourceId) {
return;
}
const expr = query.model.expr;
const expr = changedQuery.expr;
const merged = {
...query,
refId: changedQuery.refId,
queryType: query.model.queryType ?? '',
queryType: changedQuery.queryType ?? '',
datasourceUid: dataSourceId,
expr,
model: {
refId: changedQuery.refId,
@@ -67,6 +67,8 @@ export const AlertType = ({ editingExistingRule }: Props) => {
onChange={(ds: DataSourceInstanceSettings) => {
// reset location if switching data sources, as different rules source will have different groups and namespaces
setValue('location', undefined);
// reset expression as they don't need to persist after changing datasources
setValue('expression', '');
onChange(ds?.name ?? null);
}}
/>
@@ -198,19 +198,26 @@ export const QueryAndExpressionsStep = ({ editingExistingRule, onDataChange }: P
useEffect(() => {
setPanelData({});
if (type === RuleFormType.cloudRecording) {
const expr = getValues('expression');
const datasourceUid =
(editingExistingRule && getDataSourceSrv().getInstanceSettings(dataSourceName)?.uid) ||
recordingRuleDefaultDatasource.uid;
const defaultQuery = {
refId: 'A',
datasourceUid: recordingRuleDefaultDatasource.uid,
datasourceUid,
queryType: '',
relativeTimeRange: getDefaultRelativeTimeRange(),
expr,
model: {
refId: 'A',
hide: false,
expr,
},
};
dispatch(setRecordingRulesQueries({ recordingRuleQueries: [defaultQuery], expression: getValues('expression') }));
dispatch(setRecordingRulesQueries({ recordingRuleQueries: [defaultQuery], expression: expr }));
}
}, [type, recordingRuleDefaultDatasource, editingExistingRule, getValues]);
}, [type, recordingRuleDefaultDatasource, editingExistingRule, getValues, dataSourceName]);
const onDuplicateQuery = useCallback((query: AlertQuery) => {
dispatch(duplicateQuery(query));