a bit more safety by copying the state when passing it to

the websessions and prometheus.
This commit is contained in:
Erik Brakkee 2024-08-14 11:36:36 +02:00
parent 95fe8bb010
commit 5ff22f4b13
2 changed files with 14 additions and 2 deletions

View File

@ -15,6 +15,6 @@ func NewStateNotifier() *StateNotifier {
}
func (notifier StateNotifier) Publish(state *models.State) {
notifier.webNotificationChannel <- state
notifier.prometheusNotificationChannel <- state
notifier.webNotificationChannel <- state.Copy()
notifier.prometheusNotificationChannel <- state.Copy()
}

View File

@ -1,6 +1,18 @@
package models
// State is a description of the current state of converge.
// Created by the server and used for updating the web client
// and prometheus metrics.
type State struct {
Agents []Agent
Clients []Client
}
func (state *State) Copy() *State {
c := State{}
c.Agents = make([]Agent, len(state.Agents))
c.Clients = make([]Client, len(state.Clients))
copy(c.Agents, state.Agents)
copy(c.Clients, state.Clients)
return &c
}