|
|
@@ -280,8 +280,10 @@ func (s *Service) loop() {
|
|
|
}
|
|
|
}
|
|
|
fullReport.Stop()
|
|
|
- // Make sure the connection is closed
|
|
|
+
|
|
|
+ // Close the current connection and establish a new one
|
|
|
conn.Close()
|
|
|
+ errTimer.Reset(0)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -296,8 +298,23 @@ func (s *Service) readLoop(conn *websocket.Conn) {
|
|
|
|
|
|
for {
|
|
|
// Retrieve the next generic network packet and bail out on error
|
|
|
+ var blob json.RawMessage
|
|
|
+ if err := conn.ReadJSON(&blob); err != nil {
|
|
|
+ log.Warn("Failed to retrieve stats server message", "err", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // If the network packet is a system ping, respond to it directly
|
|
|
+ var ping string
|
|
|
+ if err := json.Unmarshal(blob, &ping); err == nil && strings.HasPrefix(ping, "primus::ping::") {
|
|
|
+ if err := conn.WriteJSON(strings.Replace(ping, "ping", "pong", -1)); err != nil {
|
|
|
+ log.Warn("Failed to respond to system ping message", "err", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // Not a system ping, try to decode an actual state message
|
|
|
var msg map[string][]interface{}
|
|
|
- if err := conn.ReadJSON(&msg); err != nil {
|
|
|
+ if err := json.Unmarshal(blob, &msg); err != nil {
|
|
|
log.Warn("Failed to decode stats server message", "err", err)
|
|
|
return
|
|
|
}
|