diff --git a/public/app/features/alerting/unified/components/rule-viewer/tabs/Details.tsx b/public/app/features/alerting/unified/components/rule-viewer/tabs/Details.tsx index 53c74196586..9d9397f8839 100644 --- a/public/app/features/alerting/unified/components/rule-viewer/tabs/Details.tsx +++ b/public/app/features/alerting/unified/components/rule-viewer/tabs/Details.tsx @@ -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); diff --git a/public/app/features/alerting/unified/utils/rules.ts b/public/app/features/alerting/unified/utils/rules.ts index cc4a7af1af9..0a716dfe64f 100644 --- a/public/app/features/alerting/unified/utils/rules.ts +++ b/public/app/features/alerting/unified/utils/rules.ts @@ -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; }