Refactor asyncpg : replace uses of SpanAttributes with opentelemetry.semconv.attributes (#3505)

* Replace span in asyncpg

* Update instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py

Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>

* refactor

---------

Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
This commit is contained in:
Tamara Dancheva
2025-05-15 12:07:54 -07:00
committed by GitHub
parent 9e1284687a
commit ccdf522626

View File

@ -60,10 +60,18 @@ from opentelemetry.instrumentation.asyncpg.package import _instruments
from opentelemetry.instrumentation.asyncpg.version import __version__ from opentelemetry.instrumentation.asyncpg.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.instrumentation.utils import unwrap from opentelemetry.instrumentation.utils import unwrap
from opentelemetry.semconv.trace import ( from opentelemetry.semconv._incubating.attributes.db_attributes import (
DB_NAME,
DB_STATEMENT,
DB_SYSTEM,
DB_USER,
DbSystemValues, DbSystemValues,
)
from opentelemetry.semconv._incubating.attributes.net_attributes import (
NET_PEER_NAME,
NET_PEER_PORT,
NET_TRANSPORT,
NetTransportValues, NetTransportValues,
SpanAttributes,
) )
from opentelemetry.trace import SpanKind from opentelemetry.trace import SpanKind
from opentelemetry.trace.status import Status, StatusCode from opentelemetry.trace.status import Status, StatusCode
@ -71,9 +79,7 @@ from opentelemetry.trace.status import Status, StatusCode
def _hydrate_span_from_args(connection, query, parameters) -> dict: def _hydrate_span_from_args(connection, query, parameters) -> dict:
"""Get network and database attributes from connection.""" """Get network and database attributes from connection."""
span_attributes = { span_attributes = {DB_SYSTEM: DbSystemValues.POSTGRESQL.value}
SpanAttributes.DB_SYSTEM: DbSystemValues.POSTGRESQL.value
}
# connection contains _params attribute which is a namedtuple ConnectionParameters. # connection contains _params attribute which is a namedtuple ConnectionParameters.
# https://github.com/MagicStack/asyncpg/blob/master/asyncpg/connection.py#L68 # https://github.com/MagicStack/asyncpg/blob/master/asyncpg/connection.py#L68
@ -81,28 +87,24 @@ def _hydrate_span_from_args(connection, query, parameters) -> dict:
params = getattr(connection, "_params", None) params = getattr(connection, "_params", None)
dbname = getattr(params, "database", None) dbname = getattr(params, "database", None)
if dbname: if dbname:
span_attributes[SpanAttributes.DB_NAME] = dbname span_attributes[DB_NAME] = dbname
user = getattr(params, "user", None) user = getattr(params, "user", None)
if user: if user:
span_attributes[SpanAttributes.DB_USER] = user span_attributes[DB_USER] = user
# connection contains _addr attribute which is either a host/port tuple, or unix socket string # connection contains _addr attribute which is either a host/port tuple, or unix socket string
# https://magicstack.github.io/asyncpg/current/_modules/asyncpg/connection.html # https://magicstack.github.io/asyncpg/current/_modules/asyncpg/connection.html
addr = getattr(connection, "_addr", None) addr = getattr(connection, "_addr", None)
if isinstance(addr, tuple): if isinstance(addr, tuple):
span_attributes[SpanAttributes.NET_PEER_NAME] = addr[0] span_attributes[NET_PEER_NAME] = addr[0]
span_attributes[SpanAttributes.NET_PEER_PORT] = addr[1] span_attributes[NET_PEER_PORT] = addr[1]
span_attributes[SpanAttributes.NET_TRANSPORT] = ( span_attributes[NET_TRANSPORT] = NetTransportValues.IP_TCP.value
NetTransportValues.IP_TCP.value
)
elif isinstance(addr, str): elif isinstance(addr, str):
span_attributes[SpanAttributes.NET_PEER_NAME] = addr span_attributes[NET_PEER_NAME] = addr
span_attributes[SpanAttributes.NET_TRANSPORT] = ( span_attributes[NET_TRANSPORT] = NetTransportValues.OTHER.value
NetTransportValues.OTHER.value
)
if query is not None: if query is not None:
span_attributes[SpanAttributes.DB_STATEMENT] = query span_attributes[DB_STATEMENT] = query
if parameters is not None and len(parameters) > 0: if parameters is not None and len(parameters) > 0:
span_attributes["db.statement.parameters"] = str(parameters) span_attributes["db.statement.parameters"] = str(parameters)