diff --git a/render/detailed/node.go b/render/detailed/node.go index c01a5e73a..b13805a51 100644 --- a/render/detailed/node.go +++ b/render/detailed/node.go @@ -226,7 +226,7 @@ func children(r report.Report, n report.Node) []NodeSummaryGroup { for _, spec := range nodeSummaryGroupSpecs { if len(summaries[spec.topologyID]) > 0 { sort.Sort(nodeSummariesByID(summaries[spec.TopologyID])) - group := spec.NodeSummaryGroup.Copy() + group := spec.NodeSummaryGroup group.Nodes = summaries[spec.topologyID] nodeSummaryGroups = append(nodeSummaryGroups, group) } diff --git a/render/detailed/summary.go b/render/detailed/summary.go index a78f52436..54e8f982f 100644 --- a/render/detailed/summary.go +++ b/render/detailed/summary.go @@ -32,19 +32,6 @@ type NodeSummaryGroup struct { Columns []Column `json:"columns"` } -// Copy returns a value copy of the NodeSummaryGroup -func (g NodeSummaryGroup) Copy() NodeSummaryGroup { - result := NodeSummaryGroup{ - TopologyID: g.TopologyID, - Label: g.Label, - Columns: g.Columns, - } - for _, node := range g.Nodes { - result.Nodes = append(result.Nodes, node.Copy()) - } - return result -} - // Column provides special json serialization for column ids, so they include // their label for the frontend. type Column struct { @@ -94,35 +81,12 @@ func MakeNodeSummary(r report.Report, n report.Node) (NodeSummary, bool) { // SummarizeMetrics returns a copy of the NodeSummary where the metrics are // replaced with their summaries func (n NodeSummary) SummarizeMetrics() NodeSummary { - cp := n.Copy() - for i, m := range cp.Metrics { - cp.Metrics[i] = m.Summary() + summarizedMetrics := make([]report.MetricRow, len(n.Metrics)) + for i, m := range n.Metrics { + summarizedMetrics[i] = m.Summary() } - return cp -} - -// Copy returns a value copy of the NodeSummary -func (n NodeSummary) Copy() NodeSummary { - result := NodeSummary{ - ID: n.ID, - Label: n.Label, - LabelMinor: n.LabelMinor, - Rank: n.Rank, - Shape: n.Shape, - Stack: n.Stack, - Linkable: n.Linkable, - Adjacency: n.Adjacency.Copy(), - } - for _, row := range n.Metadata { - result.Metadata = append(result.Metadata, row.Copy()) - } - for _, table := range n.Tables { - result.Tables = append(result.Tables, table.Copy()) - } - for _, row := range n.Metrics { - result.Metrics = append(result.Metrics, row.Copy()) - } - return result + n.Metrics = summarizedMetrics + return n } func baseNodeSummary(r report.Report, n report.Node) NodeSummary { @@ -134,7 +98,7 @@ func baseNodeSummary(r report.Report, n report.Node) NodeSummary { Metadata: NodeMetadata(r, n), Metrics: NodeMetrics(r, n), Tables: NodeTables(r, n), - Adjacency: n.Adjacency.Copy(), + Adjacency: n.Adjacency, } } @@ -372,15 +336,6 @@ func Summaries(r report.Report, rns report.Nodes) NodeSummaries { return result } -// Copy returns a deep value-copy of NodeSummaries -func (n NodeSummaries) Copy() NodeSummaries { - result := NodeSummaries{} - for k, v := range n { - result[k] = v.Copy() - } - return result -} - // getRenderableContainerName obtains a user-friendly container name, to render in the UI func getRenderableContainerName(nmd report.Node) string { for _, key := range []string{ diff --git a/render/detailed/topology_diff_test.go b/render/detailed/topology_diff_test.go index dfdc360cd..93e21c2cd 100644 --- a/render/detailed/topology_diff_test.go +++ b/render/detailed/topology_diff_test.go @@ -25,7 +25,7 @@ func TestTopoDiff(t *testing.T) { Pseudo: false, Adjacency: report.MakeIDList("nodeb"), } - nodeap := nodea.Copy() + nodeap := nodea nodeap.Adjacency = report.MakeIDList("nodeb", "nodeq") // not the same anymore nodeb := detailed.NodeSummary{ ID: "nodeb", diff --git a/report/metric_row.go b/report/metric_row.go index f92bdae1f..b33b37851 100644 --- a/report/metric_row.go +++ b/report/metric_row.go @@ -27,21 +27,13 @@ type MetricRow struct { // Summary returns a copy of the MetricRow, without the samples, just the value if there is one. func (m MetricRow) Summary() MetricRow { - row := m.Copy() - if m.Metric != nil { - row.Metric.Samples = nil + if m.Metric.Len() > 0 { + // shallow-copy + metricCopy := *m.Metric + metricCopy.Samples = nil + m.Metric = &metricCopy } - return row -} - -// Copy returns a value copy of the MetricRow -func (m MetricRow) Copy() MetricRow { - row := m - if m.Metric != nil { - var metric = m.Metric.Copy() - row.Metric = &metric - } - return row + return m } // MarshalJSON shouldn't be used, use CodecEncodeSelf instead diff --git a/report/metrics.go b/report/metrics.go index b6b8b7a73..65ff5a35e 100644 --- a/report/metrics.go +++ b/report/metrics.go @@ -94,16 +94,6 @@ func MakeMetric(samples []Sample) Metric { } } -// Copy returns a copy of the Metric. -func (m Metric) Copy() Metric { - c := m - if c.Samples != nil { - c.Samples = make([]Sample, len(m.Samples)) - copy(c.Samples, m.Samples) - } - return c -} - // WithMax returns a fresh copy of m, with Max set to max func (m Metric) WithMax(max float64) Metric { return Metric{ diff --git a/report/metrics_test.go b/report/metrics_test.go index 012c3c42d..214e67b62 100644 --- a/report/metrics_test.go +++ b/report/metrics_test.go @@ -122,20 +122,6 @@ func TestMetricMerge(t *testing.T) { } } -func TestMetricCopy(t *testing.T) { - want := report.MakeMetric(nil) - have := want.Copy() - if !reflect.DeepEqual(want, have) { - t.Errorf("diff: %s", test.Diff(want, have)) - } - - want = report.MakeSingletonMetric(time.Now(), 1) - have = want.Copy() - if !reflect.DeepEqual(want, have) { - t.Errorf("diff: %s", test.Diff(want, have)) - } -} - func TestMetricDiv(t *testing.T) { t1 := time.Now() t2 := time.Now().Add(1 * time.Minute)