Alerting: Recording rules detail view nits (#92643)

* Hide some fields in the details tab (view page) when it's a grafana recording rule

* link to the explore view from the metric name in the detail view

* Revert "link to the explore view from the metric name in the detail view"

This reverts commit 3c17d16cf6.

* move logic to usePendingPeriod hook

* move logic to getPendingPeriod function

* move logic for getting annotations to a new getAnnotations function
This commit is contained in:
Sonia Aguilar
2024-09-04 13:02:06 +03:00
committed by GitHub
parent 9c837407bf
commit 14e1403b9e
2 changed files with 23 additions and 12 deletions
@@ -5,10 +5,9 @@ import { useCallback } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { ClipboardButton, Stack, Text, TextLink, useStyles2 } from '@grafana/ui';
import { CombinedRule } from 'app/types/unified-alerting';
import { Annotations } from 'app/types/unified-alerting-dto';
import { usePendingPeriod } from '../../../hooks/rules/usePendingPeriod';
import { isGrafanaRulerRule, isRecordingRulerRule } from '../../../utils/rules';
import { getAnnotations, isGrafanaRecordingRule, isGrafanaRulerRule, isRecordingRulerRule } from '../../../utils/rules';
import { MetaText } from '../../MetaText';
import { Tokenize } from '../../Tokenize';
@@ -18,6 +17,7 @@ interface DetailsProps {
enum RuleType {
GrafanaManagedAlertRule = 'Grafana-managed alert rule',
GrafanaManagedRecordingRule = 'Grafana-managed recording rule',
CloudAlertRule = 'Cloud alert rule',
CloudRecordingRule = 'Cloud recording rule',
}
@@ -30,7 +30,9 @@ const Details = ({ rule }: DetailsProps) => {
const pendingPeriod = usePendingPeriod(rule);
if (isGrafanaRulerRule(rule.rulerRule)) {
ruleType = RuleType.GrafanaManagedAlertRule;
ruleType = isGrafanaRecordingRule(rule.rulerRule)
? RuleType.GrafanaManagedRecordingRule
: RuleType.GrafanaManagedAlertRule;
} else if (isRecordingRulerRule(rule.rulerRule)) {
ruleType = RuleType.CloudRecordingRule;
} else {
@@ -49,9 +51,7 @@ const Details = ({ rule }: DetailsProps) => {
}
}, [rule.rulerRule]);
const annotations: Annotations | undefined = !isRecordingRulerRule(rule.rulerRule)
? (rule.annotations ?? [])
: undefined;
const annotations = getAnnotations(rule);
const hasEvaluationDuration = Number.isFinite(evaluationDuration);
@@ -9,6 +9,7 @@ import {
CombinedRule,
CombinedRuleGroup,
CombinedRuleWithLocation,
EditableRuleIdentifier,
GrafanaRuleIdentifier,
PromRuleWithLocation,
PrometheusRuleIdentifier,
@@ -19,9 +20,9 @@ import {
RuleNamespace,
RuleWithLocation,
RulesSource,
EditableRuleIdentifier,
} from 'app/types/unified-alerting';
import {
Annotations,
GrafanaAlertState,
GrafanaAlertStateWithReason,
PostableRuleDTO,
@@ -81,10 +82,6 @@ export function isGrafanaRulerRule(rule?: RulerRuleDTO | PostableRuleDTO): rule
return typeof rule === 'object' && 'grafana_alert' in rule;
}
export function isGrafanaRecordingRulerRule(rule?: RulerRuleDTO) {
return typeof rule === 'object' && 'grafana_alert' in rule && 'record' in rule.grafana_alert;
}
export function isCloudRulerRule(rule?: RulerRuleDTO | PostableRuleDTO): rule is RulerCloudRuleDTO {
return typeof rule === 'object' && !isGrafanaRulerRule(rule);
}
@@ -138,7 +135,11 @@ export function getRuleHealth(health: string): RuleHealth | undefined {
}
export function getPendingPeriod(rule: CombinedRule): string | undefined {
if (isRecordingRulerRule(rule.rulerRule) || isRecordingRule(rule.promRule)) {
if (
isRecordingRulerRule(rule.rulerRule) ||
isRecordingRule(rule.promRule) ||
isGrafanaRecordingRule(rule.rulerRule)
) {
return undefined;
}
@@ -157,6 +158,16 @@ export function getPendingPeriod(rule: CombinedRule): string | undefined {
return undefined;
}
export function getAnnotations(rule: CombinedRule): Annotations | undefined {
if (
isRecordingRulerRule(rule.rulerRule) ||
isRecordingRule(rule.promRule) ||
isGrafanaRecordingRule(rule.rulerRule)
) {
return undefined;
}
return rule.annotations ?? [];
}
export interface RulePluginOrigin {
pluginId: string;
}