Skip to content

Commit 4678eef

Browse files
authored
chore(dsm): add process tags to dsm (#15356)
This PR implements this [RFC](https://docs.google.com/document/d/1AFdLUuVk70i0bJd5335-RxqsvwAV9ovAqcO2z5mEMbA/edit?pli=1&tab=t.0#heading=h.s9l1lctqlg11) for DSM. Add process_tags to DSM payload tags ## Testing - Check that process tags are not included if deactivated - Check the process tags are set in the payload tags when activated
1 parent 33c52d1 commit 4678eef

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

ddtrace/internal/datastreams/processor.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from typing import Union # noqa:F401
1717

1818
from ddtrace.internal import compat
19+
from ddtrace.internal import process_tags
1920
from ddtrace.internal.atexit import register_on_exit_signal
2021
from ddtrace.internal.constants import DEFAULT_SERVICE_NAME
2122
from ddtrace.internal.native import DDSketch
@@ -288,6 +289,8 @@ def periodic(self):
288289
raw_payload["Env"] = compat.ensure_text(config.env)
289290
if config.version:
290291
raw_payload["Version"] = compat.ensure_text(config.version)
292+
if p_tags := process_tags.process_tags:
293+
raw_payload["ProcessTags"] = compat.ensure_text(p_tags)
291294

292295
payload = packb(raw_payload)
293296
compressed = gzip_compress(payload)

tests/datastreams/test_processor.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import gzip
12
import os
23
import time
34

45
import mock
6+
import msgpack
7+
import pytest
58

69
from ddtrace.internal.datastreams.processor import PROPAGATION_KEY
710
from ddtrace.internal.datastreams.processor import PROPAGATION_KEY_BASE_64
@@ -15,6 +18,63 @@
1518
mocked_time = 1642544540
1619

1720

21+
def _decode_datastreams_payload(payload):
22+
decompressed = gzip.decompress(payload)
23+
decoded = msgpack.unpackb(decompressed, raw=False, strict_map_key=False)
24+
25+
return decoded
26+
27+
28+
def test_periodic_payload_tags():
29+
processor = DataStreamsProcessor("http://localhost:8126")
30+
try:
31+
captured_payloads = []
32+
with mock.patch.object(processor, "_flush_stats_with_backoff", side_effect=captured_payloads.append):
33+
processor.on_checkpoint_creation(1, 2, ["direction:out", "topic:topicA", "type:kafka"], mocked_time, 1, 1)
34+
processor.periodic()
35+
36+
assert captured_payloads, "expected periodic to send a payload"
37+
decoded = _decode_datastreams_payload(captured_payloads[0])
38+
assert decoded["Service"] == processor._service
39+
assert decoded["TracerVersion"] == processor._version
40+
assert decoded["Lang"] == "python"
41+
assert decoded["Hostname"] == processor._hostname
42+
assert "ProcessTags" not in decoded
43+
finally:
44+
processor.stop()
45+
processor.join()
46+
47+
48+
@pytest.mark.subprocess(
49+
env=dict(
50+
DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED="true",
51+
)
52+
)
53+
def test_periodic_payload_process_tags():
54+
import mock
55+
56+
from ddtrace.internal.datastreams.processor import DataStreamsProcessor
57+
from tests.datastreams.test_processor import _decode_datastreams_payload
58+
59+
processor = DataStreamsProcessor("http://localhost:8126")
60+
try:
61+
captured_payloads = []
62+
with mock.patch.object(processor, "_flush_stats_with_backoff", side_effect=captured_payloads.append):
63+
processor.on_checkpoint_creation(1, 2, ["direction:out", "topic:topicA", "type:kafka"], 1642544540, 1, 1)
64+
processor.periodic()
65+
66+
assert captured_payloads, "expected periodic to send a payload"
67+
decoded = _decode_datastreams_payload(captured_payloads[0])
68+
assert decoded["Service"] == processor._service
69+
assert decoded["TracerVersion"] == processor._version
70+
assert decoded["Lang"] == "python"
71+
assert decoded["Hostname"] == processor._hostname
72+
assert "ProcessTags" in decoded
73+
finally:
74+
processor.stop()
75+
processor.join()
76+
77+
1878
def test_data_streams_processor():
1979
now = time.time()
2080
processor.on_checkpoint_creation(1, 2, ["direction:out", "topic:topicA", "type:kafka"], now, 1, 1)

0 commit comments

Comments
 (0)