mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-22 16:36:27 +01:00
81 lines
2.4 KiB
Go
81 lines
2.4 KiB
Go
|
// Copyright The OpenTelemetry Authors
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package pmetric // import "go.opentelemetry.io/collector/pdata/pmetric"
|
||
|
|
||
|
import (
|
||
|
"go.opentelemetry.io/collector/pdata/internal"
|
||
|
otlpcollectormetrics "go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/metrics/v1"
|
||
|
)
|
||
|
|
||
|
// Metrics is the top-level struct that is propagated through the metrics pipeline.
|
||
|
// Use NewMetrics to create new instance, zero-initialized instance is not valid for use.
|
||
|
type Metrics internal.Metrics
|
||
|
|
||
|
func newMetrics(orig *otlpcollectormetrics.ExportMetricsServiceRequest) Metrics {
|
||
|
return Metrics(internal.NewMetrics(orig))
|
||
|
}
|
||
|
|
||
|
func (ms Metrics) getOrig() *otlpcollectormetrics.ExportMetricsServiceRequest {
|
||
|
return internal.GetOrigMetrics(internal.Metrics(ms))
|
||
|
}
|
||
|
|
||
|
// NewMetrics creates a new Metrics struct.
|
||
|
func NewMetrics() Metrics {
|
||
|
return newMetrics(&otlpcollectormetrics.ExportMetricsServiceRequest{})
|
||
|
}
|
||
|
|
||
|
// CopyTo copies the Metrics instance overriding the destination.
|
||
|
func (ms Metrics) CopyTo(dest Metrics) {
|
||
|
ms.ResourceMetrics().CopyTo(dest.ResourceMetrics())
|
||
|
}
|
||
|
|
||
|
// ResourceMetrics returns the ResourceMetricsSlice associated with this Metrics.
|
||
|
func (ms Metrics) ResourceMetrics() ResourceMetricsSlice {
|
||
|
return newResourceMetricsSlice(&ms.getOrig().ResourceMetrics)
|
||
|
}
|
||
|
|
||
|
// MetricCount calculates the total number of metrics.
|
||
|
func (ms Metrics) MetricCount() int {
|
||
|
metricCount := 0
|
||
|
rms := ms.ResourceMetrics()
|
||
|
for i := 0; i < rms.Len(); i++ {
|
||
|
rm := rms.At(i)
|
||
|
ilms := rm.ScopeMetrics()
|
||
|
for j := 0; j < ilms.Len(); j++ {
|
||
|
ilm := ilms.At(j)
|
||
|
metricCount += ilm.Metrics().Len()
|
||
|
}
|
||
|
}
|
||
|
return metricCount
|
||
|
}
|
||
|
|
||
|
// DataPointCount calculates the total number of data points.
|
||
|
func (ms Metrics) DataPointCount() (dataPointCount int) {
|
||
|
rms := ms.ResourceMetrics()
|
||
|
for i := 0; i < rms.Len(); i++ {
|
||
|
rm := rms.At(i)
|
||
|
ilms := rm.ScopeMetrics()
|
||
|
for j := 0; j < ilms.Len(); j++ {
|
||
|
ilm := ilms.At(j)
|
||
|
ms := ilm.Metrics()
|
||
|
for k := 0; k < ms.Len(); k++ {
|
||
|
m := ms.At(k)
|
||
|
switch m.Type() {
|
||
|
case MetricTypeGauge:
|
||
|
dataPointCount += m.Gauge().DataPoints().Len()
|
||
|
case MetricTypeSum:
|
||
|
dataPointCount += m.Sum().DataPoints().Len()
|
||
|
case MetricTypeHistogram:
|
||
|
dataPointCount += m.Histogram().DataPoints().Len()
|
||
|
case MetricTypeExponentialHistogram:
|
||
|
dataPointCount += m.ExponentialHistogram().DataPoints().Len()
|
||
|
case MetricTypeSummary:
|
||
|
dataPointCount += m.Summary().DataPoints().Len()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|