]>
git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/examples/http/tracer_common.h
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
5 #include "opentelemetry/exporters/ostream/span_exporter.h"
6 #include "opentelemetry/sdk/trace/simple_processor.h"
7 #include "opentelemetry/sdk/trace/tracer_provider.h"
8 #include "opentelemetry/trace/provider.h"
10 #include "opentelemetry/context/propagation/global_propagator.h"
11 #include "opentelemetry/context/propagation/text_map_propagator.h"
12 #include "opentelemetry/trace/propagation/http_trace_context.h"
17 #include "opentelemetry/ext/http/client/http_client.h"
18 #include "opentelemetry/nostd/shared_ptr.h"
24 class HttpTextMapCarrier
: public opentelemetry::context::propagation::TextMapCarrier
27 HttpTextMapCarrier
<T
>(T
&headers
) : headers_(headers
) {}
28 HttpTextMapCarrier() = default;
29 virtual opentelemetry::nostd::string_view
Get(
30 opentelemetry::nostd::string_view key
) const noexcept override
32 std::string key_to_compare
= key
.data();
33 // Header's first letter seems to be automatically capitaliazed by our test http-server, so
34 // compare accordingly.
35 if (key
== opentelemetry::trace::propagation::kTraceParent
)
37 key_to_compare
= "Traceparent";
39 else if (key
== opentelemetry::trace::propagation::kTraceState
)
41 key_to_compare
= "Tracestate";
43 auto it
= headers_
.find(key_to_compare
);
44 if (it
!= headers_
.end())
51 virtual void Set(opentelemetry::nostd::string_view key
,
52 opentelemetry::nostd::string_view value
) noexcept override
54 headers_
.insert(std::pair
<std::string
, std::string
>(std::string(key
), std::string(value
)));
62 auto exporter
= std::unique_ptr
<opentelemetry::sdk::trace::SpanExporter
>(
63 new opentelemetry::exporter::trace::OStreamSpanExporter
);
64 auto processor
= std::unique_ptr
<opentelemetry::sdk::trace::SpanProcessor
>(
65 new opentelemetry::sdk::trace::SimpleSpanProcessor(std::move(exporter
)));
66 std::vector
<std::unique_ptr
<opentelemetry::sdk::trace::SpanProcessor
>> processors
;
67 processors
.push_back(std::move(processor
));
68 // Default is an always-on sampler.
69 auto context
= std::make_shared
<opentelemetry::sdk::trace::TracerContext
>(std::move(processors
));
70 auto provider
= opentelemetry::nostd::shared_ptr
<opentelemetry::trace::TracerProvider
>(
71 new opentelemetry::sdk::trace::TracerProvider(context
));
72 // Set the global trace provider
73 opentelemetry::trace::Provider::SetTracerProvider(provider
);
75 // set global propagator
76 opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
77 opentelemetry::nostd::shared_ptr
<opentelemetry::context::propagation::TextMapPropagator
>(
78 new opentelemetry::trace::propagation::HttpTraceContext()));
81 opentelemetry::nostd::shared_ptr
<opentelemetry::trace::Tracer
> get_tracer(std::string tracer_name
)
83 auto provider
= opentelemetry::trace::Provider::GetTracerProvider();
84 return provider
->GetTracer(tracer_name
);