From 14e1403b9ec0212d3935771067ffe900009ea62d Mon Sep 17 00:00:00 2001 From: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:02:06 +0200 Subject: [PATCH] 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 3c17d16cf633892ae080bd43f73f77c82b8d4fc9. * move logic to usePendingPeriod hook * move logic to getPendingPeriod function * move logic for getting annotations to a new getAnnotations function --- .../components/rule-viewer/tabs/Details.tsx | 12 +++++----- .../features/alerting/unified/utils/rules.ts | 23 ++++++++++++++----- 2 files changed, 23 insertions(+), 12 deletions(-) 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; }