From 8b04beff7cfdb307cf116ed880fb96a51e80b781 Mon Sep 17 00:00:00 2001 From: Jay Camp Date: Wed, 13 Jan 2021 13:50:54 -0500 Subject: [PATCH] mdatagen: Add Init function for intializing existing metrics (#2358) * mdatagen: Add Init function for intiializing existing metrics pdata.Metric instances may already be initialized and we just want to fill in the metric descriptor values. Removes the unnecessary need to New() then CopyTo(). * regenerate Co-authored-by: Bogdan Drutu --- cmd/mdatagen/metrics.tmpl | 19 +++++++++----- internal/tools/go.sum | 1 + .../internal/metadata/generated_metrics.go | 26 +++++++++++-------- .../scraper/cpuscraper/cpu_scraper.go | 2 +- .../scraper/memoryscraper/memory_scraper.go | 2 +- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/cmd/mdatagen/metrics.tmpl b/cmd/mdatagen/metrics.tmpl index 6f953b64c5d..eb4bd220fe2 100644 --- a/cmd/mdatagen/metrics.tmpl +++ b/cmd/mdatagen/metrics.tmpl @@ -27,20 +27,30 @@ const Type configmodels.Type = "{{ .Name }}" type metricIntf interface { Name() string New() pdata.Metric + Init(metric pdata.Metric) } // Intentionally not exposing this so that it is opaque and can change freely. type metricImpl struct { name string - newFunc func() pdata.Metric + initFunc func(pdata.Metric) } +// Name returns the metric name. func (m *metricImpl) Name() string { return m.name } +// New creates a metric object preinitialized. func (m *metricImpl) New() pdata.Metric { - return m.newFunc() + metric := pdata.NewMetric() + m.Init(metric) + return metric +} + +// Init initializes the provided metric object. +func (m *metricImpl) Init(metric pdata.Metric) { + m.initFunc(metric) } type metricStruct struct { @@ -84,8 +94,7 @@ var Metrics = &metricStruct{ {{- range $name, $metric := .Metrics }} &metricImpl{ "{{ $name }}", - func() pdata.Metric { - metric := pdata.NewMetric() + func(metric pdata.Metric) { metric.SetName("{{ $name }}") metric.SetDescription("{{ $metric.Description }}") metric.SetUnit("{{ $metric.Unit }}") @@ -96,8 +105,6 @@ var Metrics = &metricStruct{ {{- if $metric.Data.HasAggregated }} metric.{{ $metric.Data.Type }}().SetAggregationTemporality({{ $metric.Data.Aggregated.Type }}) {{- end }} - - return metric }, }, {{- end }} diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 58e3a8fdee8..b2b29fed383 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -182,6 +182,7 @@ github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gookit/color v1.3.1 h1:PPD/C7sf8u2L8XQPdPgsWRoAiLQGZEZOzU3cf5IYYUk= github.com/gookit/color v1.3.1/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= diff --git a/receiver/hostmetricsreceiver/internal/metadata/generated_metrics.go b/receiver/hostmetricsreceiver/internal/metadata/generated_metrics.go index 0462614b1a8..9364cded682 100644 --- a/receiver/hostmetricsreceiver/internal/metadata/generated_metrics.go +++ b/receiver/hostmetricsreceiver/internal/metadata/generated_metrics.go @@ -27,20 +27,30 @@ const Type configmodels.Type = "hostmetricsreceiver" type metricIntf interface { Name() string New() pdata.Metric + Init(metric pdata.Metric) } // Intentionally not exposing this so that it is opaque and can change freely. type metricImpl struct { - name string - newFunc func() pdata.Metric + name string + initFunc func(pdata.Metric) } +// Name returns the metric name. func (m *metricImpl) Name() string { return m.name } +// New creates a metric object preinitialized. func (m *metricImpl) New() pdata.Metric { - return m.newFunc() + metric := pdata.NewMetric() + m.Init(metric) + return metric +} + +// Init initializes the provided metric object. +func (m *metricImpl) Init(metric pdata.Metric) { + m.initFunc(metric) } type metricStruct struct { @@ -77,30 +87,24 @@ func (m *metricStruct) FactoriesByName() map[string]func() pdata.Metric { var Metrics = &metricStruct{ &metricImpl{ "system.cpu.time", - func() pdata.Metric { - metric := pdata.NewMetric() + func(metric pdata.Metric) { metric.SetName("system.cpu.time") metric.SetDescription("Total CPU seconds broken down by different states.") metric.SetUnit("s") metric.SetDataType(pdata.MetricDataTypeDoubleSum) metric.DoubleSum().SetIsMonotonic(true) metric.DoubleSum().SetAggregationTemporality(pdata.AggregationTemporalityCumulative) - - return metric }, }, &metricImpl{ "system.memory.usage", - func() pdata.Metric { - metric := pdata.NewMetric() + func(metric pdata.Metric) { metric.SetName("system.memory.usage") metric.SetDescription("Bytes of memory in use.") metric.SetUnit("By") metric.SetDataType(pdata.MetricDataTypeIntSum) metric.IntSum().SetIsMonotonic(false) metric.IntSum().SetAggregationTemporality(pdata.AggregationTemporalityCumulative) - - return metric }, }, } diff --git a/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/cpu_scraper.go b/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/cpu_scraper.go index 1884b65a648..4f559ba5e32 100644 --- a/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/cpu_scraper.go +++ b/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/cpu_scraper.go @@ -70,7 +70,7 @@ func (s *scraper) scrape(_ context.Context) (pdata.MetricSlice, error) { } func initializeCPUTimeMetric(metric pdata.Metric, startTime, now pdata.TimestampUnixNano, cpuTimes []cpu.TimesStat) { - metadata.Metrics.SystemCPUTime.New().CopyTo(metric) + metadata.Metrics.SystemCPUTime.Init(metric) ddps := metric.DoubleSum().DataPoints() ddps.Resize(len(cpuTimes) * cpuStatesLen) diff --git a/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/memory_scraper.go b/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/memory_scraper.go index 16b49dc725c..218e2492fa6 100644 --- a/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/memory_scraper.go +++ b/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/memory_scraper.go @@ -57,7 +57,7 @@ func (s *scraper) Scrape(_ context.Context) (pdata.MetricSlice, error) { } func initializeMemoryUsageMetric(metric pdata.Metric, now pdata.TimestampUnixNano, memInfo *mem.VirtualMemoryStat) { - metadata.Metrics.SystemMemoryUsage.New().CopyTo(metric) + metadata.Metrics.SystemMemoryUsage.Init(metric) idps := metric.IntSum().DataPoints() idps.Resize(memStatesLen)