Skip to content

Commit 75660e0

Browse files
committed
support topic as kwarg
1 parent 2ab6641 commit 75660e0

File tree

2 files changed

+21
-11
lines changed
  • instrumentation/opentelemetry-instrumentation-kafka-python

2 files changed

+21
-11
lines changed

instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ def _extract_argument(key, position, default_value, args, kwargs):
2525
return kwargs.get(key, default_value)
2626

2727
@staticmethod
28-
def extract_send_topic(args):
28+
def extract_send_topic(args, kwargs):
2929
"""extract topic from `send` method arguments in KafkaProducer class"""
30-
if len(args) > 0:
31-
return args[0]
32-
return "unknown"
30+
return KafkaPropertiesExtractor._extract_argument(
31+
"topic", 0, "unknown", args, kwargs
32+
)
3333

3434
@staticmethod
3535
def extract_send_value(args, kwargs):
@@ -56,7 +56,7 @@ def extract_send_headers(args, kwargs):
5656
def extract_send_partition(instance, args, kwargs):
5757
"""extract partition `send` method arguments, using the `_partition` method in KafkaProducer class"""
5858
try:
59-
topic = KafkaPropertiesExtractor.extract_send_topic(args)
59+
topic = KafkaPropertiesExtractor.extract_send_topic(args, kwargs)
6060
key = KafkaPropertiesExtractor.extract_send_key(args, kwargs)
6161
value = KafkaPropertiesExtractor.extract_send_value(args, kwargs)
6262
partition = KafkaPropertiesExtractor._extract_argument(
@@ -145,7 +145,7 @@ def _traced_send(func, instance, args, kwargs):
145145
headers = []
146146
kwargs["headers"] = headers
147147

148-
topic = KafkaPropertiesExtractor.extract_send_topic(args)
148+
topic = KafkaPropertiesExtractor.extract_send_topic(args, kwargs)
149149
bootstrap_servers = KafkaPropertiesExtractor.extract_bootstrap_servers(
150150
instance
151151
)

instrumentation/opentelemetry-instrumentation-kafka-python/tests/test_utils.py

+15-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ def setUp(self) -> None:
1919
self.headers = []
2020
self.kwargs = {"partition": 0, "headers": self.headers}
2121

22+
def test_wrap_send_with_topic_as_arg(self):
23+
self.wrap_send_helper(self.args, self.kwargs)
24+
25+
def test_wrap_send_with_topic_as_kwarg(self):
26+
kwargs = self.kwargs.copy()
27+
kwargs['topic'] = self.topic_name
28+
self.wrap_send_helper([], kwargs)
29+
2230
@mock.patch(
2331
"opentelemetry.instrumentation.kafka.utils.KafkaPropertiesExtractor.extract_bootstrap_servers"
2432
)
@@ -28,8 +36,10 @@ def setUp(self) -> None:
2836
@mock.patch("opentelemetry.instrumentation.kafka.utils._enrich_span")
2937
@mock.patch("opentelemetry.trace.set_span_in_context")
3038
@mock.patch("opentelemetry.propagate.inject")
31-
def test_wrap_send(
39+
def wrap_send_helper(
3240
self,
41+
send_args: [str],
42+
send_kwargs: dict,
3343
inject: mock.MagicMock,
3444
set_span_in_context: mock.MagicMock,
3545
enrich_span: mock.MagicMock,
@@ -44,12 +54,12 @@ def test_wrap_send(
4454

4555
wrapped_send = _wrap_send(tracer, produce_hook)
4656
retval = wrapped_send(
47-
original_send_callback, kafka_producer, self.args, self.kwargs
57+
original_send_callback, kafka_producer, send_args, send_kwargs
4858
)
4959

5060
extract_bootstrap_servers.assert_called_once_with(kafka_producer)
5161
extract_send_partition.assert_called_once_with(
52-
kafka_producer, self.args, self.kwargs
62+
kafka_producer, send_args, send_kwargs
5363
)
5464
tracer.start_as_current_span.assert_called_once_with(
5565
expected_span_name, kind=SpanKind.PRODUCER
@@ -69,10 +79,10 @@ def test_wrap_send(
6979
self.headers, context=context, setter=_kafka_setter
7080
)
7181

72-
produce_hook.assert_called_once_with(span, self.args, self.kwargs)
82+
produce_hook.assert_called_once_with(span, send_args, send_kwargs)
7383

7484
original_send_callback.assert_called_once_with(
75-
*self.args, **self.kwargs
85+
*send_args, **send_kwargs
7686
)
7787
self.assertEqual(retval, original_send_callback.return_value)
7888

0 commit comments

Comments
 (0)