Skip to content

Commit 0a3fe3d

Browse files
authored
Fix: RabbitMQ check proper span type (#309)
* Fix: RabbitMQ check proper span type Closes #301
1 parent 34136e2 commit 0a3fe3d

File tree

3 files changed

+60
-9
lines changed

3 files changed

+60
-9
lines changed

.circleci/config.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,30 @@ jobs:
7676
. venv/bin/activate
7777
pytest -v
7878
79+
python37:
80+
docker:
81+
- image: circleci/python:3.7.9
82+
- image: circleci/postgres:9.6.5-alpine-ram
83+
- image: circleci/mariadb:10-ram
84+
- image: circleci/redis:5.0.4
85+
- image: rabbitmq:3.5.4
86+
- image: circleci/mongo:4.2.3-ram
87+
- image: singularities/pubsub-emulator
88+
environment:
89+
PUBSUB_PROJECT_ID: "project-test"
90+
PUBSUB_LISTEN_ADDRESS: "0.0.0.0:8432"
91+
working_directory: ~/repo
92+
steps:
93+
- checkout
94+
- pip-install-deps
95+
- run:
96+
name: run tests
97+
environment:
98+
INSTANA_TEST: "true"
99+
command: |
100+
. venv/bin/activate
101+
pytest -v
102+
79103
python38:
80104
docker:
81105
- image: circleci/python:3.8.6
@@ -227,6 +251,7 @@ workflows:
227251
build:
228252
jobs:
229253
- python27
254+
- python37
230255
- python38
231256
- python39
232257
- py27cassandra

instana/span.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class InstanaSpan(BasicSpan):
2626
stack = None
2727
synthetic = False
2828

29-
def mark_as_errored(self, tags = None):
29+
def mark_as_errored(self, tags=None):
3030
"""
3131
Mark this span as errored.
3232
@@ -90,6 +90,7 @@ def log_exception(self, exc):
9090
logger.debug("span.log_exception", exc_info=True)
9191
raise
9292

93+
9394
class BaseSpan(object):
9495
sy = None
9596

@@ -149,7 +150,7 @@ def _validate_tag(self, key, value):
149150
try:
150151
# Tag keys must be some type of text or string type
151152
if isinstance(key, (six.text_type, six.string_types)):
152-
validated_key = key[0:1024] # Max key length of 1024 characters
153+
validated_key = key[0:1024] # Max key length of 1024 characters
153154

154155
if isinstance(value, (bool, float, int, list, dict, six.text_type, six.string_types)):
155156
validated_value = value
@@ -169,7 +170,7 @@ def _convert_tag_value(self, value):
169170
final_value = repr(value)
170171
except Exception:
171172
final_value = "(non-fatal) span.set_tag: values must be one of these types: bool, float, int, list, " \
172-
"set, str or alternatively support 'repr'. tag discarded"
173+
"set, str or alternatively support 'repr'. tag discarded"
173174
logger.debug(final_value, exc_info=True)
174175
return None
175176
return final_value
@@ -247,24 +248,25 @@ def __init__(self, span, source, service_name, **kwargs):
247248
super(RegisteredSpan, self).__init__(span, source, service_name, **kwargs)
248249
self.n = span.operation_name
249250
self.k = 1
251+
250252
if span.operation_name in self.ENTRY_SPANS:
251253
# entry
252254
self._populate_entry_span_data(span)
253255
self.data["service"] = service_name
254256
elif span.operation_name in self.EXIT_SPANS:
255-
self.k = 2 # exit
257+
self.k = 2 # exit
256258
self._populate_exit_span_data(span)
257259
elif span.operation_name in self.LOCAL_SPANS:
258-
self.k = 3 # intermediate span
260+
self.k = 3 # intermediate span
259261
self._populate_local_span_data(span)
260262

261-
if "rabbitmq" in self.data and self.data["rabbitmq"]["sort"] == "consume":
262-
self.k = 1 # entry
263+
if "rabbitmq" in self.data and self.data["rabbitmq"]["sort"] == "publish":
264+
self.k = 2 # exit
263265

264266
# unify the span operation_name for gcps-producer and gcps-consumer
265267
if "gcps" in span.operation_name:
266268
self.n = 'gcps'
267-
269+
268270
# Store any leftover tags in the custom section
269271
if len(span.tags) > 0:
270272
self.data["custom"]["tags"] = self._validate_tags(span.tags)

tests/clients/test_asynqp.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
rabbitmq_host = "localhost"
2525

2626
is_unsupported_version = LooseVersion(sys.version) < LooseVersion('3.5.3') \
27-
or LooseVersion(sys.version) >= LooseVersion('3.8.0')
27+
or LooseVersion(sys.version) >= LooseVersion('3.8.0')
28+
2829

2930
@pytest.mark.skipif(is_unsupported_version, reason="Asynqp supports >=3.5.3;<3.8.0")
3031
class TestAsynqp(unittest.TestCase):
@@ -96,6 +97,9 @@ def test():
9697
self.assertIsNone(test_span.ec)
9798
self.assertIsNone(rabbitmq_span.ec)
9899

100+
# Span type
101+
self.assertEqual(rabbitmq_span.k, 2) # exit
102+
99103
# Rabbitmq
100104
self.assertEqual('test.exchange', rabbitmq_span.data["rabbitmq"]["exchange"])
101105
self.assertEqual('publish', rabbitmq_span.data["rabbitmq"]["sort"])
@@ -132,6 +136,9 @@ def test():
132136
self.assertIsNone(test_span.ec)
133137
self.assertIsNone(rabbitmq_span.ec)
134138

139+
# Span type
140+
self.assertEqual(rabbitmq_span.k, 2) # exit
141+
135142
# Rabbitmq
136143
self.assertEqual('test.exchange', rabbitmq_span.data["rabbitmq"]["exchange"])
137144
self.assertEqual('publish', rabbitmq_span.data["rabbitmq"]["sort"])
@@ -196,6 +203,10 @@ def publish():
196203
self.assertEqual(publish_span.p, test_span.s)
197204
self.assertEqual(get_span.p, test_span.s)
198205

206+
# Span type
207+
self.assertEqual(publish_span.k, 2) # exit
208+
self.assertEqual(get_span.k, 1) # entry
209+
199210
# Error logging
200211
self.assertIsNone(test_span.ec)
201212
self.assertIsNone(publish_span.ec)
@@ -250,6 +261,10 @@ def test():
250261
self.assertEqual(publish_span.p, test_span.s)
251262
self.assertEqual(consume_span.p, publish_span.s)
252263

264+
# Span type
265+
self.assertEqual(publish_span.k, 2) # exit
266+
self.assertEqual(consume_span.k, 1) # entry
267+
253268
# publish
254269
self.assertEqual('test.exchange', publish_span.data["rabbitmq"]["exchange"])
255270
self.assertEqual('publish', publish_span.data["rabbitmq"]["sort"])
@@ -311,6 +326,11 @@ def test():
311326
self.assertEqual(consume1_span.p, publish1_span.s)
312327
self.assertEqual(publish2_span.p, consume1_span.s)
313328

329+
# Span type
330+
self.assertEqual(publish1_span.k, 2) # exit
331+
self.assertEqual(consume1_span.k, 1) # entry
332+
self.assertEqual(publish2_span.k, 2) # exit
333+
314334
# publish
315335
self.assertEqual('test.exchange', publish1_span.data["rabbitmq"]["exchange"])
316336
self.assertEqual('publish', publish1_span.data["rabbitmq"]["sort"])
@@ -402,6 +422,10 @@ def test():
402422
self.assertEqual(run_later_span.p, consume_span.s)
403423
self.assertEqual(wsgi_span.p, aioclient_span.s)
404424

425+
# Span type
426+
self.assertEqual(publish_span.k, 2) # exit
427+
self.assertEqual(consume_span.k, 1) # entry
428+
405429
# publish
406430
self.assertEqual('test.exchange', publish_span.data["rabbitmq"]["exchange"])
407431
self.assertEqual('publish', publish_span.data["rabbitmq"]["sort"])

0 commit comments

Comments
 (0)