summaryrefslogtreecommitdiff
path: root/internal/statsengine
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-25 10:10:59 +0200
committerPaul Buetow <paul@buetow.org>2026-02-25 10:10:59 +0200
commit7ca1eeaa98a58471a2214a2274d20b71206af2a1 (patch)
tree3a3b041f2ca792485d527b6f19ffc4c362d64f36 /internal/statsengine
parent11ca5e1894d5823996b4c5214cb47f6652eadb1d (diff)
Parallelize snapshot builders in stats engine
Diffstat (limited to 'internal/statsengine')
-rw-r--r--internal/statsengine/engine.go42
1 files changed, 37 insertions, 5 deletions
diff --git a/internal/statsengine/engine.go b/internal/statsengine/engine.go
index 6b20a14..fd46cc3 100644
--- a/internal/statsengine/engine.go
+++ b/internal/statsengine/engine.go
@@ -160,15 +160,47 @@ func (e *Engine) Snapshot() *Snapshot {
elapsed := nonNegativeDuration(in.now.Sub(in.startedAt))
rateDiv := elapsed.Seconds()
+ var (
+ syscallsSnap []SyscallSnapshot
+ filesSnap []FileSnapshot
+ processesSnap []ProcessSnapshot
+ latencyHistSnap HistogramSnapshot
+ gapHistSnap HistogramSnapshot
+ )
+
+ var wg sync.WaitGroup
+ wg.Add(5)
+ go func() {
+ defer wg.Done()
+ syscallsSnap = buildSyscallSnapshots(in.syscalls, elapsed)
+ }()
+ go func() {
+ defer wg.Done()
+ filesSnap = buildFileSnapshots(in.files)
+ }()
+ go func() {
+ defer wg.Done()
+ processesSnap = buildProcessSnapshots(in.processes, elapsed)
+ }()
+ go func() {
+ defer wg.Done()
+ latencyHistSnap = buildHistogramSnapshot(in.latencyHist)
+ }()
+ go func() {
+ defer wg.Done()
+ gapHistSnap = buildHistogramSnapshot(in.gapHist)
+ }()
+ wg.Wait()
+
snapshot := NewSnapshot(
in.latencySeries,
in.gapSeries,
in.throughputSeries,
- buildSyscallSnapshots(in.syscalls, elapsed),
- buildFileSnapshots(in.files),
- buildProcessSnapshots(in.processes, elapsed),
- buildHistogramSnapshot(in.latencyHist),
- buildHistogramSnapshot(in.gapHist),
+ syscallsSnap,
+ filesSnap,
+ processesSnap,
+ latencyHistSnap,
+ gapHistSnap,
)
snapshot.GeneratedAt = in.now