opentelemetry-instrumentation-confluent-kafka 0.45b0__tar.gz → 0.46b0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/LICENSE +1 -1
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/PKG-INFO +2 -2
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/pyproject.toml +1 -1
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/__init__.py +2 -2
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/version.py +1 -1
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/tests/test_instrumentation.py +33 -1
- opentelemetry_instrumentation_confluent_kafka-0.46b0/tests/utils.py +83 -0
- opentelemetry_instrumentation_confluent_kafka-0.45b0/tests/utils.py +0 -39
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/.gitignore +0 -0
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/README.rst +0 -0
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/package.py +0 -0
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/utils.py +0 -0
- {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/tests/__init__.py +0 -0
@@ -186,7 +186,7 @@
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
187
187
|
identification within third-party archives.
|
188
188
|
|
189
|
-
Copyright
|
189
|
+
Copyright [yyyy] [name of copyright owner]
|
190
190
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
192
192
|
you may not use this file except in compliance with the License.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: opentelemetry-instrumentation-confluent-kafka
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.46b0
|
4
4
|
Summary: OpenTelemetry Confluent Kafka instrumentation
|
5
5
|
Project-URL: Homepage, https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation/opentelemetry-instrumentation-confluent-kafka
|
6
6
|
Author-email: OpenTelemetry Authors <cncf-opentelemetry-contributors@lists.cncf.io>
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.8
|
15
15
|
Requires-Python: >=3.8
|
16
16
|
Requires-Dist: opentelemetry-api~=1.12
|
17
|
-
Requires-Dist: opentelemetry-instrumentation==0.
|
17
|
+
Requires-Dist: opentelemetry-instrumentation==0.46b0
|
18
18
|
Requires-Dist: wrapt<2.0.0,>=1.0.0
|
19
19
|
Provides-Extra: instruments
|
20
20
|
Requires-Dist: confluent-kafka<=2.3.0,>=1.8.2; extra == 'instruments'
|
@@ -151,10 +151,10 @@ class ProxiedProducer(Producer):
|
|
151
151
|
self._tracer = tracer
|
152
152
|
|
153
153
|
def flush(self, timeout=-1):
|
154
|
-
self._producer.flush(timeout)
|
154
|
+
return self._producer.flush(timeout)
|
155
155
|
|
156
156
|
def poll(self, timeout=-1):
|
157
|
-
self._producer.poll(timeout)
|
157
|
+
return self._producer.poll(timeout)
|
158
158
|
|
159
159
|
def produce(
|
160
160
|
self, topic, value=None, *args, **kwargs
|
@@ -31,7 +31,7 @@ from opentelemetry.semconv.trace import (
|
|
31
31
|
)
|
32
32
|
from opentelemetry.test.test_base import TestBase
|
33
33
|
|
34
|
-
from .utils import MockConsumer, MockedMessage
|
34
|
+
from .utils import MockConsumer, MockedMessage, MockedProducer
|
35
35
|
|
36
36
|
|
37
37
|
class TestConfluentKafka(TestBase):
|
@@ -246,3 +246,35 @@ class TestConfluentKafka(TestBase):
|
|
246
246
|
self.assertEqual(
|
247
247
|
expected_attribute_value, span.attributes[attribute_key]
|
248
248
|
)
|
249
|
+
|
250
|
+
def test_producer_poll(self) -> None:
|
251
|
+
instrumentation = ConfluentKafkaInstrumentor()
|
252
|
+
message_queue = []
|
253
|
+
|
254
|
+
producer = MockedProducer(
|
255
|
+
message_queue,
|
256
|
+
{
|
257
|
+
"bootstrap.servers": "localhost:29092",
|
258
|
+
},
|
259
|
+
)
|
260
|
+
|
261
|
+
producer = instrumentation.instrument_producer(producer)
|
262
|
+
producer.produce(topic="topic-1", key="key-1", value="value-1")
|
263
|
+
msg = producer.poll()
|
264
|
+
self.assertIsNotNone(msg)
|
265
|
+
|
266
|
+
def test_producer_flush(self) -> None:
|
267
|
+
instrumentation = ConfluentKafkaInstrumentor()
|
268
|
+
message_queue = []
|
269
|
+
|
270
|
+
producer = MockedProducer(
|
271
|
+
message_queue,
|
272
|
+
{
|
273
|
+
"bootstrap.servers": "localhost:29092",
|
274
|
+
},
|
275
|
+
)
|
276
|
+
|
277
|
+
producer = instrumentation.instrument_producer(producer)
|
278
|
+
producer.produce(topic="topic-1", key="key-1", value="value-1")
|
279
|
+
msg = producer.flush()
|
280
|
+
self.assertIsNotNone(msg)
|
@@ -0,0 +1,83 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from confluent_kafka import Consumer, Producer
|
4
|
+
|
5
|
+
|
6
|
+
class MockConsumer(Consumer):
|
7
|
+
def __init__(self, queue, config):
|
8
|
+
self._queue = queue
|
9
|
+
super().__init__(config)
|
10
|
+
|
11
|
+
def consume(
|
12
|
+
self, num_messages=1, *args, **kwargs
|
13
|
+
): # pylint: disable=keyword-arg-before-vararg
|
14
|
+
messages = self._queue[:num_messages]
|
15
|
+
self._queue = self._queue[num_messages:]
|
16
|
+
return messages
|
17
|
+
|
18
|
+
def poll(self, timeout=None):
|
19
|
+
if len(self._queue) > 0:
|
20
|
+
return self._queue.pop(0)
|
21
|
+
return None
|
22
|
+
|
23
|
+
|
24
|
+
class MockedMessage:
|
25
|
+
def __init__(
|
26
|
+
self,
|
27
|
+
topic: str,
|
28
|
+
partition: int,
|
29
|
+
offset: int,
|
30
|
+
headers,
|
31
|
+
key: Optional[str] = None,
|
32
|
+
value: Optional[str] = None,
|
33
|
+
):
|
34
|
+
self._topic = topic
|
35
|
+
self._partition = partition
|
36
|
+
self._offset = offset
|
37
|
+
self._headers = headers
|
38
|
+
self._key = key
|
39
|
+
self._value = value
|
40
|
+
|
41
|
+
def topic(self):
|
42
|
+
return self._topic
|
43
|
+
|
44
|
+
def partition(self):
|
45
|
+
return self._partition
|
46
|
+
|
47
|
+
def offset(self):
|
48
|
+
return self._offset
|
49
|
+
|
50
|
+
def headers(self):
|
51
|
+
return self._headers
|
52
|
+
|
53
|
+
def key(self):
|
54
|
+
return self._key
|
55
|
+
|
56
|
+
def value(self):
|
57
|
+
return self._value
|
58
|
+
|
59
|
+
|
60
|
+
class MockedProducer(Producer):
|
61
|
+
def __init__(self, queue, config):
|
62
|
+
self._queue = queue
|
63
|
+
super().__init__(config)
|
64
|
+
|
65
|
+
def produce(
|
66
|
+
self, *args, **kwargs
|
67
|
+
): # pylint: disable=keyword-arg-before-vararg
|
68
|
+
self._queue.append(
|
69
|
+
MockedMessage(
|
70
|
+
topic=kwargs.get("topic"),
|
71
|
+
partition=0,
|
72
|
+
offset=0,
|
73
|
+
headers=[],
|
74
|
+
key=kwargs.get("key"),
|
75
|
+
value=kwargs.get("value"),
|
76
|
+
)
|
77
|
+
)
|
78
|
+
|
79
|
+
def poll(self, *args, **kwargs):
|
80
|
+
return len(self._queue)
|
81
|
+
|
82
|
+
def flush(self, *args, **kwargs):
|
83
|
+
return len(self._queue)
|
@@ -1,39 +0,0 @@
|
|
1
|
-
from confluent_kafka import Consumer
|
2
|
-
|
3
|
-
|
4
|
-
class MockConsumer(Consumer):
|
5
|
-
def __init__(self, queue, config):
|
6
|
-
self._queue = queue
|
7
|
-
super().__init__(config)
|
8
|
-
|
9
|
-
def consume(
|
10
|
-
self, num_messages=1, *args, **kwargs
|
11
|
-
): # pylint: disable=keyword-arg-before-vararg
|
12
|
-
messages = self._queue[:num_messages]
|
13
|
-
self._queue = self._queue[num_messages:]
|
14
|
-
return messages
|
15
|
-
|
16
|
-
def poll(self, timeout=None):
|
17
|
-
if len(self._queue) > 0:
|
18
|
-
return self._queue.pop(0)
|
19
|
-
return None
|
20
|
-
|
21
|
-
|
22
|
-
class MockedMessage:
|
23
|
-
def __init__(self, topic: str, partition: int, offset: int, headers):
|
24
|
-
self._topic = topic
|
25
|
-
self._partition = partition
|
26
|
-
self._offset = offset
|
27
|
-
self._headers = headers
|
28
|
-
|
29
|
-
def topic(self):
|
30
|
-
return self._topic
|
31
|
-
|
32
|
-
def partition(self):
|
33
|
-
return self._partition
|
34
|
-
|
35
|
-
def offset(self):
|
36
|
-
return self._offset
|
37
|
-
|
38
|
-
def headers(self):
|
39
|
-
return self._headers
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|