/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #include #include #include #include #include #include #include #include using namespace smithy::components::tracing; static const char *ALLOC_TAG = "OTEL_METER_ADAPTER"; Aws::UniquePtr OtelMeterAdapter::CreateCounter(Aws::String name, Aws::String units, Aws::String description) const { auto counter = otelMeter->CreateUInt64Counter(name, description, units); return Aws::MakeUnique(ALLOC_TAG, std::move(counter)); } Aws::UniquePtr OtelMeterAdapter::CreateGauge(Aws::String name, std::function)> callback, Aws::String units, Aws::String description) const { auto gauge = otelMeter->CreateInt64ObservableGauge(name, description, units); GaugeHandleState gaugeHandleState{callback}; auto callbackFunc = [](opentelemetry::metrics::ObserverResult result, void *state) -> void { if (state == nullptr) { AWS_LOG_ERROR(ALLOC_TAG, "refusing to process null observer result") return; } Aws::UniquePtr measurement = Aws::MakeUnique(ALLOC_TAG, result); auto handleState = reinterpret_cast(state); handleState->callback(std::move(measurement)); }; gauge->AddCallback(callbackFunc, &gaugeHandleState); return Aws::MakeUnique(ALLOC_TAG, std::move(gauge), callbackFunc); } Aws::UniquePtr OtelMeterAdapter::CreateHistogram(Aws::String name, Aws::String units, Aws::String description) const { auto histogram = otelMeter->CreateDoubleHistogram(name, description, units); return Aws::MakeUnique(ALLOC_TAG, std::move(histogram)); } Aws::UniquePtr OtelMeterAdapter::CreateUpDownCounter(Aws::String name, Aws::String units, Aws::String description) const { auto counter = otelMeter->CreateInt64UpDownCounter(name, description, units); return Aws::MakeUnique(ALLOC_TAG, std::move(counter)); } OtelCounterAdapter::OtelCounterAdapter( opentelemetry::nostd::unique_ptr> counter) : otelCounter(std::move(counter)) {} void OtelCounterAdapter::add(long value, Aws::Map attributes) { otelCounter->Add(value, attributes); } OtelUpDownCounterAdapter::OtelUpDownCounterAdapter( opentelemetry::nostd::unique_ptr> counter) : otelUpDownCounter(std::move(counter)) {} void OtelUpDownCounterAdapter::add(long value, Aws::Map attributes) { otelUpDownCounter->Add(value, attributes); } OtelHistogramAdapter::OtelHistogramAdapter( opentelemetry::nostd::unique_ptr> otelHistogram) : otelHistogram(std::move(otelHistogram)) {} void OtelHistogramAdapter::record(double value, Aws::Map attributes) { otelHistogram->Record(value, attributes, opentelemetry::context::RuntimeContext::GetCurrent()); } OtelGaugeAdapter::OtelGaugeAdapter( opentelemetry::nostd::shared_ptr otelGauge, opentelemetry::metrics::ObservableCallbackPtr callback) : otelGauge(std::move(otelGauge)), otelCallback(callback) {} void OtelGaugeAdapter::Stop() { otelGauge->RemoveCallback(otelCallback, nullptr); } OtelObserverAdapter::OtelObserverAdapter(const opentelemetry::metrics::ObserverResult &result) : otelResult(result) {} void OtelObserverAdapter::Record(double value, const Aws::Map &attributes) { auto result = opentelemetry::nostd::get>>( otelResult); result->Observe(value, attributes); }