|
|
@@ -8,6 +8,7 @@
|
|
|
package monitor
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"errors"
|
|
|
"sync"
|
|
|
"time"
|
|
|
@@ -208,9 +209,15 @@ func (m *Mon) debounce() {
|
|
|
m.logf("interfaces.State: %v", err)
|
|
|
} else {
|
|
|
m.mu.Lock()
|
|
|
- changed := !curState.Equal(m.ifState)
|
|
|
+ oldState := m.ifState
|
|
|
+ changed := !curState.Equal(oldState)
|
|
|
if changed {
|
|
|
m.ifState = curState
|
|
|
+
|
|
|
+ if s1, s2 := oldState.String(), curState.String(); s1 == s2 {
|
|
|
+ m.logf("[unexpected] network state changed, but stringification didn't: %v\nold: %s\nnew: %s\n", s1,
|
|
|
+ jsonSummary(oldState), jsonSummary(curState))
|
|
|
+ }
|
|
|
}
|
|
|
for _, cb := range m.cbs {
|
|
|
go cb(changed, m.ifState)
|
|
|
@@ -225,3 +232,11 @@ func (m *Mon) debounce() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func jsonSummary(x interface{}) interface{} {
|
|
|
+ j, err := json.Marshal(x)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return j
|
|
|
+}
|