From f86a98dd66738164d16c494e7c678e0bd9e0d093 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Fri, 15 May 2020 15:51:11 -0700 Subject: [PATCH 1/9] Add a simple example for the tracer workflow --- examples/CMakeLists.txt | 1 + examples/simple/BUILD | 12 ++++ examples/simple/CMakeLists.txt | 3 + examples/simple/library.cc | 30 ++++++++++ examples/simple/main.cc | 27 +++++++++ examples/simple/stdout_exporter.h | 52 ++++++++++++++++++ .../sdk/common/.atomic_shared_ptr.h.swp | Bin 0 -> 12288 bytes .../sdk}/trace/simple_processor.h | 0 .../opentelemetry/sdk/trace/tracer_provider.h | 2 +- sdk/src/trace/tracer_provider.cc | 2 +- sdk/test/trace/simple_processor_test.cc | 2 +- sdk/test/trace/tracer_provider_test.cc | 2 +- sdk/test/trace/tracer_test.cc | 2 +- 13 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 examples/simple/BUILD create mode 100644 examples/simple/CMakeLists.txt create mode 100644 examples/simple/library.cc create mode 100644 examples/simple/main.cc create mode 100644 examples/simple/stdout_exporter.h create mode 100644 sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp rename sdk/{src => include/opentelemetry/sdk}/trace/simple_processor.h (100%) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7d5453f66d..dcb04ccf4e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(plugin) +add_subdirectory(simple) diff --git a/examples/simple/BUILD b/examples/simple/BUILD new file mode 100644 index 0000000000..63fa943805 --- /dev/null +++ b/examples/simple/BUILD @@ -0,0 +1,12 @@ +cc_binary( + name = "example_simple", + srcs = [ + "main.cc", + "library.cc", + "stdout_exporter.h", + ], + deps = [ + "//api", + "//sdk/src/trace", + ], +) diff --git a/examples/simple/CMakeLists.txt b/examples/simple/CMakeLists.txt new file mode 100644 index 0000000000..72b44586bf --- /dev/null +++ b/examples/simple/CMakeLists.txt @@ -0,0 +1,3 @@ +add_executable(example_simple main.cc library.cc) +target_link_libraries(example_simple ${CMAKE_THREAD_LIBS_INIT} + opentelemetry_trace) diff --git a/examples/simple/library.cc b/examples/simple/library.cc new file mode 100644 index 0000000000..ce33c6aba9 --- /dev/null +++ b/examples/simple/library.cc @@ -0,0 +1,30 @@ +#include "opentelemetry/trace/provider.h" + +namespace trace = opentelemetry::trace; +namespace nostd = opentelemetry::nostd; + +static nostd::shared_ptr get_tracer() +{ + auto provider = trace::Provider::GetTracerProvider(); + return provider->GetTracer(""); +} + +static void f1() +{ + auto span = get_tracer()->StartSpan("f1"); +} + +static void f2() +{ + auto span = get_tracer()->StartSpan("f2"); + + f1(); + f1(); +} + +void library() +{ + auto span = get_tracer()->StartSpan("library"); + + f2(); +} diff --git a/examples/simple/main.cc b/examples/simple/main.cc new file mode 100644 index 0000000000..6cbb1245b4 --- /dev/null +++ b/examples/simple/main.cc @@ -0,0 +1,27 @@ +#include "opentelemetry/sdk/trace/simple_processor.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" +#include "opentelemetry/trace/provider.h" + +// Using an exporter that simply dumps span data to stdout. +#include "stdout_exporter.h" + +// This models a call to an external library that is instrumented with OT. +extern void library(); + +void initTracer() +{ + auto exporter = std::unique_ptr(new StdoutExporter); + auto processor = std::shared_ptr( + new sdktrace::SimpleSpanProcessor(std::move(exporter))); + auto provider = nostd::shared_ptr(new sdktrace::TracerProvider(processor)); + trace::Provider::SetTracerProvider(provider); +} + +int main() +{ + // Removing this line will leave OT initialized with the default noop + // tracer, thus being effectively deactivated. + initTracer(); + + library(); +} diff --git a/examples/simple/stdout_exporter.h b/examples/simple/stdout_exporter.h new file mode 100644 index 0000000000..99e2b5f51b --- /dev/null +++ b/examples/simple/stdout_exporter.h @@ -0,0 +1,52 @@ +#pragma once + +#include "opentelemetry/sdk/trace/exporter.h" +#include "opentelemetry/sdk/trace/span_data.h" + +#include + +namespace trace = opentelemetry::trace; +namespace nostd = opentelemetry::nostd; +namespace sdktrace = opentelemetry::sdk::trace; + +class StdoutExporter final : public sdktrace::SpanExporter +{ + std::unique_ptr MakeRecordable() noexcept + { + return std::unique_ptr(new sdktrace::SpanData); + } + + sdktrace::ExportResult Export(nostd::span> &spans) noexcept + { + for (auto &recordable : spans) + { + auto span = std::unique_ptr( + static_cast(recordable.release())); + + if (span != nullptr) + { + char trace_id[32] = {0}; + char span_id[16] = {0}; + char parent_span_id[16] = {0}; + + span->GetTraceId().ToLowerBase16(trace_id); + span->GetSpanId().ToLowerBase16(span_id); + span->GetParentSpanId().ToLowerBase16(parent_span_id); + + std::cout << "{" << std::endl + << " name : " << span->GetName() << std::endl + << " trace_id : " << std::string(trace_id, 32) << std::endl + << " span_id : " << std::string(span_id, 16) << std::endl + << " parent_span_id: " << std::string(parent_span_id, 16) << std::endl + << " start : " << span->GetStartTime().time_since_epoch().count() + << std::endl + << " duration : " << span->GetDuration().count() << std::endl + << "}" << std::endl; + } + } + + return sdktrace::ExportResult::kSuccess; + } + + void Shutdown(std::chrono::microseconds timeout = std::chrono::microseconds(0)) noexcept {} +}; diff --git a/sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp b/sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..6e9379499e2d743a5e4e95e67f3fab21a16a5a05 GIT binary patch literal 12288 zcmeI&O>fgM7zglY+u$SD;zb%Pph`4Uuni$3BG++SL*rPsJ3tfSjQ9i` z_y(M~z;}U90Vi%eEt{Z|2ItYgrN5%YPZH;MOY-#Fd!4S>Y^@QG3q+4Ues~g>FH%xO z`)U}JOVgRZ4qdwxY`@u`#AL$BrLt05?nV=$e45k?>7N@}d*hNBo64l{vZ=k7v3w@2 z)8k2bY<4!I>#C}qRH?44F5*Z9Qx-mj*68H>Vg>>WFEB}i=H^-2SYK;TEmj&=#PX%x zg=YZ(1Rwwb2tWV=5P$##7D*uaC3?*deCF_>`4hlwEFIe(?qUN02tWV=5P$##AOHaf zKmY;|fWRpfP$kj(b3{Kl)BpcR@BiP=6Mf@+<$U3M=6vG3sCgu zgpg7=Rhj6OHiBEyX~nqG4oL8rMC*p)wjG;o6LqjY)j?br)}^alHjd^WRot##OiS&c zGy_pQ?BpBkbU^d>n_u6}>`o{DV}*S3uNHaHnCqaI``le`Yu6ezxX1UX=GyN*`5S!L M2Q{pesGTPx# literal 0 HcmV?d00001 diff --git a/sdk/src/trace/simple_processor.h b/sdk/include/opentelemetry/sdk/trace/simple_processor.h similarity index 100% rename from sdk/src/trace/simple_processor.h rename to sdk/include/opentelemetry/sdk/trace/simple_processor.h diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 322d2fcb59..d78fed02fc 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -43,7 +43,7 @@ class TracerProvider final : public opentelemetry::trace::TracerProvider private: opentelemetry::sdk::AtomicSharedPtr processor_; - opentelemetry::nostd::shared_ptr tracer_; + std::shared_ptr tracer_; }; } // namespace trace } // namespace sdk diff --git a/sdk/src/trace/tracer_provider.cc b/sdk/src/trace/tracer_provider.cc index 18e3dc99f9..3268207510 100644 --- a/sdk/src/trace/tracer_provider.cc +++ b/sdk/src/trace/tracer_provider.cc @@ -13,7 +13,7 @@ opentelemetry::nostd::shared_ptr TracerProvider::G nostd::string_view library_name, nostd::string_view library_version) noexcept { - return tracer_; + return opentelemetry::nostd::shared_ptr(tracer_); } void TracerProvider::SetProcessor(std::shared_ptr processor) noexcept diff --git a/sdk/test/trace/simple_processor_test.cc b/sdk/test/trace/simple_processor_test.cc index ddeba25fe6..184e4bb684 100644 --- a/sdk/test/trace/simple_processor_test.cc +++ b/sdk/test/trace/simple_processor_test.cc @@ -1,4 +1,4 @@ -#include "src/trace/simple_processor.h" +#include "opentelemetry/sdk/trace/simple_processor.h" #include "opentelemetry/nostd/span.h" #include "opentelemetry/sdk/trace/span_data.h" diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index 8168aeb6ba..90dbe7c747 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -1,6 +1,6 @@ #include "opentelemetry/sdk/trace/tracer_provider.h" +#include "opentelemetry/sdk/trace/simple_processor.h" #include "opentelemetry/sdk/trace/tracer.h" -#include "src/trace/simple_processor.h" #include diff --git a/sdk/test/trace/tracer_test.cc b/sdk/test/trace/tracer_test.cc index 99a18ba99d..aa1c26fe76 100644 --- a/sdk/test/trace/tracer_test.cc +++ b/sdk/test/trace/tracer_test.cc @@ -1,6 +1,6 @@ #include "opentelemetry/sdk/trace/tracer.h" +#include "opentelemetry/sdk/trace/simple_processor.h" #include "opentelemetry/sdk/trace/span_data.h" -#include "src/trace/simple_processor.h" #include From 1909f5de2eeaaf467183cf7c5423ba591db8b7d6 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Fri, 15 May 2020 15:57:48 -0700 Subject: [PATCH 2/9] Format --- examples/simple/BUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/simple/BUILD b/examples/simple/BUILD index 63fa943805..70f7bd431d 100644 --- a/examples/simple/BUILD +++ b/examples/simple/BUILD @@ -1,9 +1,9 @@ cc_binary( name = "example_simple", srcs = [ - "main.cc", "library.cc", - "stdout_exporter.h", + "main.cc", + "stdout_exporter.h", ], deps = [ "//api", From 6a5ab57cfed7e94de833befc38a7ce292f0c64d3 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Fri, 15 May 2020 15:59:49 -0700 Subject: [PATCH 3/9] Remove obsolete file --- .../sdk/common/.atomic_shared_ptr.h.swp | Bin 12288 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp diff --git a/sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp b/sdk/include/opentelemetry/sdk/common/.atomic_shared_ptr.h.swp deleted file mode 100644 index 6e9379499e2d743a5e4e95e67f3fab21a16a5a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&O>fgM7zglY+u$SD;zb%Pph`4Uuni$3BG++SL*rPsJ3tfSjQ9i` z_y(M~z;}U90Vi%eEt{Z|2ItYgrN5%YPZH;MOY-#Fd!4S>Y^@QG3q+4Ues~g>FH%xO z`)U}JOVgRZ4qdwxY`@u`#AL$BrLt05?nV=$e45k?>7N@}d*hNBo64l{vZ=k7v3w@2 z)8k2bY<4!I>#C}qRH?44F5*Z9Qx-mj*68H>Vg>>WFEB}i=H^-2SYK;TEmj&=#PX%x zg=YZ(1Rwwb2tWV=5P$##7D*uaC3?*deCF_>`4hlwEFIe(?qUN02tWV=5P$##AOHaf zKmY;|fWRpfP$kj(b3{Kl)BpcR@BiP=6Mf@+<$U3M=6vG3sCgu zgpg7=Rhj6OHiBEyX~nqG4oL8rMC*p)wjG;o6LqjY)j?br)}^alHjd^WRot##OiS&c zGy_pQ?BpBkbU^d>n_u6}>`o{DV}*S3uNHaHnCqaI``le`Yu6ezxX1UX=GyN*`5S!L M2Q{pesGTPx# From a53adf1dda1c19fe1c3fbc313897be009880f0c9 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Wed, 20 May 2020 13:56:29 -0700 Subject: [PATCH 4/9] PR comments --- examples/simple/BUILD | 13 +++++++- examples/simple/CMakeLists.txt | 7 +++-- examples/simple/library.cc | 30 ------------------- examples/simple/main.cc | 8 +++-- examples/simple/stdout_exporter.h | 20 ++++++------- .../opentelemetry/sdk/trace/exporter.h | 3 +- sdk/test/trace/simple_processor_test.cc | 2 +- sdk/test/trace/tracer_test.cc | 2 +- 8 files changed, 36 insertions(+), 49 deletions(-) delete mode 100644 examples/simple/library.cc diff --git a/examples/simple/BUILD b/examples/simple/BUILD index 70f7bd431d..b31f371af7 100644 --- a/examples/simple/BUILD +++ b/examples/simple/BUILD @@ -1,12 +1,23 @@ +cc_library( + name = "foo_library", + srcs = [ + "foo_library/foo_library.cc", + "foo_library/foo_library.h", + ], + deps = [ + "//api", + ], +) + cc_binary( name = "example_simple", srcs = [ - "library.cc", "main.cc", "stdout_exporter.h", ], deps = [ "//api", + "//examples/simple:foo_library", "//sdk/src/trace", ], ) diff --git a/examples/simple/CMakeLists.txt b/examples/simple/CMakeLists.txt index 72b44586bf..76c6ed2d61 100644 --- a/examples/simple/CMakeLists.txt +++ b/examples/simple/CMakeLists.txt @@ -1,3 +1,6 @@ -add_executable(example_simple main.cc library.cc) +add_library(foo_library SHARED foo_library/foo_library.cc) +target_link_libraries(foo_library ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api) + +add_executable(example_simple main.cc) target_link_libraries(example_simple ${CMAKE_THREAD_LIBS_INIT} - opentelemetry_trace) + opentelemetry_trace foo_library) diff --git a/examples/simple/library.cc b/examples/simple/library.cc deleted file mode 100644 index ce33c6aba9..0000000000 --- a/examples/simple/library.cc +++ /dev/null @@ -1,30 +0,0 @@ -#include "opentelemetry/trace/provider.h" - -namespace trace = opentelemetry::trace; -namespace nostd = opentelemetry::nostd; - -static nostd::shared_ptr get_tracer() -{ - auto provider = trace::Provider::GetTracerProvider(); - return provider->GetTracer(""); -} - -static void f1() -{ - auto span = get_tracer()->StartSpan("f1"); -} - -static void f2() -{ - auto span = get_tracer()->StartSpan("f2"); - - f1(); - f1(); -} - -void library() -{ - auto span = get_tracer()->StartSpan("library"); - - f2(); -} diff --git a/examples/simple/main.cc b/examples/simple/main.cc index 6cbb1245b4..af03d2e6db 100644 --- a/examples/simple/main.cc +++ b/examples/simple/main.cc @@ -5,9 +5,10 @@ // Using an exporter that simply dumps span data to stdout. #include "stdout_exporter.h" -// This models a call to an external library that is instrumented with OT. -extern void library(); +#include "foo_library/foo_library.h" +namespace +{ void initTracer() { auto exporter = std::unique_ptr(new StdoutExporter); @@ -16,6 +17,7 @@ void initTracer() auto provider = nostd::shared_ptr(new sdktrace::TracerProvider(processor)); trace::Provider::SetTracerProvider(provider); } +} // namespace int main() { @@ -23,5 +25,5 @@ int main() // tracer, thus being effectively deactivated. initTracer(); - library(); + foo_library(); } diff --git a/examples/simple/stdout_exporter.h b/examples/simple/stdout_exporter.h index 99e2b5f51b..6a58c5b8d6 100644 --- a/examples/simple/stdout_exporter.h +++ b/examples/simple/stdout_exporter.h @@ -16,7 +16,8 @@ class StdoutExporter final : public sdktrace::SpanExporter return std::unique_ptr(new sdktrace::SpanData); } - sdktrace::ExportResult Export(nostd::span> &spans) noexcept + sdktrace::ExportResult Export( + const nostd::span> &spans) noexcept { for (auto &recordable : spans) { @@ -33,15 +34,14 @@ class StdoutExporter final : public sdktrace::SpanExporter span->GetSpanId().ToLowerBase16(span_id); span->GetParentSpanId().ToLowerBase16(parent_span_id); - std::cout << "{" << std::endl - << " name : " << span->GetName() << std::endl - << " trace_id : " << std::string(trace_id, 32) << std::endl - << " span_id : " << std::string(span_id, 16) << std::endl - << " parent_span_id: " << std::string(parent_span_id, 16) << std::endl - << " start : " << span->GetStartTime().time_since_epoch().count() - << std::endl - << " duration : " << span->GetDuration().count() << std::endl - << "}" << std::endl; + std::cout << "{" + << "\n name : " << span->GetName() + << "\n trace_id : " << std::string(trace_id, 32) + << "\n span_id : " << std::string(span_id, 16) + << "\n parent_span_id: " << std::string(parent_span_id, 16) + << "\n start : " << span->GetStartTime().time_since_epoch().count() + << "\n duration : " << span->GetDuration().count() << "\n}" + << "\n"; } } diff --git a/sdk/include/opentelemetry/sdk/trace/exporter.h b/sdk/include/opentelemetry/sdk/trace/exporter.h index d517c572b2..ec5473edb8 100644 --- a/sdk/include/opentelemetry/sdk/trace/exporter.h +++ b/sdk/include/opentelemetry/sdk/trace/exporter.h @@ -48,7 +48,8 @@ class SpanExporter * @param spans a span of unique pointers to span recordables */ virtual ExportResult Export( - nostd::span> &spans) noexcept = 0; + const nostd::span> + &spans) noexcept = 0; /** * Shut down the exporter. diff --git a/sdk/test/trace/simple_processor_test.cc b/sdk/test/trace/simple_processor_test.cc index 184e4bb684..b4819aa0ae 100644 --- a/sdk/test/trace/simple_processor_test.cc +++ b/sdk/test/trace/simple_processor_test.cc @@ -23,7 +23,7 @@ class MockSpanExporter final : public SpanExporter } ExportResult Export( - opentelemetry::nostd::span> &spans) noexcept override + const opentelemetry::nostd::span> &spans) noexcept override { for (auto &span : spans) { diff --git a/sdk/test/trace/tracer_test.cc b/sdk/test/trace/tracer_test.cc index aa1c26fe76..f1195b3feb 100644 --- a/sdk/test/trace/tracer_test.cc +++ b/sdk/test/trace/tracer_test.cc @@ -22,7 +22,7 @@ class MockSpanExporter final : public SpanExporter } ExportResult Export( - opentelemetry::nostd::span> &recordables) noexcept override + const opentelemetry::nostd::span> &recordables) noexcept override { for (auto &recordable : recordables) { From ed05074bfdcaa9724aedfaa4f1adc5e662a4c7e0 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Wed, 20 May 2020 15:10:08 -0700 Subject: [PATCH 5/9] Add missing files --- examples/simple/foo_library/foo_library.cc | 33 ++++++++++++++++++++++ examples/simple/foo_library/foo_library.h | 3 ++ 2 files changed, 36 insertions(+) create mode 100644 examples/simple/foo_library/foo_library.cc create mode 100644 examples/simple/foo_library/foo_library.h diff --git a/examples/simple/foo_library/foo_library.cc b/examples/simple/foo_library/foo_library.cc new file mode 100644 index 0000000000..0990b85ced --- /dev/null +++ b/examples/simple/foo_library/foo_library.cc @@ -0,0 +1,33 @@ +#include "opentelemetry/trace/provider.h" + +namespace trace = opentelemetry::trace; +namespace nostd = opentelemetry::nostd; + +namespace +{ +nostd::shared_ptr get_tracer() +{ + auto provider = trace::Provider::GetTracerProvider(); + return provider->GetTracer("foo_library"); +} + +void f1() +{ + auto span = get_tracer()->StartSpan("f1"); +} + +void f2() +{ + auto span = get_tracer()->StartSpan("f2"); + + f1(); + f1(); +} +} // namespace + +void foo_library() +{ + auto span = get_tracer()->StartSpan("library"); + + f2(); +} diff --git a/examples/simple/foo_library/foo_library.h b/examples/simple/foo_library/foo_library.h new file mode 100644 index 0000000000..7ac75c0e50 --- /dev/null +++ b/examples/simple/foo_library/foo_library.h @@ -0,0 +1,3 @@ +#pragma once + +void foo_library(); From 1a1b55e115ce3c60086374c25a146205cb102f18 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Wed, 20 May 2020 16:23:59 -0700 Subject: [PATCH 6/9] Bazel fixes --- examples/simple/BUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/simple/BUILD b/examples/simple/BUILD index b31f371af7..20d830ad21 100644 --- a/examples/simple/BUILD +++ b/examples/simple/BUILD @@ -4,6 +4,7 @@ cc_library( "foo_library/foo_library.cc", "foo_library/foo_library.h", ], + linkstatic = True, deps = [ "//api", ], @@ -16,8 +17,8 @@ cc_binary( "stdout_exporter.h", ], deps = [ + ":foo_library", "//api", - "//examples/simple:foo_library", "//sdk/src/trace", ], ) From a833b2f6299d5a8246c5b1668e59693c4976b045 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Thu, 21 May 2020 17:56:51 -0700 Subject: [PATCH 7/9] Fix bazel build --- examples/simple/BUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/simple/BUILD b/examples/simple/BUILD index 20d830ad21..34583e2eac 100644 --- a/examples/simple/BUILD +++ b/examples/simple/BUILD @@ -2,9 +2,10 @@ cc_library( name = "foo_library", srcs = [ "foo_library/foo_library.cc", + ], + hdrs = [ "foo_library/foo_library.h", ], - linkstatic = True, deps = [ "//api", ], From 0158c248b19d3d901c0aab27c75da69e58c51d9e Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Thu, 21 May 2020 18:06:03 -0700 Subject: [PATCH 8/9] Fix CMake build --- examples/simple/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/simple/CMakeLists.txt b/examples/simple/CMakeLists.txt index 76c6ed2d61..4b0ab35f74 100644 --- a/examples/simple/CMakeLists.txt +++ b/examples/simple/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(foo_library SHARED foo_library/foo_library.cc) +add_library(foo_library foo_library/foo_library.cc) target_link_libraries(foo_library ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api) add_executable(example_simple main.cc) -target_link_libraries(example_simple ${CMAKE_THREAD_LIBS_INIT} - opentelemetry_trace foo_library) +target_link_libraries(example_simple ${CMAKE_THREAD_LIBS_INIT} foo_library + opentelemetry_trace) From af786587d0e937ed690c60c3ce97fbfd79a2305e Mon Sep 17 00:00:00 2001 From: Ankit Bhargava Date: Wed, 27 May 2020 18:54:16 -0400 Subject: [PATCH 9/9] Adding documentation and comments for the simple tracer example --- examples/simple/README.md | 25 ++++++++++++++++++++++ examples/simple/foo_library/foo_library.cc | 3 +++ examples/simple/main.cc | 7 +++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 examples/simple/README.md diff --git a/examples/simple/README.md b/examples/simple/README.md new file mode 100644 index 0000000000..0c561a78e7 --- /dev/null +++ b/examples/simple/README.md @@ -0,0 +1,25 @@ + +## Building and Running the Simple Trace Example + +This example sets up a tracer in the main application then uses a library that is instrumented with Open Telemetry. All telemetry output is directed to stdout. + +Install Bazel version 1.2.0 by following the steps listed at https://docs.bazel.build/versions/master/install.html + +Clone or fork the Open Telemetry C++ repository: + +```sh +git clone https://github.com/open-telemetry/opentelemetry-cpp.git +``` + +Build the example from the root of the opentelemetry-cpp directory using Bazel: + +```sh +cd opentelemetry-cpp/ +bazel build //examples/simple:example_simple +``` + +Run the resulting executable to see telemetry from the application as it calls the instrumented library. + +```sh +bazel-bin/examples/simple/example_simple +``` \ No newline at end of file diff --git a/examples/simple/foo_library/foo_library.cc b/examples/simple/foo_library/foo_library.cc index 0990b85ced..61c1251cfe 100644 --- a/examples/simple/foo_library/foo_library.cc +++ b/examples/simple/foo_library/foo_library.cc @@ -7,12 +7,15 @@ namespace { nostd::shared_ptr get_tracer() { + // Retrieve the global TraceProvider specific in main auto provider = trace::Provider::GetTracerProvider(); + // Return a Tracer object return provider->GetTracer("foo_library"); } void f1() { + // Create a span using the Tracer returned by the get_tracer() function auto span = get_tracer()->StartSpan("f1"); } diff --git a/examples/simple/main.cc b/examples/simple/main.cc index af03d2e6db..4358c2857f 100644 --- a/examples/simple/main.cc +++ b/examples/simple/main.cc @@ -11,10 +11,14 @@ namespace { void initTracer() { + // Specify the exporter: StdoutExporter in this case simply passes all output from the span processor to stdout auto exporter = std::unique_ptr(new StdoutExporter); + // Specify the Span Processor: SimpleSpanProcessor forwards all completed spans directly to the exporter auto processor = std::shared_ptr( - new sdktrace::SimpleSpanProcessor(std::move(exporter))); + new sdktrace::SimpleSpanProcessor(std::move(exporter))); //Creating a Span Processor given the StdoutExporter defined earlier + // Initialize a trace provider with the Span Processor instance defined above auto provider = nostd::shared_ptr(new sdktrace::TracerProvider(processor)); + // Set global trace provider trace::Provider::SetTracerProvider(provider); } } // namespace @@ -25,5 +29,6 @@ int main() // tracer, thus being effectively deactivated. initTracer(); + // Call the instrumented library foo_library(); }