]>
git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/examples/multi_processor/main.cc
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
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"
9 // Using an exporter that simply dumps span data to stdout.
11 # include "examples/common/foo_library/foo_library.h"
13 # include "foo_library/foo_library.h"
15 #include "opentelemetry/exporters/memory/in_memory_span_exporter.h"
16 #include "opentelemetry/exporters/ostream/span_exporter.h"
18 using opentelemetry::exporter::memory::InMemorySpanExporter
;
19 namespace trace_api
= opentelemetry::trace
;
20 namespace trace_sdk
= opentelemetry::sdk::trace
;
21 namespace nostd
= opentelemetry::nostd
;
25 InMemorySpanExporter
*initTracer()
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
)));
32 InMemorySpanExporter
*memory_span_exporter
= new InMemorySpanExporter();
33 auto exporter2
= std::unique_ptr
<trace_sdk::SpanExporter
>(memory_span_exporter
);
35 // fetch the exporter for dumping data later
37 auto processor2
= std::unique_ptr
<trace_sdk::SpanProcessor
>(
38 new trace_sdk::SimpleSpanProcessor(std::move(exporter2
)));
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
));
46 return memory_span_exporter
;
49 void dumpSpans(std::vector
<std::unique_ptr
<trace_sdk::SpanData
>> &spans
)
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
;
56 for (auto &span
: spans
)
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
))
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
>(
73 std::cout
<< "\t\tSpan Status: "
74 << static_cast<typename
std::underlying_type
<trace_api::StatusCode
>::type
>(
83 // Removing this line will leave the default noop TracerProvider in place.
84 InMemorySpanExporter
*memory_span_exporter
= initTracer();
87 auto memory_spans
= memory_span_exporter
->GetData()->GetSpans();
88 dumpSpans(memory_spans
);