Skip to content

Commit c41db6f

Browse files
committed
add rn
clean up send event args
1 parent 71ca2c1 commit c41db6f

File tree

4 files changed

+19
-12
lines changed

4 files changed

+19
-12
lines changed

ddtrace/internal/telemetry/writer.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def __init__(self, agentless):
8484
def url(self):
8585
return parse.urljoin(self._telemetry_url, self._endpoint)
8686

87-
def send_event(self, request: Dict) -> Optional[httplib.HTTPResponse]:
87+
def send_event(self, request: Dict, payload_type: str) -> Optional[httplib.HTTPResponse]:
8888
"""Sends a telemetry request to the trace agent"""
8989
resp = None
9090
conn = None
@@ -95,27 +95,29 @@ 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"]])
10198
if resp.status < 300:
10299
log.debug(
103100
"Instrumentation Telemetry sent %d bytes in %.5fs to %s. Event(s): %s. Response: %s",
104101
len(rb_json),
105102
sw.elapsed(),
106103
self.url,
107-
request_types,
104+
payload_type,
108105
resp.status,
109106
)
110107
else:
111108
log.debug(
112109
"Failed to send Instrumentation Telemetry to %s. Event(s): %s. Response: %s",
113110
self.url,
114-
request_types,
111+
payload_type,
115112
resp.status,
116113
)
117-
except Exception as e:
118-
log.debug("Failed to send Instrumentation Telemetry to %s. Error: %s", self.url, str(e))
114+
except Exception:
115+
log.debug(
116+
"Failed to send Instrumentation Telemetry to %s. Event(s): %s",
117+
self.url,
118+
payload_type,
119+
exc_info=True,
120+
)
119121
finally:
120122
if conn is not None:
121123
conn.close()
@@ -744,6 +746,7 @@ def periodic(self, force_flush=False, shutting_down=False):
744746
if queued_events := self._flush_events_queue():
745747
events.extend(queued_events)
746748

749+
payload_types = ", ".join([event["request_type"] for event in events])
747750
# Prepare and send the final batch
748751
batch_event = {
749752
"tracer_time": int(time.time()),
@@ -756,7 +759,7 @@ def periodic(self, force_flush=False, shutting_down=False):
756759
"payload": events,
757760
"request_type": "message-batch",
758761
}
759-
self._client.send_event(batch_event)
762+
self._client.send_event(batch_event, payload_types)
760763

761764
def app_shutdown(self):
762765
if self.started:
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
fixes:
3+
- |
4+
performance: Batch all telemetry requests within a single heartbeat interval, reducing network requests by 95% (from ~20 to 1 per minute per process).

tests/appsec/architectures/mini.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
_send_event = _TelemetryClient.send_event
2626

2727

28-
def _send_event_wrapper(self, event):
28+
def _send_event_wrapper(self, event, payload_type):
2929
global _TELEMETRY_DEPENDENCIES
3030
print(f"Captured telemetry event: {event}", flush=True)
3131
if event:
@@ -36,7 +36,7 @@ def _send_event_wrapper(self, event):
3636
for lst in dependencies:
3737
_TELEMETRY_DEPENDENCIES.extend(lst)
3838
print(f"Captured dependencies: {dependencies}", flush=True)
39-
return _send_event(self, event)
39+
return _send_event(self, event, payload_type)
4040

4141

4242
_TelemetryClient.send_event = _send_event_wrapper

tests/telemetry/test_writer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ def test_app_heartbeat_event_periodic(mock_time, telemetry_writer, test_agent_se
757757
assert test_agent_session.get_events(mock.ANY, filter_heartbeats=False) == []
758758

759759
telemetry_writer.periodic()
760-
heartbeat_events = test_agent_session.get_events(mock.ANY, filter_heartbeats=False)
760+
heartbeat_events = test_agent_session.get_events("app-heartbeat", filter_heartbeats=False)
761761
assert len(heartbeat_events) == 1
762762

763763

0 commit comments

Comments
 (0)