Files
weave-scope/render/detailed/topology_diff.go
Roland Schilter 5329efa528 Reset nodes in frontend when scope-app restarted
When the scope-app restarts, it no longer has a
reference to the previous node set. Therefore,
the delta update adds *all* nodes but does not
remove legacy ones.

`reset==true` tells the frontend to start fresh.

Fixes #2708
2017-07-13 14:28:17 +02:00

41 lines
829 B
Go

package detailed
import (
"reflect"
)
// Diff is returned by TopoDiff. It represents the changes between two
// NodeSummary maps.
type Diff struct {
Add []NodeSummary `json:"add"`
Update []NodeSummary `json:"update"`
Remove []string `json:"remove"`
Reset bool `json:"reset,omitempty"`
}
// TopoDiff gives you the diff to get from A to B.
func TopoDiff(a, b NodeSummaries) Diff {
diff := Diff{Reset: a == nil}
notSeen := map[string]struct{}{}
for k := range a {
notSeen[k] = struct{}{}
}
for k, node := range b {
if _, ok := a[k]; !ok {
diff.Add = append(diff.Add, node)
} else if !reflect.DeepEqual(node, a[k]) {
diff.Update = append(diff.Update, node)
}
delete(notSeen, k)
}
// leftover keys
for k := range notSeen {
diff.Remove = append(diff.Remove, k)
}
return diff
}