@@ -144,23 +144,26 @@ DatadogAgent::DatadogAgent(
144144 event_scheduler_(config.event_scheduler),
145145 cancel_scheduled_flush_(event_scheduler_->schedule_recurring_event (
146146 config.flush_interval, [this ]() { flush (); })),
147- cancel_heartbeat_timer_(event_scheduler_->schedule_recurring_event (
148- std::chrono::seconds (10 ), [this, n=0]() mutable {
147+ cancel_telemetry_timer_(event_scheduler_->schedule_recurring_event (
148+ std::chrono::seconds (10 ),
149+ [this, n = 0]() mutable {
149150 n++;
150- tracer_telemetry_->captureMetrics ();
151- if (n% 6 == 0 ) {
152- sendHeartbeatAndTelemetry ();
151+ tracer_telemetry_->capture_metrics ();
152+ if (n % 6 == 0 ) {
153+ sendHeartbeatAndTelemetry ();
153154 }
154- })),
155+ })),
155156 flush_interval_(config.flush_interval) {
156157 assert (logger_);
158+ assert (tracer_telemetry_);
157159 sendAppStarted ();
158160}
159161
160162DatadogAgent::~DatadogAgent () {
161163 const auto deadline = clock_ ().tick + std::chrono::seconds (2 );
162164 cancel_scheduled_flush_ ();
163165 flush ();
166+ cancel_telemetry_timer_ ();
164167 http_client_->drain (deadline);
165168}
166169
@@ -230,10 +233,21 @@ void DatadogAgent::flush() {
230233
231234 // This is the callback for the HTTP response. It's invoked
232235 // asynchronously.
233- auto on_response = [samplers = std::move (response_handlers),
236+ auto on_response = [this , samplers = std::move (response_handlers),
234237 logger = logger_](int response_status,
235238 const DictReader& /* response_headers*/ ,
236239 std::string response_body) {
240+ if (response_status >= 500 ) {
241+ tracer_telemetry_->metrics ().trace_api .responses_5xx .inc ();
242+ } else if (response_status >= 400 ) {
243+ tracer_telemetry_->metrics ().trace_api .responses_4xx .inc ();
244+ } else if (response_status >= 300 ) {
245+ tracer_telemetry_->metrics ().trace_api .responses_3xx .inc ();
246+ } else if (response_status >= 200 ) {
247+ tracer_telemetry_->metrics ().trace_api .responses_2xx .inc ();
248+ } else if (response_status >= 100 ) {
249+ tracer_telemetry_->metrics ().trace_api .responses_1xx .inc ();
250+ }
237251 if (response_status != 200 ) {
238252 logger->log_error ([&](auto & stream) {
239253 stream << " Unexpected response status " << response_status
@@ -269,12 +283,13 @@ void DatadogAgent::flush() {
269283 // This is the callback for if something goes wrong sending the
270284 // request or retrieving the response. It's invoked
271285 // asynchronously.
272- auto on_error = [logger = logger_](Error error) {
286+ auto on_error = [this , logger = logger_](Error error) {
287+ tracer_telemetry_->metrics ().trace_api .errors_network .inc ();
273288 logger->log_error (error.with_prefix (
274289 " Error occurred during HTTP request for submitting traces: " ));
275290 };
276291
277- tracer_telemetry_->trace_api_requests () .inc ();
292+ tracer_telemetry_->metrics (). trace_api . requests .inc ();
278293 auto post_result = http_client_->post (
279294 traces_endpoint_, std::move (set_request_headers), std::move (body),
280295 std::move (on_response), std::move (on_error));
@@ -284,7 +299,7 @@ void DatadogAgent::flush() {
284299}
285300
286301void DatadogAgent::sendAppStarted () {
287- auto payload = tracer_telemetry_->appStarted ();
302+ auto payload = tracer_telemetry_->app_started ();
288303 auto set_request_headers = [&](DictWriter& headers) {
289304 headers.set (" Content-Type" , " application/json" );
290305 };
@@ -295,19 +310,18 @@ void DatadogAgent::sendAppStarted() {
295310 std::string response_body) {
296311 if (response_status < 200 || response_status >= 300 ) {
297312 logger->log_error ([&](auto & stream) {
298- stream << " Unexpected telemetry response status " << response_status
299- << " with body (starts on next line):\n "
300- << response_body;
301- });
313+ stream << " Unexpected telemetry response status " << response_status
314+ << " with body (starts on next line):\n "
315+ << response_body;
316+ });
302317 return ;
303318 } else {
304319 logger->log_error ([&](auto & stream) {
305- stream << " Successful telemetry submission with response status " << response_status
306- << " and body (starts on next line):\n "
307- << response_body;
308- });
320+ stream << " Successful telemetry submission with response status "
321+ << response_status << " and body (starts on next line):\n "
322+ << response_body;
323+ });
309324 }
310-
311325 };
312326
313327 // Callback for unsuccessful HTTP request.
@@ -325,7 +339,7 @@ void DatadogAgent::sendAppStarted() {
325339}
326340
327341void DatadogAgent::sendHeartbeatAndTelemetry () {
328- auto payload = tracer_telemetry_->heartbeatAndTelemetry ();
342+ auto payload = tracer_telemetry_->heartbeat_and_telemetry ();
329343 auto set_request_headers = [&](DictWriter& headers) {
330344 headers.set (" Content-Type" , " application/json" );
331345 };
@@ -336,19 +350,18 @@ void DatadogAgent::sendHeartbeatAndTelemetry() {
336350 std::string response_body) {
337351 if (response_status < 200 || response_status >= 300 ) {
338352 logger->log_error ([&](auto & stream) {
339- stream << " Unexpected telemetry response status " << response_status
340- << " with body (starts on next line):\n "
341- << response_body;
342- });
353+ stream << " Unexpected telemetry response status " << response_status
354+ << " with body (starts on next line):\n "
355+ << response_body;
356+ });
343357 return ;
344358 } else {
345359 logger->log_error ([&](auto & stream) {
346- stream << " Successful telemetry submission with response status " << response_status
347- << " and body (starts on next line):\n "
348- << response_body;
349- });
360+ stream << " Successful telemetry submission with response status "
361+ << response_status << " and body (starts on next line):\n "
362+ << response_body;
363+ });
350364 }
351-
352365 };
353366
354367 // Callback for unsuccessful HTTP request.
0 commit comments