diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py index ee61f6d4f97..6fa67eec870 100644 --- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py +++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py @@ -40,13 +40,15 @@ --- """ -from pymongo import monitoring +import json +import bson.json_util from opentelemetry import trace from opentelemetry.auto_instrumentation.instrumentor import BaseInstrumentor from opentelemetry.ext.pymongo.version import __version__ from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace.status import Status, StatusCanonicalCode +from pymongo import monitoring DATABASE_TYPE = "mongodb" COMMAND_ATTRIBUTES = ["filter", "sort", "skip", "limit", "pipeline"] @@ -66,8 +68,8 @@ def started(self, event: monitoring.CommandStartedEvent): name = DATABASE_TYPE + "." + event.command_name statement = event.command_name if command: - name += "." + command - statement += " " + command + name += "." + str(command) + statement += " " + str(command) try: span = self._tracer.start_span(name, kind=SpanKind.CLIENT) @@ -104,7 +106,12 @@ def succeeded(self, event: monitoring.CommandSucceededEvent): if span is None: return span.set_attribute("db.mongo.duration_micros", event.duration_micros) - span.set_status(Status(StatusCanonicalCode.OK, event.reply)) + span.set_status( + Status( + StatusCanonicalCode.OK, + json.loads(bson.json_util.dumps(event.reply)), + ) + ) span.end() def failed(self, event: monitoring.CommandFailedEvent): @@ -115,7 +122,12 @@ def failed(self, event: monitoring.CommandFailedEvent): if span is None: return span.set_attribute("db.mongo.duration_micros", event.duration_micros) - span.set_status(Status(StatusCanonicalCode.UNKNOWN, event.failure)) + span.set_status( + Status( + StatusCanonicalCode.UNKNOWN, + json.loads(bson.json_util.dumps(event.failure)), + ) + ) span.end() def _pop_span(self, event):