From bcde6678b848f918ecfc446b46abd24b414ed932 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Mon, 20 Apr 2026 16:17:59 +0200 Subject: [PATCH] fix(ui/alerts): align RouteMetric metric enum with backend; pre-populate ROUTE_METRIC defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RouteMetricForm dropped P95_LATENCY_MS — not in cameleer-server-core RouteMetric enum (valid: ERROR_RATE, P99_LATENCY_MS, AVG_DURATION_MS, THROUGHPUT, ERROR_COUNT). - initialForm now returns a ready-to-save ROUTE_METRIC condition (metric=ERROR_RATE, comparator=GT, threshold=0.05, windowSeconds=300), so clicking through the wizard with all defaults produces a valid rule. Prevents a 400 'missing type id property kind' + 400 on condition enum validation if the user leaves the condition step untouched. --- .../RuleEditor/condition-forms/RouteMetricForm.tsx | 2 +- ui/src/pages/Alerts/RuleEditor/form-state.ts | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) 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,