"""Shared utilities for observability instrumentation."""
import functools
import hashlib
from typing import Any
__all__ = ("compute_sql_hash", "get_trace_context", "resolve_db_system")
_DB_SYSTEM_MAP: "tuple[tuple[str, str], ...]" = (
("asyncpg", "postgresql"),
("psycopg", "postgresql"),
("psqlpy", "postgresql"),
("postgres", "postgresql"),
("asyncmy", "mysql"),
("mysql", "mysql"),
("mariadb", "mysql"),
("aiosqlite", "sqlite"),
("sqlite", "sqlite"),
("duckdb", "duckdb"),
("bigquery", "bigquery"),
("spanner", "spanner"),
("oracle", "oracle"),
("oracledb", "oracle"),
("adbc", "adbc"),
)
@functools.lru_cache(maxsize=32)
def resolve_db_system(adapter_or_driver: str) -> str:
"""Resolve adapter/driver name to OTel db.system value.
Args:
adapter_or_driver: Adapter or driver name.
Returns:
OTel db.system value.
"""
normalized = adapter_or_driver.lower()
for needle, system in _DB_SYSTEM_MAP:
if needle in normalized:
return system
return "other_sql"