From de3405c275898c8cd528a636dbd40e1b685cfaa5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 13 May 2026 14:41:28 +0300 Subject: use errgroup instead of WaitGroup for concurrent snapshot builders Replace sync.WaitGroup with errgroup.Group in buildSubSnapshots so errors from sub-builders (buildSyscallSnapshots, buildFileSnapshots, buildProcessSnapshots, buildHistogramSnapshot) are captured and propagated rather than silently dropped. Change Engine.Snapshot() to return (*Snapshot, error), update runtime.SnapshotSource and dashboard.SnapshotSource interfaces accordingly, and adjust all callers in tui.go, dashboard/model.go, and the test helpers. Each sub-builder now returns (result, error); the error return is currently always nil but establishes the contract for future validation. The per-type Snapshot() convenience methods (histogram, syscall, file, process) panic on error since they are internal helpers where failure would be a programming bug. Co-Authored-By: Claude Sonnet 4.6 --- internal/statsengine/engine_test.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'internal/statsengine/engine_test.go') diff --git a/internal/statsengine/engine_test.go b/internal/statsengine/engine_test.go index 7ba8c3a..f714844 100644 --- a/internal/statsengine/engine_test.go +++ b/internal/statsengine/engine_test.go @@ -33,7 +33,10 @@ func TestEngineIngestAndSnapshotIntegration(t *testing.T) { engine.Ingest(newEnginePair(types.SYS_ENTER_COPY_FILE_RANGE, 80, types.TRANSFER_CLASSIFIED, "proc-b", 2, "/tmp/b", 20, 40, 8)) clock.Advance(1 * time.Second) - snap := engine.Snapshot() + snap, err := engine.Snapshot() + if err != nil { + t.Fatalf("unexpected snapshot error: %v", err) + } if snap == nil { t.Fatalf("expected snapshot") } @@ -79,7 +82,10 @@ func TestEngineSnapshotWithNoEvents(t *testing.T) { clock := &fakeClock{now: time.Unix(2000, 0)} engine := newEngineWithClock(10, clock.Now) - snap := engine.Snapshot() + snap, err := engine.Snapshot() + if err != nil { + t.Fatalf("unexpected snapshot error: %v", err) + } if snap == nil { t.Fatalf("expected snapshot") } -- cgit v1.2.3