Skip to content

Commit 31d88a3

Browse files
committed
Refactor http client callbacks
1 parent 28cc724 commit 31d88a3

File tree

2 files changed

+32
-75
lines changed

2 files changed

+32
-75
lines changed

src/datadog/datadog_agent.cpp

Lines changed: 28 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,28 @@ DatadogAgent::DatadogAgent(
159159
send_heartbeat_and_telemetry();
160160
}
161161
});
162+
// Callback for setting telemetry request headers.
163+
telemetry_set_request_headers_ = [](DictWriter& headers) {
164+
headers.set("Content-Type", "application/json");
165+
};
166+
// Callback for successful telemetry HTTP requests, to examine HTTP status.
167+
telemetry_on_response_ = [logger = logger_](
168+
int response_status,
169+
const DictReader& /*response_headers*/,
170+
std::string response_body) {
171+
if (response_status < 200 || response_status >= 300) {
172+
logger->log_error([&](auto& stream) {
173+
stream << "Unexpected telemetry response status " << response_status
174+
<< " with body (starts on next line):\n"
175+
<< response_body;
176+
});
177+
}
178+
};
179+
// Callback for unsuccessful telemetry HTTP requests.
180+
telemetry_on_error_ = [logger = logger_](Error error) {
181+
logger->log_error(error.with_prefix(
182+
"Error occurred during HTTP request for telemetry: "));
183+
};
162184
}
163185
}
164186

@@ -310,98 +332,29 @@ void DatadogAgent::flush() {
310332

311333
void DatadogAgent::send_app_started(nlohmann::json&& tracer_config) {
312334
auto payload = tracer_telemetry_->app_started(std::move(tracer_config));
313-
auto set_request_headers = [&](DictWriter& headers) {
314-
headers.set("Content-Type", "application/json");
315-
};
316-
317-
// Callback for a successful HTTP request, to examine HTTP status.
318-
auto on_response = [logger = logger_](int response_status,
319-
const DictReader& /*response_headers*/,
320-
std::string response_body) {
321-
if (response_status < 200 || response_status >= 300) {
322-
logger->log_error([&](auto& stream) {
323-
stream << "Unexpected telemetry response status " << response_status
324-
<< " with body (starts on next line):\n"
325-
<< response_body;
326-
});
327-
}
328-
};
329-
330-
// Callback for unsuccessful HTTP request.
331-
auto on_error = [logger = logger_](Error error) {
332-
logger->log_error(error.with_prefix(
333-
"Error occurred during HTTP request for telemetry: "));
334-
};
335-
336335
auto post_result = http_client_->post(
337-
telemetry_endpoint_, std::move(set_request_headers), std::move(payload),
338-
std::move(on_response), std::move(on_error));
336+
telemetry_endpoint_, telemetry_set_request_headers_, std::move(payload),
337+
telemetry_on_response_, telemetry_on_error_);
339338
if (auto* error = post_result.if_error()) {
340339
logger_->log_error(*error);
341340
}
342341
}
343342

344343
void DatadogAgent::send_heartbeat_and_telemetry() {
345344
auto payload = tracer_telemetry_->heartbeat_and_telemetry();
346-
auto set_request_headers = [&](DictWriter& headers) {
347-
headers.set("Content-Type", "application/json");
348-
};
349-
350-
// Callback for a successful HTTP request, to examine HTTP status.
351-
auto on_response = [logger = logger_](int response_status,
352-
const DictReader& /*response_headers*/,
353-
std::string response_body) {
354-
if (response_status < 200 || response_status >= 300) {
355-
logger->log_error([&](auto& stream) {
356-
stream << "Unexpected telemetry response status " << response_status
357-
<< " with body (starts on next line):\n"
358-
<< response_body;
359-
});
360-
}
361-
};
362-
363-
// Callback for unsuccessful HTTP request.
364-
auto on_error = [logger = logger_](Error error) {
365-
logger->log_error(error.with_prefix(
366-
"Error occurred during HTTP request for telemetry: "));
367-
};
368-
369345
auto post_result = http_client_->post(
370-
telemetry_endpoint_, std::move(set_request_headers), std::move(payload),
371-
std::move(on_response), std::move(on_error));
346+
telemetry_endpoint_, telemetry_set_request_headers_, std::move(payload),
347+
telemetry_on_response_, telemetry_on_error_);
372348
if (auto* error = post_result.if_error()) {
373349
logger_->log_error(*error);
374350
}
375351
}
376352

377353
void DatadogAgent::send_app_closing() {
378354
auto payload = tracer_telemetry_->app_closing();
379-
auto set_request_headers = [&](DictWriter& headers) {
380-
headers.set("Content-Type", "application/json");
381-
};
382-
383-
// Callback for a successful HTTP request, to examine HTTP status.
384-
auto on_response = [logger = logger_](int response_status,
385-
const DictReader& /*response_headers*/,
386-
std::string response_body) {
387-
if (response_status < 200 || response_status >= 300) {
388-
logger->log_error([&](auto& stream) {
389-
stream << "Unexpected telemetry response status " << response_status
390-
<< " with body (starts on next line):\n"
391-
<< response_body;
392-
});
393-
}
394-
};
395-
396-
// Callback for unsuccessful HTTP request.
397-
auto on_error = [logger = logger_](Error error) {
398-
logger->log_error(error.with_prefix(
399-
"Error occurred during HTTP request for telemetry: "));
400-
};
401-
402355
auto post_result = http_client_->post(
403-
telemetry_endpoint_, std::move(set_request_headers), std::move(payload),
404-
std::move(on_response), std::move(on_error));
356+
telemetry_endpoint_, telemetry_set_request_headers_, std::move(payload),
357+
telemetry_on_response_, telemetry_on_error_);
405358
if (auto* error = post_result.if_error()) {
406359
logger_->log_error(*error);
407360
}

src/datadog/datadog_agent.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ class DatadogAgent : public Collector {
4545
EventScheduler::Cancel cancel_scheduled_flush_;
4646
EventScheduler::Cancel cancel_telemetry_timer_;
4747
std::chrono::steady_clock::duration flush_interval_;
48+
// Callbacks for submitting telemetry data
49+
HTTPClient::HeadersSetter telemetry_set_request_headers_;
50+
HTTPClient::ResponseHandler telemetry_on_response_;
51+
HTTPClient::ErrorHandler telemetry_on_error_;
4852

4953
void flush();
5054
void send_heartbeat_and_telemetry();

0 commit comments

Comments
 (0)