diff --git a/events/events.go b/events/events.go index 1bb4327..4f2d64a 100644 --- a/events/events.go +++ b/events/events.go @@ -55,12 +55,16 @@ func (b *Bus) Publish(topic string, data interface{}) { // MustDecode decodes the event byte slice back into an events.Event struct or // panics if an error is encountered during this process. func MustDecode(data []byte) (e Event) { - MustDecodeTo(data, &e) + if err := DecodeTo(data, &e); err != nil { + panic(err) + } return } -func MustDecodeTo(data []byte, v interface{}) { +// DecodeTo decodes a byte slice of event data into the given interface. +func DecodeTo(data []byte, v interface{}) error { if err := json.Unmarshal(data, &v); err != nil { - panic(errors.Wrap(err, "events: failed to decode event data into interface")) + return errors.Wrap(err, "events: failed to decode byte slice") } + return nil } diff --git a/server/listeners.go b/server/listeners.go index 7546638..81d05be 100644 --- a/server/listeners.go +++ b/server/listeners.go @@ -101,7 +101,10 @@ func (s *Server) StartEventListeners() { Topic string Data environment.Stats } - events.MustDecodeTo(v, &stats) + if err := events.DecodeTo(v, &stats); err != nil { + s.Log().WithField("error", err).Warn("failed to decode server resource event") + return + } s.resources.UpdateStats(stats.Data) // If there is no disk space available at this point, trigger the server // disk limiter logic which will start to stop the running instance.