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

Fix creating recording rules when having multiple datasources
This commit is contained in:
Virginia Cepeda 2023-04-13 06:58:59 -03:00 committed by GitHub
parent 0b2a4322db
commit 2991d4c213
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 6 deletions

View File

@ -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,

View File

@ -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);
}}
/>

View File

@ -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));