| 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
|