Skip to content

Commit 71ca2c1

Browse files
committed
fix generate metrics and improve sent debug logs
1 parent 874eacb commit 71ca2c1

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

ddtrace/internal/telemetry/writer.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,25 @@ def send_event(self, request: Dict) -> Optional[httplib.HTTPResponse]:
9595
conn = get_connection(self._telemetry_url)
9696
conn.request("POST", self._endpoint, rb_json, headers)
9797
resp = conn.getresponse()
98+
request_types = request["request_type"]
99+
if request_types == "message-batch":
100+
request_types = ", ".join([event["request_type"] for event in request["payload"]])
98101
if resp.status < 300:
99102
log.debug(
100-
"Instrumentation Telemetry sent %d bytes in %.5fs to %s. Event: %s. Response: %s",
103+
"Instrumentation Telemetry sent %d bytes in %.5fs to %s. Event(s): %s. Response: %s",
101104
len(rb_json),
102105
sw.elapsed(),
103106
self.url,
104-
request["request_type"],
107+
request_types,
105108
resp.status,
106109
)
107110
else:
108-
log.debug("Failed to send Instrumentation Telemetry to %s. response: %s", self.url, resp.status)
111+
log.debug(
112+
"Failed to send Instrumentation Telemetry to %s. Event(s): %s. Response: %s",
113+
self.url,
114+
request_types,
115+
resp.status,
116+
)
109117
except Exception as e:
110118
log.debug("Failed to send Instrumentation Telemetry to %s. Error: %s", self.url, str(e))
111119
finally:
@@ -630,20 +638,22 @@ def _flush_log_metrics(self):
630638
self._logs = set()
631639
return log_metrics
632640

633-
def _generate_metrics_event(self, namespace_metrics):
634-
# type: (Dict[str, Dict[str, List[Dict[str, Any]]]]) -> Optional[Dict[str, Any]]
641+
def _generate_metrics_events(self, namespace_metrics):
642+
# type: (Dict[str, Dict[str, List[Dict[str, Any]]]]) -> List[Dict[str, Any]]
643+
metric_payloads = []
635644
for payload_type, namespaces in namespace_metrics.items():
636645
for namespace, metrics in namespaces.items():
637646
if metrics:
638-
log.debug("%s request payload, namespace %s", payload_type, namespace)
639-
return {
640-
"payload": {
641-
"namespace": namespace,
642-
"series": metrics,
643-
},
644-
"request_type": payload_type,
645-
}
646-
return None
647+
metric_payloads.append(
648+
{
649+
"payload": {
650+
"namespace": namespace,
651+
"series": metrics,
652+
},
653+
"request_type": payload_type,
654+
}
655+
)
656+
return metric_payloads
647657

648658
def _generate_logs_event(self, logs):
649659
# type: (Set[Dict[str, str]]) -> Dict[str, Any]
@@ -689,8 +699,8 @@ def periodic(self, force_flush=False, shutting_down=False):
689699
# Collect metrics and logs that have accumulated since last batch
690700
events = []
691701
if namespace_metrics := self._namespace.flush(float(self.interval)):
692-
if metrics_event := self._generate_metrics_event(namespace_metrics):
693-
events.append(metrics_event)
702+
if metrics_events := self._generate_metrics_events(namespace_metrics):
703+
events.extend(metrics_events)
694704

695705
if logs_metrics := self._flush_log_metrics():
696706
events.append(self._generate_logs_event(logs_metrics))

tests/telemetry/test_writer.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -733,8 +733,9 @@ def test_send_failing_request(mock_status, telemetry_writer):
733733
telemetry_writer.periodic(force_flush=True)
734734
# asserts unsuccessful status code was logged
735735
log.debug.assert_called_with(
736-
"Failed to send Instrumentation Telemetry to %s. response: %s",
736+
"Failed to send Instrumentation Telemetry to %s. Event(s): %s. Response: %s",
737737
telemetry_writer._client.url,
738+
mock.ANY,
738739
mock_status,
739740
)
740741

@@ -753,10 +754,10 @@ def test_app_heartbeat_event_periodic(mock_time, telemetry_writer, test_agent_se
753754
# Assert next flush contains app-heartbeat event
754755
for _ in range(telemetry_writer._periodic_threshold):
755756
telemetry_writer.periodic()
756-
assert test_agent_session.get_events("app-heartbeat", filter_heartbeats=False) == []
757+
assert test_agent_session.get_events(mock.ANY, filter_heartbeats=False) == []
757758

758759
telemetry_writer.periodic()
759-
heartbeat_events = test_agent_session.get_events("app-heartbeat", filter_heartbeats=False)
760+
heartbeat_events = test_agent_session.get_events(mock.ANY, filter_heartbeats=False)
760761
assert len(heartbeat_events) == 1
761762

762763

@@ -765,7 +766,7 @@ def test_app_heartbeat_event(mock_time, telemetry_writer, test_agent_session):
765766
"""asserts that we queue/send app-heartbeat event every 60 seconds when app_heartbeat_event() is called"""
766767
# Assert a maximum of one heartbeat is queued per flush
767768
telemetry_writer.periodic(force_flush=True)
768-
events = test_agent_session.get_events("app-heartbeat", filter_heartbeats=False)
769+
events = test_agent_session.get_events(mock.ANY, filter_heartbeats=False)
769770
assert len(events) > 0
770771

771772

0 commit comments

Comments
 (0)