]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/examples/multi_processor/main.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / examples / multi_processor / main.cc
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
3
4 #include "opentelemetry/sdk/trace/simple_processor.h"
5 #include "opentelemetry/sdk/trace/tracer_context.h"
6 #include "opentelemetry/sdk/trace/tracer_provider.h"
7 #include "opentelemetry/trace/provider.h"
8
9 // Using an exporter that simply dumps span data to stdout.
10 #ifdef BAZEL_BUILD
11 # include "examples/common/foo_library/foo_library.h"
12 #else
13 # include "foo_library/foo_library.h"
14 #endif
15 #include "opentelemetry/exporters/memory/in_memory_span_exporter.h"
16 #include "opentelemetry/exporters/ostream/span_exporter.h"
17
18 using opentelemetry::exporter::memory::InMemorySpanExporter;
19 namespace trace_api = opentelemetry::trace;
20 namespace trace_sdk = opentelemetry::sdk::trace;
21 namespace nostd = opentelemetry::nostd;
22
23 namespace
24 {
25 InMemorySpanExporter *initTracer()
26 {
27 auto exporter1 = std::unique_ptr<trace_sdk::SpanExporter>(
28 new opentelemetry::exporter::trace::OStreamSpanExporter);
29 auto processor1 = std::unique_ptr<trace_sdk::SpanProcessor>(
30 new trace_sdk::SimpleSpanProcessor(std::move(exporter1)));
31
32 InMemorySpanExporter *memory_span_exporter = new InMemorySpanExporter();
33 auto exporter2 = std::unique_ptr<trace_sdk::SpanExporter>(memory_span_exporter);
34
35 // fetch the exporter for dumping data later
36
37 auto processor2 = std::unique_ptr<trace_sdk::SpanProcessor>(
38 new trace_sdk::SimpleSpanProcessor(std::move(exporter2)));
39
40 auto provider = nostd::shared_ptr<trace_sdk::TracerProvider>(
41 new trace_sdk::TracerProvider(std::move(processor1)));
42 provider->AddProcessor(std::move(processor2));
43 // Set the global trace provider
44 trace_api::Provider::SetTracerProvider(std::move(provider));
45
46 return memory_span_exporter;
47 }
48
49 void dumpSpans(std::vector<std::unique_ptr<trace_sdk::SpanData>> &spans)
50 {
51 char span_buf[trace_api::SpanId::kSize * 2];
52 char trace_buf[trace_api::TraceId::kSize * 2];
53 char parent_span_buf[trace_api::SpanId::kSize * 2];
54 std::cout << "\nSpans from memory :" << std::endl;
55
56 for (auto &span : spans)
57 {
58 std::cout << "\n\tSpan: " << std::endl;
59 std::cout << "\t\tName: " << span->GetName() << std::endl;
60 span->GetSpanId().ToLowerBase16(span_buf);
61 span->GetTraceId().ToLowerBase16(trace_buf);
62 span->GetParentSpanId().ToLowerBase16(parent_span_buf);
63 std::cout << "\t\tTraceId: " << std::string(trace_buf, sizeof(trace_buf)) << std::endl;
64 std::cout << "\t\tSpanId: " << std::string(span_buf, sizeof(span_buf)) << std::endl;
65 std::cout << "\t\tParentSpanId: " << std::string(parent_span_buf, sizeof(parent_span_buf))
66 << std::endl;
67
68 std::cout << "\t\tDescription: " << span->GetDescription() << std::endl;
69 std::cout << "\t\tSpan kind:"
70 << static_cast<typename std::underlying_type<trace_api::SpanKind>::type>(
71 span->GetSpanKind())
72 << std::endl;
73 std::cout << "\t\tSpan Status: "
74 << static_cast<typename std::underlying_type<trace_api::StatusCode>::type>(
75 span->GetStatus())
76 << std::endl;
77 }
78 }
79 } // namespace
80
81 int main()
82 {
83 // Removing this line will leave the default noop TracerProvider in place.
84 InMemorySpanExporter *memory_span_exporter = initTracer();
85
86 foo_library();
87 auto memory_spans = memory_span_exporter->GetData()->GetSpans();
88 dumpSpans(memory_spans);
89 }