From d40dee9b7b5327b30e6bcf770dfda14a2e6fed02 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Tue, 26 Nov 2024 15:08:44 -0500 Subject: server: limit number of samples kept in memory --- server/record.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'server/record.go') diff --git a/server/record.go b/server/record.go index 9051146..c2f38eb 100644 --- a/server/record.go +++ b/server/record.go @@ -15,13 +15,15 @@ type entry[T any] struct { v T } -func newRecord[T any]() Record[T] { +// Create a record with the specified capacity. +// If the capacity is exceeded, old entires will be discarded and new ones kept. +func newRecord[T any](capacity int) Record[T] { put := make(chan T) get := make(chan chan T) getRecent := make(chan chan T) go func() { - var entries []entry[T] + entries := make([]entry[T], 0, capacity) for { select { @@ -30,6 +32,9 @@ func newRecord[T any]() Record[T] { return } entries = append(entries, entry[T]{time.Now(), v}) + if len(entries) > capacity { + entries = entries[1:] + } case c, ok := <-get: if !ok { return -- cgit v1.2.3