mirror of
https://github.com/hanzoai/metrics.git
synced 2026-10-30 20:03:39 +00:00
80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package pmetricotlp // import "go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"go.opentelemetry.io/collector/pdata/internal"
|
|
"go.opentelemetry.io/collector/pdata/internal/json"
|
|
"go.opentelemetry.io/collector/pdata/internal/otlp"
|
|
"go.opentelemetry.io/collector/pdata/pmetric"
|
|
)
|
|
|
|
// ExportRequest represents the request for gRPC/HTTP client/server.
|
|
// It's a wrapper for pmetric.Metrics data.
|
|
type ExportRequest struct {
|
|
orig *internal.ExportMetricsServiceRequest
|
|
state *internal.State
|
|
}
|
|
|
|
// NewExportRequest returns an empty ExportRequest.
|
|
func NewExportRequest() ExportRequest {
|
|
return ExportRequest{
|
|
orig: &internal.ExportMetricsServiceRequest{},
|
|
state: internal.NewState(),
|
|
}
|
|
}
|
|
|
|
// NewExportRequestFromMetrics returns a ExportRequest from pmetric.Metrics.
|
|
// Because ExportRequest is a wrapper for pmetric.Metrics,
|
|
// any changes to the provided Metrics struct will be reflected in the ExportRequest and vice versa.
|
|
func NewExportRequestFromMetrics(md pmetric.Metrics) ExportRequest {
|
|
return ExportRequest{
|
|
orig: internal.GetMetricsOrig(internal.MetricsWrapper(md)),
|
|
state: internal.GetMetricsState(internal.MetricsWrapper(md)),
|
|
}
|
|
}
|
|
|
|
// MarshalProto marshals ExportRequest into proto bytes.
|
|
func (ms ExportRequest) MarshalProto() ([]byte, error) {
|
|
size := ms.orig.SizeProto()
|
|
buf := make([]byte, size)
|
|
_ = ms.orig.MarshalProto(buf)
|
|
return buf, nil
|
|
}
|
|
|
|
// UnmarshalProto unmarshalls ExportRequest from proto bytes.
|
|
func (ms ExportRequest) UnmarshalProto(data []byte) error {
|
|
err := ms.orig.UnmarshalProto(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
otlp.MigrateMetrics(ms.orig.ResourceMetrics)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON marshals ExportRequest into JSON bytes.
|
|
func (ms ExportRequest) MarshalJSON() ([]byte, error) {
|
|
dest := json.BorrowStream(nil)
|
|
defer json.ReturnStream(dest)
|
|
ms.orig.MarshalJSON(dest)
|
|
if dest.Error() != nil {
|
|
return nil, dest.Error()
|
|
}
|
|
return slices.Clone(dest.Buffer()), nil
|
|
}
|
|
|
|
// UnmarshalJSON unmarshalls ExportRequest from JSON bytes.
|
|
func (ms ExportRequest) UnmarshalJSON(data []byte) error {
|
|
iter := json.BorrowIterator(data)
|
|
defer json.ReturnIterator(iter)
|
|
ms.orig.UnmarshalJSON(iter)
|
|
return iter.Error()
|
|
}
|
|
|
|
func (ms ExportRequest) Metrics() pmetric.Metrics {
|
|
return pmetric.Metrics(internal.NewMetricsWrapper(ms.orig, ms.state))
|
|
}
|