Alerting: Read group details before saving (#53586)

pull/52121/head
Gilles De Mey 3 years ago committed by GitHub
parent 68f6ae5de1
commit 0523eba2a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      public/app/features/alerting/unified/hooks/useCombinedRuleNamespaces.ts
  2. 14
      public/app/features/alerting/unified/utils/rulerClient.ts

@ -115,7 +115,7 @@ export function sortRulesByName(rules: CombinedRule[]) {
return rules.sort((a, b) => a.name.localeCompare(b.name));
}
function addRulerGroupsToCombinedNamespace(namespace: CombinedRuleNamespace, groups: RulerRuleGroupDTO[]): void {
function addRulerGroupsToCombinedNamespace(namespace: CombinedRuleNamespace, groups: RulerRuleGroupDTO[] = []): void {
namespace.groups = groups.map((group) => {
const combinedGroup: CombinedRuleGroup = {
name: group.name,

@ -157,16 +157,22 @@ export function getRulerClient(rulerConfig: RulerDataSourceConfig): RulerClient
return addRuleToNamespaceAndGroup(namespace, groupSpec, newRule);
}
const sameNamespace = existingRule.namespace === namespace;
const sameGroup = existingRule.group.name === values.group;
// we'll fetch the existing group again, someone might have updated it while we were editing a rule
const freshExisting = await findEditableRule(ruleId.fromRuleWithLocation(existingRule));
if (!freshExisting) {
throw new Error('Rule not found.');
}
const sameNamespace = freshExisting.namespace === namespace;
const sameGroup = freshExisting.group.name === values.group;
const sameLocation = sameNamespace && sameGroup;
if (sameLocation) {
// we're update a rule in the same namespace and group
return updateGrafanaRule(existingRule, newRule, evaluateEvery);
return updateGrafanaRule(freshExisting, newRule, evaluateEvery);
} else {
// we're moving a rule to either a different group or namespace
return moveGrafanaRule(namespace, groupSpec, existingRule, newRule);
return moveGrafanaRule(namespace, groupSpec, freshExisting, newRule);
}
};

Loading…
Cancel
Save