summaryrefslogtreecommitdiff
path: root/internal/statsengine/syscall.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/statsengine/syscall.go')
-rw-r--r--internal/statsengine/syscall.go15
1 files changed, 12 insertions, 3 deletions
diff --git a/internal/statsengine/syscall.go b/internal/statsengine/syscall.go
index 2ef929a..d58e8c9 100644
--- a/internal/statsengine/syscall.go
+++ b/internal/statsengine/syscall.go
@@ -99,12 +99,18 @@ func (a *syscallAccumulator) Add(pair *event.Pair) {
}
}
+// Snapshot returns a slice of SyscallSnapshots for all tracked syscalls.
+// It panics on build error, which should never happen for a valid accumulator.
func (a *syscallAccumulator) Snapshot(elapsed time.Duration) []SyscallSnapshot {
if a == nil {
return nil
}
- return buildSyscallSnapshots(a.snapshotInputs(), elapsed)
+ snap, err := buildSyscallSnapshots(a.snapshotInputs(), elapsed)
+ if err != nil {
+ panic("buildSyscallSnapshots: " + err.Error())
+ }
+ return snap
}
func (a *syscallAccumulator) snapshotInputs() []syscallSnapshotInput {
@@ -132,7 +138,10 @@ func (a *syscallAccumulator) snapshotInputs() []syscallSnapshotInput {
return inputs
}
-func buildSyscallSnapshots(inputs []syscallSnapshotInput, elapsed time.Duration) []SyscallSnapshot {
+// buildSyscallSnapshots converts raw syscall accumulator inputs into sorted
+// SyscallSnapshot slices. The error return is reserved for future validation;
+// currently this function always succeeds.
+func buildSyscallSnapshots(inputs []syscallSnapshotInput, elapsed time.Duration) ([]SyscallSnapshot, error) {
rateDiv := elapsed.Seconds()
result := make([]SyscallSnapshot, 0, len(inputs))
for _, in := range inputs {
@@ -144,7 +153,7 @@ func buildSyscallSnapshots(inputs []syscallSnapshotInput, elapsed time.Duration)
}
return cmp.Compare(a.Name, b.Name)
})
- return result
+ return result, nil
}
func (s *syscallStats) updateMinMax(duration uint64) {