Skip to content

Commit ca155b3

Browse files
author
Damien Mehala
authored
update unsuccessful HTTP requests handling (#38) (#50)
* update unsuccessful HTTP requests handling (#38) - consider exclusively 200 as a success HTTP status - log an error for successful HTTP status with an empty body * Code review - rework error message - remove unecessary line of code * Fix error message
1 parent 17359fe commit ca155b3

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/datadog/datadog_agent.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,25 @@ void DatadogAgent::flush() {
215215
logger = logger_](int response_status,
216216
const DictReader& /*response_headers*/,
217217
std::string response_body) {
218-
if (response_status < 200 || response_status >= 300) {
218+
if (response_status != 200) {
219219
logger->log_error([&](auto& stream) {
220220
stream << "Unexpected response status " << response_status
221-
<< " with body (starts on next line):\n"
221+
<< " in Datadog Agent response with body of length "
222+
<< response_body.size() << " (starts on next line):\n"
222223
<< response_body;
223224
});
224225
return;
225226
}
226227

228+
if (response_body.empty()) {
229+
logger->log_error([](auto& stream) {
230+
stream
231+
<< "Datadog Agent returned response without a body."
232+
" This tracer might be sending batches of traces too frequently";
233+
});
234+
return;
235+
}
236+
227237
auto result = parse_agent_traces_response(response_body);
228238
if (const auto* error_message = std::get_if<std::string>(&result)) {
229239
logger->log_error(*error_message);

test/test_datadog_agent.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,21 @@ TEST_CASE("CollectorResponse") {
6666
REQUIRE(logger->error_count() == 0);
6767
}
6868

69+
SECTION("HTTP success with empty body") {
70+
// Don't echo error messages.
71+
logger->echo = nullptr;
72+
73+
{
74+
http_client->response_status = 200;
75+
Tracer tracer{*finalized};
76+
auto span = tracer.create_span();
77+
(void)span;
78+
}
79+
80+
REQUIRE(event_scheduler->cancelled);
81+
REQUIRE(logger->error_count() == 1);
82+
}
83+
6984
SECTION("invalid responses") {
7085
// Don't echo error messages.
7186
logger->echo = nullptr;
@@ -101,7 +116,8 @@ TEST_CASE("CollectorResponse") {
101116
// Don't echo error messages.
102117
logger->echo = nullptr;
103118

104-
auto status = GENERATE(range(300, 600));
119+
// Datadog Agent only returns 200 on success.
120+
auto status = GENERATE(range(201, 600));
105121
{
106122
http_client->response_status = status;
107123
Tracer tracer{*finalized};

0 commit comments

Comments
 (0)