Alerting: Fix normalization of alert states for panel annotations (#51637)

A bug introduced by #49259 would crash the annotations view of a panel with a linked alert rule. States are now normalized so crashes won't occur and the base state is used instead.
This commit is contained in:
Gilles De Mey 2022-06-30 16:46:54 +02:00 committed by GitHub
parent 64a2c4783f
commit d63ffa314e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 14 deletions

View File

@ -4134,11 +4134,11 @@ exports[`better eslint`] = {
[37, 48, 3, "Unexpected any. Specify a different type.", "193409811"],
[50, 46, 3, "Unexpected any. Specify a different type.", "193409811"]
],
"public/app/features/alerting/state/alertDef.ts:2887521080": [
"public/app/features/alerting/state/alertDef.ts:1683373860": [
[78, 34, 3, "Unexpected any. Specify a different type.", "193409811"],
[159, 34, 3, "Unexpected any. Specify a different type.", "193409811"],
[174, 4, 14, "Do not use any type assertions.", "3854427458"],
[178, 36, 3, "Unexpected any. Specify a different type.", "193409811"]
[165, 34, 3, "Unexpected any. Specify a different type.", "193409811"],
[180, 4, 14, "Do not use any type assertions.", "3854427458"],
[184, 36, 3, "Unexpected any. Specify a different type.", "193409811"]
],
"public/app/features/alerting/state/query_part.ts:2255335987": [
[4, 10, 3, "Unexpected any. Specify a different type.", "193409811"],

View File

@ -81,8 +81,14 @@ function createReducerPart(model: any) {
return new QueryPart(model, def);
}
// state can also contain a "Reason", ie. "Alerting (NoData)" which indicates that the actual state is "Alerting" but
// the reason it is set to "Alerting" is "NoData"; a lack of data points to evaluate.
function normalizeAlertState(state: string) {
return state.toLowerCase().replace(/_/g, '').split(' ')[0];
}
function getStateDisplayModel(state: string) {
const normalizedState = state.toLowerCase().replace(/_/g, '');
const normalizedState = normalizeAlertState(state);
switch (normalizedState) {
case 'normal':
@ -121,13 +127,6 @@ function getStateDisplayModel(state: string) {
stateClass: 'alert-state-warning',
};
}
case 'unknown': {
return {
text: 'UNKNOWN',
iconClass: 'question-circle',
stateClass: '.alert-state-paused',
};
}
case 'firing': {
return {
@ -152,9 +151,16 @@ function getStateDisplayModel(state: string) {
stateClass: 'alert-state-critical',
};
}
}
throw { message: 'Unknown alert state' };
case 'unknown':
default: {
return {
text: 'UNKNOWN',
iconClass: 'question-circle',
stateClass: '.alert-state-paused',
};
}
}
}
function joinEvalMatches(matches: any, separator: string) {