| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | // Copyright The OpenTelemetry Authors// SPDX-License-Identifier: Apache-2.0#pragma once#include <cstring>#include <iostream>#include <vector>#include "opentelemetry/context/propagation/global_propagator.h"#include "opentelemetry/context/propagation/text_map_propagator.h"#include "opentelemetry/exporters/ostream/span_exporter_factory.h"#include "opentelemetry/ext/http/client/http_client.h"#include "opentelemetry/nostd/shared_ptr.h"#include "opentelemetry/sdk/trace/exporter.h"#include "opentelemetry/sdk/trace/processor.h"#include "opentelemetry/sdk/trace/provider.h"#include "opentelemetry/sdk/trace/simple_processor_factory.h"#include "opentelemetry/sdk/trace/tracer_context.h"#include "opentelemetry/sdk/trace/tracer_context_factory.h"#include "opentelemetry/sdk/trace/tracer_provider_factory.h"#include "opentelemetry/trace/propagation/http_trace_context.h"#include "opentelemetry/trace/provider.h"namespace{template <typename T>class HttpTextMapCarrier : public opentelemetry::context::propagation::TextMapCarrier{public:  HttpTextMapCarrier(T &headers) : headers_(headers) {}  HttpTextMapCarrier() = default;  virtual opentelemetry::nostd::string_view Get(      opentelemetry::nostd::string_view key) const noexcept override  {    std::string key_to_compare = key.data();    // Header's first letter seems to be  automatically capitaliazed by our test http-server, so    // compare accordingly.    if (key == opentelemetry::trace::propagation::kTraceParent)    {      key_to_compare = "Traceparent";    }    else if (key == opentelemetry::trace::propagation::kTraceState)    {      key_to_compare = "Tracestate";    }    auto it = headers_.find(key_to_compare);    if (it != headers_.end())    {      return it->second;    }    return "";  }  virtual void Set(opentelemetry::nostd::string_view key,                   opentelemetry::nostd::string_view value) noexcept override  {    headers_.insert(std::pair<std::string, std::string>(std::string(key), std::string(value)));  }  T headers_;};void InitTracer(){  auto exporter = opentelemetry::exporter::trace::OStreamSpanExporterFactory::Create();  auto processor =      opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(exporter));  std::vector<std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>> processors;  processors.push_back(std::move(processor));  // Default is an always-on sampler.  std::unique_ptr<opentelemetry::sdk::trace::TracerContext> context =      opentelemetry::sdk::trace::TracerContextFactory::Create(std::move(processors));  std::shared_ptr<opentelemetry::trace::TracerProvider> provider =      opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(context));  // Set the global trace provider  opentelemetry::sdk::trace::Provider::SetTracerProvider(provider);  // set global propagator  opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(      opentelemetry::nostd::shared_ptr<opentelemetry::context::propagation::TextMapPropagator>(          new opentelemetry::trace::propagation::HttpTraceContext()));}void CleanupTracer(){  std::shared_ptr<opentelemetry::trace::TracerProvider> none;  opentelemetry::sdk::trace::Provider::SetTracerProvider(none);}opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name){  auto provider = opentelemetry::trace::Provider::GetTracerProvider();  return provider->GetTracer(tracer_name);}}  // namespace
 |