diff --git a/ui/src/pages/Alerts/RuleEditor/condition-forms/RouteMetricForm.tsx b/ui/src/pages/Alerts/RuleEditor/condition-forms/RouteMetricForm.tsx index e8138110..40287172 100644 --- a/ui/src/pages/Alerts/RuleEditor/condition-forms/RouteMetricForm.tsx +++ b/ui/src/pages/Alerts/RuleEditor/condition-forms/RouteMetricForm.tsx @@ -1,9 +1,9 @@ import { FormField, Input, Select } from '@cameleer/design-system'; import type { FormState } from '../form-state'; +// Mirrors cameleer-server-core RouteMetric enum — keep in sync. const METRICS = [ { value: 'ERROR_RATE', label: 'Error rate' }, - { value: 'P95_LATENCY_MS', label: 'P95 latency (ms)' }, { value: 'P99_LATENCY_MS', label: 'P99 latency (ms)' }, { value: 'AVG_DURATION_MS', label: 'Avg duration (ms)' }, { value: 'THROUGHPUT', label: 'Throughput (msg/s)' }, diff --git a/ui/src/pages/Alerts/RuleEditor/form-state.ts b/ui/src/pages/Alerts/RuleEditor/form-state.ts index e6cee874..72385302 100644 --- a/ui/src/pages/Alerts/RuleEditor/form-state.ts +++ b/ui/src/pages/Alerts/RuleEditor/form-state.ts @@ -51,7 +51,17 @@ export function initialForm(existing?: AlertRuleResponse): FormState { routeId: '', agentId: '', conditionKind: 'ROUTE_METRIC', - condition: { kind: 'ROUTE_METRIC' } as Partial, + // Pre-populate a valid ROUTE_METRIC default so a rule can be saved without + // the user needing to fill in every condition field. Values chosen to be + // sane for "error rate" alerts on almost any route. + condition: { + kind: 'ROUTE_METRIC', + scope: {}, + metric: 'ERROR_RATE', + comparator: 'GT', + threshold: 0.05, + windowSeconds: 300, + } as unknown as Partial, evaluationIntervalSeconds: 60, forDurationSeconds: 0, reNotifyMinutes: 60,