Add session tracking to ASGI integration (#1329) · gitcommit90/sentry-python@435e856 · GitHub
Skip to content

Commit 435e856

Browse files
authored
Add session tracking to ASGI integration (getsentry#1329)
* test(wsgi): Test for correct session aggregates in wsgi * test(asgi): added failing test * feat(asgi): auto session tracking
1 parent 3720466 commit 435e856

3 files changed

Lines changed: 118 additions & 33 deletions

File tree

sentry_sdk/integrations/asgi.py

Lines changed: 33 additions & 31 deletions

tests/integrations/asgi/test_asgi.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
from collections import Counter
12
import sys
23

34
import pytest
45
from sentry_sdk import Hub, capture_message, last_event_id
6+
import sentry_sdk
57
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
68
from starlette.applications import Starlette
79
from starlette.responses import PlainTextResponse
@@ -39,7 +41,7 @@ def test_sync_request_data(sentry_init, app, capture_events):
3941
events = capture_events()
4042

4143
client = TestClient(app)
42-
response = client.get("/sync-message?foo=bar", headers={"Foo": u"ä"})
44+
response = client.get("/sync-message?foo=bar", headers={"Foo": "ä"})
4345

4446
assert response.status_code == 200
4547

@@ -292,3 +294,41 @@ def test_x_real_ip(sentry_init, app, capture_events):
292294

293295
(event,) = events
294296
assert event["request"]["env"] == {"REMOTE_ADDR": "1.2.3.4"}
297+
298+
299+
def test_auto_session_tracking_with_aggregates(app, sentry_init, capture_envelopes):
300+
"""
301+
Test for correct session aggregates in auto session tracking.
302+
"""
303+
304+
@app.route("/dogs/are/great/")
305+
@app.route("/trigger/an/error/")
306+
def great_dogs_handler(request):
307+
if request["path"] != "/dogs/are/great/":
308+
1 / 0
309+
return PlainTextResponse("dogs are great")
310+
311+
sentry_init(traces_sample_rate=1.0)
312+
envelopes = capture_envelopes()
313+
314+
app = SentryAsgiMiddleware(app)
315+
client = TestClient(app, raise_server_exceptions=False)
316+
client.get("/dogs/are/great/")
317+
client.get("/dogs/are/great/")
318+
client.get("/trigger/an/error/")
319+
320+
sentry_sdk.flush()
321+
322+
count_item_types = Counter()
323+
for envelope in envelopes:
324+
count_item_types[envelope.items[0].type] += 1
325+
326+
assert count_item_types["transaction"] == 3
327+
assert count_item_types["event"] == 1
328+
assert count_item_types["sessions"] == 1
329+
assert len(envelopes) == 5
330+
331+
session_aggregates = envelopes[-1].items[0].payload.json["aggregates"]
332+
assert session_aggregates[0]["exited"] == 2
333+
assert session_aggregates[0]["crashed"] == 1
334+
assert len(session_aggregates) == 1

tests/integrations/wsgi/test_wsgi.py

Lines changed: 44 additions & 1 deletion

0 commit comments

Comments
 (0)