diff --git a/BUILD.bazel b/BUILD.bazel index b74cbabe..265436e9 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -38,6 +38,7 @@ cc_library( "src/datadog/tags.cpp", "src/datadog/threaded_event_scheduler.cpp", "src/datadog/tracer_config.cpp", + "src/datadog/tracer_signature.cpp", "src/datadog/tracer_telemetry.cpp", "src/datadog/tracer.cpp", "src/datadog/trace_id.cpp", @@ -102,10 +103,10 @@ cc_library( "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/tracer_id.h", "src/datadog/trace_sampler_config.h", "src/datadog/trace_sampler.h", "src/datadog/trace_segment.h", diff --git a/CMakeLists.txt b/CMakeLists.txt index ad5aeabf..deaf136d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,6 +138,7 @@ target_sources(dd_trace_cpp-objects PRIVATE src/datadog/tags.cpp src/datadog/threaded_event_scheduler.cpp src/datadog/tracer_config.cpp + src/datadog/tracer_signature.cpp src/datadog/tracer_telemetry.cpp src/datadog/tracer.cpp src/datadog/trace_id.cpp @@ -208,10 +209,10 @@ target_sources(dd_trace_cpp-objects PUBLIC 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/tracer_id.h src/datadog/trace_sampler_config.h src/datadog/trace_sampler.h src/datadog/trace_segment.h diff --git a/src/datadog/config_manager.cpp b/src/datadog/config_manager.cpp index 90510789..a13ac346 100644 --- a/src/datadog/config_manager.cpp +++ b/src/datadog/config_manager.cpp @@ -1,5 +1,7 @@ #include "config_manager.h" +#include "trace_sampler.h" + namespace datadog { namespace tracing { diff --git a/src/datadog/config_update.h b/src/datadog/config_update.h index 9dc56648..48704d8f 100644 --- a/src/datadog/config_update.h +++ b/src/datadog/config_update.h @@ -1,10 +1,13 @@ +#pragma once + +// TODO: Document + #include "optional" -#include "trace_sampler.h" +#include "trace_sampler_config.h" namespace datadog { namespace tracing { -// TODO: Document struct ConfigUpdate { Optional trace_sampler; }; diff --git a/src/datadog/datadog_agent.cpp b/src/datadog/datadog_agent.cpp index 0d5adcad..287a19b2 100644 --- a/src/datadog/datadog_agent.cpp +++ b/src/datadog/datadog_agent.cpp @@ -149,8 +149,8 @@ std::variant parse_agent_traces_response( DatadogAgent::DatadogAgent( const FinalizedDatadogAgentConfig& config, const std::shared_ptr& tracer_telemetry, - const std::shared_ptr& logger, const TracerID& tracer_id, - ConfigManager& config_manager) + const std::shared_ptr& logger, + const TracerSignature& tracer_signature, ConfigManager& config_manager) : tracer_telemetry_(tracer_telemetry), clock_(config.clock), logger_(logger), @@ -164,7 +164,7 @@ DatadogAgent::DatadogAgent( flush_interval_(config.flush_interval), request_timeout_(config.request_timeout), shutdown_timeout_(config.shutdown_timeout), - remote_config_(tracer_id, config_manager) { + remote_config_(tracer_signature, config_manager) { assert(logger_); assert(tracer_telemetry_); if (tracer_telemetry_->enabled()) { @@ -401,12 +401,11 @@ void DatadogAgent::get_and_apply_remote_configuration_updates() { std::string response_body) { if (response_status < 200 || response_status >= 300) { if (response_status == 404) { - /* - * 404 is not considered as an error as the agent use it to - * signal remote configuration is disabled. At any point, the - * feature could be enabled, so the tracer must continuously check - * for new remote configuration. - */ + // If the Datadog Agent doesn't understand remote configuration, + // or if remote configuration is disabled in the agent, then it + // will return 404. This is not an error. + // We'll keep polling, though, because the agent's configuration + // might change. return; } @@ -431,6 +430,7 @@ void DatadogAgent::get_and_apply_remote_configuration_updates() { return; } + // TODO(@dgoffredo): When is the parsed JSON object empty? if (!response_json.empty()) { // TODO (during Active Configuration): `process_response` should // return a list of configuration update and should be consumed by diff --git a/src/datadog/datadog_agent.h b/src/datadog/datadog_agent.h index 6aa11440..9cefe059 100644 --- a/src/datadog/datadog_agent.h +++ b/src/datadog/datadog_agent.h @@ -26,7 +26,7 @@ class FinalizedDatadogAgentConfig; class Logger; struct SpanData; class TraceSampler; -struct TracerID; +class TracerSignature; class DatadogAgent : public Collector { public: @@ -65,7 +65,7 @@ class DatadogAgent : public Collector { public: DatadogAgent(const FinalizedDatadogAgentConfig&, const std::shared_ptr&, - const std::shared_ptr&, const TracerID& id, + const std::shared_ptr&, const TracerSignature& id, ConfigManager& config_manager); ~DatadogAgent(); diff --git a/src/datadog/remote_config.cpp b/src/datadog/remote_config.cpp index a148d4cf..cdcc3b8b 100644 --- a/src/datadog/remote_config.cpp +++ b/src/datadog/remote_config.cpp @@ -64,8 +64,8 @@ ConfigUpdate parse_dynamic_config(const nlohmann::json& j) { } // namespace RemoteConfigurationManager::RemoteConfigurationManager( - const TracerID& tracer_id, ConfigManager& config_manager) - : tracer_id_(tracer_id), + const TracerSignature& tracer_signature, ConfigManager& config_manager) + : tracer_signature_(tracer_signature), config_manager_(config_manager), client_id_(uuid()) {} @@ -87,11 +87,11 @@ nlohmann::json RemoteConfigurationManager::make_request_payload() { {"is_tracer", true}, {"capabilities", k_apm_capabilities}, {"client_tracer", { - {"runtime_id", tracer_id_.runtime_id.string()}, - {"language", "cpp"}, - {"tracer_version", tracer_version}, - {"service", tracer_id_.service}, - {"env", tracer_id_.environment} + {"runtime_id", tracer_signature_.runtime_id().string()}, + {"language", tracer_signature_.library_language()}, + {"tracer_version", tracer_signature_.library_version()}, + {"service", tracer_signature_.default_service()}, + {"env", tracer_signature_.default_environment()} }}, {"state", { {"root_version", 1}, @@ -178,9 +178,9 @@ void RemoteConfigurationManager::process_response(const nlohmann::json& json) { const auto& targeted_service = config_json.at("service_target"); if (targeted_service.at("service").get() != - tracer_id_.service || + tracer_signature_.default_service() || targeted_service.at("env").get() != - tracer_id_.environment) { + tracer_signature_.default_environment()) { continue; } diff --git a/src/datadog/remote_config.h b/src/datadog/remote_config.h index 0359f014..5441e76d 100644 --- a/src/datadog/remote_config.h +++ b/src/datadog/remote_config.h @@ -10,18 +10,20 @@ #include "runtime_id.h" #include "string_view.h" #include "trace_sampler_config.h" -#include "tracer_id.h" +#include "tracer_signature.h" namespace datadog { namespace tracing { class RemoteConfigurationManager { + // TODO: document struct State { uint64_t targets_version = 1; std::string opaque_backend_state; Optional error_message; }; + // TODO: document struct Configuration { std::string id; std::string hash; @@ -29,25 +31,32 @@ class RemoteConfigurationManager { ConfigUpdate content; }; - TracerID tracer_id_; + TracerSignature tracer_signature_; ConfigManager& config_manager_; + // TODO: document std::string client_id_; State state_; + // TODO: document std::unordered_map applied_config_; public: - RemoteConfigurationManager(const TracerID& tracer_id, + RemoteConfigurationManager(const TracerSignature& tracer_signature, ConfigManager& config_manager); + // TODO: document nlohmann::json make_request_payload(); + // TODO: document void process_response(const nlohmann::json& json); private: + // TODO: document bool is_new_config(StringView config_path, const nlohmann::json& config_meta); + // TODO: document void apply_config(Configuration config); + // TODO: document void revert_config(Configuration config); }; diff --git a/src/datadog/tracer.cpp b/src/datadog/tracer.cpp index efc2b6e7..4d0da254 100644 --- a/src/datadog/tracer.cpp +++ b/src/datadog/tracer.cpp @@ -23,7 +23,7 @@ #include "tags.h" #include "trace_sampler.h" #include "trace_segment.h" -#include "tracer_id.h" +#include "tracer_signature.h" #include "version.h" #include "w3c_propagation.h" @@ -40,9 +40,10 @@ Tracer::Tracer(const FinalizedTracerConfig& config, defaults_(std::make_shared(config.defaults)), runtime_id_(config.runtime_id ? *config.runtime_id : RuntimeID::generate()), - id_{runtime_id_, config.defaults.service, config.defaults.environment}, + signature_{runtime_id_, config.defaults.service, + config.defaults.environment}, tracer_telemetry_(std::make_shared( - config.report_telemetry, config.clock, logger_, id_)), + config.report_telemetry, config.clock, logger_, signature_)), span_sampler_( std::make_shared(config.span_sampler, config.clock)), generator_(generator), @@ -59,8 +60,9 @@ Tracer::Tracer(const FinalizedTracerConfig& config, auto& agent_config = std::get(config.collector); - auto agent = std::make_shared( - agent_config, tracer_telemetry_, config.logger, id_, config_manager_); + auto agent = std::make_shared(agent_config, tracer_telemetry_, + config.logger, signature_, + config_manager_); collector_ = agent; if (tracer_telemetry_->enabled()) { diff --git a/src/datadog/tracer.h b/src/datadog/tracer.h index 6c72faea..8f1f5334 100644 --- a/src/datadog/tracer.h +++ b/src/datadog/tracer.h @@ -19,6 +19,7 @@ #include "optional.h" #include "span.h" #include "tracer_config.h" +#include "tracer_signature.h" #include "tracer_telemetry.h" namespace datadog { @@ -28,14 +29,13 @@ class DictReader; struct SpanConfig; class TraceSampler; class SpanSampler; -struct TracerID; class Tracer { std::shared_ptr logger_; std::shared_ptr collector_; std::shared_ptr defaults_; RuntimeID runtime_id_; - TracerID id_; + TracerSignature signature_; std::shared_ptr tracer_telemetry_; std::shared_ptr span_sampler_; std::shared_ptr generator_; diff --git a/src/datadog/tracer_id.h b/src/datadog/tracer_id.h deleted file mode 100644 index dd4caf00..00000000 --- a/src/datadog/tracer_id.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "runtime_id.h" - -namespace datadog { -namespace tracing { - -// Identify a tracer -struct TracerID { - RuntimeID runtime_id; - std::string service; - std::string environment; -}; - -} // namespace tracing -} // namespace datadog diff --git a/src/datadog/tracer_signature.cpp b/src/datadog/tracer_signature.cpp new file mode 100644 index 00000000..83a805c3 --- /dev/null +++ b/src/datadog/tracer_signature.cpp @@ -0,0 +1,33 @@ +#include "tracer_signature.h" + +#include "version.h" + +namespace datadog { +namespace tracing { + +TracerSignature::TracerSignature(const RuntimeID& runtime_id, + const std::string& default_service, + const std::string& default_environment) + : runtime_id_(runtime_id), + default_service_(default_service), + default_environment_(default_environment) {} + +const RuntimeID& TracerSignature::runtime_id() const { return runtime_id_; } + +StringView TracerSignature::default_service() const { return default_service_; } + +StringView TracerSignature::default_environment() const { + return default_environment_; +} + +StringView TracerSignature::library_version() const { return tracer_version; } + +StringView TracerSignature::library_language() const { return "cpp"; } + +StringView TracerSignature::library_language_version() const { + static const std::string value = std::to_string(__cplusplus); + return value; +} + +} // namespace tracing +} // namespace datadog diff --git a/src/datadog/tracer_signature.h b/src/datadog/tracer_signature.h new file mode 100644 index 00000000..be86d94d --- /dev/null +++ b/src/datadog/tracer_signature.h @@ -0,0 +1,63 @@ +#pragma once + +// This component provides a class, `TracerSignature`, that contains the parts +// of a tracer's configuration that are used to refer to the tracer in Datadog's +// telemetry and remote configuration APIs. +// +// `TracerSignature` is used in three contexts: +// +// 1. When telemetry is sent to the Datadog Agent, the tracer signature is +// included in the request payload. See +// `TracerTelemetry::generate_telemetry_body` in `tracer_telemetry.cpp`. +// 2. When the Datadog Agent is polled for configuration updates, part of the +// tracer signature (all but the language version) is included in the request +// payload. See `RemoteConfigurationManager::make_request_payload` in +// `remote_config.h`. +// 3. When the Datadog Agent responds with configuration updates, the service +// and environment of the tracer signature are used to determine whether the +// updates are relevant to the `Tracer` that created the collector that is +// polling the Datadog Agent. See +// `RemoteConfigurationManager::process_response` in `remote_config.h`. + +#include + +#include "runtime_id.h" +#include "string_view.h" + +namespace datadog { +namespace tracing { + +class TracerSignature { + RuntimeID runtime_id_; + std::string default_service_; + std::string default_environment_; + + public: + // Create a tracer signature having the specified `runtime_id`, + // `default_service`, and `default_environment`. `default_service` and + // `default_environment` refer to the corresponding fields from + // `SpanDefaults`. + TracerSignature(const RuntimeID& runtime_id, + const std::string& default_service, + const std::string& default_environment); + + // Return the runtime ID with which the tracer was configured. + const RuntimeID& runtime_id() const; + // Return the `SpanDefaults::service` with which the tracer was configured. + StringView default_service() const; + // Return the `SpanDefaults::environment` with which the tracer was + // configured. + StringView default_environment() const; + // Return the version of this tracing library (`tracer_version` from + // `version.h`). + StringView library_version() const; + // Return the name of the programming language in which this library is + // written: "cpp". + StringView library_language() const; + // Return the version of C++ standard used to compile this library. It should + // be "201703". + StringView library_language_version() const; +}; + +} // namespace tracing +} // namespace datadog diff --git a/src/datadog/tracer_telemetry.cpp b/src/datadog/tracer_telemetry.cpp index 79bbb01c..2ef26a74 100644 --- a/src/datadog/tracer_telemetry.cpp +++ b/src/datadog/tracer_telemetry.cpp @@ -10,11 +10,11 @@ namespace tracing { TracerTelemetry::TracerTelemetry(bool enabled, const Clock& clock, const std::shared_ptr& logger, - const TracerID& tracer_id) + const TracerSignature& tracer_signature) : enabled_(enabled), clock_(clock), logger_(logger), - tracer_id_(tracer_id), + tracer_signature_(tracer_signature), hostname_(get_hostname().value_or("hostname-unavailable")) { if (enabled_) { // Register all the metrics that we're tracking by adding them to the @@ -62,15 +62,16 @@ nlohmann::json TracerTelemetry::generate_telemetry_body( {"seq_id", seq_id_}, {"request_type", request_type}, {"tracer_time", tracer_time}, - {"runtime_id", tracer_id_.runtime_id.string()}, + {"runtime_id", tracer_signature_.runtime_id().string()}, {"debug", debug_}, - {"application", nlohmann::json::object({ - {"service_name", tracer_id_.service}, - {"env", tracer_id_.environment}, - {"tracer_version", tracer_version}, - {"language_name", "cpp"}, - {"language_version", std::to_string(__cplusplus)}, - })}, + {"application", + nlohmann::json::object({ + {"service_name", tracer_signature_.default_service()}, + {"env", tracer_signature_.default_environment()}, + {"tracer_version", tracer_signature_.library_version()}, + {"language_name", tracer_signature_.library_language()}, + {"language_version", tracer_signature_.library_language_version()}, + })}, // TODO: host information (os, os_version, kernel, etc) {"host", nlohmann::json::object({ {"hostname", hostname_}, diff --git a/src/datadog/tracer_telemetry.h b/src/datadog/tracer_telemetry.h index 3cc64e57..e9488b94 100644 --- a/src/datadog/tracer_telemetry.h +++ b/src/datadog/tracer_telemetry.h @@ -31,7 +31,7 @@ #include "json.hpp" #include "metrics.h" #include "runtime_id.h" -#include "tracer_id.h" +#include "tracer_signature.h" namespace datadog { namespace tracing { @@ -44,7 +44,7 @@ class TracerTelemetry { bool debug_ = false; Clock clock_; std::shared_ptr logger_; - TracerID tracer_id_; + TracerSignature tracer_signature_; std::string hostname_; uint64_t seq_id_ = 0; // This structure contains all the metrics that are exposed by tracer @@ -100,7 +100,7 @@ class TracerTelemetry { public: TracerTelemetry(bool enabled, const Clock& clock, const std::shared_ptr& logger, - const TracerID& tracer_id); + const TracerSignature& tracer_signature); bool enabled() { return enabled_; }; // Provides access to the telemetry metrics for updating the values. // This value should not be stored. diff --git a/test/test_remote_config.cpp b/test/test_remote_config.cpp index 4e015c46..e0406da2 100644 --- a/test/test_remote_config.cpp +++ b/test/test_remote_config.cpp @@ -11,9 +11,10 @@ using namespace datadog::tracing; #define REMOTE_CONFIG_TEST(x) TEST_CASE(x, "[remote_config]") REMOTE_CONFIG_TEST("first payload") { - const TracerID tracer_id{/* runtime_id = */ RuntimeID::generate(), - /* service = */ "testsvc", - /* environment = */ "test"}; + const TracerSignature tracer_signature{ + /* runtime_id = */ RuntimeID::generate(), + /* service = */ "testsvc", + /* environment = */ "test"}; TracerConfig tracer_cfg; @@ -29,7 +30,7 @@ REMOTE_CONFIG_TEST("first payload") { config.defaults.environment = "test"; ConfigManager config_manager(*finalize_config(config)); - RemoteConfigurationManager rc(tracer_id, config_manager); + RemoteConfigurationManager rc(tracer_signature, config_manager); const auto payload = rc.make_request_payload(); @@ -43,9 +44,10 @@ REMOTE_CONFIG_TEST("first payload") { } REMOTE_CONFIG_TEST("response processing") { - const TracerID tracer_id{/* runtime_id = */ RuntimeID::generate(), - /* service = */ "testsvc", - /* environment = */ "test"}; + const TracerSignature tracer_signature{ + /* runtime_id = */ RuntimeID::generate(), + /* service = */ "testsvc", + /* environment = */ "test"}; TracerConfig tracer_cfg; @@ -62,7 +64,7 @@ REMOTE_CONFIG_TEST("response processing") { config.trace_sampler.sample_rate = 1.0; ConfigManager config_manager(*finalize_config(config)); - RemoteConfigurationManager rc(tracer_id, config_manager); + RemoteConfigurationManager rc(tracer_signature, config_manager); SECTION("ill formatted input", "inputs not following the Remote Configuration JSON schema should " @@ -83,39 +85,39 @@ REMOTE_CONFIG_TEST("response processing") { R"({ "targets": "eyJmb28iOiAiYmFyIn0=" })", // `targets` is missing the `targets` field. // decode("eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAiY3VzdG9tIjogeyJvcGFxdWVfYmFja2VuZF9zdGF0ZSI6ICIxNSJ9fX0=") == "{"signed": {"version": 2, "custom": {"opaque_backend_state": "15"}}}" - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAiY3VzdG9tIjogeyJvcGFxdWVfYmFja2VuZF9zdGF0ZSI6ICIxNSJ9fX0=", "client_configs": ["datadog"] })", // `/targets/targets` have no `datadog` entry // {"signed": {"version": 2, "targets": {"foo": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["datadog"] })", // `targets` OK but no `target_files` field. // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"] })", // `targets` OK. `target_files` field is empty. // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"], "target_files": [] })", // `targets` OK. `target_files` field is not an array. // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"], "target_files": 15 })", // `targets` OK. `target_files` field content is not base64 encoded. // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"], "target_files": [{"path": "foo/APM_TRACING/30", "raw": "Hello, Uranus!"}] @@ -123,7 +125,7 @@ REMOTE_CONFIG_TEST("response processing") { // `targets` OK. `target_files` field content is not a JSON base64 encoded. // decode("bm90IGpzb24=") == "not json" // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"], "target_files": [{"path": "foo/APM_TRACING/30", "raw": "bm90IGpzb24="}] @@ -131,7 +133,7 @@ REMOTE_CONFIG_TEST("response processing") { // `targets` OK. `target_files` field JSON base64 content do not follow the expected schema. // decode("eyJmb28iOiAiYmFyIn0=") == "{"foo": "bar"}" // {"signed": {"version": 2, "targets": {"foo/APM_TRACING/30": {}, "bar": {}},"custom": {"opaque_backend_state": "15"}}} - R"({ + R"({ "targets": "eyJzaWduZWQiOiB7InZlcnNpb24iOiAyLCAidGFyZ2V0cyI6IHsiZm9vL0FQTV9UUkFDSU5HLzMwIjoge30sICJiYXIiOiB7fX0sImN1c3RvbSI6IHsib3BhcXVlX2JhY2tlbmRfc3RhdGUiOiAiMTUifX19", "client_configs": ["foo/APM_TRACING/30"], "target_files": [{"path": "foo/APM_TRACING/30", "raw": "eyJmb28iOiAiYmFyIn0="}] diff --git a/test/test_tracer_telemetry.cpp b/test/test_tracer_telemetry.cpp index 9e691ad3..05cd00ba 100644 --- a/test/test_tracer_telemetry.cpp +++ b/test/test_tracer_telemetry.cpp @@ -22,11 +22,12 @@ TEST_CASE("Tracer telemetry") { }; auto logger = std::make_shared(); - const TracerID tracer_id{/* runtime_id = */ RuntimeID::generate(), - /* service = */ "testsvc", - /* environment = */ "test"}; + const TracerSignature tracer_signature{ + /* runtime_id = */ RuntimeID::generate(), + /* service = */ "testsvc", + /* environment = */ "test"}; - TracerTelemetry tracer_telemetry = {true, clock, logger, tracer_id}; + TracerTelemetry tracer_telemetry = {true, clock, logger, tracer_signature}; SECTION("generates app-started message") { auto app_started_message = tracer_telemetry.app_started();