libcopp 2.3.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
main.cpp
Go to the documentation of this file.
1// Copyright 2021 atframework
2
3#include <iostream>
4#include <string>
5
6#if defined(HAVE_OPENTELEMETRY_CPP) && HAVE_OPENTELEMETRY_CPP
7# include "opentelemetry/exporters/ostream/span_exporter_factory.h"
8# include "opentelemetry/sdk/trace/batch_span_processor.h"
9# include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
10# include "opentelemetry/sdk/trace/batch_span_processor_options.h"
11# include "opentelemetry/sdk/trace/exporter.h"
12# include "opentelemetry/sdk/trace/tracer_provider_factory.h"
13# include "opentelemetry/trace/provider.h"
14
15#endif
16
17#if defined(HAVE_PROTOBUF) && HAVE_PROTOBUF
18
19// There ares some warnings in prorobuf generated codes, we just disable these warnings
20# if defined(_MSC_VER)
21# pragma warning(push)
22# if ((defined(__cplusplus) && __cplusplus >= 201704L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201704L))
23# pragma warning(disable : 4996)
24# pragma warning(disable : 4309)
25# if _MSC_VER >= 1922
26# pragma warning(disable : 5054)
27# endif
28# endif
29
30# if _MSC_VER < 1910
31# pragma warning(disable : 4800)
32# endif
33# pragma warning(disable : 4244)
34# pragma warning(disable : 4251)
35# pragma warning(disable : 4267)
36# endif
37
38# if defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__)
39# if (__GNUC__ * 100 + __GNUC_MINOR__ * 10) >= 460
40# pragma GCC diagnostic push
41# endif
42# pragma GCC diagnostic ignored "-Wunused-parameter"
43# pragma GCC diagnostic ignored "-Wtype-limits"
44# elif defined(__clang__) || defined(__apple_build_version__)
45# pragma clang diagnostic push
46# pragma clang diagnostic ignored "-Wunused-parameter"
47# pragma clang diagnostic ignored "-Wtype-limits"
48# endif
49
50# include "test_pb.pb.h"
51
52# if defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__)
53# if (__GNUC__ * 100 + __GNUC_MINOR__ * 10) >= 460
54# pragma GCC diagnostic pop
55# endif
56# elif defined(__clang__) || defined(__apple_build_version__)
57# pragma clang diagnostic pop
58# endif
59
60# if defined(_MSC_VER)
61# pragma warning(pop)
62# endif
63
64#endif
65
66#if defined(HAVE_OPENTELEMETRY_CPP) && HAVE_OPENTELEMETRY_CPP
67
68constexpr int kOpentelemetryNumSpans = 3;
69
70namespace {
71
72static void OpentelemetryInitTracer() {
73 auto exporter = opentelemetry::exporter::trace::OStreamSpanExporterFactory::Create();
74
75 // CONFIGURE BATCH SPAN PROCESSOR PARAMETERS
76
77 opentelemetry::sdk::trace::BatchSpanProcessorOptions options;
78 // We make the queue size `kOpentelemetryNumSpans`*2+5 because when the queue is half full, a preemptive notif
79 // is sent to start an export call, which we want to avoid in this simple example.
80 options.max_queue_size = kOpentelemetryNumSpans * 2 + 1;
81 // Time interval (in ms) between two consecutive exports.
82 options.schedule_delay_millis = std::chrono::milliseconds(3000);
83 // We export `kOpentelemetryNumSpans` after every `schedule_delay_millis` milliseconds.
84 options.max_export_batch_size = kOpentelemetryNumSpans;
85
86 auto processor = opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(std::move(exporter), options);
87
88 auto provider = opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(processor));
89 // Set the global trace provider.
90 opentelemetry::trace::Provider::SetTracerProvider(
91 opentelemetry::nostd::shared_ptr<opentelemetry::trace::TracerProvider>{provider.release()});
92}
93
94opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> GetTracer() {
95 auto provider = opentelemetry::trace::Provider::GetTracerProvider();
96 return provider->GetTracer("cmake-toolset-test");
97}
98
99static void OpentelemetryStartAndEndSpans() {
100 for (int i = 1; i <= kOpentelemetryNumSpans; ++i) {
101 std::string msg = "cmake-toolset-test-batch: ";
102 msg += static_cast<char>(i + '0');
103 GetTracer()->StartSpan(msg);
104 }
105}
106
107static void OpentelemetryTest() {
108 OpentelemetryInitTracer();
109 OpentelemetryStartAndEndSpans();
110 OpentelemetryStartAndEndSpans();
111
112 // Create enough spans to let BatchSpanProcessor to submit spans
113 OpentelemetryStartAndEndSpans();
114 // We should see the spans exported by OStreamSpanExporter here
115}
116
117} // namespace
118#endif
119
120int main() {
121#if defined(HAVE_PROTOBUF) && HAVE_PROTOBUF
122 // Test protobuf
123 cmake_toolset::test_message msg;
124 msg.set_i32(123);
125 msg.set_i64(123000);
126 msg.set_str("Hello World!");
127
128 std::cout << msg.DebugString() << std::endl;
129#else
130 std::cout << "Hello World!" << std::endl;
131#endif
132#if defined(HAVE_OPENTELEMETRY_CPP) && HAVE_OPENTELEMETRY_CPP
133 // Test opentelemetry
134 OpentelemetryTest();
135#endif
136 return 0;
137}
int main()
Definition main.cpp:120