summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-26 15:08:44 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-26 15:08:44 -0500
commitd40dee9b7b5327b30e6bcf770dfda14a2e6fed02 (patch)
tree039f57306b5bb716a0c282126e29380727933f1f /server
parent5f24b031fa0b10e1cf8fbc7345daa223908e1872 (diff)
downloadsoen422-d40dee9b7b5327b30e6bcf770dfda14a2e6fed02.zip
server: limit number of samples kept in memory
Diffstat (limited to 'server')
-rw-r--r--server/building.go2
-rw-r--r--server/record.go9
-rw-r--r--server/server.go2
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
)