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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user