diff --git a/probe/host/tagger_test.go b/probe/host/tagger_test.go index 6001815e4..ad4582b1d 100644 --- a/probe/host/tagger_test.go +++ b/probe/host/tagger_test.go @@ -17,7 +17,7 @@ func TestTagger(t *testing.T) { r := report.MakeReport() r.Process.AddNode(node) rpt, _ := host.NewTagger(hostID).Tag(r) - have := rpt.Process.Nodes[endpointNodeID].Copy() + have := rpt.Process.Nodes[endpointNodeID] // It should now have the host ID wantHostID := report.MakeHostNodeID(hostID) diff --git a/render/container.go b/render/container.go index 6b48a758e..440d9fbdc 100644 --- a/render/container.go +++ b/render/container.go @@ -191,13 +191,12 @@ func (r containerWithImageNameRenderer) Render(rpt report.Report, dct Decorator) imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName) imageNodeID := report.MakeContainerImageNodeID(imageNameWithoutVersion) - output := c.Copy() - output = propagateLatest(docker.ImageName, image, output) - output = propagateLatest(docker.ImageLabelPrefix+"works.weave.role", image, output) - output.Parents = output.Parents. + c = propagateLatest(docker.ImageName, image, c) + c = propagateLatest(docker.ImageLabelPrefix+"works.weave.role", image, c) + c.Parents = c.Parents. Delete(report.ContainerImage). Add(report.ContainerImage, report.MakeStringSet(imageNodeID)) - outputs[id] = output + outputs[id] = c } return outputs } @@ -365,14 +364,13 @@ func MapContainerImage2Name(n report.Node, _ report.Networks) report.Nodes { } imageNameWithoutVersion := docker.ImageNameWithoutVersion(imageName) - output := n.Copy() - output.ID = report.MakeContainerImageNodeID(imageNameWithoutVersion) + n.ID = report.MakeContainerImageNodeID(imageNameWithoutVersion) if imageID, ok := report.ParseContainerImageNodeID(n.ID); ok { - output.Sets = output.Sets.Add(docker.ImageID, report.EmptyStringSet.Add(imageID)) + n.Sets = n.Sets.Add(docker.ImageID, report.EmptyStringSet.Add(imageID)) } - return report.Nodes{output.ID: output} + return report.Nodes{n.ID: n} } // MapContainer2Hostname maps container Nodes to 'hostname' renderabled nodes.. diff --git a/render/detailed/connections.go b/render/detailed/connections.go index fe1ba57de..576690013 100644 --- a/render/detailed/connections.go +++ b/render/detailed/connections.go @@ -75,7 +75,6 @@ func incomingConnectionsSummary(topologyID string, r report.Report, n report.Nod if !node.Adjacency.Contains(n.ID) { continue } - remoteNode := node.Copy() // Work out what port they are talking to, and count the number of // connections to that port. @@ -91,7 +90,7 @@ func incomingConnectionsSummary(topologyID string, r report.Report, n report.Nod } key := connection{ localNode: &n, - remoteNode: &remoteNode, + remoteNode: &node, port: port, } if isInternetNode(n) { @@ -127,8 +126,7 @@ func outgoingConnectionsSummary(topologyID string, r report.Report, n report.Nod if !ok { continue } - remoteNode := node.Copy() - remoteEndpointIDs := endpointChildIDsOf(remoteNode) + remoteEndpointIDs := endpointChildIDsOf(node) for _, localEndpoint := range localEndpoints { _, localAddr, _, ok := report.ParseEndpointNodeID(localEndpoint.ID) @@ -143,7 +141,7 @@ func outgoingConnectionsSummary(topologyID string, r report.Report, n report.Nod } key := connection{ localNode: &n, - remoteNode: &remoteNode, + remoteNode: &node, port: port, } if isInternetNode(n) { diff --git a/render/process.go b/render/process.go index 0d624807d..c756fa2c3 100644 --- a/render/process.go +++ b/render/process.go @@ -63,12 +63,11 @@ func (r processWithContainerNameRenderer) Render(rpt report.Report, dct Decorato if !ok { continue } - output := p.Copy() - output.Latest = output.Latest.Set(docker.ContainerID, timestamp, containerID) + p.Latest = p.Latest.Set(docker.ContainerID, timestamp, containerID) if containerName, timestamp, ok := container.Latest.LookupEntry(docker.ContainerName); ok { - output.Latest = output.Latest.Set(docker.ContainerName, timestamp, containerName) + p.Latest = p.Latest.Set(docker.ContainerName, timestamp, containerName) } - outputs[id] = output + outputs[id] = p } return outputs } diff --git a/report/node.go b/report/node.go index b1143f23f..4ff2547f0 100644 --- a/report/node.go +++ b/report/node.go @@ -45,16 +45,14 @@ func MakeNodeWith(id string, m map[string]string) Node { // WithID returns a fresh copy of n, with ID changed. func (n Node) WithID(id string) Node { - result := n.Copy() - result.ID = id - return result + n.ID = id + return n } // WithTopology returns a fresh copy of n, with ID changed. func (n Node) WithTopology(topology string) Node { - result := n.Copy() - result.Topology = topology - return result + n.Topology = topology + return n } // Before is used for sorting nodes by topology and id @@ -74,121 +72,92 @@ func (n Node) After(other Node) bool { // WithLatests returns a fresh copy of n, with Metadata m merged in. func (n Node) WithLatests(m map[string]string) Node { - result := n.Copy() ts := mtime.Now() for k, v := range m { - result.Latest = result.Latest.Set(k, ts, v) + n.Latest = n.Latest.Set(k, ts, v) } - return result + return n } // WithLatest produces a new Node with k mapped to v in the Latest metadata. func (n Node) WithLatest(k string, ts time.Time, v string) Node { - result := n.Copy() - result.Latest = result.Latest.Set(k, ts, v) - return result + n.Latest = n.Latest.Set(k, ts, v) + return n } // WithCounters returns a fresh copy of n, with Counters c merged in. func (n Node) WithCounters(c map[string]int) Node { - result := n.Copy() - result.Counters = result.Counters.Merge(Counters{}.fromIntermediate(c)) - return result + n.Counters = n.Counters.Merge(Counters{}.fromIntermediate(c)) + return n } // WithSet returns a fresh copy of n, with set merged in at key. func (n Node) WithSet(key string, set StringSet) Node { - result := n.Copy() - result.Sets = result.Sets.Add(key, set) - return result + n.Sets = n.Sets.Add(key, set) + return n } // WithSets returns a fresh copy of n, with sets merged in. func (n Node) WithSets(sets Sets) Node { - result := n.Copy() - result.Sets = result.Sets.Merge(sets) - return result + n.Sets = n.Sets.Merge(sets) + return n } // WithMetric returns a fresh copy of n, with metric merged in at key. func (n Node) WithMetric(key string, metric Metric) Node { - result := n.Copy() - result.Metrics[key] = n.Metrics[key].Merge(metric) - return result + n.Metrics = n.Metrics.Copy() + n.Metrics[key] = n.Metrics[key].Merge(metric) + return n } // WithMetrics returns a fresh copy of n, with metrics merged in. func (n Node) WithMetrics(metrics Metrics) Node { - result := n.Copy() - result.Metrics = result.Metrics.Merge(metrics) - return result + n.Metrics = n.Metrics.Merge(metrics) + return n } // WithAdjacent returns a fresh copy of n, with 'a' added to Adjacency func (n Node) WithAdjacent(a ...string) Node { - result := n.Copy() - result.Adjacency = result.Adjacency.Add(a...) - return result + n.Adjacency = n.Adjacency.Add(a...) + return n } // WithEdge returns a fresh copy of n, with 'dst' added to Adjacency and md // added to EdgeMetadata. func (n Node) WithEdge(dst string, md EdgeMetadata) Node { - result := n.Copy() - result.Adjacency = result.Adjacency.Add(dst) - result.Edges = result.Edges.Add(dst, md) - return result + n.Adjacency = n.Adjacency.Add(dst) + n.Edges = n.Edges.Add(dst, md) + return n } // WithControls returns a fresh copy of n, with cs added to Controls. func (n Node) WithControls(cs ...string) Node { - result := n.Copy() - result.Controls = result.Controls.Add(cs...) - return result + n.Controls = n.Controls.Add(cs...) + return n } // WithParents returns a fresh copy of n, with sets merged in. func (n Node) WithParents(parents Sets) Node { - result := n.Copy() - result.Parents = result.Parents.Merge(parents) - return result + n.Parents = n.Parents.Merge(parents) + return n } // PruneParents returns a fresh copy of n, without any parents. func (n Node) PruneParents() Node { - result := n.Copy() - result.Parents = EmptySets - return result + n.Parents = EmptySets + return n } // WithChildren returns a fresh copy of n, with children merged in. func (n Node) WithChildren(children NodeSet) Node { - result := n.Copy() - result.Children = result.Children.Merge(children) - return result + n.Children = n.Children.Merge(children) + return n } // WithChild returns a fresh copy of n, with one child merged in. func (n Node) WithChild(child Node) Node { - result := n.Copy() - result.Children = result.Children.Merge(MakeNodeSet(child)) - return result -} - -// Copy returns a value copy of the Node. -func (n Node) Copy() Node { - cp := MakeNode(n.ID) - cp.Topology = n.Topology - cp.Counters = n.Counters.Copy() - cp.Sets = n.Sets.Copy() - cp.Adjacency = n.Adjacency.Copy() - cp.Edges = n.Edges.Copy() - cp.Controls = n.Controls.Copy() - cp.Latest = n.Latest.Copy() - cp.Metrics = n.Metrics.Copy() - cp.Parents = n.Parents.Copy() - cp.Children = n.Children.Copy() - return cp + n.Children = n.Children.Merge(MakeNodeSet(child)) + return n } // Merge mergses the individual components of a node and returns a diff --git a/report/topology.go b/report/topology.go index f64be7122..1beba4f79 100644 --- a/report/topology.go +++ b/report/topology.go @@ -167,7 +167,7 @@ type Nodes map[string]Node func (n Nodes) Copy() Nodes { cp := make(Nodes, len(n)) for k, v := range n { - cp[k] = v.Copy() + cp[k] = v } return cp }