From ffbcc622c139aec576d3fdb2023c1a4e4fc17ae0 Mon Sep 17 00:00:00 2001 From: Damien Mehala Date: Wed, 24 Jan 2024 13:48:28 +0100 Subject: [PATCH 1/2] feat: Set integration informations --- src/tracing_library.cpp | 106 +++++++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 44 deletions(-) diff --git a/src/tracing_library.cpp b/src/tracing_library.cpp index ab1e1010..dd30c8b3 100644 --- a/src/tracing_library.cpp +++ b/src/tracing_library.cpp @@ -33,15 +33,19 @@ std::string_view or_default(std::string_view config_json) { return config_json; } -} // namespace +} // namespace -dd::Expected TracingLibrary::make_tracer(const datadog_main_conf_t& nginx_conf) { +dd::Expected +TracingLibrary::make_tracer(const datadog_main_conf_t &nginx_conf) { dd::TracerConfig config; config.logger = std::make_shared(); config.agent.event_scheduler = std::make_shared(); + config.integration_name = "nginx"; + config.integration_version = NGINX_VERSION; if (!nginx_conf.propagation_styles.empty()) { - config.injection_styles = config.extraction_styles = nginx_conf.propagation_styles; + config.injection_styles = config.extraction_styles = + nginx_conf.propagation_styles; } if (nginx_conf.service_name) { @@ -71,11 +75,11 @@ dd::Expected TracingLibrary::make_tracer(const datadog_main_conf_t& // order in which we try the rules doesn't change the outcome. // Deeper directives are more likely to match a given request, though, and // so this can be thought of as an optimization. - const auto by_depth_descending = [](const auto& left, const auto& right) { + const auto by_depth_descending = [](const auto &left, const auto &right) { return *left.depth > *right.depth; }; std::stable_sort(rules.begin(), rules.end(), by_depth_descending); - for (sampling_rule_t& rule : rules) { + for (sampling_rule_t &rule : rules) { config.trace_sampler.rules.push_back(std::move(rule.rule)); } @@ -87,8 +91,10 @@ dd::Expected TracingLibrary::make_tracer(const datadog_main_conf_t& return dd::Tracer(*final_config); } -dd::Expected> TracingLibrary::propagation_header_names( - const std::vector& configured_styles, dd::Logger& logger) { +dd::Expected> +TracingLibrary::propagation_header_names( + const std::vector &configured_styles, + dd::Logger &logger) { std::vector result; // Create a tracer config that contains `configured_styles` (or the default @@ -105,16 +111,20 @@ dd::Expected> TracingLibrary::propagation_header_n minimal_config.extraction_styles = configured_styles; } auto finalized_config = dd::finalize_config(minimal_config); - if (auto* error = finalized_config.if_error()) { + if (auto *error = finalized_config.if_error()) { return std::move(*error); } - if (!configured_styles.empty() && configured_styles != finalized_config->injection_styles) { - logger.log_error([&](std::ostream& log) { - log << "Actual injection propagation styles differ from that specified in the nginx " - "configuration. The datadog_propagation_styles directive indicated the values " + if (!configured_styles.empty() && + configured_styles != finalized_config->injection_styles) { + logger.log_error([&](std::ostream &log) { + log << "Actual injection propagation styles differ from that specified " + "in the nginx " + "configuration. The datadog_propagation_styles directive " + "indicated the values " << dd::to_json(configured_styles) - << ", but after applying environment variables, the final values are instead " + << ", but after applying environment variables, the final values are " + "instead " << dd::to_json(finalized_config->injection_styles); }); } @@ -123,25 +133,25 @@ dd::Expected> TracingLibrary::propagation_header_n // in dd-trace-cpp. for (const auto style : finalized_config->injection_styles) { switch (style) { - case dd::PropagationStyle::DATADOG: - result.push_back("x-datadog-trace-id"); - result.push_back("x-datadog-parent-id"); - result.push_back("x-datadog-sampling-priority"); - result.push_back("x-datadog-origin"); - result.push_back("x-datadog-tags"); - result.push_back("x-datadog-delegate-trace-sampling"); - break; - case dd::PropagationStyle::B3: - result.push_back("x-b3-traceid"); - result.push_back("x-b3-spanid"); - result.push_back("x-b3-sampled"); - break; - case dd::PropagationStyle::W3C: - result.push_back("traceparent"); - result.push_back("tracestate"); - break; - case dd::PropagationStyle::NONE: - break; + case dd::PropagationStyle::DATADOG: + result.push_back("x-datadog-trace-id"); + result.push_back("x-datadog-parent-id"); + result.push_back("x-datadog-sampling-priority"); + result.push_back("x-datadog-origin"); + result.push_back("x-datadog-tags"); + result.push_back("x-datadog-delegate-trace-sampling"); + break; + case dd::PropagationStyle::B3: + result.push_back("x-b3-traceid"); + result.push_back("x-b3-spanid"); + result.push_back("x-b3-sampled"); + break; + case dd::PropagationStyle::W3C: + result.push_back("traceparent"); + result.push_back("tracestate"); + break; + case dd::PropagationStyle::NONE: + break; } } @@ -152,13 +162,17 @@ std::string_view TracingLibrary::propagation_header_variable_name_prefix() { return "datadog_propagation_header_"; } -std::string_view TracingLibrary::environment_variable_name_prefix() { return "datadog_env_"; } +std::string_view TracingLibrary::environment_variable_name_prefix() { + return "datadog_env_"; +} std::string_view TracingLibrary::configuration_json_variable_name() { return "datadog_config_json"; } -std::string_view TracingLibrary::location_variable_name() { return "datadog_location"; } +std::string_view TracingLibrary::location_variable_name() { + return "datadog_location"; +} std::string_view TracingLibrary::proxy_directive_variable_name() { return "datadog_proxy_directive"; @@ -169,7 +183,7 @@ namespace { class SpanContextJSONWriter : public dd::DictWriter { nlohmann::json output_object_; - public: +public: SpanContextJSONWriter() : output_object_(nlohmann::json::object()) {} void set(std::string_view key, std::string_view value) override { @@ -179,10 +193,10 @@ class SpanContextJSONWriter : public dd::DictWriter { output_object_[std::move(normalized_key)] = value; } - nlohmann::json& json() { return output_object_; } + nlohmann::json &json() { return output_object_; } }; -std::string span_property(std::string_view key, const dd::Span& span) { +std::string span_property(std::string_view key, const dd::Span &span) { const auto not_found = "-"; if (key == "trace_id") { @@ -198,15 +212,16 @@ std::string span_property(std::string_view key, const dd::Span& span) { return not_found; } -} // namespace +} // namespace NginxVariableFamily TracingLibrary::span_variables() { return {.prefix = "datadog_", .resolve = span_property}; } std::vector TracingLibrary::environment_variable_names() { - return std::vector{std::begin(dd::environment::variable_names), - std::end(dd::environment::variable_names)}; + return std::vector{ + std::begin(dd::environment::variable_names), + std::end(dd::environment::variable_names)}; } std::string_view TracingLibrary::default_request_operation_name_pattern() { @@ -217,7 +232,8 @@ std::string_view TracingLibrary::default_location_operation_name_pattern() { return "nginx.$datadog_proxy_directive"; } -std::unordered_map TracingLibrary::default_tags() { +std::unordered_map +TracingLibrary::default_tags() { return { // originally defined by nginx-opentracing {"component", "nginx"}, @@ -234,7 +250,9 @@ std::unordered_map TracingLibrary::default_t {"nginx.location", "$datadog_location"}}; } -std::string_view TracingLibrary::default_resource_name_pattern() { return "$request_method $uri"; } +std::string_view TracingLibrary::default_resource_name_pattern() { + return "$request_method $uri"; +} bool TracingLibrary::tracing_on_by_default() { return true; } @@ -244,5 +262,5 @@ std::string_view TracingLibrary::sampling_delegation_response_variable_name() { return "datadog_sampling_delegation_response"; } -} // namespace nginx -} // namespace datadog +} // namespace nginx +} // namespace datadog From 79a3dc8249e79a6702fd7e9df019bcc35d588c51 Mon Sep 17 00:00:00 2001 From: David Goffredo Date: Wed, 24 Jan 2024 14:19:30 -0500 Subject: [PATCH 2/2] run `make format` --- src/tracing_library.cpp | 83 +++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/src/tracing_library.cpp b/src/tracing_library.cpp index dd30c8b3..ffec9daf 100644 --- a/src/tracing_library.cpp +++ b/src/tracing_library.cpp @@ -33,10 +33,9 @@ std::string_view or_default(std::string_view config_json) { return config_json; } -} // namespace +} // namespace -dd::Expected -TracingLibrary::make_tracer(const datadog_main_conf_t &nginx_conf) { +dd::Expected TracingLibrary::make_tracer(const datadog_main_conf_t &nginx_conf) { dd::TracerConfig config; config.logger = std::make_shared(); config.agent.event_scheduler = std::make_shared(); @@ -44,8 +43,7 @@ TracingLibrary::make_tracer(const datadog_main_conf_t &nginx_conf) { config.integration_version = NGINX_VERSION; if (!nginx_conf.propagation_styles.empty()) { - config.injection_styles = config.extraction_styles = - nginx_conf.propagation_styles; + config.injection_styles = config.extraction_styles = nginx_conf.propagation_styles; } if (nginx_conf.service_name) { @@ -91,10 +89,8 @@ TracingLibrary::make_tracer(const datadog_main_conf_t &nginx_conf) { return dd::Tracer(*final_config); } -dd::Expected> -TracingLibrary::propagation_header_names( - const std::vector &configured_styles, - dd::Logger &logger) { +dd::Expected> TracingLibrary::propagation_header_names( + const std::vector &configured_styles, dd::Logger &logger) { std::vector result; // Create a tracer config that contains `configured_styles` (or the default @@ -115,8 +111,7 @@ TracingLibrary::propagation_header_names( return std::move(*error); } - if (!configured_styles.empty() && - configured_styles != finalized_config->injection_styles) { + if (!configured_styles.empty() && configured_styles != finalized_config->injection_styles) { logger.log_error([&](std::ostream &log) { log << "Actual injection propagation styles differ from that specified " "in the nginx " @@ -133,25 +128,25 @@ TracingLibrary::propagation_header_names( // in dd-trace-cpp. for (const auto style : finalized_config->injection_styles) { switch (style) { - case dd::PropagationStyle::DATADOG: - result.push_back("x-datadog-trace-id"); - result.push_back("x-datadog-parent-id"); - result.push_back("x-datadog-sampling-priority"); - result.push_back("x-datadog-origin"); - result.push_back("x-datadog-tags"); - result.push_back("x-datadog-delegate-trace-sampling"); - break; - case dd::PropagationStyle::B3: - result.push_back("x-b3-traceid"); - result.push_back("x-b3-spanid"); - result.push_back("x-b3-sampled"); - break; - case dd::PropagationStyle::W3C: - result.push_back("traceparent"); - result.push_back("tracestate"); - break; - case dd::PropagationStyle::NONE: - break; + case dd::PropagationStyle::DATADOG: + result.push_back("x-datadog-trace-id"); + result.push_back("x-datadog-parent-id"); + result.push_back("x-datadog-sampling-priority"); + result.push_back("x-datadog-origin"); + result.push_back("x-datadog-tags"); + result.push_back("x-datadog-delegate-trace-sampling"); + break; + case dd::PropagationStyle::B3: + result.push_back("x-b3-traceid"); + result.push_back("x-b3-spanid"); + result.push_back("x-b3-sampled"); + break; + case dd::PropagationStyle::W3C: + result.push_back("traceparent"); + result.push_back("tracestate"); + break; + case dd::PropagationStyle::NONE: + break; } } @@ -162,17 +157,13 @@ std::string_view TracingLibrary::propagation_header_variable_name_prefix() { return "datadog_propagation_header_"; } -std::string_view TracingLibrary::environment_variable_name_prefix() { - return "datadog_env_"; -} +std::string_view TracingLibrary::environment_variable_name_prefix() { return "datadog_env_"; } std::string_view TracingLibrary::configuration_json_variable_name() { return "datadog_config_json"; } -std::string_view TracingLibrary::location_variable_name() { - return "datadog_location"; -} +std::string_view TracingLibrary::location_variable_name() { return "datadog_location"; } std::string_view TracingLibrary::proxy_directive_variable_name() { return "datadog_proxy_directive"; @@ -183,7 +174,7 @@ namespace { class SpanContextJSONWriter : public dd::DictWriter { nlohmann::json output_object_; -public: + public: SpanContextJSONWriter() : output_object_(nlohmann::json::object()) {} void set(std::string_view key, std::string_view value) override { @@ -212,16 +203,15 @@ std::string span_property(std::string_view key, const dd::Span &span) { return not_found; } -} // namespace +} // namespace NginxVariableFamily TracingLibrary::span_variables() { return {.prefix = "datadog_", .resolve = span_property}; } std::vector TracingLibrary::environment_variable_names() { - return std::vector{ - std::begin(dd::environment::variable_names), - std::end(dd::environment::variable_names)}; + return std::vector{std::begin(dd::environment::variable_names), + std::end(dd::environment::variable_names)}; } std::string_view TracingLibrary::default_request_operation_name_pattern() { @@ -232,8 +222,7 @@ std::string_view TracingLibrary::default_location_operation_name_pattern() { return "nginx.$datadog_proxy_directive"; } -std::unordered_map -TracingLibrary::default_tags() { +std::unordered_map TracingLibrary::default_tags() { return { // originally defined by nginx-opentracing {"component", "nginx"}, @@ -250,9 +239,7 @@ TracingLibrary::default_tags() { {"nginx.location", "$datadog_location"}}; } -std::string_view TracingLibrary::default_resource_name_pattern() { - return "$request_method $uri"; -} +std::string_view TracingLibrary::default_resource_name_pattern() { return "$request_method $uri"; } bool TracingLibrary::tracing_on_by_default() { return true; } @@ -262,5 +249,5 @@ std::string_view TracingLibrary::sampling_delegation_response_variable_name() { return "datadog_sampling_delegation_response"; } -} // namespace nginx -} // namespace datadog +} // namespace nginx +} // namespace datadog