ai-station/.venv/lib/python3.12/site-packages/opentelemetry/instrumentation/mcp/utils.py

41 lines
1.1 KiB
Python
Raw Permalink Normal View History

"""Shared utilities for MCP instrumentation."""
import asyncio
import logging
import traceback
class Config:
exception_logger = None
def dont_throw(func):
"""
A decorator that wraps the passed in function and logs exceptions instead of throwing them.
Works for both synchronous and asynchronous functions.
"""
logger = logging.getLogger(func.__module__)
async def async_wrapper(*args, **kwargs):
try:
return await func(*args, **kwargs)
except Exception as e:
_handle_exception(e, func, logger)
def sync_wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
_handle_exception(e, func, logger)
def _handle_exception(e, func, logger):
logger.debug(
"OpenLLMetry failed to trace in %s, error: %s",
func.__name__,
traceback.format_exc(),
)
if Config.exception_logger:
Config.exception_logger(e)
return async_wrapper if asyncio.iscoroutinefunction(func) else sync_wrapper