/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace smithy::components::tracing; static const char *ALLOC_TAG = "OTEL_TELEMETRY_PROVIDER"; Aws::UniquePtr OtelTelemetryProvider::CreateOtelProvider( std::unique_ptr spanExporter, std::unique_ptr pushMetricExporter) { auto tracerProvider = Aws::MakeUnique(ALLOC_TAG); auto meterProvider = Aws::MakeUnique(ALLOC_TAG); return Aws::MakeUnique(ALLOC_TAG, std::move(tracerProvider), std::move(meterProvider), [&]() -> void { //Init Tracing auto traceProcessor = opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(spanExporter)); std::vector> traceProcessors; std::shared_ptr otelTracerProvider = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(traceProcessor)); opentelemetry::trace::Provider::SetTracerProvider(otelTracerProvider); //Init Metrics opentelemetry::sdk::metrics::PeriodicExportingMetricReaderOptions options; options.export_interval_millis = std::chrono::milliseconds(1000); options.export_timeout_millis = std::chrono::milliseconds(500); std::unique_ptr reader{new opentelemetry::sdk::metrics::PeriodicExportingMetricReader(std::move(pushMetricExporter), options)}; auto otelMeterProvider = std::shared_ptr(new opentelemetry::sdk::metrics::MeterProvider()); auto p = std::static_pointer_cast(otelMeterProvider); p->AddMetricReader(std::move(reader)); opentelemetry::metrics::Provider::SetMeterProvider(otelMeterProvider); }, []() -> void { // Clean up tracing std::shared_ptr emptyTracer; opentelemetry::trace::Provider::SetTracerProvider(emptyTracer); // Clean up metrics std::shared_ptr emptyMeter; opentelemetry::metrics::Provider::SetMeterProvider(emptyMeter); } ); }