Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
6d21fc9
added starts of tracer registry
Jan 3, 2020
c2c9296
updated styles, added tracer stub
Jan 7, 2020
d75dceb
roll back inadvertent change
Jan 7, 2020
7739551
axe vestigial commented test
Jan 7, 2020
24500ec
use pragma once
Jan 7, 2020
f92892b
axe use of make_unique to make things c++11 compliant
Jan 7, 2020
b23c0de
more pragmatic
Jan 7, 2020
b089b38
open braces on new lines
Jan 7, 2020
d8bb020
new lines between methods
Jan 7, 2020
2755fa5
Update api/include/opentelemetry/trace/tracer-registry.h
lykkin Jan 7, 2020
4e2e927
don't dedupe tracers, don't use stl types in public methods
Jan 7, 2020
93d22ed
omit leading whitespace
Jan 7, 2020
c218383
added a global scope module for the factory singleton, separated thin…
Jan 9, 2020
e3709dc
tests and clean up
Jan 9, 2020
9c4001b
formatting
Jan 9, 2020
a39b06b
tracer-factory -> tracer_factory
Jan 9, 2020
f2817d0
added names to formal params for getTracer, made getTracer explicit o…
Jan 9, 2020
daa7ce0
updated default and test factory impls
Jan 9, 2020
2ef4a47
update naming, change pass by const ref to pass by value in GetTracer
lykkin Jan 10, 2020
c61bd8d
formatting
lykkin Jan 10, 2020
bd1be15
free current tracer when setting new one
lykkin Jan 14, 2020
739329b
factory -> provider
lykkin Jan 15, 2020
99a522a
sdk span and tracer skeletons
lykkin Jan 16, 2020
a3619af
formatting
lykkin Jan 16, 2020
5d22716
plugging leaks
lykkin Jan 16, 2020
bb6ea58
make global provider header only
lykkin Jan 16, 2020
6904372
use nostd::unique_ptr
lykkin Jan 17, 2020
1f1509d
use a raw pointer instead of a smart pointer for tracking the current…
lykkin Jan 21, 2020
cb68ef3
axe global namespace, additional newlines
lykkin Jan 21, 2020
c5f6750
lock up get and set methods
lykkin Jan 23, 2020
b75025c
move the global tracer provider code into the trace directory
lykkin Jan 23, 2020
3e02447
axe the mutex, atomic is my new best friend
lykkin Jan 27, 2020
99674d3
no using in header files
lykkin Jan 27, 2020
1e5404b
use exchange to swap out the old provider
lykkin Jan 28, 2020
3412ebd
added tracer options to tracer construction
lykkin Jan 29, 2020
24c29e4
fix indentation in build files
lykkin Jan 29, 2020
9105c90
axe provider lifetime management from the global tracer provider
lykkin Feb 3, 2020
2fa8c92
clean up test, change provider file name
lykkin Feb 3, 2020
18bd64c
use std::mutex and axe tracer options from api
lykkin Mar 5, 2020
c53dfae
default args, flipping asserts
lykkin Mar 5, 2020
997a326
compile on older versions
lykkin Mar 5, 2020
b3b60ba
Merge from origin/master
Mar 13, 2020
02b9e03
Changes
Mar 14, 2020
dd8b192
Use simplified default tracer provider
Mar 15, 2020
5f45b14
Use atomic flag
Mar 15, 2020
045b107
SDK bazel files
Mar 15, 2020
e3f463e
Small fixes
Mar 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions api/include/opentelemetry/trace/noop.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "opentelemetry/nostd/unique_ptr.h"
#include "opentelemetry/trace/span.h"
#include "opentelemetry/trace/tracer.h"
#include "opentelemetry/trace/tracer_provider.h"
#include "opentelemetry/version.h"

#include <memory>
Expand Down Expand Up @@ -54,5 +55,27 @@ class NoopTracer final : public Tracer, public std::enable_shared_from_this<Noop
return nostd::unique_ptr<Span>{new (std::nothrow) NoopSpan{this->shared_from_this()}};
}
};

/**
* No-op implementation of a TracerProvider.
*/
class NoopTracerProvider final : public opentelemetry::trace::TracerProvider
{
public:
NoopTracerProvider()
: tracer_{nostd::shared_ptr<opentelemetry::trace::NoopTracer>(
new opentelemetry::trace::NoopTracer)}
{}

nostd::shared_ptr<opentelemetry::trace::Tracer> GetTracer(
nostd::string_view library_name,
nostd::string_view library_version) override
{
return tracer_;
}

private:
nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
};
} // namespace trace
OPENTELEMETRY_END_NAMESPACE
60 changes: 60 additions & 0 deletions api/include/opentelemetry/trace/provider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#pragma once

#include <atomic>

#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/trace/noop.h"
#include "opentelemetry/trace/tracer_provider.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace trace
{
/**
* Stores the singleton global TracerProvider.
*/
class Provider
{
public:
/**
* Returns the singleton TracerProvider.
*
* By default, a no-op TracerProvider is returned. This will never return a
* nullptr TracerProvider.
*/
static nostd::shared_ptr<TracerProvider> GetTracerProvider() noexcept
{
while (GetLock().test_and_set(std::memory_order_acquire))
;
auto provider = nostd::shared_ptr<TracerProvider>(GetProvider());
GetLock().clear(std::memory_order_release);

return provider;
}

/**
* Changes the singleton TracerProvider.
*/
static void SetTracerProvider(nostd::shared_ptr<TracerProvider> tp) noexcept
{
while (GetLock().test_and_set(std::memory_order_acquire))
;
GetProvider() = tp;
GetLock().clear(std::memory_order_release);
}

private:
static nostd::shared_ptr<TracerProvider> &GetProvider() noexcept
{
static nostd::shared_ptr<TracerProvider> provider(new NoopTracerProvider);
return provider;
}

static std::atomic_flag &GetLock() noexcept
{
static std::atomic_flag lock = ATOMIC_FLAG_INIT;
return lock;
}
};

} // namespace trace
OPENTELEMETRY_END_NAMESPACE
1 change: 0 additions & 1 deletion api/include/opentelemetry/trace/tracer.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ class Tracer
{
public:
virtual ~Tracer() = default;

/**
* Starts a span.
*/
Expand Down
27 changes: 27 additions & 0 deletions api/include/opentelemetry/trace/tracer_provider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once

#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/nostd/string_view.h"
#include "opentelemetry/trace/tracer.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace trace
{
/**
* Creates new Tracer instances.
*/
class TracerProvider
{
public:
virtual ~TracerProvider() = default;
/**
* Gets or creates a named tracer instance.
*
* Optionally a version can be passed to create a named and versioned tracer
* instance.
*/
virtual nostd::shared_ptr<Tracer> GetTracer(nostd::string_view library_name,
nostd::string_view library_version = "") = 0;
};
} // namespace trace
OPENTELEMETRY_END_NAMESPACE
11 changes: 11 additions & 0 deletions api/test/trace/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@ otel_cc_benchmark(
deps = ["//api"],
)

cc_test(
name = "provider_test",
srcs = [
"provider_test.cc",
],
deps = [
"//api",
"@com_google_googletest//:gtest_main",
],
)

cc_test(
name = "span_id_test",
srcs = [
Expand Down
3 changes: 2 additions & 1 deletion api/test/trace/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
foreach(testname noop_test span_id_test trace_id_test trace_flags_test)
foreach(testname noop_test provider_test span_id_test trace_id_test
trace_flags_test)
add_executable(${testname} "${testname}.cc")
target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT} opentelemetry_api)
Expand Down
31 changes: 31 additions & 0 deletions api/test/trace/provider_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include "opentelemetry/trace/provider.h"
#include "opentelemetry/nostd/shared_ptr.h"

#include <gtest/gtest.h>

using opentelemetry::trace::Provider;
using opentelemetry::trace::Tracer;
using opentelemetry::trace::TracerProvider;

class TestProvider : public TracerProvider
{
opentelemetry::nostd::shared_ptr<Tracer> GetTracer(
opentelemetry::nostd::string_view library_name,
opentelemetry::nostd::string_view library_version) override
{
return opentelemetry::nostd::shared_ptr<Tracer>(nullptr);
}
};

TEST(Provider, GetTracerProviderDefault)
{
auto tf = Provider::GetTracerProvider();
EXPECT_NE(nullptr, tf);
}

TEST(Provider, SetTracerProvider)
{
auto tf = opentelemetry::nostd::shared_ptr<TracerProvider>(new TestProvider());
Provider::SetTracerProvider(tf);
ASSERT_EQ(tf, Provider::GetTracerProvider());
}
7 changes: 7 additions & 0 deletions sdk/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package(default_visibility = ["//visibility:public"])

cc_library(
name = "headers",
hdrs = glob(["include/**/*.h"]),
strip_include_prefix = "include",
)
4 changes: 4 additions & 0 deletions sdk/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
add_subdirectory(src)

if(BUILD_TESTING)
add_subdirectory(test)
endif()
Empty file.
30 changes: 30 additions & 0 deletions sdk/include/opentelemetry/sdk/trace/default_tracer_provider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#pragma once

#include <map>
#include <memory>
#include <string>

#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/trace/tracer.h"
#include "opentelemetry/trace/tracer_provider.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace trace
{
class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider
{
public:
DefaultTracerProvider() noexcept;

opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> GetTracer(
nostd::string_view library_name,
nostd::string_view library_version = "") noexcept override;

private:
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer_;
};
} // namespace trace
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
1 change: 1 addition & 0 deletions sdk/src/trace/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ cc_library(
include_prefix = "src/trace",
deps = [
"//api",
"//sdk:headers",
],
)
2 changes: 1 addition & 1 deletion sdk/src/trace/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
add_library(opentelemetry_trace tracer.cc span.cc)
add_library(opentelemetry_trace default_tracer_provider.cc tracer.cc span.cc)
21 changes: 21 additions & 0 deletions sdk/src/trace/default_tracer_provider.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include "opentelemetry/sdk/trace/default_tracer_provider.h"
#include "src/trace/tracer.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace trace
{
DefaultTracerProvider::DefaultTracerProvider() noexcept
: tracer_(new Tracer(std::unique_ptr<Recorder>(nullptr)))
{}

opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> DefaultTracerProvider::GetTracer(
nostd::string_view library_name,
nostd::string_view library_version) noexcept
{
return tracer_;
}
} // namespace trace
} // namespace sdk
OPENTELEMETRY_END_NAMESPACE
1 change: 1 addition & 0 deletions sdk/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_subdirectory(trace)
Empty file removed sdk/test/TBD
Empty file.
10 changes: 10 additions & 0 deletions sdk/test/trace/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cc_test(
name = "default_tracer_provider",
srcs = [
"default_tracer_provider_test.cc",
],
deps = [
"//sdk/src/trace",
"@com_google_googletest//:gtest_main",
],
)
6 changes: 6 additions & 0 deletions sdk/test/trace/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
foreach(testname default_tracer_provider_test)
add_executable(${testname} "${testname}.cc")
target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT} opentelemetry_trace)
gtest_add_tests(TARGET ${testname} TEST_PREFIX trace. TEST_LIST ${testname})
endforeach()
20 changes: 20 additions & 0 deletions sdk/test/trace/default_tracer_provider_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "opentelemetry/sdk/trace/default_tracer_provider.h"

#include <gtest/gtest.h>

using opentelemetry::sdk::trace::DefaultTracerProvider;

TEST(TracerProvider, GetTracer)
{
auto tf = DefaultTracerProvider();
auto t1 = tf.GetTracer("test");
auto t2 = tf.GetTracer("test");
auto t3 = tf.GetTracer("different", "1.0.0");
ASSERT_NE(nullptr, t1);
ASSERT_NE(nullptr, t2);
ASSERT_NE(nullptr, t3);

// Should return the same instance each time.
ASSERT_EQ(t1, t2);
ASSERT_EQ(t1, t3);
}