a bit more safety by copying the state when passing it to
the websessions and prometheus.
This commit is contained in:
parent
95fe8bb010
commit
5ff22f4b13
@ -15,6 +15,6 @@ func NewStateNotifier() *StateNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (notifier StateNotifier) Publish(state *models.State) {
|
func (notifier StateNotifier) Publish(state *models.State) {
|
||||||
notifier.webNotificationChannel <- state
|
notifier.webNotificationChannel <- state.Copy()
|
||||||
notifier.prometheusNotificationChannel <- state
|
notifier.prometheusNotificationChannel <- state.Copy()
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,18 @@
|
|||||||
package models
|
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 {
|
type State struct {
|
||||||
Agents []Agent
|
Agents []Agent
|
||||||
Clients []Client
|
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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user