From 8047f005d41c86c5bd7db812b0189578830c5d3b Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Wed, 23 Sep 2026 00:40:46 +0200 Subject: [PATCH] fix(ui): preserve paused systems in network monitors table (#2391) --- internal/hub/systems/system_manager.go | 4 ++- internal/hub/systems/systems_test.go | 32 +++++++++++++++++++ .../network-monitors-table.tsx | 6 +++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/internal/hub/systems/system_manager.go b/internal/hub/systems/system_manager.go index d1ff9633..be3a61fa 100644 --- a/internal/hub/systems/system_manager.go +++ b/internal/hub/systems/system_manager.go @@ -190,7 +190,9 @@ func (sm *SystemManager) onRecordAfterCreateSuccess(e *core.RecordEvent) error { // It clears system info when the status is changed to paused. func (sm *SystemManager) onRecordUpdate(e *core.RecordEvent) error { if e.Record.GetString("status") == paused { - e.Record.Set("info", system.Info{}) + var prevInfo system.Info + e.Record.UnmarshalJSONField("info", &prevInfo) + e.Record.Set("info", system.Info{AgentVersion: prevInfo.AgentVersion}) } return e.Next() } diff --git a/internal/hub/systems/systems_test.go b/internal/hub/systems/systems_test.go index cf4997f8..5063b22c 100644 --- a/internal/hub/systems/systems_test.go +++ b/internal/hub/systems/systems_test.go @@ -18,6 +18,38 @@ import ( "github.com/stretchr/testify/require" ) +func TestPauseSystemPreservesAgentVersion(t *testing.T) { + hub, user := tests.GetHubWithUser(t) + defer hub.Cleanup() + + record, err := tests.CreateRecord(hub, "systems", map[string]any{ + "name": "pause-info-test", + "host": "localhost", + "port": "33914", + "users": []string{user.Id}, + }) + require.NoError(t, err) + + record.Set("info", system.Info{ + AgentVersion: "0.20.0", + Cpu: 42.5, + MemPct: 60, + Uptime: 3600, + Services: []uint16{3, 1}, + }) + require.NoError(t, hub.Save(record)) + + record.Set("status", "paused") + require.NoError(t, hub.Save(record)) + + pausedRecord, err := hub.FindRecordById("systems", record.Id) + require.NoError(t, err) + assert.Equal(t, "paused", pausedRecord.GetString("status")) + var info system.Info + require.NoError(t, pausedRecord.UnmarshalJSONField("info", &info)) + assert.Equal(t, system.Info{AgentVersion: "0.20.0"}, info) +} + func TestSystemManagerNew(t *testing.T) { hub, err := tests.NewTestHub(t.TempDir()) if err != nil { diff --git a/internal/site/src/components/network-monitors-table/network-monitors-table.tsx b/internal/site/src/components/network-monitors-table/network-monitors-table.tsx index b330126f..e670986c 100644 --- a/internal/site/src/components/network-monitors-table/network-monitors-table.tsx +++ b/internal/site/src/components/network-monitors-table/network-monitors-table.tsx @@ -34,6 +34,7 @@ import { TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/compon import { useToast } from "@/components/ui/use-toast" import { isReadOnlyUser } from "@/lib/api" import { pb } from "@/lib/api" +import { SystemStatus } from "@/lib/enums" import { $allSystemsById, $direction, $userSettings } from "@/lib/stores" import { cn, @@ -450,10 +451,13 @@ const NetworkMonitorTableRow = memo(function NetworkMonitorTableRow({ rowSelection: RowSelectionState openSheet: (monitor: NetworkMonitorRecord) => void }) { + const system = useStore($allSystemsById)[row.original.system] return ( openSheet(row.original)} > {row.getVisibleCells().map((cell) => (