Skip to content

Commit cf59df3

Browse files
authored
fix(telemetry): use tracer's service, env and runtime ID (#219)
This fixes a regression introduced during the telemetry module refactoring. When the telemetry module is initialized in the tracer context, it now correctly uses the tracer's service name, environment, and runtime ID to ensure consistency.
1 parent fe21e68 commit cf59df3

File tree

7 files changed

+92
-27
lines changed

7 files changed

+92
-27
lines changed

include/datadog/telemetry/telemetry.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <datadog/logger.h>
88
#include <datadog/telemetry/configuration.h>
99
#include <datadog/telemetry/metrics.h>
10+
#include <datadog/tracer_signature.h>
1011

1112
#include <memory>
1213
#include <vector>
@@ -35,6 +36,14 @@ void init(FinalizedConfiguration configuration,
3536
tracing::HTTPClient::URL agent_url,
3637
tracing::Clock clock = tracing::default_clock);
3738

39+
void init(FinalizedConfiguration configuration,
40+
tracing::TracerSignature tracer_signature,
41+
std::shared_ptr<tracing::Logger> logger,
42+
std::shared_ptr<tracing::HTTPClient> client,
43+
std::shared_ptr<tracing::EventScheduler> event_scheduler,
44+
tracing::HTTPClient::URL agent_url,
45+
tracing::Clock clock = tracing::default_clock);
46+
3847
/// Sends configuration changes.
3948
///
4049
/// This function is responsible for sending reported configuration changes

src/datadog/telemetry/telemetry.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ using TelemetryProxy = std::variant<NoopTelemetry, Telemetry>;
2727
/// NOTE(@dmehala): Here to facilitate Meyer's singleton construction.
2828
struct Ctor_param final {
2929
FinalizedConfiguration configuration;
30+
tracing::TracerSignature tracer_signature;
3031
std::shared_ptr<tracing::Logger> logger;
3132
std::shared_ptr<tracing::HTTPClient> client;
3233
std::shared_ptr<tracing::EventScheduler> scheduler;
@@ -36,8 +37,9 @@ struct Ctor_param final {
3637

3738
TelemetryProxy make_telemetry(const Ctor_param& init) {
3839
if (!init.configuration.enabled) return NoopTelemetry{};
39-
return Telemetry{init.configuration, init.logger, init.client,
40-
init.scheduler, init.agent_url, init.clock};
40+
return Telemetry{init.configuration, init.tracer_signature, init.logger,
41+
init.client, init.scheduler, init.agent_url,
42+
init.clock};
4143
}
4244

4345
TelemetryProxy& instance(
@@ -51,8 +53,20 @@ void init(FinalizedConfiguration configuration,
5153
std::shared_ptr<tracing::HTTPClient> client,
5254
std::shared_ptr<tracing::EventScheduler> event_scheduler,
5355
tracing::HTTPClient::URL agent_url, tracing::Clock clock) {
54-
instance(Ctor_param{configuration, logger, client, event_scheduler, agent_url,
55-
clock});
56+
instance(Ctor_param{configuration,
57+
tracing::TracerSignature(tracing::RuntimeID::generate(),
58+
tracing::get_process_name(), ""),
59+
logger, client, event_scheduler, agent_url, clock});
60+
}
61+
62+
void init(FinalizedConfiguration configuration,
63+
tracing::TracerSignature tracer_signature,
64+
std::shared_ptr<tracing::Logger> logger,
65+
std::shared_ptr<tracing::HTTPClient> client,
66+
std::shared_ptr<tracing::EventScheduler> event_scheduler,
67+
tracing::HTTPClient::URL agent_url, tracing::Clock clock) {
68+
instance(Ctor_param{configuration, tracer_signature, logger, client,
69+
event_scheduler, agent_url, clock});
5670
}
5771

5872
void send_configuration_change() {

src/datadog/telemetry/telemetry_impl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,15 @@ nlohmann::json encode_distributions(
195195
} // namespace
196196

197197
Telemetry::Telemetry(FinalizedConfiguration config,
198+
TracerSignature tracer_signature,
198199
std::shared_ptr<tracing::Logger> logger,
199200
std::shared_ptr<tracing::HTTPClient> client,
200201
std::shared_ptr<tracing::EventScheduler> event_scheduler,
201202
HTTPClient::URL agent_url, Clock clock)
202203
: config_(std::move(config)),
203204
logger_(std::move(logger)),
204205
telemetry_endpoint_(make_telemetry_endpoint(agent_url)),
205-
tracer_signature_(tracing::RuntimeID::generate(),
206-
tracing::get_process_name(), ""),
206+
tracer_signature_(tracer_signature),
207207
http_client_(client),
208208
clock_(std::move(clock)),
209209
scheduler_(event_scheduler),

src/datadog/telemetry/telemetry_impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class Telemetry final {
7676
/// @param logger User logger instance.
7777
/// @param metrics A vector user metrics to report.
7878
Telemetry(FinalizedConfiguration configuration,
79+
tracing::TracerSignature tracer_signature,
7980
std::shared_ptr<tracing::Logger> logger,
8081
std::shared_ptr<tracing::HTTPClient> client,
8182
std::shared_ptr<tracing::EventScheduler> event_scheduler,

src/datadog/tracer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
5959
baggage_opts_(config.baggage_opts),
6060
baggage_injection_enabled_(false),
6161
baggage_extraction_enabled_(false) {
62-
telemetry::init(config.telemetry, logger_, config.http_client,
62+
telemetry::init(config.telemetry, signature_, logger_, config.http_client,
6363
config.event_scheduler, config.agent_url);
6464
if (config.report_hostname) {
6565
hostname_ = get_hostname();

src/datadog/tracer_config.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -371,15 +371,15 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
371371
// Baggage
372372
std::tie(origin, final_config.baggage_opts.max_items) =
373373
pick(env_config->baggage_max_items, user_config.baggage_max_items, 64);
374-
final_config.metadata[ConfigName::TRACE_BAGGAGE_MAX_ITEMS] =
375-
ConfigMetadata(ConfigName::TRACE_BAGGAGE_MAX_ITEMS,
376-
to_string(final_config.baggage_opts.max_items), origin);
374+
final_config.metadata[ConfigName::TRACE_BAGGAGE_MAX_ITEMS] = ConfigMetadata(
375+
ConfigName::TRACE_BAGGAGE_MAX_ITEMS,
376+
std::to_string(final_config.baggage_opts.max_items), origin);
377377

378378
std::tie(origin, final_config.baggage_opts.max_bytes) =
379379
pick(env_config->baggage_max_bytes, user_config.baggage_max_bytes, 8192);
380-
final_config.metadata[ConfigName::TRACE_BAGGAGE_MAX_BYTES] =
381-
ConfigMetadata(ConfigName::TRACE_BAGGAGE_MAX_BYTES,
382-
to_string(final_config.baggage_opts.max_bytes), origin);
380+
final_config.metadata[ConfigName::TRACE_BAGGAGE_MAX_BYTES] = ConfigMetadata(
381+
ConfigName::TRACE_BAGGAGE_MAX_BYTES,
382+
std::to_string(final_config.baggage_opts.max_bytes), origin);
383383

384384
if (final_config.baggage_opts.max_items <= 0 ||
385385
final_config.baggage_opts.max_bytes < 3) {

test/telemetry/test_telemetry.cpp

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,12 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
9898

9999
SECTION("ctor send app-started message") {
100100
SECTION("Without a defined integration") {
101-
Telemetry telemetry{*finalize_config(), logger, client, scheduler, *url};
101+
Telemetry telemetry{*finalize_config(),
102+
tracer_signature,
103+
logger,
104+
client,
105+
scheduler,
106+
*url};
102107
/// By default the integration is `datadog` with the tracer version.
103108
/// TODO: remove the default because these datadog are already part of the
104109
/// request header.
@@ -118,7 +123,11 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
118123
Configuration cfg;
119124
cfg.integration_name = "nginx";
120125
cfg.integration_version = "1.25.2";
121-
Telemetry telemetry2{*finalize_config(cfg), logger, client, scheduler,
126+
Telemetry telemetry2{*finalize_config(cfg),
127+
tracer_signature,
128+
logger,
129+
client,
130+
scheduler,
122131
*url};
123132

124133
auto app_started = nlohmann::json::parse(client->request_body);
@@ -144,7 +153,12 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
144153
ddtest::EnvGuard install_time_env("DD_INSTRUMENTATION_INSTALL_TIME",
145154
"1703188212");
146155

147-
Telemetry telemetry4{*finalize_config(), logger, client, scheduler, *url};
156+
Telemetry telemetry4{*finalize_config(),
157+
tracer_signature,
158+
logger,
159+
client,
160+
scheduler,
161+
*url};
148162

149163
auto app_started = nlohmann::json::parse(client->request_body);
150164
REQUIRE(is_valid_telemetry_payload(app_started) == true);
@@ -186,7 +200,11 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
186200
Configuration cfg;
187201
cfg.products.emplace_back(std::move(product));
188202

189-
Telemetry telemetry3{*finalize_config(cfg), logger, client, scheduler,
203+
Telemetry telemetry3{*finalize_config(cfg),
204+
tracer_signature,
205+
logger,
206+
client,
207+
scheduler,
190208
*url};
191209

192210
auto app_started = nlohmann::json::parse(client->request_body);
@@ -290,7 +308,12 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry lifecycle") {
290308

291309
SECTION("dtor send app-closing message") {
292310
{
293-
Telemetry telemetry{*finalize_config(), logger, client, scheduler, *url};
311+
Telemetry telemetry{*finalize_config(),
312+
tracer_signature,
313+
logger,
314+
client,
315+
scheduler,
316+
*url};
294317
client->clear();
295318
}
296319

@@ -322,8 +345,13 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry API") {
322345

323346
auto url = HTTPClient::URL::parse("http://localhost:8000");
324347

325-
Telemetry telemetry{*finalize_config(), logger, client,
326-
scheduler, *url, clock};
348+
Telemetry telemetry{*finalize_config(),
349+
tracer_signature,
350+
logger,
351+
client,
352+
scheduler,
353+
*url,
354+
clock};
327355

328356
SECTION("generates a heartbeat message") {
329357
client->clear();
@@ -624,8 +652,13 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry API") {
624652
const Rate rps{"request", "rate-test", true};
625653
const Counter my_counter{"my_counter", "counter-test", true};
626654
{
627-
Telemetry tmp_telemetry{*finalize_config(), logger, client,
628-
scheduler, *url, clock};
655+
Telemetry tmp_telemetry{*finalize_config(),
656+
tracer_signature,
657+
logger,
658+
client,
659+
scheduler,
660+
*url,
661+
clock};
629662
tmp_telemetry.increment_counter(my_counter); // = 1
630663
tmp_telemetry.add_datapoint(response_time, 128);
631664
tmp_telemetry.set_rate(rps, 1000);
@@ -772,8 +805,13 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry API") {
772805

773806
SECTION("dtor sends logs in `app-closing` message") {
774807
{
775-
Telemetry tmp_telemetry{*finalize_config(), logger, client,
776-
scheduler, *url, clock};
808+
Telemetry tmp_telemetry{*finalize_config(),
809+
tracer_signature,
810+
logger,
811+
client,
812+
scheduler,
813+
*url,
814+
clock};
777815
tmp_telemetry.log_warning("Be careful!");
778816
client->clear();
779817
}
@@ -819,7 +857,8 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry configuration") {
819857
auto final_cfg = finalize_config(cfg);
820858
REQUIRE(final_cfg);
821859

822-
Telemetry telemetry(*final_cfg, logger, client, scheduler, *url);
860+
Telemetry telemetry(*final_cfg, tracer_signature, logger, client, scheduler,
861+
*url);
823862
CHECK(scheduler->metrics_callback == nullptr);
824863
CHECK(scheduler->metrics_interval == nullopt);
825864
}
@@ -832,7 +871,8 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry configuration") {
832871
auto final_cfg = finalize_config(cfg);
833872
REQUIRE(final_cfg);
834873

835-
Telemetry telemetry(*final_cfg, logger, client, scheduler, *url);
874+
Telemetry telemetry(*final_cfg, tracer_signature, logger, client, scheduler,
875+
*url);
836876
CHECK(scheduler->metrics_callback != nullptr);
837877
CHECK(scheduler->metrics_interval == 500ms);
838878

@@ -849,7 +889,8 @@ TELEMETRY_IMPLEMENTATION_TEST("Tracer telemetry configuration") {
849889
auto final_cfg = finalize_config(cfg);
850890
REQUIRE(final_cfg);
851891

852-
Telemetry telemetry(*final_cfg, logger, client, scheduler, *url);
892+
Telemetry telemetry(*final_cfg, tracer_signature, logger, client, scheduler,
893+
*url);
853894
telemetry.log_error("error");
854895

855896
// NOTE(@dmehala): logs are sent with an heartbeat.

0 commit comments

Comments
 (0)