156 lines
5.4 KiB
Go
156 lines
5.4 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// Package pdatautil is a temporary package to allow components to transition to the new API.
|
|
// It will be removed when pdata.Metrics will be finalized.
|
|
package pdatautil
|
|
|
|
import (
|
|
commonpb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/common/v1"
|
|
metricspb "github.com/census-instrumentation/opencensus-proto/gen-go/metrics/v1"
|
|
resourcepb "github.com/census-instrumentation/opencensus-proto/gen-go/resource/v1"
|
|
googleproto "google.golang.org/protobuf/proto"
|
|
|
|
"go.opentelemetry.io/collector/consumer/consumerdata"
|
|
"go.opentelemetry.io/collector/consumer/pdata"
|
|
"go.opentelemetry.io/collector/internal/dataold"
|
|
"go.opentelemetry.io/collector/translator/internaldata"
|
|
)
|
|
|
|
// MetricsToMetricsData returns the `[]consumerdata.MetricsData` representation of the `pdata.Metrics`.
|
|
//
|
|
// This is a temporary function that will be removed when the new internal pdata.Metrics will be finalized.
|
|
func MetricsToMetricsData(md pdata.Metrics) []consumerdata.MetricsData {
|
|
if cmd, ok := md.InternalOpaque.([]consumerdata.MetricsData); ok {
|
|
return cmd
|
|
}
|
|
if ims, ok := md.InternalOpaque.(dataold.MetricData); ok {
|
|
return internaldata.MetricDataToOC(ims)
|
|
}
|
|
panic("Unsupported metrics type.")
|
|
}
|
|
|
|
// MetricsFromMetricsData returns the `pdata.Metrics` representation of the `[]consumerdata.MetricsData`.
|
|
//
|
|
// This is a temporary function that will be removed when the new internal pdata.Metrics will be finalized.
|
|
func MetricsFromMetricsData(ocmds []consumerdata.MetricsData) pdata.Metrics {
|
|
return pdata.Metrics{InternalOpaque: ocmds}
|
|
}
|
|
|
|
// MetricsToOldInternalMetrics returns the `data.MetricData` representation of the `pdata.Metrics`.
|
|
//
|
|
// This is a temporary function that will be removed when the new internal pdata.Metrics will be finalized.
|
|
func MetricsToOldInternalMetrics(md pdata.Metrics) dataold.MetricData {
|
|
if ims, ok := md.InternalOpaque.(dataold.MetricData); ok {
|
|
return ims
|
|
}
|
|
if cmd, ok := md.InternalOpaque.([]consumerdata.MetricsData); ok {
|
|
return internaldata.OCSliceToMetricData(cmd)
|
|
}
|
|
panic("Unsupported metrics type.")
|
|
}
|
|
|
|
// MetricsFromMetricsData returns the `pdata.Metrics` representation of the `data.MetricData`.
|
|
//
|
|
// This is a temporary function that will be removed when the new internal pdata.Metrics will be finalized.
|
|
func MetricsFromOldInternalMetrics(md dataold.MetricData) pdata.Metrics {
|
|
return pdata.Metrics{InternalOpaque: md}
|
|
}
|
|
|
|
// CloneMetrics returns a clone of the given `pdata.Metrics`.
|
|
//
|
|
// This is a temporary function that will be removed when the new internal pdata.Metrics will be finalized.
|
|
func CloneMetrics(md pdata.Metrics) pdata.Metrics {
|
|
if ims, ok := md.InternalOpaque.(dataold.MetricData); ok {
|
|
return pdata.Metrics{InternalOpaque: ims.Clone()}
|
|
}
|
|
if ocmds, ok := md.InternalOpaque.([]consumerdata.MetricsData); ok {
|
|
clone := make([]consumerdata.MetricsData, 0, len(ocmds))
|
|
for _, ocmd := range ocmds {
|
|
clone = append(clone, CloneMetricsDataOld(ocmd))
|
|
}
|
|
return pdata.Metrics{InternalOpaque: clone}
|
|
}
|
|
panic("Unsupported metrics type.")
|
|
}
|
|
|
|
func MetricCount(md pdata.Metrics) int {
|
|
if ims, ok := md.InternalOpaque.(dataold.MetricData); ok {
|
|
return ims.MetricCount()
|
|
}
|
|
if ocmds, ok := md.InternalOpaque.([]consumerdata.MetricsData); ok {
|
|
metricCount := 0
|
|
for _, ocmd := range ocmds {
|
|
metricCount += len(ocmd.Metrics)
|
|
}
|
|
return metricCount
|
|
}
|
|
panic("Unsupported metrics type.")
|
|
}
|
|
|
|
func MetricAndDataPointCount(md pdata.Metrics) (int, int) {
|
|
if ims, ok := md.InternalOpaque.(dataold.MetricData); ok {
|
|
return ims.MetricAndDataPointCount()
|
|
}
|
|
if ocmds, ok := md.InternalOpaque.([]consumerdata.MetricsData); ok {
|
|
metricCount := 0
|
|
dataPointCount := 0
|
|
for _, ocmd := range ocmds {
|
|
mc, dpc := TimeseriesAndPointCount(ocmd)
|
|
metricCount += mc
|
|
dataPointCount += dpc
|
|
}
|
|
return metricCount, dataPointCount
|
|
}
|
|
panic("Unsupported metrics type.")
|
|
}
|
|
|
|
func MetricPointCount(md pdata.Metrics) int {
|
|
_, points := MetricAndDataPointCount(md)
|
|
return points
|
|
}
|
|
|
|
// CloneMetricsDataOld copied from processors.cloneMetricsDataOld
|
|
func CloneMetricsDataOld(md consumerdata.MetricsData) consumerdata.MetricsData {
|
|
clone := consumerdata.MetricsData{
|
|
Node: googleproto.Clone(md.Node).(*commonpb.Node),
|
|
Resource: googleproto.Clone(md.Resource).(*resourcepb.Resource),
|
|
}
|
|
|
|
if md.Metrics != nil {
|
|
clone.Metrics = make([]*metricspb.Metric, 0, len(md.Metrics))
|
|
|
|
for _, metric := range md.Metrics {
|
|
metricClone := googleproto.Clone(metric).(*metricspb.Metric)
|
|
clone.Metrics = append(clone.Metrics, metricClone)
|
|
}
|
|
}
|
|
|
|
return clone
|
|
}
|
|
|
|
// TimeseriesAndPointCount copied from exporterhelper.measureMetricsExport
|
|
func TimeseriesAndPointCount(md consumerdata.MetricsData) (int, int) {
|
|
numTimeSeries := 0
|
|
numPoints := 0
|
|
for _, metric := range md.Metrics {
|
|
tss := metric.GetTimeseries()
|
|
numTimeSeries += len(metric.GetTimeseries())
|
|
for _, ts := range tss {
|
|
numPoints += len(ts.GetPoints())
|
|
}
|
|
}
|
|
return numTimeSeries, numPoints
|
|
}
|