31 lines
920 B
Python
31 lines
920 B
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Any
|
|
|
|
from control_plane.events.models import Event, EventType
|
|
from control_plane.projects.models import Project, Task
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class EventBus:
|
|
"""Persisted event bus for control-plane state changes."""
|
|
|
|
def publish(
|
|
self,
|
|
event_type: EventType | str,
|
|
*,
|
|
project: Project | None = None,
|
|
task: Task | None = None,
|
|
actor: str = "system",
|
|
payload: dict[str, Any] | None = None,
|
|
) -> Event:
|
|
event = Event.objects.create(
|
|
event_type=str(event_type), project=project, task=task, actor=actor, payload=payload or {}
|
|
)
|
|
logger.info(
|
|
"event_published",
|
|
extra={"event_id": str(event.id), "event_type": event.event_type, "project_id": str(project.id) if project else None},
|
|
)
|
|
return event
|