/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include #include namespace smithy { namespace components { namespace tracing { /** * A Open Telemetry Implementation of Meter. */ class OtelMeterAdapter final : public Meter { public: explicit OtelMeterAdapter(opentelemetry::nostd::shared_ptr meter) : otelMeter(std::move(meter)) {} Aws::UniquePtr CreateGauge(Aws::String name, std::function)> callback, Aws::String units, Aws::String description) const override; Aws::UniquePtr CreateUpDownCounter(Aws::String name, Aws::String units, Aws::String description) const override; Aws::UniquePtr CreateCounter(Aws::String name, Aws::String units, Aws::String description) const override; Aws::UniquePtr CreateHistogram(Aws::String name, Aws::String units, Aws::String description) const override; private: opentelemetry::nostd::shared_ptr otelMeter; }; /** * A Open Telemetry Implementation of MonotonicCounter. */ class OtelCounterAdapter final : public MonotonicCounter { public: explicit OtelCounterAdapter( opentelemetry::nostd::unique_ptr> counter); void add(long value, Aws::Map attributes) override; private: opentelemetry::nostd::unique_ptr> otelCounter; }; /** * A Open Telemetry Implementation of UpDownCounter. */ class OtelUpDownCounterAdapter final : public UpDownCounter { public: explicit OtelUpDownCounterAdapter( opentelemetry::nostd::unique_ptr> counter); void add(long value, Aws::Map attributes) override; private: opentelemetry::nostd::unique_ptr> otelUpDownCounter; }; /** * A Open Telemetry Implementation of Histogram. */ class OtelHistogramAdapter final : public Histogram { public: explicit OtelHistogramAdapter( opentelemetry::nostd::unique_ptr> otelHistogram); void record(double value, Aws::Map attributes) override; private: opentelemetry::nostd::unique_ptr> otelHistogram; }; /** * A struct type for the C function pointer interface to pass state. */ struct GaugeHandleState { std::function)> callback; }; /** * A Open Telemetry Implementation of GaugeHandle. */ class OtelGaugeAdapter final : public GaugeHandle { public: explicit OtelGaugeAdapter( opentelemetry::nostd::shared_ptr otelGauge, opentelemetry::metrics::ObservableCallbackPtr callback); void Stop() override; private: opentelemetry::nostd::shared_ptr otelGauge; opentelemetry::metrics::ObservableCallbackPtr otelCallback; }; /** * A Open Telemetry Implementation of AsyncMeasurement. */ class OtelObserverAdapter final : public AsyncMeasurement { public: explicit OtelObserverAdapter(const opentelemetry::metrics::ObserverResult &otelResult); void Record(double value, const Aws::Map &attributes) override; private: const opentelemetry::metrics::ObserverResult &otelResult; }; } } }