mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-05 03:01:11 +00:00
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
40 lines
767 B
Go
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
|
|
}
|