in pkg/client/unit.go [186:216]
func (u *Unit) UpdateState(state UnitState, message string, payload map[string]interface{}) error {
var statePayload *structpb.Struct
var err error
if payload != nil {
statePayload, err = structpb.NewStruct(payload)
if err != nil {
return err
}
}
u.stateMu.Lock()
defer u.stateMu.Unlock()
changed := false
if u.state != state {
u.state = state
changed = true
}
if u.stateMsg != message {
u.stateMsg = message
changed = true
}
if (u.statePayload == nil && statePayload != nil) ||
(u.statePayload != nil && statePayload == nil) ||
!gproto.Equal(u.statePayload, statePayload) {
u.statePayload = statePayload
changed = true
}
if changed {
u.client.unitsStateChanged()
}
return nil
}