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.
Files changed (13) hide show
  1. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/LICENSE +1 -1
  2. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/PKG-INFO +2 -2
  3. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/pyproject.toml +1 -1
  4. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/__init__.py +2 -2
  5. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/version.py +1 -1
  6. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/tests/test_instrumentation.py +33 -1
  7. opentelemetry_instrumentation_confluent_kafka-0.46b0/tests/utils.py +83 -0
  8. opentelemetry_instrumentation_confluent_kafka-0.45b0/tests/utils.py +0 -39
  9. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/.gitignore +0 -0
  10. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/README.rst +0 -0
  11. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/package.py +0 -0
  12. {opentelemetry_instrumentation_confluent_kafka-0.45b0 → opentelemetry_instrumentation_confluent_kafka-0.46b0}/src/opentelemetry/instrumentation/confluent_kafka/utils.py +0 -0
  13. {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 The OpenTelemetry Authors
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.45b0
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.45b0
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'
@@ -21,7 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.8",
22
22
  ]
23
23
  dependencies = [
24
- "opentelemetry-instrumentation == 0.45b0",
24
+ "opentelemetry-instrumentation == 0.46b0",
25
25
  "opentelemetry-api ~= 1.12",
26
26
  "wrapt >= 1.0.0, < 2.0.0",
27
27
  ]
@@ -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
@@ -12,4 +12,4 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- __version__ = "0.45b0"
15
+ __version__ = "0.46b0"
@@ -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