All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.opentelemetry.exporter.internal.otlp.metrics.ResourceMetricsMarshaler Maven / Gradle / Ivy

There is a newer version: 1.44.1
Show newest version
/*
 * Copyright The OpenTelemetry Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package io.opentelemetry.exporter.internal.otlp.metrics;

import io.opentelemetry.exporter.internal.marshal.Marshaler;
import io.opentelemetry.exporter.internal.marshal.MarshalerUtil;
import io.opentelemetry.exporter.internal.marshal.MarshalerWithSize;
import io.opentelemetry.exporter.internal.marshal.Serializer;
import io.opentelemetry.exporter.internal.otlp.InstrumentationScopeMarshaler;
import io.opentelemetry.exporter.internal.otlp.ResourceMarshaler;
import io.opentelemetry.proto.metrics.v1.internal.ResourceMetrics;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.metrics.data.MetricData;
import io.opentelemetry.sdk.resources.Resource;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * A Marshaler of ResourceMetrics.
 *
 * 

This class is internal and is hence not for public use. Its APIs are unstable and can change * at any time. */ public final class ResourceMetricsMarshaler extends MarshalerWithSize { private final ResourceMarshaler resourceMarshaler; private final byte[] schemaUrl; private final InstrumentationScopeMetricsMarshaler[] instrumentationScopeMetricsMarshalers; /** Returns Marshalers of ResourceMetrics created by grouping the provided metricData. */ @SuppressWarnings("AvoidObjectArrays") public static ResourceMetricsMarshaler[] create(Collection metricDataList) { Map>> resourceAndScopeMap = groupByResourceAndScope(metricDataList); ResourceMetricsMarshaler[] resourceMetricsMarshalers = new ResourceMetricsMarshaler[resourceAndScopeMap.size()]; int posResource = 0; for (Map.Entry>> entry : resourceAndScopeMap.entrySet()) { InstrumentationScopeMetricsMarshaler[] instrumentationLibrarySpansMarshalers = new InstrumentationScopeMetricsMarshaler[entry.getValue().size()]; int posInstrumentation = 0; for (Map.Entry> entryIs : entry.getValue().entrySet()) { instrumentationLibrarySpansMarshalers[posInstrumentation++] = new InstrumentationScopeMetricsMarshaler( InstrumentationScopeMarshaler.create(entryIs.getKey()), MarshalerUtil.toBytes(entryIs.getKey().getSchemaUrl()), entryIs.getValue()); } resourceMetricsMarshalers[posResource++] = new ResourceMetricsMarshaler( ResourceMarshaler.create(entry.getKey()), MarshalerUtil.toBytes(entry.getKey().getSchemaUrl()), instrumentationLibrarySpansMarshalers); } return resourceMetricsMarshalers; } ResourceMetricsMarshaler( ResourceMarshaler resourceMarshaler, byte[] schemaUrl, InstrumentationScopeMetricsMarshaler[] instrumentationScopeMetricsMarshalers) { super(calculateSize(resourceMarshaler, schemaUrl, instrumentationScopeMetricsMarshalers)); this.resourceMarshaler = resourceMarshaler; this.schemaUrl = schemaUrl; this.instrumentationScopeMetricsMarshalers = instrumentationScopeMetricsMarshalers; } @Override public void writeTo(Serializer output) throws IOException { output.serializeMessage(ResourceMetrics.RESOURCE, resourceMarshaler); output.serializeRepeatedMessage( ResourceMetrics.SCOPE_METRICS, instrumentationScopeMetricsMarshalers); output.serializeString(ResourceMetrics.SCHEMA_URL, schemaUrl); } private static int calculateSize( ResourceMarshaler resourceMarshaler, byte[] schemaUrl, InstrumentationScopeMetricsMarshaler[] instrumentationScopeMetricsMarshalers) { int size = 0; size += MarshalerUtil.sizeMessage(ResourceMetrics.RESOURCE, resourceMarshaler); size += MarshalerUtil.sizeBytes(ResourceMetrics.SCHEMA_URL, schemaUrl); size += MarshalerUtil.sizeRepeatedMessage( ResourceMetrics.SCOPE_METRICS, instrumentationScopeMetricsMarshalers); return size; } private static Map>> groupByResourceAndScope(Collection metricDataList) { return MarshalerUtil.groupByResourceAndScope( metricDataList, // TODO(anuraaga): Replace with an internal SdkData type of interface that exposes these // two. MetricData::getResource, MetricData::getInstrumentationScopeInfo, MetricMarshaler::create); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy