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)