From da554e9e823cacdf72eba1fef1835884f7985a9f Mon Sep 17 00:00:00 2001 From: Debian Date: Tue, 26 May 2026 20:07:50 +0200 Subject: [PATCH] feat(alerts): severity + kind filter selects on Events tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operators can now narrow the history table by severity (INFO/WARNING/ ERROR/CRITICAL) and by alert kind (dynamically derived from loaded events, searchable). Filtering is client-side — no extra API calls. v1.1.112. Co-Authored-By: Claude Sonnet 4.6 --- VERSION | 2 +- cmd/edgeguard-api/main.go | 2 +- cmd/edgeguard-ctl/main.go | 2 +- cmd/edgeguard-scheduler/main.go | 2 +- management-ui/src/pages/Alerts/index.tsx | 42 ++++++++++++++++++++++-- 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/VERSION b/VERSION index 26b3e75..1b5cd17 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.111 +1.1.112 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index 37f1029..96ac434 100644 --- a/cmd/edgeguard-api/main.go +++ b/cmd/edgeguard-api/main.go @@ -60,7 +60,7 @@ import ( usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users" ) -var version = "1.1.111" +var version = "1.1.112" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index f4d7ff0..9ebbe5f 100644 --- a/cmd/edgeguard-ctl/main.go +++ b/cmd/edgeguard-ctl/main.go @@ -11,7 +11,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/setup" ) -var version = "1.1.111" +var version = "1.1.112" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index c2fc837..8565a18 100644 --- a/cmd/edgeguard-scheduler/main.go +++ b/cmd/edgeguard-scheduler/main.go @@ -41,7 +41,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts" ) -var version = "1.1.111" +var version = "1.1.112" const ( // renewTickInterval — how often we re-evaluate expiring certs. diff --git a/management-ui/src/pages/Alerts/index.tsx b/management-ui/src/pages/Alerts/index.tsx index ef50f20..df5bfe9 100644 --- a/management-ui/src/pages/Alerts/index.tsx +++ b/management-ui/src/pages/Alerts/index.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useMemo, useState } from 'react' import { Alert, Button, Card, Form, Input, InputNumber, Modal, Popconfirm, Select, Space, Switch, Table, Tabs, Tag, Tooltip, Typography, message, } from 'antd' @@ -88,6 +88,20 @@ export default function AlertsPage() { const [edit, setEdit] = useState(null) const [creating, setCreating] = useState(false) const [form] = Form.useForm() + const [filterSev, setFilterSev] = useState() + const [filterKind, setFilterKind] = useState() + + const kindOptions = useMemo(() => { + const kinds = [...new Set((events.data ?? []).map(e => e.kind))].sort() + return kinds.map(k => ({ value: k, label: k })) + }, [events.data]) + + const filteredEvents = useMemo(() => + (events.data ?? []).filter(e => + (!filterSev || e.severity === filterSev) && + (!filterKind || e.kind === filterKind) + ), + [events.data, filterSev, filterKind]) function buildPayload(v: ChannelFormValues): Channel { const settings: Record = {} @@ -325,8 +339,32 @@ export default function AlertsPage() { label: t('alerts.tabs.events'), children: ( + + +