Files
weave-scope/render/detailed/topology_diff.go
Paul Bellamy 2c6b6e6707 Refactoring rendering to remove RenderableNode
Squash of:
- use detailed.Summaries to render topology nodes
- ban merging nodes of different topologies (they should be mapped)
- need to prune parents when mapping node types
- render container images by id if they have no name
- remove separate render ids and prune parents in NewDerived*
- don't render metrics/metadata for groups of nodes
- fixing up tests
- removing pending unit tests (for mapping.go, for now)
- updating experimental dir for RenderableNode removal
2016-03-29 14:13:03 +01:00

40 lines
767 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"`
}
// TopoDiff gives you the diff to get from A to B.
func TopoDiff(a, b NodeSummaries) Diff {
diff := Diff{}
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
}