Skip to content

Commit 67151cf

Browse files
authored
fix: telemetry configuration_change payload (#152)
Resolve a regression introduced in #130 where the `configuration_change` payload didn't adhere to the telemetry schema.
1 parent e110a2b commit 67151cf

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/datadog/tracer_telemetry.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -356,16 +356,12 @@ std::string TracerTelemetry::configuration_change() {
356356
generate_configuration_field(config_metadata));
357357
}
358358

359-
// clang-format off
360-
auto configuration_change = nlohmann::json({
361-
{"request_type", "app-client-configuration-change"},
362-
{"payload", nlohmann::json{
363-
{"configuration", configuration_json}
364-
}}
365-
});
366-
// clang-format on
359+
auto telemetry_body =
360+
generate_telemetry_body("app-client-configuration-change");
361+
telemetry_body["payload"] =
362+
nlohmann::json{{"configuration", configuration_json}};
367363

368-
return configuration_change.dump();
364+
return telemetry_body.dump();
369365
}
370366

371367
} // namespace tracing

test/test_tracer_telemetry.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@
1414

1515
using namespace datadog::tracing;
1616

17+
namespace {
18+
bool is_valid_telemetry_payload(const nlohmann::json& json) {
19+
return json.contains("/api_version"_json_pointer) &&
20+
json.at("api_version") == "v2" &&
21+
json.contains("/seq_id"_json_pointer) &&
22+
json.contains("/request_type"_json_pointer) &&
23+
json.contains("/tracer_time"_json_pointer) &&
24+
json.contains("/runtime_id"_json_pointer) &&
25+
json.contains("/payload"_json_pointer) &&
26+
json.contains("/application"_json_pointer) &&
27+
json.contains("/host"_json_pointer);
28+
}
29+
30+
} // namespace
31+
1732
TEST_CASE("Tracer telemetry", "[telemetry]") {
1833
const std::time_t mock_time = 1672484400;
1934
const Clock clock = [mock_time]() {
@@ -37,6 +52,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
3752
SECTION("Without a defined integration") {
3853
auto app_started_message = tracer_telemetry.app_started({});
3954
auto app_started = nlohmann::json::parse(app_started_message);
55+
REQUIRE(is_valid_telemetry_payload(app_started) == true);
4056
REQUIRE(app_started["request_type"] == "message-batch");
4157
REQUIRE(app_started["payload"].size() == 1);
4258

@@ -50,6 +66,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
5066
true, clock, logger, tracer_signature, "nginx", "1.25.2"};
5167
auto app_started_message = tracer_telemetry.app_started({});
5268
auto app_started = nlohmann::json::parse(app_started_message);
69+
REQUIRE(is_valid_telemetry_payload(app_started) == true);
5370
REQUIRE(app_started["request_type"] == "message-batch");
5471
REQUIRE(app_started["payload"].size() == 2);
5572

@@ -68,8 +85,8 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
6885
ConfigMetadata::Origin::CODE)}};
6986

7087
auto app_started_message = tracer_telemetry.app_started(configuration);
71-
7288
auto app_started = nlohmann::json::parse(app_started_message);
89+
REQUIRE(is_valid_telemetry_payload(app_started) == true);
7390
REQUIRE(app_started["request_type"] == "message-batch");
7491
REQUIRE(app_started["payload"].is_array());
7592
REQUIRE(app_started["payload"].size() == 1);
@@ -97,6 +114,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
97114
auto config_change_message = nlohmann::json::parse(
98115
tracer_telemetry.configuration_change(), nullptr, false);
99116
REQUIRE(config_change_message.is_discarded() == false);
117+
REQUIRE(is_valid_telemetry_payload(app_started) == true);
100118

101119
CHECK(config_change_message["request_type"] ==
102120
"app-client-configuration-change");
@@ -115,6 +133,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
115133
auto config_change_message = nlohmann::json::parse(
116134
tracer_telemetry.configuration_change(), nullptr, false);
117135
REQUIRE(config_change_message.is_discarded() == false);
136+
REQUIRE(is_valid_telemetry_payload(config_change_message) == true);
118137

119138
CHECK(config_change_message["request_type"] ==
120139
"app-client-configuration-change");
@@ -149,6 +168,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
149168
SECTION("generates a heartbeat message") {
150169
auto heartbeat_message = tracer_telemetry.heartbeat_and_telemetry();
151170
auto message_batch = nlohmann::json::parse(heartbeat_message);
171+
REQUIRE(is_valid_telemetry_payload(message_batch) == true);
152172
REQUIRE(message_batch["payload"].size() == 1);
153173
auto heartbeat = message_batch["payload"][0];
154174
REQUIRE(heartbeat["request_type"] == "app-heartbeat");
@@ -166,6 +186,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
166186
auto heartbeat_and_telemetry_message =
167187
tracer_telemetry.heartbeat_and_telemetry();
168188
auto message_batch = nlohmann::json::parse(heartbeat_and_telemetry_message);
189+
REQUIRE(is_valid_telemetry_payload(message_batch) == true);
169190
REQUIRE(message_batch["payload"].size() == 2);
170191
auto generate_metrics = message_batch["payload"][1];
171192
REQUIRE(generate_metrics["request_type"] == "generate-metrics");
@@ -186,6 +207,7 @@ TEST_CASE("Tracer telemetry", "[telemetry]") {
186207
SECTION("generates an app-closing event") {
187208
auto app_closing_message = tracer_telemetry.app_closing();
188209
auto message_batch = nlohmann::json::parse(app_closing_message);
210+
REQUIRE(is_valid_telemetry_payload(message_batch) == true);
189211
REQUIRE(message_batch["payload"].size() == 1);
190212
auto heartbeat = message_batch["payload"][0];
191213
REQUIRE(heartbeat["request_type"] == "app-closing");

0 commit comments

Comments
 (0)