mirror of
https://github.com/suitenumerique/meet.git
synced 2026-07-27 12:19:10 +00:00
d43b335546
Add Sentry observability to the `agents`. Introduce a dedicated `observability.py` module. Refactor both agents to use the shared observability layer and extract task helpers into a new `tasks.py` module, making task execution easier to instrument and maintain.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""Helpers for managing asyncio tasks."""
|
|
|
|
import asyncio
|
|
import logging
|
|
from collections.abc import Callable
|
|
from typing import Any
|
|
|
|
|
|
def done_callback(
|
|
logger: logging.Logger,
|
|
tasks: set[asyncio.Task],
|
|
description: str,
|
|
*,
|
|
on_success: Callable[[Any], None] | None = None,
|
|
) -> Callable[[asyncio.Task], None]:
|
|
"""Build a done-callback for a background task.
|
|
|
|
Meant to be passed to `asyncio.Task.add_done_callback`.
|
|
|
|
Args:
|
|
logger: Logger used to report failures, so records keep the caller's
|
|
logger name.
|
|
tasks: Set the task was registered in; the task is discarded from it.
|
|
description: Human-readable intended action
|
|
on_success: Optional callback invoked with the task's result when it
|
|
completes without error.
|
|
|
|
Returns:
|
|
A callback suitable for ``task.add_done_callback(...)``.
|
|
"""
|
|
|
|
def _finalize(task: asyncio.Task) -> None:
|
|
tasks.discard(task)
|
|
if task.cancelled():
|
|
return
|
|
if (exc := task.exception()) is not None:
|
|
logger.exception("failed to %s", description, exc_info=exc)
|
|
return
|
|
if on_success is not None:
|
|
on_success(task.result())
|
|
|
|
return _finalize
|