diff --git a/dd-trace-cpp b/dd-trace-cpp index f8c39137..92cdfe6f 160000 --- a/dd-trace-cpp +++ b/dd-trace-cpp @@ -1 +1 @@ -Subproject commit f8c39137d4066486e20102f772913276b391f7f7 +Subproject commit 92cdfe6fb5713f0caef02d1e749eff3bcd171baf diff --git a/src/datadog_conf.h b/src/datadog_conf.h index 0b2e67d5..d413e016 100644 --- a/src/datadog_conf.h +++ b/src/datadog_conf.h @@ -94,6 +94,7 @@ struct datadog_main_conf_t { // module configuration, instead we grab the values from the environment // of the master process and apply them later in the worker processes after // `fork()`. + std::string root_session_id; std::vector environment_variables; // If `propagation_styles` is empty, then use the defaults instead. // `propagation_styles` is populated by the "datadog_propagation_styles" diff --git a/src/ngx_http_datadog_module.cpp b/src/ngx_http_datadog_module.cpp index 138d3901..27e71b5f 100644 --- a/src/ngx_http_datadog_module.cpp +++ b/src/ngx_http_datadog_module.cpp @@ -1,5 +1,7 @@ #include "ngx_http_datadog_module.h" +#include + #include #include #include @@ -408,6 +410,7 @@ static void *create_datadog_main_conf(ngx_conf_t *conf) noexcept { if (register_destructor(conf->pool, main_conf)) { return nullptr; // error } + main_conf->root_session_id = dd::RuntimeID::generate().string(); return main_conf; } diff --git a/src/tracing_library.cpp b/src/tracing_library.cpp index 4da37089..4bfbc46f 100644 --- a/src/tracing_library.cpp +++ b/src/tracing_library.cpp @@ -55,6 +55,10 @@ dd::Expected TracingLibrary::make_tracer( config.integration_version = NGINX_VERSION; config.service = "nginx"; + if (!nginx_conf.root_session_id.empty()) { + config.root_session_id = nginx_conf.root_session_id; + } + if (nginx_conf.apm_tracing_enabled != NGX_CONF_UNSET) { config.tracing_enabled = {nginx_conf.apm_tracing_enabled == 1}; }