Add standard attributes to kaya-otel websocket spans
This commit is contained in:
3 files changed
+73
-16
No files matched your search
@@ -279,7 +279,7 @@ class MetricsTest(unittest.TestCase):
|
||||
class WebSocketTracingTest(unittest.TestCase):
|
||||
|
||||
@staticmethod
|
||||
def _make_ws(headers=()):
|
||||
def _make_ws(headers=(), query_string: bytes = b''):
|
||||
async def send(message):
|
||||
pass
|
||||
|
||||
@@ -289,7 +289,7 @@ class WebSocketTracingTest(unittest.TestCase):
|
||||
scope = {
|
||||
'type': 'websocket',
|
||||
'path': '/ws/games/abc',
|
||||
'query_string': b'',
|
||||
'query_string': query_string,
|
||||
'scheme': 'ws',
|
||||
'client': ('127.0.0.1', 12345),
|
||||
'server': ('127.0.0.1', 80),
|
||||
@@ -308,7 +308,29 @@ class WebSocketTracingTest(unittest.TestCase):
|
||||
self.assertEqual(0, len(mixin._spans))
|
||||
spans = span_exporter.get_finished_spans()
|
||||
self.assertEqual(1, len(spans))
|
||||
self.assertEqual('WS /ws/games/abc', spans[0].name)
|
||||
span = spans[0]
|
||||
self.assertEqual('WS /ws/games/abc', span.name)
|
||||
assert span.attributes is not None
|
||||
self.assertEqual('ws', span.attributes['url.scheme'])
|
||||
self.assertEqual('/ws/games/abc', span.attributes['url.path'])
|
||||
self.assertNotIn('url.query', span.attributes)
|
||||
self.assertEqual('websocket', span.attributes['network.protocol.name'])
|
||||
self.assertEqual('tcp', span.attributes['network.transport'])
|
||||
self.assertEqual('127.0.0.1', span.attributes['client.address'])
|
||||
self.assertEqual(12345, span.attributes['client.port'])
|
||||
self.assertEqual('127.0.0.1', span.attributes['server.address'])
|
||||
self.assertEqual(80, span.attributes['server.port'])
|
||||
|
||||
@async_test
|
||||
async def test_websocket_query_string_recorded(self):
|
||||
mixin, span_exporter, _ = make_mixin()
|
||||
ws = self._make_ws(query_string=b'room=1&token=abc')
|
||||
wrapped = await mixin._before_websocket(ws)
|
||||
await mixin._after_websocket(wrapped) # type: ignore[arg-type]
|
||||
spans = span_exporter.get_finished_spans()
|
||||
self.assertEqual(1, len(spans))
|
||||
assert spans[0].attributes is not None
|
||||
self.assertEqual('room=1&token=abc', spans[0].attributes['url.query'])
|
||||
|
||||
@async_test
|
||||
async def test_websocket_traceparent_propagates(self):
|
||||
@@ -344,6 +366,7 @@ class WebSocketTracingTest(unittest.TestCase):
|
||||
self.assertEqual(StatusCode.ERROR, spans[0].status.status_code)
|
||||
assert spans[0].attributes is not None
|
||||
self.assertEqual(1011, spans[0].attributes['kaya.websocket.close_code'])
|
||||
self.assertEqual('1011', spans[0].attributes['error.type'])
|
||||
|
||||
@async_test
|
||||
async def test_websocket_exception_marks_span_error(self):
|
||||
@@ -358,6 +381,8 @@ class WebSocketTracingTest(unittest.TestCase):
|
||||
self.assertEqual(1, len(spans))
|
||||
self.assertEqual(StatusCode.ERROR, spans[0].status.status_code)
|
||||
self.assertTrue(any(event.name == 'exception' for event in spans[0].events))
|
||||
assert spans[0].attributes is not None
|
||||
self.assertEqual('RuntimeError', spans[0].attributes['error.type'])
|
||||
|
||||
@async_test
|
||||
async def test_websocket_hooks_are_called(self):
|
||||
@@ -386,6 +411,7 @@ class WebSocketTracingTest(unittest.TestCase):
|
||||
self.assertEqual(1, len(spans))
|
||||
self.assertEqual(StatusCode.UNSET, spans[0].status.status_code)
|
||||
assert spans[0].attributes is not None
|
||||
self.assertNotIn('error.type', spans[0].attributes)
|
||||
self.assertTrue(spans[0].attributes['test.websocket_connect_hook'])
|
||||
self.assertTrue(spans[0].attributes['test.websocket_close_hook'])
|
||||
|
||||
|
||||
Reference in new issue
Block a user