1
0

events.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from __future__ import annotations
  2. from datetime import datetime
  3. from threading import Lock
  4. from typing import Any, Dict, List, Optional
  5. from uuid import uuid4
  6. class EventLogger:
  7. """In-memory structured event logger for development."""
  8. def __init__(self) -> None:
  9. self._events: List[Dict[str, Any]] = []
  10. self._lock = Lock()
  11. def emit(
  12. self,
  13. event_type: str,
  14. *,
  15. agent_id: Optional[str] = None,
  16. task_id: Optional[str] = None,
  17. payload: Optional[Dict[str, Any]] = None,
  18. ) -> Dict[str, Any]:
  19. event = {
  20. "event_id": uuid4().hex,
  21. "type": event_type,
  22. "agent_id": agent_id,
  23. "task_id": task_id,
  24. "payload": payload or {},
  25. "timestamp": datetime.now().isoformat(),
  26. }
  27. with self._lock:
  28. self._events.append(event)
  29. return event
  30. def list_events(self, *, task_id: Optional[str] = None, limit: int = 100) -> List[Dict[str, Any]]:
  31. with self._lock:
  32. events = list(self._events)
  33. if task_id:
  34. events = [event for event in events if event.get("task_id") == task_id]
  35. return events[-limit:]
  36. event_logger = EventLogger()