From 84a2afcce4c3331e75a89506375d3f11de4c1634 Mon Sep 17 00:00:00 2001 From: Ash <0Calories@users.noreply.github.com> Date: Mon, 15 Jul 2024 02:58:29 -0400 Subject: [PATCH] feat(pymongo): Send query description as valid JSON (#3291) MongoDB queries were being sent as invalid JSON, since the keys and values were surrounded by single quotes instead of double quotes. Relay cannot parse the queries unless they are sent as valid JSON. This PR converts MongoDB queries into a JSON string before sending it on the span, so that Relay may properly parse it and extract metrics. --- sentry_sdk/integrations/pymongo.py | 3 ++- tests/integrations/pymongo/test_pymongo.py | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sentry_sdk/integrations/pymongo.py b/sentry_sdk/integrations/pymongo.py index e81aa2d3b2..47fdfa6744 100644 --- a/sentry_sdk/integrations/pymongo.py +++ b/sentry_sdk/integrations/pymongo.py @@ -1,4 +1,5 @@ import copy +import json import sentry_sdk from sentry_sdk.consts import SPANSTATUS, SPANDATA, OP @@ -154,7 +155,7 @@ def started(self, event): if not should_send_default_pii(): command = _strip_pii(command) - query = "{}".format(command) + query = json.dumps(command, default=str) span = sentry_sdk.start_span( op=OP.DB, description=query, diff --git a/tests/integrations/pymongo/test_pymongo.py b/tests/integrations/pymongo/test_pymongo.py index be70a4f444..172668619b 100644 --- a/tests/integrations/pymongo/test_pymongo.py +++ b/tests/integrations/pymongo/test_pymongo.py @@ -71,9 +71,9 @@ def test_transactions(sentry_init, capture_events, mongo_server, with_pii): assert insert_success["tags"]["db.operation"] == "insert" assert insert_fail["tags"]["db.operation"] == "insert" - assert find["description"].startswith("{'find") - assert insert_success["description"].startswith("{'insert") - assert insert_fail["description"].startswith("{'insert") + assert find["description"].startswith('{"find') + assert insert_success["description"].startswith('{"insert') + assert insert_fail["description"].startswith('{"insert') assert find["tags"][SPANDATA.DB_MONGODB_COLLECTION] == "test_collection" assert insert_success["tags"][SPANDATA.DB_MONGODB_COLLECTION] == "test_collection" @@ -117,7 +117,7 @@ def test_breadcrumbs(sentry_init, capture_events, mongo_server, with_pii): (crumb,) = event["breadcrumbs"]["values"] assert crumb["category"] == "query" - assert crumb["message"].startswith("{'find") + assert crumb["message"].startswith('{"find') if with_pii: assert "1" in crumb["message"] else: