PATH:
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
sentry_sdk
/
integrations
import re import sentry_sdk from sentry_sdk.integrations import Integration from sentry_sdk.scope import add_global_event_processor from sentry_sdk.utils import capture_internal_exceptions from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Any from sentry_sdk._types import Event # function is everything between index at @ # and then we match on the @ plus the hex val FUNCTION_RE = r"[^@]+?" HEX_ADDRESS = r"\s+@\s+0x[0-9a-fA-F]+" FRAME_RE = r""" ^(?P<index>\d+)\.\s+(?P<function>{FUNCTION_RE}){HEX_ADDRESS}(?:\s+in\s+(?P<package>.+))?$ """.format( FUNCTION_RE=FUNCTION_RE, HEX_ADDRESS=HEX_ADDRESS, ) FRAME_RE = re.compile(FRAME_RE, re.MULTILINE | re.VERBOSE) class GnuBacktraceIntegration(Integration): identifier = "gnu_backtrace" @staticmethod def setup_once(): # type: () -> None @add_global_event_processor def process_gnu_backtrace(event, hint): # type: (Event, dict[str, Any]) -> Event with capture_internal_exceptions(): return _process_gnu_backtrace(event, hint) def _process_gnu_backtrace(event, hint): # type: (Event, dict[str, Any]) -> Event if sentry_sdk.get_client().get_integration(GnuBacktraceIntegration) is None: return event exc_info = hint.get("exc_info", None) if exc_info is None: return event exception = event.get("exception", None) if exception is None: return event values = exception.get("values", None) if values is None: return event for exception in values: frames = exception.get("stacktrace", {}).get("frames", []) if not frames: continue msg = exception.get("value", None) if not msg: continue additional_frames = [] new_msg = [] for line in msg.splitlines(): match = FRAME_RE.match(line) if match: additional_frames.append( ( int(match.group("index")), { "package": match.group("package") or None, "function": match.group("function") or None, "platform": "native", }, ) ) else: # Put garbage lines back into message, not sure what to do with them. new_msg.append(line) if additional_frames: additional_frames.sort(key=lambda x: -x[0]) for _, frame in additional_frames: frames.append(frame) new_msg.append("<stacktrace parsed and removed by GnuBacktraceIntegration>") exception["value"] = "\n".join(new_msg) return event
[-] aws_lambda.py
[edit]
[+]
__pycache__
[-] chalice.py
[edit]
[-] anthropic.py
[edit]
[-] unleash.py
[edit]
[-] atexit.py
[edit]
[-] rq.py
[edit]
[-] gnu_backtrace.py
[edit]
[-] langgraph.py
[edit]
[+]
spark
[-] aiohttp.py
[edit]
[-] socket.py
[edit]
[-] sys_exit.py
[edit]
[-] boto3.py
[edit]
[-] sqlalchemy.py
[edit]
[-] asyncpg.py
[edit]
[-] openfeature.py
[edit]
[-] modules.py
[edit]
[-] executing.py
[edit]
[-] wsgi.py
[edit]
[-] dedupe.py
[edit]
[-] __init__.py
[edit]
[-] huey.py
[edit]
[-] fastapi.py
[edit]
[-] stdlib.py
[edit]
[-] cloud_resource_context.py
[edit]
[-] starlette.py
[edit]
[-] flask.py
[edit]
[-] bottle.py
[edit]
[-] starlite.py
[edit]
[-] rust_tracing.py
[edit]
[-] otlp.py
[edit]
[-] statsig.py
[edit]
[-] excepthook.py
[edit]
[-] ariadne.py
[edit]
[+]
pydantic_ai
[+]
..
[-] sanic.py
[edit]
[+]
google_genai
[+]
django
[+]
openai_agents
[-] dramatiq.py
[edit]
[-] langchain.py
[edit]
[-] graphene.py
[edit]
[-] loguru.py
[edit]
[-] clickhouse_driver.py
[edit]
[+]
celery
[-] tornado.py
[edit]
[-] strawberry.py
[edit]
[-] arq.py
[edit]
[-] litellm.py
[edit]
[-] openai.py
[edit]
[-] beam.py
[edit]
[-] launchdarkly.py
[edit]
[+]
grpc
[-] threading.py
[edit]
[+]
opentelemetry
[-] _wsgi_common.py
[edit]
[-] _asgi_common.py
[edit]
[-] argv.py
[edit]
[-] litestar.py
[edit]
[-] httpx.py
[edit]
[-] pymongo.py
[edit]
[-] mcp.py
[edit]
[-] cohere.py
[edit]
[-] pyramid.py
[edit]
[-] unraisablehook.py
[edit]
[-] quart.py
[edit]
[-] falcon.py
[edit]
[-] pure_eval.py
[edit]
[+]
redis
[-] logging.py
[edit]
[-] asgi.py
[edit]
[-] gql.py
[edit]
[-] gcp.py
[edit]
[-] ray.py
[edit]
[-] trytond.py
[edit]
[-] huggingface_hub.py
[edit]
[-] asyncio.py
[edit]
[-] typer.py
[edit]
[-] serverless.py
[edit]