diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 15:08:44 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 15:08:44 -0500 |
| commit | d40dee9b7b5327b30e6bcf770dfda14a2e6fed02 (patch) | |
| tree | 039f57306b5bb716a0c282126e29380727933f1f /server | |
| parent | 5f24b031fa0b10e1cf8fbc7345daa223908e1872 (diff) | |
| download | soen422-d40dee9b7b5327b30e6bcf770dfda14a2e6fed02.zip | |
server: limit number of samples kept in memory
Diffstat (limited to 'server')
| -rw-r--r-- | server/building.go | 2 | ||||
| -rw-r--r-- | server/record.go | 9 | ||||
| -rw-r--r-- | server/server.go | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/server/building.go b/server/building.go index c7d298f..8772374 100644 --- a/server/building.go +++ b/server/building.go @@ -7,7 +7,7 @@ type Building map[RoomID]Record[Humidity] func newBuilding(roomIDs []RoomID) Building { b := make(Building) for _, id := range roomIDs { - b[id] = newRecord[Humidity]() + b[id] = newRecord[Humidity](historySize) } return b } 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 diff --git a/server/server.go b/server/server.go index fc19d94..4ef5151 100644 --- a/server/server.go +++ b/server/server.go @@ -9,7 +9,7 @@ import ( const ( addr = ":9090" - + historySize = 10000 // Number of old samples to keep in memory. targetHumidityDefault = 35.0 ) |