from socket import gethostname from typing import Any from app.core.constants import ActorValue from app.core.database import SessionLocal from app.tasks.app import celery_app, settings @celery_app.task(name="events.dispatch_pending") def dispatch_pending_events( limit: int | None = None, actor: str = ActorValue.WORKER, ) -> list[dict[str, Any]]: from app.modules.events.services import EventService from app.modules.observability.constants import HeartbeatComponent from app.modules.observability.service import ObservabilityService db = SessionLocal() try: ObservabilityService(db).record_heartbeat( component=HeartbeatComponent.WORKER, instance_id=gethostname(), actor=actor, ) return EventService(db).dispatch_pending( limit=limit or settings.event_dispatch_batch_size, worker_id=f"{actor}:{gethostname()}", ) finally: db.close()