summaryrefslogtreecommitdiff
path: root/internal/statsengine/snapshot.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-24 21:39:08 +0200
committerPaul Buetow <paul@buetow.org>2026-02-24 21:39:08 +0200
commit84d523fd02cba38cfe90118975f345b989beaae1 (patch)
tree5798395f193c0311983df48fcd10e1bf1e411d00 /internal/statsengine/snapshot.go
parenta5eb463095631bcd8abd087c5e380f7a79104268 (diff)
statsengine: deduplicate topN helpers with generics
Diffstat (limited to 'internal/statsengine/snapshot.go')
-rw-r--r--internal/statsengine/snapshot.go28
1 files changed, 4 insertions, 24 deletions
diff --git a/internal/statsengine/snapshot.go b/internal/statsengine/snapshot.go
index 1cc2118..8c9656e 100644
--- a/internal/statsengine/snapshot.go
+++ b/internal/statsengine/snapshot.go
@@ -186,7 +186,7 @@ func (s Snapshot) SyscallsCount() int {
// TopNSyscalls returns at most n per-syscall rows in ranking order.
// Callers must treat returned data as read-only.
func (s Snapshot) TopNSyscalls(n int) []SyscallSnapshot {
- return topNSyscalls(s.syscalls, n)
+ return topN(s.syscalls, n)
}
// Files returns per-file snapshot rows.
@@ -203,7 +203,7 @@ func (s Snapshot) FilesCount() int {
// TopNFiles returns at most n file rows in ranking order.
// Callers must treat returned data as read-only.
func (s Snapshot) TopNFiles(n int) []FileSnapshot {
- return topNFiles(s.files, n)
+ return topN(s.files, n)
}
// Processes returns per-process snapshot rows.
@@ -220,7 +220,7 @@ func (s Snapshot) ProcessesCount() int {
// TopNProcesses returns at most n process rows in ranking order.
// Callers must treat returned data as read-only.
func (s Snapshot) TopNProcesses(n int) []ProcessSnapshot {
- return topNProcesses(s.processes, n)
+ return topN(s.processes, n)
}
// Buckets returns histogram buckets.
@@ -229,27 +229,7 @@ func (h HistogramSnapshot) Buckets() []HistogramBucketSnapshot {
return h.buckets
}
-func topNSyscalls(rows []SyscallSnapshot, n int) []SyscallSnapshot {
- if n <= 0 || len(rows) == 0 {
- return nil
- }
- if n > len(rows) {
- n = len(rows)
- }
- return rows[:n:n]
-}
-
-func topNFiles(rows []FileSnapshot, n int) []FileSnapshot {
- if n <= 0 || len(rows) == 0 {
- return nil
- }
- if n > len(rows) {
- n = len(rows)
- }
- return rows[:n:n]
-}
-
-func topNProcesses(rows []ProcessSnapshot, n int) []ProcessSnapshot {
+func topN[T any](rows []T, n int) []T {
if n <= 0 || len(rows) == 0 {
return nil
}