import { ReactNode } from 'react'; import { Stack, Text } from '@grafana/ui'; import { RuleHealth } from 'app/types/unified-alerting'; import { PromAlertingRuleState } from 'app/types/unified-alerting-dto'; import { AlertStateDot } from '../AlertStateDot'; import { isErrorHealth } from './RuleViewer'; interface RecordingBadgeProps { health?: RuleHealth; } export const RecordingBadge = ({ health }: RecordingBadgeProps) => { const hasError = isErrorHealth(health); const color = hasError ? 'error' : 'success'; const text = hasError ? 'Recording error' : 'Recording'; return ; }; // we're making a distinction here between the "state" of the rule and its "health". interface StateBadgeProps { state: PromAlertingRuleState; health?: RuleHealth; } export const StateBadge = ({ state, health }: StateBadgeProps) => { let stateLabel: string; let color: BadgeColor; switch (state) { case PromAlertingRuleState.Inactive: color = 'success'; stateLabel = 'Normal'; break; case PromAlertingRuleState.Firing: color = 'error'; stateLabel = 'Firing'; break; case PromAlertingRuleState.Pending: color = 'warning'; stateLabel = 'Pending'; break; } // if the rule is in "error" health we don't really care about the state if (isErrorHealth(health)) { color = 'error'; stateLabel = 'Error'; } if (health === 'nodata') { color = 'warning'; stateLabel = 'No data'; } return ; }; // the generic badge component type BadgeColor = 'success' | 'error' | 'warning'; interface BadgeProps { color: BadgeColor; text: NonNullable; } function Badge({ color, text }: BadgeProps) { return ( {text} ); }