diff --git a/.gitignore b/.gitignore index c96a43bd..34a4b8a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ /bazel-* /.build/ /.coverage/ + +dist/ +out/ MODULE.bazel.lock diff --git a/BUILD.bazel b/BUILD.bazel index 90ab5157..92a6ed79 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,125 +1,121 @@ cc_library( name = "dd_trace_cpp", srcs = [ - "src/datadog/base64.cpp", - "src/datadog/cerr_logger.cpp", - "src/datadog/clock.cpp", - "src/datadog/config_manager.cpp", - "src/datadog/collector_response.cpp", -# "src/datadog/curl.cpp", no libcurl - "src/datadog/datadog_agent_config.cpp", - "src/datadog/datadog_agent.cpp", -# "src/datadog/default_http_client_curl.cpp", no libcurl - "src/datadog/default_http_client_null.cpp", - "src/datadog/environment.cpp", - "src/datadog/error.cpp", - "src/datadog/extraction_util.cpp", - "src/datadog/glob.cpp", - "src/datadog/http_client.cpp", - "src/datadog/id_generator.cpp", - "src/datadog/limiter.cpp", - "src/datadog/logger.cpp", - "src/datadog/metrics.cpp", - "src/datadog/msgpack.cpp", - "src/datadog/null_collector.cpp", - "src/datadog/parse_util.cpp", - "src/datadog/platform_util.cpp", - "src/datadog/propagation_style.cpp", - "src/datadog/random.cpp", - "src/datadog/rate.cpp", - "src/datadog/remote_config/remote_config.cpp", - "src/datadog/runtime_id.cpp", - "src/datadog/span.cpp", - "src/datadog/span_data.cpp", - "src/datadog/span_defaults.cpp", - "src/datadog/span_matcher.cpp", - "src/datadog/span_sampler_config.cpp", - "src/datadog/span_sampler.cpp", - "src/datadog/string_util.cpp", - "src/datadog/tag_propagation.cpp", - "src/datadog/tags.cpp", - "src/datadog/threaded_event_scheduler.cpp", - "src/datadog/tracer_config.cpp", - "src/datadog/tracer_telemetry.cpp", - "src/datadog/tracer.cpp", - "src/datadog/trace_id.cpp", - "src/datadog/trace_sampler_config.cpp", - "src/datadog/trace_sampler.cpp", - "src/datadog/trace_segment.cpp", - "src/datadog/version.cpp", - "src/datadog/w3c_propagation.cpp", + "src/datadog/base64.cpp", + "src/datadog/cerr_logger.cpp", + "src/datadog/clock.cpp", + "src/datadog/config_manager.cpp", + "src/datadog/collector_response.cpp", + "src/datadog/datadog_agent_config.cpp", + "src/datadog/datadog_agent.cpp", + "src/datadog/default_http_client_null.cpp", + "src/datadog/environment.cpp", + "src/datadog/error.cpp", + "src/datadog/extraction_util.cpp", + "src/datadog/glob.cpp", + "src/datadog/http_client.cpp", + "src/datadog/id_generator.cpp", + "src/datadog/limiter.cpp", + "src/datadog/logger.cpp", + "src/datadog/metrics.cpp", + "src/datadog/msgpack.cpp", + "src/datadog/parse_util.cpp", + "src/datadog/platform_util.cpp", + "src/datadog/propagation_style.cpp", + "src/datadog/random.cpp", + "src/datadog/rate.cpp", + "src/datadog/remote_config/remote_config.cpp", + "src/datadog/runtime_id.cpp", + "src/datadog/span.cpp", + "src/datadog/span_data.cpp", + "src/datadog/span_defaults.cpp", + "src/datadog/span_matcher.cpp", + "src/datadog/span_sampler_config.cpp", + "src/datadog/span_sampler.cpp", + "src/datadog/string_util.cpp", + "src/datadog/tag_propagation.cpp", + "src/datadog/tags.cpp", + "src/datadog/threaded_event_scheduler.cpp", + "src/datadog/tracer_config.cpp", + "src/datadog/tracer_telemetry.cpp", + "src/datadog/tracer.cpp", + "src/datadog/trace_id.cpp", + "src/datadog/trace_sampler_config.cpp", + "src/datadog/trace_sampler.cpp", + "src/datadog/trace_segment.cpp", + "src/datadog/version.cpp", + "src/datadog/w3c_propagation.cpp", + "src/datadog/base64.h", + "src/datadog/cerr_logger.h", + "src/datadog/config_manager.h", + "src/datadog/collector_response.h", + "src/datadog/datadog_agent.h", + "src/datadog/default_http_client.h", + "src/datadog/extracted_data.h", + "src/datadog/extraction_util.h", + "src/datadog/glob.h", + "src/datadog/hex.h", + "src/datadog/json.hpp", + "src/datadog/limiter.h", + "src/datadog/metrics.h", + "src/datadog/msgpack.h", + "src/datadog/parse_util.h", + "src/datadog/platform_util.h", + "src/datadog/random.h", + "src/datadog/remote_config/remote_config.h", + "src/datadog/sampling_util.h", + "src/datadog/span_data.h", + "src/datadog/span_sampler.h", + "src/datadog/string_util.h", + "src/datadog/tag_propagation.h", + "src/datadog/tags.h", + "src/datadog/threaded_event_scheduler.h", + "src/datadog/tracer_telemetry.h", + "src/datadog/trace_sampler.h", + "src/datadog/w3c_propagation.h", ], hdrs = [ - "src/datadog/base64.h", - "src/datadog/cerr_logger.h", - "src/datadog/config.h", - "src/datadog/clock.h", - "src/datadog/config_manager.h", - "src/datadog/collector.h", - "src/datadog/collector_response.h", -# "src/datadog/curl.h", no libcurl - "src/datadog/datadog_agent_config.h", - "src/datadog/datadog_agent.h", - "src/datadog/default_http_client.h", - "src/datadog/dict_reader.h", - "src/datadog/dict_writer.h", - "src/datadog/environment.h", - "src/datadog/error.h", - "src/datadog/event_scheduler.h", - "src/datadog/expected.h", - "src/datadog/extracted_data.h", - "src/datadog/extraction_util.h", - "src/datadog/glob.h", - "src/datadog/hex.h", - "src/datadog/http_client.h", - "src/datadog/id_generator.h", - "src/datadog/injection_options.h", - "src/datadog/json.hpp", - "src/datadog/json_fwd.hpp", - "src/datadog/limiter.h", - "src/datadog/logger.h", - "src/datadog/metrics.h", - "src/datadog/msgpack.h", - "src/datadog/null_collector.h", - "src/datadog/optional.h", - "src/datadog/parse_util.h", - "src/datadog/platform_util.h", - "src/datadog/propagation_style.h", - "src/datadog/random.h", - "src/datadog/rate.h", - "src/datadog/remote_config/capability.h", - "src/datadog/remote_config/listener.h", - "src/datadog/remote_config/product.h", - "src/datadog/remote_config/remote_config.h", - "src/datadog/runtime_id.h", - "src/datadog/sampling_decision.h", - "src/datadog/sampling_mechanism.h", - "src/datadog/sampling_priority.h", - "src/datadog/sampling_util.h", - "src/datadog/span_config.h", - "src/datadog/span_data.h", - "src/datadog/span_defaults.h", - "src/datadog/span.h", - "src/datadog/span_matcher.h", - "src/datadog/span_sampler_config.h", - "src/datadog/span_sampler.h", - "src/datadog/string_util.h", - "src/datadog/string_view.h", - "src/datadog/tag_propagation.h", - "src/datadog/tags.h", - "src/datadog/threaded_event_scheduler.h", - "src/datadog/tracer_config.h", - "src/datadog/tracer_signature.h", - "src/datadog/tracer_telemetry.h", - "src/datadog/tracer.h", - "src/datadog/trace_id.h", - "src/datadog/trace_sampler_config.h", - "src/datadog/trace_sampler.h", - "src/datadog/trace_segment.h", - "src/datadog/version.h", - "src/datadog/w3c_propagation.h", + "include/datadog/clock.h", + "include/datadog/collector.h", + "include/datadog/config.h", + "include/datadog/datadog_agent_config.h", + "include/datadog/dict_reader.h", + "include/datadog/dict_writer.h", + "include/datadog/error.h", + "include/datadog/environment.h", + "include/datadog/event_scheduler.h", + "include/datadog/expected.h", + "include/datadog/http_client.h", + "include/datadog/id_generator.h", + "include/datadog/injection_options.h", + "include/datadog/json_fwd.hpp", + "include/datadog/logger.h", + "include/datadog/null_collector.h", + "include/datadog/optional.h", + "include/datadog/propagation_style.h", + "include/datadog/rate.h", + "include/datadog/runtime_id.h", + "include/datadog/sampling_decision.h", + "include/datadog/sampling_mechanism.h", + "include/datadog/sampling_priority.h", + "include/datadog/span.h", + "include/datadog/span_config.h", + "include/datadog/span_defaults.h", + "include/datadog/span_matcher.h", + "include/datadog/span_sampler_config.h", + "include/datadog/string_view.h", + "include/datadog/tracer.h", + "include/datadog/tracer_config.h", + "include/datadog/tracer_signature.h", + "include/datadog/trace_id.h", + "include/datadog/trace_sampler_config.h", + "include/datadog/trace_segment.h", + "include/datadog/version.h", + "include/datadog/remote_config/capability.h", + "include/datadog/remote_config/listener.h", + "include/datadog/remote_config/product.h", ], - strip_include_prefix = "src/", + strip_include_prefix = "include/", copts = ["-Isrc/datadog"], visibility = ["//visibility:public"], deps = [ diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fd739bd..3656e093 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ endif () # Linking this library requires threads. find_package(Threads REQUIRED) include(cmake/deps/curl.cmake) +include(cmake/deps/json.cmake) include(cmake/utils.cmake) file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog/version.cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )") @@ -77,7 +78,14 @@ endif () add_library(dd_trace_cpp-objects OBJECT) add_library(dd_trace::obj ALIAS dd_trace_cpp-objects) +file(GLOB_RECURSE public_header_files ${CMAKE_SOURCE_DIR}/include/*.h) + target_sources(dd_trace_cpp-objects + PUBLIC + FILE_SET public_headers + TYPE HEADERS + BASE_DIRS include + FILES ${public_header_files} PRIVATE src/datadog/base64.cpp src/datadog/cerr_logger.cpp @@ -86,7 +94,6 @@ target_sources(dd_trace_cpp-objects src/datadog/collector_response.cpp src/datadog/datadog_agent_config.cpp src/datadog/datadog_agent.cpp -# src/datadog/default_http_client_null.cpp use libcurl src/datadog/environment.cpp src/datadog/error.cpp src/datadog/extraction_util.cpp @@ -97,12 +104,12 @@ target_sources(dd_trace_cpp-objects src/datadog/logger.cpp src/datadog/metrics.cpp src/datadog/msgpack.cpp - src/datadog/null_collector.cpp src/datadog/parse_util.cpp src/datadog/platform_util.cpp src/datadog/propagation_style.cpp src/datadog/random.cpp src/datadog/rate.cpp + src/datadog/remote_config/product.cpp src/datadog/remote_config/remote_config.cpp src/datadog/runtime_id.cpp src/datadog/span.cpp @@ -126,88 +133,14 @@ target_sources(dd_trace_cpp-objects src/datadog/w3c_propagation.cpp ) -# This library's public headers are just its source headers. -target_sources(dd_trace_cpp-objects PUBLIC - FILE_SET public_headers - TYPE HEADERS - BASE_DIRS src/ - FILES - src/datadog/base64.h - src/datadog/config.h - src/datadog/cerr_logger.h - src/datadog/clock.h - src/datadog/config_manager.h - src/datadog/collector.h - src/datadog/collector_response.h - # src/datadog/curl.h except for curl.h - src/datadog/datadog_agent_config.h - src/datadog/datadog_agent.h - src/datadog/default_http_client.h - src/datadog/dict_reader.h - src/datadog/dict_writer.h - src/datadog/environment.h - src/datadog/error.h - src/datadog/event_scheduler.h - src/datadog/expected.h - src/datadog/extracted_data.h - src/datadog/extraction_util.h - src/datadog/glob.h - src/datadog/hex.h - src/datadog/http_client.h - src/datadog/id_generator.h - src/datadog/injection_options.h - src/datadog/json_fwd.hpp - src/datadog/json.hpp - src/datadog/limiter.h - src/datadog/logger.h - src/datadog/metrics.h - src/datadog/msgpack.h - src/datadog/null_collector.h - src/datadog/optional.h - src/datadog/parse_util.h - src/datadog/platform_util.h - src/datadog/propagation_style.h - src/datadog/random.h - src/datadog/rate.h - src/datadog/remote_config/remote_config.h - src/datadog/remote_config/capability.h - src/datadog/remote_config/listener.h - src/datadog/runtime_id.h - src/datadog/sampling_decision.h - src/datadog/sampling_mechanism.h - src/datadog/sampling_priority.h - src/datadog/sampling_util.h - src/datadog/span_config.h - src/datadog/span_data.h - src/datadog/span_defaults.h - src/datadog/span.h - src/datadog/span_matcher.h - src/datadog/span_sampler_config.h - src/datadog/span_sampler.h - src/datadog/string_util.h - src/datadog/string_view.h - src/datadog/tag_propagation.h - src/datadog/tags.h - src/datadog/threaded_event_scheduler.h - src/datadog/tracer_config.h - src/datadog/tracer_signature.h - src/datadog/tracer_telemetry.h - src/datadog/tracer.h - src/datadog/trace_id.h - src/datadog/trace_sampler_config.h - src/datadog/trace_sampler.h - src/datadog/trace_segment.h - src/datadog/version.h - src/datadog/w3c_propagation.h -) - # Headers location are different depending of whether we are building # or installing the library. target_include_directories(dd_trace_cpp-objects PUBLIC - $ - $ - $ + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog ) target_link_libraries(dd_trace_cpp-objects @@ -252,7 +185,6 @@ if (BUILD_SHARED_LIBS) FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - # For Windows RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} ) endif () @@ -290,7 +222,6 @@ if (BUILD_STATIC_LIBS) FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - # For Windows RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} ) endif () diff --git a/benchmark/benchmark.cpp b/benchmark/benchmark.cpp index 12d494e5..6387260a 100644 --- a/benchmark/benchmark.cpp +++ b/benchmark/benchmark.cpp @@ -33,8 +33,8 @@ struct SerializingCollector : public dd::Collector { return dd::msgpack_encode(buffer, spans); } - nlohmann::json config_json() const override { - return nlohmann::json::object({{"type", "SerializingCollector"}}); + std::string config() const override { + return nlohmann::json::object({{"type", "SerializingCollector"}}).dump(); } }; diff --git a/bin/check-format b/bin/check-format index ae69d476..d8131b23 100755 --- a/bin/check-format +++ b/bin/check-format @@ -1,4 +1,4 @@ #!/bin/sh -find src/ examples/ test/ -type f \( -name '*.h' -o -name '*.cpp' \) -print0 | \ +find include/ src/ examples/ test/ -type f \( -name '*.h' -o -name '*.cpp' \) -print0 | \ xargs -0 clang-format-14 --style=file --dry-run -Werror diff --git a/bin/format b/bin/format index c1c6a2ca..652e1678 100755 --- a/bin/format +++ b/bin/format @@ -14,7 +14,7 @@ formatter=clang-format-$version formatter_options="--style=file -i $*" find_sources() { - find src/ examples/ test/ fuzz/ -type f \( -name '*.h' -o -name '*.cpp' \) "$@" + find include/ src/ examples/ test/ fuzz/ -type f \( -name '*.h' -o -name '*.cpp' \) "$@" } # If the correct version of clang-format is installed, then use it and quit. diff --git a/cmake/deps/json.cmake b/cmake/deps/json.cmake new file mode 100644 index 00000000..dc763e6b --- /dev/null +++ b/cmake/deps/json.cmake @@ -0,0 +1,10 @@ +include(FetchContent) + +set(JSON_BuildTests OFF) +set(JSON_Install OFF) + +FetchContent_Declare(json + URL https://github.com/nlohmann/json/releases/download/v3.11.2/json.tar.xz +) + +FetchContent_MakeAvailable(json) diff --git a/examples/hasher/hasher.cpp b/examples/hasher/hasher.cpp index d030a832..109a845b 100644 --- a/examples/hasher/hasher.cpp +++ b/examples/hasher/hasher.cpp @@ -11,7 +11,6 @@ // structure. #include -#include #include #include diff --git a/examples/http-server/server/server.cpp b/examples/http-server/server/server.cpp index 2fbf85ec..1333c5d2 100644 --- a/examples/http-server/server/server.cpp +++ b/examples/http-server/server/server.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include diff --git a/src/datadog/clock.h b/include/datadog/clock.h similarity index 100% rename from src/datadog/clock.h rename to include/datadog/clock.h diff --git a/src/datadog/collector.h b/include/datadog/collector.h similarity index 94% rename from src/datadog/collector.h rename to include/datadog/collector.h index 64de43c0..96f9e64d 100644 --- a/src/datadog/collector.h +++ b/include/datadog/collector.h @@ -14,8 +14,6 @@ #include #include "expected.h" -#include "json_fwd.hpp" -#include "optional.h" namespace datadog { namespace tracing { @@ -40,7 +38,7 @@ class Collector { // "datadog::tracing::DatadogAgent". // - "config" is an object containing this object's configuration. "config" // may be omitted if the derived class has no configuration. - virtual nlohmann::json config_json() const = 0; + virtual std::string config() const = 0; virtual ~Collector() {} }; diff --git a/src/datadog/config.h b/include/datadog/config.h similarity index 100% rename from src/datadog/config.h rename to include/datadog/config.h diff --git a/src/datadog/datadog_agent_config.h b/include/datadog/datadog_agent_config.h similarity index 99% rename from src/datadog/datadog_agent_config.h rename to include/datadog/datadog_agent_config.h index 39c2a313..b5859132 100644 --- a/src/datadog/datadog_agent_config.h +++ b/include/datadog/datadog_agent_config.h @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include "clock.h" #include "config.h" diff --git a/src/datadog/dict_reader.h b/include/datadog/dict_reader.h similarity index 100% rename from src/datadog/dict_reader.h rename to include/datadog/dict_reader.h diff --git a/src/datadog/dict_writer.h b/include/datadog/dict_writer.h similarity index 100% rename from src/datadog/dict_writer.h rename to include/datadog/dict_writer.h diff --git a/src/datadog/environment.h b/include/datadog/environment.h similarity index 97% rename from src/datadog/environment.h rename to include/datadog/environment.h index 3669837a..30c3b346 100644 --- a/src/datadog/environment.h +++ b/include/datadog/environment.h @@ -14,9 +14,10 @@ // // `lookup` retrieves the value of `Variable` in the environment. +#include +#include + #include "json_fwd.hpp" -#include "optional.h" -#include "string_view.h" namespace datadog { namespace tracing { diff --git a/src/datadog/error.h b/include/datadog/error.h similarity index 100% rename from src/datadog/error.h rename to include/datadog/error.h diff --git a/src/datadog/event_scheduler.h b/include/datadog/event_scheduler.h similarity index 93% rename from src/datadog/event_scheduler.h rename to include/datadog/event_scheduler.h index dc23aae0..e8c7051a 100644 --- a/src/datadog/event_scheduler.h +++ b/include/datadog/event_scheduler.h @@ -11,9 +11,7 @@ #include #include - -#include "error.h" -#include "json_fwd.hpp" +#include namespace datadog { namespace tracing { @@ -37,7 +35,7 @@ class EventScheduler { // "datadog::tracing::ThreadedEventScheduler". // - "config" is an object containing this object's configuration. "config" // may be omitted if the derived class has no configuration. - virtual nlohmann::json config_json() const = 0; + virtual std::string config() const = 0; virtual ~EventScheduler() = default; }; diff --git a/src/datadog/expected.h b/include/datadog/expected.h similarity index 100% rename from src/datadog/expected.h rename to include/datadog/expected.h diff --git a/src/datadog/http_client.h b/include/datadog/http_client.h similarity index 96% rename from src/datadog/http_client.h rename to include/datadog/http_client.h index 8a5a9e15..d1349f5c 100644 --- a/src/datadog/http_client.h +++ b/include/datadog/http_client.h @@ -13,8 +13,6 @@ #include "error.h" #include "expected.h" -#include "json_fwd.hpp" -#include "optional.h" namespace datadog { namespace tracing { @@ -63,7 +61,7 @@ class HTTPClient { // "datadog::tracing::Curl". // - "config" is an object containing this object's configuration. "config" // may be omitted if the derived class has no configuration. - virtual nlohmann::json config_json() const = 0; + virtual std::string config() const = 0; virtual ~HTTPClient() = default; }; diff --git a/src/datadog/id_generator.h b/include/datadog/id_generator.h similarity index 100% rename from src/datadog/id_generator.h rename to include/datadog/id_generator.h diff --git a/src/datadog/injection_options.h b/include/datadog/injection_options.h similarity index 100% rename from src/datadog/injection_options.h rename to include/datadog/injection_options.h diff --git a/src/datadog/json_fwd.hpp b/include/datadog/json_fwd.hpp similarity index 100% rename from src/datadog/json_fwd.hpp rename to include/datadog/json_fwd.hpp diff --git a/src/datadog/logger.h b/include/datadog/logger.h similarity index 100% rename from src/datadog/logger.h rename to include/datadog/logger.h diff --git a/src/datadog/null_collector.h b/include/datadog/null_collector.h similarity index 74% rename from src/datadog/null_collector.h rename to include/datadog/null_collector.h index bec1f12d..953299b5 100644 --- a/src/datadog/null_collector.h +++ b/include/datadog/null_collector.h @@ -16,7 +16,14 @@ class NullCollector : public Collector { return {}; } - nlohmann::json config_json() const override; + std::string config() const override { + // clang-format off + return R"({ + {"type", "datadog::tracing::NullCollector"}, + {"config", {}} + })"; + // clang-format on + }; }; } // namespace tracing diff --git a/src/datadog/optional.h b/include/datadog/optional.h similarity index 100% rename from src/datadog/optional.h rename to include/datadog/optional.h diff --git a/src/datadog/propagation_style.h b/include/datadog/propagation_style.h similarity index 85% rename from src/datadog/propagation_style.h rename to include/datadog/propagation_style.h index 47958169..e16a994d 100644 --- a/src/datadog/propagation_style.h +++ b/include/datadog/propagation_style.h @@ -5,9 +5,6 @@ // one `std::vector` for extraction and another for injection. // See `tracer_config.h`. -#include - -#include "json_fwd.hpp" #include "optional.h" #include "string_view.h" @@ -28,8 +25,6 @@ enum class PropagationStyle { }; StringView to_string_view(PropagationStyle style); -nlohmann::json to_json(PropagationStyle style); -nlohmann::json to_json(const std::vector& styles); Optional parse_propagation_style(StringView text); diff --git a/src/datadog/rate.h b/include/datadog/rate.h similarity index 97% rename from src/datadog/rate.h rename to include/datadog/rate.h index f72b407b..caa90050 100644 --- a/src/datadog/rate.h +++ b/include/datadog/rate.h @@ -8,8 +8,6 @@ // zero value. The static member functions `Rate::one` and `Rate::zero` are // provided for convenience. -#include - #include "expected.h" namespace datadog { diff --git a/src/datadog/remote_config/capability.h b/include/datadog/remote_config/capability.h similarity index 100% rename from src/datadog/remote_config/capability.h rename to include/datadog/remote_config/capability.h diff --git a/src/datadog/remote_config/listener.h b/include/datadog/remote_config/listener.h similarity index 97% rename from src/datadog/remote_config/listener.h rename to include/datadog/remote_config/listener.h index 2a29e26b..bdbebd4f 100644 --- a/src/datadog/remote_config/listener.h +++ b/include/datadog/remote_config/listener.h @@ -3,7 +3,7 @@ #include #include "capability.h" -#include "optional.h" +#include "datadog/optional.h" #include "product.h" namespace datadog { diff --git a/include/datadog/remote_config/product.h b/include/datadog/remote_config/product.h new file mode 100644 index 00000000..be284753 --- /dev/null +++ b/include/datadog/remote_config/product.h @@ -0,0 +1,51 @@ +#pragma once + +#include +#include +#include + +#include "datadog/string_view.h" + +namespace datadog { +namespace remote_config { + +// Type alias for product flags. +// +// Usage: +// +// using namespace datadog::remote_config::product; +// Products p = AGENT_CONFIG | APM_TRACING; +using Products = uint64_t; + +// List of remote configuration product built to support flag arithmetic +#define DD_LIST_REMOTE_CONFIG_PRODUCTS \ + X(UNKNOWN, 0) \ + X(AGENT_CONFIG, 1) \ + X(AGENT_TASK, 2) \ + X(APM_TRACING, 3) \ + X(LIVE_DEBUGGING, 4) \ + X(LIVE_DEBUGGING_SYMBOL_DB, 5) \ + X(ASM, 6) \ + X(ASM_DD, 7) \ + X(ASM_DATA, 8) \ + X(ASM_FEATURES, 9) + +namespace product { + +enum Flag : Products { +#define X(NAME, ID) NAME = 1 << ID, + DD_LIST_REMOTE_CONFIG_PRODUCTS +#undef X +}; + +} // namespace product + +tracing::StringView to_string_view(product::Flag product); + +product::Flag parse_product(tracing::StringView sv); + +void visit_products(Products products, + std::function on_product); + +} // namespace remote_config +} // namespace datadog diff --git a/src/datadog/runtime_id.h b/include/datadog/runtime_id.h similarity index 100% rename from src/datadog/runtime_id.h rename to include/datadog/runtime_id.h diff --git a/src/datadog/sampling_decision.h b/include/datadog/sampling_decision.h similarity index 98% rename from src/datadog/sampling_decision.h rename to include/datadog/sampling_decision.h index 9503b0d5..cfccbf74 100644 --- a/src/datadog/sampling_decision.h +++ b/include/datadog/sampling_decision.h @@ -6,7 +6,6 @@ #include "optional.h" #include "rate.h" -#include "sampling_mechanism.h" namespace datadog { namespace tracing { diff --git a/src/datadog/sampling_mechanism.h b/include/datadog/sampling_mechanism.h similarity index 100% rename from src/datadog/sampling_mechanism.h rename to include/datadog/sampling_mechanism.h diff --git a/src/datadog/sampling_priority.h b/include/datadog/sampling_priority.h similarity index 97% rename from src/datadog/sampling_priority.h rename to include/datadog/sampling_priority.h index b597dd9b..af6ae49f 100644 --- a/src/datadog/sampling_priority.h +++ b/include/datadog/sampling_priority.h @@ -11,8 +11,6 @@ // value does not denote any relationship among the different kinds of sampling // decisions. -#include "sampling_mechanism.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/span.h b/include/datadog/span.h similarity index 99% rename from src/datadog/span.h rename to include/datadog/span.h index 803658d2..1e873096 100644 --- a/src/datadog/span.h +++ b/include/datadog/span.h @@ -46,7 +46,6 @@ #include #include "clock.h" -#include "error.h" #include "optional.h" #include "string_view.h" #include "trace_id.h" diff --git a/src/datadog/span_config.h b/include/datadog/span_config.h similarity index 98% rename from src/datadog/span_config.h rename to include/datadog/span_config.h index 3fb0fc1d..a1dc309d 100644 --- a/src/datadog/span_config.h +++ b/include/datadog/span_config.h @@ -15,7 +15,6 @@ #include #include -#include #include "clock.h" #include "optional.h" diff --git a/src/datadog/span_defaults.h b/include/datadog/span_defaults.h similarity index 100% rename from src/datadog/span_defaults.h rename to include/datadog/span_defaults.h diff --git a/src/datadog/span_matcher.h b/include/datadog/span_matcher.h similarity index 100% rename from src/datadog/span_matcher.h rename to include/datadog/span_matcher.h diff --git a/src/datadog/span_sampler_config.h b/include/datadog/span_sampler_config.h similarity index 94% rename from src/datadog/span_sampler_config.h rename to include/datadog/span_sampler_config.h index 7061c410..d23228bd 100644 --- a/src/datadog/span_sampler_config.h +++ b/include/datadog/span_sampler_config.h @@ -12,7 +12,6 @@ #include "config.h" #include "expected.h" -#include "json_fwd.hpp" #include "logger.h" #include "optional.h" #include "rate.h" @@ -56,7 +55,7 @@ class FinalizedSpanSamplerConfig { Expected finalize_config(const SpanSamplerConfig&, Logger&); -nlohmann::json to_json(const FinalizedSpanSamplerConfig::Rule&); +std::string to_string(const FinalizedSpanSamplerConfig::Rule&); } // namespace tracing } // namespace datadog diff --git a/src/datadog/string_view.h b/include/datadog/string_view.h similarity index 100% rename from src/datadog/string_view.h rename to include/datadog/string_view.h diff --git a/src/datadog/trace_id.h b/include/datadog/trace_id.h similarity index 100% rename from src/datadog/trace_id.h rename to include/datadog/trace_id.h diff --git a/src/datadog/trace_sampler_config.h b/include/datadog/trace_sampler_config.h similarity index 98% rename from src/datadog/trace_sampler_config.h rename to include/datadog/trace_sampler_config.h index 5dae211a..e18f86b9 100644 --- a/src/datadog/trace_sampler_config.h +++ b/include/datadog/trace_sampler_config.h @@ -12,7 +12,6 @@ #include "config.h" #include "expected.h" -#include "json_fwd.hpp" #include "optional.h" #include "rate.h" #include "sampling_mechanism.h" diff --git a/src/datadog/trace_segment.h b/include/datadog/trace_segment.h similarity index 98% rename from src/datadog/trace_segment.h rename to include/datadog/trace_segment.h index 392d5c7d..39eff57b 100644 --- a/src/datadog/trace_segment.h +++ b/include/datadog/trace_segment.h @@ -32,14 +32,12 @@ #include #include -#include "config_manager.h" #include "expected.h" -#include "metrics.h" #include "optional.h" #include "propagation_style.h" +#include "runtime_id.h" #include "sampling_decision.h" #include "sampling_priority.h" -#include "tracer_telemetry.h" namespace datadog { namespace tracing { @@ -53,6 +51,8 @@ struct SpanData; struct SpanDefaults; class SpanSampler; class TraceSampler; +class ConfigManager; +class TracerTelemetry; class TraceSegment { mutable std::mutex mutex_; diff --git a/src/datadog/tracer.h b/include/datadog/tracer.h similarity index 95% rename from src/datadog/tracer.h rename to include/datadog/tracer.h index 4164d981..1e3e6650 100644 --- a/src/datadog/tracer.h +++ b/include/datadog/tracer.h @@ -14,24 +14,23 @@ #include #include "clock.h" -#include "config_manager.h" -#include "error.h" #include "expected.h" #include "id_generator.h" -#include "json_fwd.hpp" #include "optional.h" #include "span.h" #include "tracer_config.h" #include "tracer_signature.h" -#include "tracer_telemetry.h" namespace datadog { namespace tracing { +class TracerTelemetry; +class ConfigManager; class DictReader; struct SpanConfig; class TraceSampler; class SpanSampler; +class IDGenerator; class Tracer { std::shared_ptr logger_; @@ -82,7 +81,7 @@ class Tracer { // Return a JSON object describing this Tracer's configuration. It is the same // JSON object that was logged when this Tracer was created. - nlohmann::json config_json() const; + std::string config() const; }; } // namespace tracing diff --git a/src/datadog/tracer_config.h b/include/datadog/tracer_config.h similarity index 99% rename from src/datadog/tracer_config.h rename to include/datadog/tracer_config.h index 49cf6ab2..3709b936 100644 --- a/src/datadog/tracer_config.h +++ b/include/datadog/tracer_config.h @@ -10,9 +10,7 @@ #include #include "clock.h" -#include "config.h" #include "datadog_agent_config.h" -#include "error.h" #include "expected.h" #include "propagation_style.h" #include "runtime_id.h" diff --git a/src/datadog/tracer_signature.h b/include/datadog/tracer_signature.h similarity index 100% rename from src/datadog/tracer_signature.h rename to include/datadog/tracer_signature.h diff --git a/src/datadog/version.h b/include/datadog/version.h similarity index 100% rename from src/datadog/version.h rename to include/datadog/version.h diff --git a/src/datadog/base64.h b/src/datadog/base64.h index f2539872..aa56c925 100644 --- a/src/datadog/base64.h +++ b/src/datadog/base64.h @@ -1,8 +1,8 @@ #pragma once -#include +#include -#include "string_view.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/cerr_logger.h b/src/datadog/cerr_logger.h index 7abd722e..1b434681 100644 --- a/src/datadog/cerr_logger.h +++ b/src/datadog/cerr_logger.h @@ -7,11 +7,11 @@ // `CerrLogger` is the default logger used by `Tracer` unless otherwise // configured in `TracerConfig`. +#include + #include #include -#include "logger.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/clock.cpp b/src/datadog/clock.cpp index 819740cb..b74a5b72 100644 --- a/src/datadog/clock.cpp +++ b/src/datadog/clock.cpp @@ -1,4 +1,4 @@ -#include "clock.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/collector_response.h b/src/datadog/collector_response.h index 7d72e8d5..79af2f09 100644 --- a/src/datadog/collector_response.h +++ b/src/datadog/collector_response.h @@ -13,12 +13,12 @@ // See `TraceSampler::handle_collector_response` in `trace_sampler.h` for more // information. +#include +#include + #include #include -#include "rate.h" -#include "string_view.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/config_manager.h b/src/datadog/config_manager.h index 6c59fa74..280fb971 100644 --- a/src/datadog/config_manager.h +++ b/src/datadog/config_manager.h @@ -5,14 +5,15 @@ // It utilizes a mutex to ensure thread safety when updating or accessing // the configuration. +#include +#include +#include +#include +#include + #include -#include "clock.h" #include "json.hpp" -#include "optional.h" -#include "remote_config/listener.h" -#include "span_defaults.h" -#include "tracer_config.h" #include "tracer_telemetry.h" namespace datadog { diff --git a/src/datadog/curl.cpp b/src/datadog/curl.cpp index 0f828bc1..33203dcb 100644 --- a/src/datadog/curl.cpp +++ b/src/datadog/curl.cpp @@ -1,5 +1,11 @@ #include "curl.h" +#include +#include +#include +#include +#include + #include #include #include @@ -13,14 +19,7 @@ #include #include -#include "clock.h" -#include "dict_reader.h" -#include "dict_writer.h" -#include "http_client.h" -#include "json.hpp" -#include "logger.h" #include "string_util.h" -#include "string_view.h" namespace datadog { namespace tracing { @@ -272,8 +271,8 @@ void Curl::drain(std::chrono::steady_clock::time_point deadline) { impl_->drain(deadline); } -nlohmann::json Curl::config_json() const { - return nlohmann::json::object({{"type", "datadog::tracing::Curl"}}); +std::string Curl::config() const { + return nlohmann::json::object({{"type", "datadog::tracing::Curl"}}).dump(); } CurlImpl::CurlImpl(const std::shared_ptr &logger, const Clock &clock, diff --git a/src/datadog/curl.h b/src/datadog/curl.h index 6c1ef377..5c684990 100644 --- a/src/datadog/curl.h +++ b/src/datadog/curl.h @@ -10,6 +10,8 @@ // [1]: https://curl.se/libcurl/ #include +#include +#include #include #include @@ -17,9 +19,7 @@ #include #include -#include "clock.h" -#include "http_client.h" -#include "json_fwd.hpp" +#include "json.hpp" namespace datadog { namespace tracing { @@ -103,7 +103,7 @@ class Curl : public HTTPClient { void drain(std::chrono::steady_clock::time_point deadline) override; - nlohmann::json config_json() const override; + std::string config() const override; }; } // namespace tracing diff --git a/src/datadog/datadog_agent.cpp b/src/datadog/datadog_agent.cpp index ad15ec78..f841d172 100644 --- a/src/datadog/datadog_agent.cpp +++ b/src/datadog/datadog_agent.cpp @@ -1,5 +1,12 @@ #include "datadog_agent.h" +#include +#include +#include +#include +#include +#include + #include #include #include @@ -8,16 +15,10 @@ #include #include "collector_response.h" -#include "datadog_agent_config.h" -#include "dict_writer.h" -#include "http_client.h" #include "json.hpp" -#include "logger.h" #include "msgpack.h" #include "span_data.h" -#include "string_view.h" #include "trace_sampler.h" -#include "tracer.h" namespace datadog { namespace tracing { @@ -242,7 +243,7 @@ Expected DatadogAgent::send( return nullopt; } -nlohmann::json DatadogAgent::config_json() const { +std::string DatadogAgent::config() const { // clang-format off return nlohmann::json::object({ {"type", "datadog::tracing::DatadogAgent"}, @@ -253,10 +254,10 @@ nlohmann::json DatadogAgent::config_json() const { {"flush_interval_milliseconds", std::chrono::duration_cast(flush_interval_).count() }, {"request_timeout_milliseconds", std::chrono::duration_cast(request_timeout_).count() }, {"shutdown_timeout_milliseconds", std::chrono::duration_cast(shutdown_timeout_).count() }, - {"http_client", http_client_->config_json()}, - {"event_scheduler", event_scheduler_->config_json()}, + {"http_client", http_client_->config()}, + {"event_scheduler", event_scheduler_->config()}, })}, - }); + }).dump(); // clang-format on } diff --git a/src/datadog/datadog_agent.h b/src/datadog/datadog_agent.h index 6c4d1ded..3f013d94 100644 --- a/src/datadog/datadog_agent.h +++ b/src/datadog/datadog_agent.h @@ -6,18 +6,19 @@ // `DatadogAgent` is configured by `DatadogAgentConfig`. See // `datadog_agent_config.h`. +#include +#include +#include +#include +#include + #include #include #include -#include "clock.h" -#include "collector.h" #include "config_manager.h" -#include "event_scheduler.h" -#include "http_client.h" #include "metrics.h" #include "remote_config/remote_config.h" -#include "tracer_signature.h" #include "tracer_telemetry.h" namespace datadog { @@ -82,7 +83,7 @@ class DatadogAgent : public Collector { void get_and_apply_remote_configuration_updates(); - nlohmann::json config_json() const override; + std::string config() const override; }; } // namespace tracing diff --git a/src/datadog/datadog_agent_config.cpp b/src/datadog/datadog_agent_config.cpp index f1d382f9..f7cdd646 100644 --- a/src/datadog/datadog_agent_config.cpp +++ b/src/datadog/datadog_agent_config.cpp @@ -1,11 +1,11 @@ -#include "datadog_agent_config.h" +#include +#include #include #include #include #include "default_http_client.h" -#include "environment.h" #include "parse_util.h" #include "threaded_event_scheduler.h" diff --git a/src/datadog/default_http_client.h b/src/datadog/default_http_client.h index cfeda7e5..f0b859b6 100644 --- a/src/datadog/default_http_client.h +++ b/src/datadog/default_http_client.h @@ -7,9 +7,9 @@ // `default_http_client` is implemented in either `default_http_client_curl.cpp` // or `default_http_client_null.cpp`. -#include +#include -#include "clock.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/environment.cpp b/src/datadog/environment.cpp index 780bb42b..318a1b6f 100644 --- a/src/datadog/environment.cpp +++ b/src/datadog/environment.cpp @@ -1,4 +1,4 @@ -#include "environment.h" +#include #include diff --git a/src/datadog/error.cpp b/src/datadog/error.cpp index 844d7140..8aa8d2f7 100644 --- a/src/datadog/error.cpp +++ b/src/datadog/error.cpp @@ -1,7 +1,6 @@ -#include "error.h" +#include #include -#include namespace datadog { namespace tracing { diff --git a/src/datadog/extracted_data.h b/src/datadog/extracted_data.h index a28b0c16..ef407f77 100644 --- a/src/datadog/extracted_data.h +++ b/src/datadog/extracted_data.h @@ -3,15 +3,15 @@ // This component provides a `struct`, `ExtractedData`, that stores fields // extracted from trace context. It's an implementation detail of this library. +#include +#include +#include + #include #include #include #include -#include "optional.h" -#include "propagation_style.h" -#include "trace_id.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/extraction_util.cpp b/src/datadog/extraction_util.cpp index 63cc9623..cde533bc 100644 --- a/src/datadog/extraction_util.cpp +++ b/src/datadog/extraction_util.cpp @@ -1,5 +1,7 @@ #include "extraction_util.h" +#include + #include #include #include @@ -8,7 +10,6 @@ #include "extracted_data.h" #include "hex.h" -#include "logger.h" #include "parse_util.h" #include "string_util.h" #include "tag_propagation.h" diff --git a/src/datadog/extraction_util.h b/src/datadog/extraction_util.h index a4eacf49..e99af0fa 100644 --- a/src/datadog/extraction_util.h +++ b/src/datadog/extraction_util.h @@ -3,17 +3,17 @@ // This component provides facilities for extracting trace context from a // `DictReader`. It is used by `Tracer::extract_trace`. See `tracer.cpp`. +#include +#include +#include +#include + #include #include #include #include #include -#include "dict_reader.h" -#include "expected.h" -#include "optional.h" -#include "propagation_style.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/glob.cpp b/src/datadog/glob.cpp index 201c9b34..eaac6617 100644 --- a/src/datadog/glob.cpp +++ b/src/datadog/glob.cpp @@ -1,7 +1,6 @@ #include "glob.h" #include -#include namespace datadog { namespace tracing { diff --git a/src/datadog/glob.h b/src/datadog/glob.h index 77dcb574..dbb5f396 100644 --- a/src/datadog/glob.h +++ b/src/datadog/glob.h @@ -11,7 +11,7 @@ // The patterns are here called "glob patterns," though they are different from // the patterns used in Unix shells. -#include "string_view.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/http_client.cpp b/src/datadog/http_client.cpp index 07d72476..25d3cad6 100644 --- a/src/datadog/http_client.cpp +++ b/src/datadog/http_client.cpp @@ -1,9 +1,7 @@ -#include "http_client.h" +#include #include -#include "string_util.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/id_generator.cpp b/src/datadog/id_generator.cpp index eb3b517c..90ee9e88 100644 --- a/src/datadog/id_generator.cpp +++ b/src/datadog/id_generator.cpp @@ -1,4 +1,4 @@ -#include "id_generator.h" +#include #include #include diff --git a/src/datadog/limiter.h b/src/datadog/limiter.h index 16a3b821..ddddb5ef 100644 --- a/src/datadog/limiter.h +++ b/src/datadog/limiter.h @@ -8,10 +8,10 @@ // // [1]: https://en.wikipedia.org/wiki/Token_bucket -#include +#include +#include -#include "clock.h" -#include "rate.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/logger.cpp b/src/datadog/logger.cpp index db459d60..5eef9d82 100644 --- a/src/datadog/logger.cpp +++ b/src/datadog/logger.cpp @@ -1,6 +1,5 @@ -#include "logger.h" - -#include "error.h" +#include +#include namespace datadog { namespace tracing { diff --git a/src/datadog/msgpack.cpp b/src/datadog/msgpack.cpp index dce353f5..dfda7167 100644 --- a/src/datadog/msgpack.cpp +++ b/src/datadog/msgpack.cpp @@ -1,12 +1,12 @@ #include "msgpack.h" +#include + #include #include #include #include -#include "error.h" - namespace datadog { namespace tracing { namespace msgpack { diff --git a/src/datadog/msgpack.h b/src/datadog/msgpack.h index 52b8a919..4a8447cf 100644 --- a/src/datadog/msgpack.h +++ b/src/datadog/msgpack.h @@ -11,15 +11,14 @@ // // [1]: https://msgpack.org/index.html -#include +#include +#include + #include #include #include #include -#include "expected.h" -#include "string_view.h" - namespace datadog { namespace tracing { namespace msgpack { diff --git a/src/datadog/null_collector.cpp b/src/datadog/null_collector.cpp deleted file mode 100644 index d86ef2db..00000000 --- a/src/datadog/null_collector.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "null_collector.h" - -#include "json.hpp" - -namespace datadog { -namespace tracing { - -nlohmann::json NullCollector::config_json() const { - // clang-format off - return nlohmann::json::object({ - {"type", "datadog::tracing::NullCollector"}, - {"config", nlohmann::json::object({})}, - }); - // clang-format on -} - -} // namespace tracing -} // namespace datadog diff --git a/src/datadog/parse_util.cpp b/src/datadog/parse_util.cpp index b444cd8d..8566d241 100644 --- a/src/datadog/parse_util.cpp +++ b/src/datadog/parse_util.cpp @@ -1,5 +1,7 @@ #include "parse_util.h" +#include + #include #include #include @@ -8,7 +10,6 @@ #include #include -#include "error.h" #include "string_util.h" namespace datadog { diff --git a/src/datadog/parse_util.h b/src/datadog/parse_util.h index c8e4e83c..c1dbd484 100644 --- a/src/datadog/parse_util.h +++ b/src/datadog/parse_util.h @@ -2,14 +2,14 @@ // This component provides parsing-related miscellanea. +#include +#include + #include #include #include #include -#include "expected.h" -#include "string_view.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/propagation_style.cpp b/src/datadog/propagation_style.cpp index 19241374..1b944a19 100644 --- a/src/datadog/propagation_style.cpp +++ b/src/datadog/propagation_style.cpp @@ -1,4 +1,4 @@ -#include "propagation_style.h" +#include #include diff --git a/src/datadog/rate.cpp b/src/datadog/rate.cpp index 22df57a8..4632ff9a 100644 --- a/src/datadog/rate.cpp +++ b/src/datadog/rate.cpp @@ -1,4 +1,4 @@ -#include "rate.h" +#include #include diff --git a/src/datadog/remote_config/product.cpp b/src/datadog/remote_config/product.cpp new file mode 100644 index 00000000..be8f8fa7 --- /dev/null +++ b/src/datadog/remote_config/product.cpp @@ -0,0 +1,52 @@ +#include + +#include "string_util.h" + +#define DD_QUOTED_IMPL(ARG) #ARG +#define DD_QUOTED(ARG) DD_QUOTED_IMPL(ARG) + +namespace datadog { +namespace remote_config { + +tracing::StringView to_string_view(product::Flag product) { +#define X(NAME, ID) \ + case product::Flag::NAME: { \ + return DD_QUOTED(NAME); \ + } + switch (product) { DD_LIST_REMOTE_CONFIG_PRODUCTS } +#undef X + + assert(true); + return "UNKNOWN"; +} + +product::Flag parse_product(tracing::StringView sv) { + const auto upcase_product = tracing::to_upper(sv); + +#define X(NAME, ID) \ + if (upcase_product == DD_QUOTED(NAME)) { \ + return product::Flag::NAME; \ + } + DD_LIST_REMOTE_CONFIG_PRODUCTS +#undef X + + assert(true); + return product::Flag::UNKNOWN; +} + +void visit_products(Products products, + std::function on_product) { +#define X(NAME, ID) \ + if (products & product::Flag::NAME) { \ + on_product(product::Flag::NAME); \ + } + + DD_LIST_REMOTE_CONFIG_PRODUCTS +#undef X +} + +} // namespace remote_config +} // namespace datadog + +#undef DD_QUOTED +#undef DD_QUOTED_IMPL diff --git a/src/datadog/remote_config/product.h b/src/datadog/remote_config/product.h deleted file mode 100644 index c9489fb1..00000000 --- a/src/datadog/remote_config/product.h +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "string_util.h" -#include "string_view.h" - -namespace datadog { -namespace remote_config { - -// Type alias for product flags. -// -// Usage: -// -// using namespace datadog::remote_config::product; -// Products p = AGENT_CONFIG | APM_TRACING; -using Products = uint64_t; - -#define DD_QUOTED_IMPL(ARG) #ARG -#define DD_QUOTED(ARG) DD_QUOTED_IMPL(ARG) - -// List of remote configuration product built to support flag arithmetic -#define DD_LIST_REMOTE_CONFIG_PRODUCTS \ - X(UNKNOWN, 0) \ - X(AGENT_CONFIG, 1) \ - X(AGENT_TASK, 2) \ - X(APM_TRACING, 3) \ - X(LIVE_DEBUGGING, 4) \ - X(LIVE_DEBUGGING_SYMBOL_DB, 5) \ - X(ASM, 6) \ - X(ASM_DD, 7) \ - X(ASM_DATA, 8) \ - X(ASM_FEATURES, 9) - -namespace product { - -enum Flag : Products { -#define X(NAME, ID) NAME = 1 << ID, - DD_LIST_REMOTE_CONFIG_PRODUCTS -#undef X -}; -} // namespace product - -inline tracing::StringView to_string_view(product::Flag product) { -#define X(NAME, ID) \ - case product::Flag::NAME: { \ - return DD_QUOTED(NAME); \ - } - switch (product) { DD_LIST_REMOTE_CONFIG_PRODUCTS } -#undef X - - assert(true); - return "UNKNOWN"; -} - -inline product::Flag parse_product(tracing::StringView sv) { - const auto upcase_product = tracing::to_upper(sv); - -#define X(NAME, ID) \ - if (upcase_product == DD_QUOTED(NAME)) { \ - return product::Flag::NAME; \ - } - DD_LIST_REMOTE_CONFIG_PRODUCTS -#undef X - - assert(true); - return product::Flag::UNKNOWN; -} - -inline void visit_products(Products products, - std::function on_product) { -#define X(NAME, ID) \ - if (products & product::Flag::NAME) { \ - on_product(product::Flag::NAME); \ - } - - DD_LIST_REMOTE_CONFIG_PRODUCTS -#undef X -} - -#undef DD_LIST_REMOTE_CONFIG_PRODUCTS -#undef DD_QUOTED_IMPL -#undef DD_QUOTED - -} // namespace remote_config -} // namespace datadog diff --git a/src/datadog/remote_config/remote_config.cpp b/src/datadog/remote_config/remote_config.cpp index 368679f4..4758781f 100644 --- a/src/datadog/remote_config/remote_config.cpp +++ b/src/datadog/remote_config/remote_config.cpp @@ -1,5 +1,9 @@ #include "remote_config.h" +#include +#include +#include + #include #include #include @@ -7,9 +11,6 @@ #include "base64.h" #include "json.hpp" #include "random.h" -#include "remote_config/capability.h" -#include "remote_config/listener.h" -#include "string_view.h" using namespace datadog::tracing; using namespace nlohmann::literals; diff --git a/src/datadog/remote_config/remote_config.h b/src/datadog/remote_config/remote_config.h index cf8b9d20..7373aaba 100644 --- a/src/datadog/remote_config/remote_config.h +++ b/src/datadog/remote_config/remote_config.h @@ -12,20 +12,20 @@ // It interacts with the `ConfigManager` to seamlessly apply or revert // configurations based on responses received from the remote source. +#include +#include +#include +#include +#include +#include +#include + #include #include #include #include #include -#include "logger.h" -#include "optional.h" -#include "remote_config/listener.h" -#include "runtime_id.h" -#include "string_view.h" -#include "trace_sampler_config.h" -#include "tracer_signature.h" - namespace datadog { namespace remote_config { diff --git a/src/datadog/runtime_id.cpp b/src/datadog/runtime_id.cpp index 22671690..9156c554 100644 --- a/src/datadog/runtime_id.cpp +++ b/src/datadog/runtime_id.cpp @@ -1,4 +1,4 @@ -#include "runtime_id.h" +#include #include "random.h" diff --git a/src/datadog/sampling_util.h b/src/datadog/sampling_util.h index 162c571b..1c74d8ac 100644 --- a/src/datadog/sampling_util.h +++ b/src/datadog/sampling_util.h @@ -3,11 +3,11 @@ // This component provides sampling-related miscellanea. It's used by both // `TraceSampler` and `SpanSampler`. +#include + #include #include -#include "rate.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/span.cpp b/src/datadog/span.cpp index 3522923b..27222ba1 100644 --- a/src/datadog/span.cpp +++ b/src/datadog/span.cpp @@ -1,15 +1,15 @@ -#include "span.h" +#include +#include +#include +#include +#include +#include #include #include -#include "dict_writer.h" -#include "optional.h" -#include "span_config.h" #include "span_data.h" -#include "string_view.h" #include "tags.h" -#include "trace_segment.h" namespace datadog { namespace tracing { diff --git a/src/datadog/span_data.cpp b/src/datadog/span_data.cpp index e575285d..b1e1216f 100644 --- a/src/datadog/span_data.cpp +++ b/src/datadog/span_data.cpp @@ -1,13 +1,14 @@ #include "span_data.h" +#include +#include +#include +#include + #include #include -#include "error.h" #include "msgpack.h" -#include "span_config.h" -#include "span_defaults.h" -#include "string_view.h" #include "tags.h" namespace datadog { diff --git a/src/datadog/span_data.h b/src/datadog/span_data.h index e5a7476f..9413e173 100644 --- a/src/datadog/span_data.h +++ b/src/datadog/span_data.h @@ -3,18 +3,17 @@ // This component provides a `struct`, `SpanData`, that contains all data fields // relevant to `Span`. `SpanData` is what is consumed by `Collector`. -#include +#include +#include +#include +#include +#include + #include #include #include #include -#include "clock.h" -#include "expected.h" -#include "optional.h" -#include "string_view.h" -#include "trace_id.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/span_defaults.cpp b/src/datadog/span_defaults.cpp index 387eaf54..f1e1ce06 100644 --- a/src/datadog/span_defaults.cpp +++ b/src/datadog/span_defaults.cpp @@ -1,4 +1,4 @@ -#include "span_defaults.h" +#include #include "json.hpp" diff --git a/src/datadog/span_matcher.cpp b/src/datadog/span_matcher.cpp index e9020361..80c5b36c 100644 --- a/src/datadog/span_matcher.cpp +++ b/src/datadog/span_matcher.cpp @@ -1,11 +1,11 @@ -#include "span_matcher.h" +#include +#include +#include #include -#include "error.h" #include "glob.h" #include "json.hpp" -#include "optional.h" #include "span_data.h" namespace datadog { diff --git a/src/datadog/span_sampler.cpp b/src/datadog/span_sampler.cpp index 860c85fc..2c5db2ee 100644 --- a/src/datadog/span_sampler.cpp +++ b/src/datadog/span_sampler.cpp @@ -1,8 +1,8 @@ #include "span_sampler.h" -#include "json.hpp" -#include "sampling_mechanism.h" -#include "sampling_priority.h" +#include +#include + #include "sampling_util.h" #include "span_data.h" @@ -69,12 +69,13 @@ SpanSampler::Rule* SpanSampler::match(const SpanData& span) { nlohmann::json SpanSampler::config_json() const { std::vector rules; for (const auto& rule : rules_) { - rules.push_back(to_json(rule)); + rules.push_back(to_string(rule)); } return nlohmann::json::object({ - {"rules", rules}, - }); + {"rules", rules}, + }) + .dump(); } } // namespace tracing diff --git a/src/datadog/span_sampler.h b/src/datadog/span_sampler.h index f99717a7..0d4f09a2 100644 --- a/src/datadog/span_sampler.h +++ b/src/datadog/span_sampler.h @@ -18,14 +18,15 @@ // See `span_matcher.h` for a description of how spans are matched by span // sampling rules. +#include +#include +#include + #include #include -#include "clock.h" -#include "json_fwd.hpp" +#include "json.hpp" #include "limiter.h" -#include "sampling_decision.h" -#include "span_sampler_config.h" namespace datadog { namespace tracing { diff --git a/src/datadog/span_sampler_config.cpp b/src/datadog/span_sampler_config.cpp index 38a33c11..c44c5d1b 100644 --- a/src/datadog/span_sampler_config.cpp +++ b/src/datadog/span_sampler_config.cpp @@ -1,12 +1,12 @@ -#include "span_sampler_config.h" +#include +#include +#include #include #include #include #include -#include "environment.h" -#include "expected.h" #include "json.hpp" namespace datadog { @@ -279,7 +279,7 @@ Expected finalize_config( return result; } -nlohmann::json to_json(const FinalizedSpanSamplerConfig::Rule &rule) { +std::string to_string(const FinalizedSpanSamplerConfig::Rule &rule) { // Get the base class's fields, then add our own. auto result = static_cast(rule).to_json(); result["sample_rate"] = double(rule.sample_rate); @@ -287,7 +287,7 @@ nlohmann::json to_json(const FinalizedSpanSamplerConfig::Rule &rule) { result["max_per_second"] = *rule.max_per_second; } - return result; + return result.dump(); } } // namespace tracing diff --git a/src/datadog/string_util.cpp b/src/datadog/string_util.cpp index 49607b13..c60a97a5 100644 --- a/src/datadog/string_util.cpp +++ b/src/datadog/string_util.cpp @@ -69,20 +69,7 @@ std::string join(const std::vector& values, StringView separator) { std::string join_propagation_styles( const std::vector& values) { return join(values, ",", [](std::string& result, PropagationStyle style) { - switch (style) { - case PropagationStyle::B3: - result += "b3"; - break; - case PropagationStyle::DATADOG: - result += "datadog"; - break; - case PropagationStyle::W3C: - result += "tracecontext"; - break; - case PropagationStyle::NONE: - result += "none"; - break; - } + result += std::string(to_string_view(style)); }); } diff --git a/src/datadog/string_util.h b/src/datadog/string_util.h index 9775df5e..1f36ca6e 100644 --- a/src/datadog/string_util.h +++ b/src/datadog/string_util.h @@ -1,10 +1,11 @@ #pragma once +#include +#include + #include #include - -#include "propagation_style.h" -#include "string_view.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/tag_propagation.cpp b/src/datadog/tag_propagation.cpp index 2d41a4a6..2c790742 100644 --- a/src/datadog/tag_propagation.cpp +++ b/src/datadog/tag_propagation.cpp @@ -1,10 +1,11 @@ #include "tag_propagation.h" +#include + #include #include #include -#include "error.h" #include "string_util.h" namespace datadog { diff --git a/src/datadog/tag_propagation.h b/src/datadog/tag_propagation.h index 99666856..21169139 100644 --- a/src/datadog/tag_propagation.h +++ b/src/datadog/tag_propagation.h @@ -11,13 +11,13 @@ // This component provides serialization and deserialization routines for the // "x-datadog-tags" header format. +#include +#include + #include #include #include -#include "expected.h" -#include "string_view.h" - namespace datadog { namespace tracing { diff --git a/src/datadog/tags.h b/src/datadog/tags.h index 63f5020f..5593b26f 100644 --- a/src/datadog/tags.h +++ b/src/datadog/tags.h @@ -3,10 +3,11 @@ // This component provides symbols for all span tag names that have special // meaning. +#include + #include #include "string_util.h" -#include "string_view.h" namespace datadog { namespace tracing { diff --git a/src/datadog/threaded_event_scheduler.cpp b/src/datadog/threaded_event_scheduler.cpp index 12e45d1f..1834ff77 100644 --- a/src/datadog/threaded_event_scheduler.cpp +++ b/src/datadog/threaded_event_scheduler.cpp @@ -58,9 +58,10 @@ EventScheduler::Cancel ThreadedEventScheduler::schedule_recurring_event( }; } -nlohmann::json ThreadedEventScheduler::config_json() const { +std::string ThreadedEventScheduler::config() const { return nlohmann::json::object( - {{"type", "datadog::tracing::ThreadedEventScheduler"}}); + {{"type", "datadog::tracing::ThreadedEventScheduler"}}) + .dump(); } void ThreadedEventScheduler::run() { diff --git a/src/datadog/threaded_event_scheduler.h b/src/datadog/threaded_event_scheduler.h index 176cb2a1..764dfa70 100644 --- a/src/datadog/threaded_event_scheduler.h +++ b/src/datadog/threaded_event_scheduler.h @@ -5,6 +5,8 @@ // thread. It is the default implementation used if // `DatadogAgent::event_scheduler` is not specified. +#include + #include #include #include @@ -14,8 +16,6 @@ #include #include -#include "event_scheduler.h" - namespace datadog { namespace tracing { @@ -57,7 +57,7 @@ class ThreadedEventScheduler : public EventScheduler { Cancel schedule_recurring_event(std::chrono::steady_clock::duration interval, std::function callback) override; - nlohmann::json config_json() const override; + std::string config() const override; }; } // namespace tracing diff --git a/src/datadog/trace_id.cpp b/src/datadog/trace_id.cpp index b8ba90f1..4eaff241 100644 --- a/src/datadog/trace_id.cpp +++ b/src/datadog/trace_id.cpp @@ -1,4 +1,4 @@ -#include "trace_id.h" +#include #include "hex.h" #include "parse_util.h" diff --git a/src/datadog/trace_sampler.cpp b/src/datadog/trace_sampler.cpp index 7688e237..1ad3b207 100644 --- a/src/datadog/trace_sampler.cpp +++ b/src/datadog/trace_sampler.cpp @@ -1,14 +1,14 @@ #include "trace_sampler.h" +#include +#include + #include #include #include #include #include "collector_response.h" -#include "json.hpp" -#include "sampling_decision.h" -#include "sampling_priority.h" #include "sampling_util.h" #include "span_data.h" diff --git a/src/datadog/trace_sampler.h b/src/datadog/trace_sampler.h index 30a1259c..034e6f31 100644 --- a/src/datadog/trace_sampler.h +++ b/src/datadog/trace_sampler.h @@ -83,16 +83,17 @@ // configured via `TraceSamplerConfig::max_per_second` or the // `DD_TRACE_RATE_LIMIT` environment variable. +#include +#include +#include +#include + #include #include #include -#include "clock.h" -#include "json_fwd.hpp" +#include "json.hpp" #include "limiter.h" -#include "optional.h" -#include "rate.h" -#include "trace_sampler_config.h" namespace datadog { namespace tracing { diff --git a/src/datadog/trace_sampler_config.cpp b/src/datadog/trace_sampler_config.cpp index 8c0b0dcc..30481b21 100644 --- a/src/datadog/trace_sampler_config.cpp +++ b/src/datadog/trace_sampler_config.cpp @@ -1,9 +1,9 @@ -#include "trace_sampler_config.h" +#include +#include #include #include -#include "environment.h" #include "json.hpp" #include "parse_util.h" #include "string_util.h" diff --git a/src/datadog/trace_segment.cpp b/src/datadog/trace_segment.cpp index 6c63e553..3a01cd29 100644 --- a/src/datadog/trace_segment.cpp +++ b/src/datadog/trace_segment.cpp @@ -1,4 +1,12 @@ -#include "trace_segment.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -6,24 +14,19 @@ #include #include -#include "collector.h" #include "collector_response.h" -#include "dict_reader.h" -#include "dict_writer.h" -#include "error.h" +#include "config_manager.h" #include "hex.h" -#include "injection_options.h" #include "json.hpp" -#include "logger.h" -#include "optional.h" +#include "metrics.h" #include "platform_util.h" #include "random.h" #include "span_data.h" -#include "span_defaults.h" #include "span_sampler.h" #include "tag_propagation.h" #include "tags.h" #include "trace_sampler.h" +#include "tracer_telemetry.h" #include "w3c_propagation.h" namespace datadog { diff --git a/src/datadog/tracer.cpp b/src/datadog/tracer.cpp index da5eb525..84c3060a 100644 --- a/src/datadog/tracer.cpp +++ b/src/datadog/tracer.cpp @@ -1,30 +1,30 @@ -#include "tracer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include "config_manager.h" #include "datadog_agent.h" -#include "dict_reader.h" -#include "environment.h" #include "extracted_data.h" #include "extraction_util.h" #include "hex.h" #include "json.hpp" -#include "logger.h" -#include "parse_util.h" #include "platform_util.h" -#include "runtime_id.h" -#include "span.h" -#include "span_config.h" #include "span_data.h" #include "span_sampler.h" -#include "tag_propagation.h" #include "tags.h" #include "trace_sampler.h" -#include "trace_sampler_config.h" -#include "trace_segment.h" -#include "tracer_signature.h" -#include "version.h" +#include "tracer_telemetry.h" #include "w3c_propagation.h" namespace datadog { @@ -77,21 +77,21 @@ Tracer::Tracer(const FinalizedTracerConfig& config, } if (config.log_on_startup) { - logger_->log_startup([this](std::ostream& log) { - log << "DATADOG TRACER CONFIGURATION - " << config_json(); + logger_->log_startup([configuration = this->config()](std::ostream& log) { + log << "DATADOG TRACER CONFIGURATION - " << configuration; }); } } -nlohmann::json Tracer::config_json() const { +std::string Tracer::config() const { // clang-format off auto config = nlohmann::json::object({ {"version", tracer_version_string}, {"runtime_id", runtime_id_.string()}, - {"collector", collector_->config_json()}, + {"collector", collector_->config()}, {"span_sampler", span_sampler_->config_json()}, - {"injection_styles", to_json(injection_styles_)}, - {"extraction_styles", to_json(extraction_styles_)}, + {"injection_styles", join_propagation_styles(injection_styles_)}, + {"extraction_styles", join_propagation_styles(extraction_styles_)}, {"tags_header_size", tags_header_max_size_}, {"environment_variables", environment::to_json()}, }); @@ -103,7 +103,7 @@ nlohmann::json Tracer::config_json() const { config["hostname"] = *hostname_; } - return config; + return config.dump(); } Span Tracer::create_span() { return create_span(SpanConfig{}); } diff --git a/src/datadog/tracer_config.cpp b/src/datadog/tracer_config.cpp index 95e52a27..6cf0b280 100644 --- a/src/datadog/tracer_config.cpp +++ b/src/datadog/tracer_config.cpp @@ -1,4 +1,6 @@ -#include "tracer_config.h" +#include +#include +#include #include #include @@ -11,11 +13,9 @@ #include "cerr_logger.h" #include "datadog_agent.h" -#include "environment.h" #include "json.hpp" #include "parse_util.h" #include "string_util.h" -#include "string_view.h" namespace datadog { namespace tracing { @@ -36,7 +36,7 @@ Expected> parse_propagation_styles( std::string message; message += "The propagation style "; - message += to_json(styles.back()).dump(); + message += std::string(to_string_view(styles.back())); message += " is duplicated in: "; append(message, input); return Error{Error::DUPLICATE_PROPAGATION_STYLE, std::move(message)}; diff --git a/src/datadog/tracer_telemetry.cpp b/src/datadog/tracer_telemetry.cpp index 57bdd1e2..427d1484 100644 --- a/src/datadog/tracer_telemetry.cpp +++ b/src/datadog/tracer_telemetry.cpp @@ -1,9 +1,10 @@ #include "tracer_telemetry.h" -#include "logger.h" +#include +#include +#include + #include "platform_util.h" -#include "span_defaults.h" -#include "version.h" namespace datadog { namespace tracing { diff --git a/src/datadog/tracer_telemetry.h b/src/datadog/tracer_telemetry.h index f129ea84..13e6063c 100644 --- a/src/datadog/tracer_telemetry.h +++ b/src/datadog/tracer_telemetry.h @@ -28,15 +28,16 @@ // // `app-client-configuration-change` messages are sent as soon as the tracer // configuration has been updated by a Remote Configuration event. +#include +#include +#include +#include + #include -#include "clock.h" -#include "config.h" #include "json.hpp" #include "metrics.h" #include "platform_util.h" -#include "runtime_id.h" -#include "tracer_signature.h" namespace datadog { namespace tracing { diff --git a/src/datadog/version.cpp b/src/datadog/version.cpp index 562cd4e6..b8a0a4f6 100644 --- a/src/datadog/version.cpp +++ b/src/datadog/version.cpp @@ -1,4 +1,4 @@ -#include "version.h" +#include namespace datadog { namespace tracing { diff --git a/src/datadog/w3c_propagation.cpp b/src/datadog/w3c_propagation.cpp index bb3fcc0a..5298b7c6 100644 --- a/src/datadog/w3c_propagation.cpp +++ b/src/datadog/w3c_propagation.cpp @@ -1,15 +1,15 @@ #include "w3c_propagation.h" +#include + #include #include #include #include #include -#include "dict_reader.h" #include "hex.h" #include "parse_util.h" -#include "propagation_style.h" #include "string_util.h" #include "tags.h" diff --git a/src/datadog/w3c_propagation.h b/src/datadog/w3c_propagation.h index 5ab06b24..823cce39 100644 --- a/src/datadog/w3c_propagation.h +++ b/src/datadog/w3c_propagation.h @@ -4,14 +4,16 @@ // in the `PropagationStyle::W3C` style. These functions decode and encode the // "traceparent" and "tracestate" HTTP request headers. +#include +#include +#include +#include + #include #include #include -#include "expected.h" #include "extracted_data.h" -#include "optional.h" -#include "trace_id.h" namespace datadog { namespace tracing { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e1e6c49e..059f8e9d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -43,6 +43,10 @@ add_executable(tests target_include_directories(tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/src/datadog + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/include/datadog ) target_link_libraries(tests diff --git a/test/mocks/collectors.cpp b/test/mocks/collectors.cpp index 59f480ae..6396941c 100644 --- a/test/mocks/collectors.cpp +++ b/test/mocks/collectors.cpp @@ -2,9 +2,9 @@ #include -#define DEFINE_CONFIG_JSON_METHOD(TYPE) \ - nlohmann::json TYPE::config_json() const { \ - return nlohmann::json::object({{"type", #TYPE}}); \ +#define DEFINE_CONFIG_JSON_METHOD(TYPE) \ + std::string TYPE::config() const { \ + return nlohmann::json::object({{"type", #TYPE}}).dump(); \ } DEFINE_CONFIG_JSON_METHOD(MockCollector) diff --git a/test/mocks/collectors.h b/test/mocks/collectors.h index 3d0495a2..3cdf50dc 100644 --- a/test/mocks/collectors.h +++ b/test/mocks/collectors.h @@ -27,7 +27,7 @@ struct MockCollector : public Collector { return {}; } - nlohmann::json config_json() const override; + std::string config() const override; SpanData& first_span() const { REQUIRE(chunks.size() >= 1); @@ -57,7 +57,7 @@ struct MockCollectorWithResponse : public MockCollector { return {}; } - nlohmann::json config_json() const override; + std::string config() const override; }; struct PriorityCountingCollector : public Collector { @@ -72,7 +72,7 @@ struct PriorityCountingCollector : public Collector { return {}; } - nlohmann::json config_json() const override; + std::string config() const override; const SpanData& root_span( const std::vector>& spans) { @@ -134,7 +134,7 @@ struct PriorityCountingCollectorWithResponse return {}; } - nlohmann::json config_json() const override; + std::string config() const override; }; struct FailureCollector : public Collector { @@ -145,5 +145,5 @@ struct FailureCollector : public Collector { return failure; } - nlohmann::json config_json() const override; + std::string config() const override; }; diff --git a/test/mocks/event_schedulers.h b/test/mocks/event_schedulers.h index 4149797e..e8d330fd 100644 --- a/test/mocks/event_schedulers.h +++ b/test/mocks/event_schedulers.h @@ -21,7 +21,7 @@ struct MockEventScheduler : public EventScheduler { return [this]() { cancelled = true; }; } - nlohmann::json config_json() const override { - return nlohmann::json::object({{"type", "MockEventScheduler"}}); + std::string config() const override { + return nlohmann::json::object({{"type", "MockEventScheduler"}}).dump(); } }; diff --git a/test/mocks/http_clients.h b/test/mocks/http_clients.h index 3459ce90..e6f0f6c0 100644 --- a/test/mocks/http_clients.h +++ b/test/mocks/http_clients.h @@ -63,7 +63,7 @@ struct MockHTTPClient : public HTTPClient { } } - nlohmann::json config_json() const override { - return nlohmann::json::object({{"type", "MockHTTPClient"}}); + std::string config() const override { + return nlohmann::json::object({{"type", "MockHTTPClient"}}).dump(); } }; diff --git a/test/system-tests/CMakeLists.txt b/test/system-tests/CMakeLists.txt index 5a5223ba..42b1f5b5 100644 --- a/test/system-tests/CMakeLists.txt +++ b/test/system-tests/CMakeLists.txt @@ -9,10 +9,16 @@ target_sources(parametric-http-server target_include_directories(parametric-http-server PRIVATE - ../../examples/http-server/common + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/examples/http-server/common ) -target_link_libraries(parametric-http-server dd_trace_cpp-static dd_trace::specs) +target_link_libraries(parametric-http-server + PRIVATE + dd_trace_cpp-static + dd_trace::specs + nlohmann_json::nlohmann_json +) install( TARGETS parametric-http-server diff --git a/test/system-tests/main.cpp b/test/system-tests/main.cpp index 6e0cd3c3..85e4c012 100644 --- a/test/system-tests/main.cpp +++ b/test/system-tests/main.cpp @@ -2,11 +2,12 @@ #include #include #include +#include #include #include -#include #include +#include #include #include #include @@ -26,7 +27,7 @@ std::optional get_port() { return std::nullopt; } - uint16_t port = std::atoi(port_env); + uint16_t port = static_cast(std::atoi(port_env)); return port; } catch (...) { return std::nullopt; diff --git a/test/system-tests/manual_scheduler.h b/test/system-tests/manual_scheduler.h index a01bfabc..2a1e0c4e 100644 --- a/test/system-tests/manual_scheduler.h +++ b/test/system-tests/manual_scheduler.h @@ -4,7 +4,7 @@ #include #include -#include +#include struct ManualScheduler : public datadog::tracing::EventScheduler { std::function flush_traces = nullptr; @@ -29,7 +29,7 @@ struct ManualScheduler : public datadog::tracing::EventScheduler { return scheduler_.schedule_recurring_event(interval, callback); } - nlohmann::json config_json() const override { - return nlohmann::json::object({{"type", "ManualScheduler"}}); + std::string config() const override { + return nlohmann::json::object({{"type", "ManualScheduler"}}).dump(); } }; diff --git a/test/test_tracer.cpp b/test/test_tracer.cpp index 6b47e957..dd2ef684 100644 --- a/test/test_tracer.cpp +++ b/test/test_tracer.cpp @@ -2040,8 +2040,8 @@ TEST_CASE("heterogeneous extraction") { CAPTURE(test_case.line); CAPTURE(test_case.description); - CAPTURE(to_json(test_case.extraction_styles)); - CAPTURE(to_json(test_case.injection_styles)); + CAPTURE(test_case.extraction_styles); + CAPTURE(test_case.injection_styles); CAPTURE(test_case.extracted_headers); CAPTURE(test_case.expected_injected_headers); diff --git a/test/test_tracer_config.cpp b/test/test_tracer_config.cpp index 3aa536a1..1050e216 100644 --- a/test/test_tracer_config.cpp +++ b/test/test_tracer_config.cpp @@ -28,7 +28,7 @@ namespace datadog { namespace tracing { std::ostream& operator<<(std::ostream& stream, PropagationStyle style) { - return stream << to_json(style).dump(); + return stream << to_string_view(style); } } // namespace tracing