Some checks failed
API Docs (Node.js Express) / test (16) (push) Failing after 5m29s
API Docs (Node.js Express) / test (18) (push) Failing after 5m25s
API Docs (Node.js Express) / test (20) (push) Failing after 1m4s
API Docs (Node.js Express) / build (push) Has been skipped
API Docs (Node.js Express) / security (push) Has been skipped
LabFusion CI/CD Pipeline / api-gateway (push) Failing after 4m52s
LabFusion CI/CD Pipeline / service-adapters (push) Failing after 5m1s
LabFusion CI/CD Pipeline / api-docs (push) Failing after 5m12s
LabFusion CI/CD Pipeline / frontend (push) Failing after 6m39s
LabFusion CI/CD Pipeline / integration-tests (push) Has been skipped
LabFusion CI/CD Pipeline / security-scan (push) Has been skipped
Docker Build and Push / build-and-push (push) Failing after 34s
Docker Build and Push / security-scan (push) Has been skipped
Integration Tests / integration-tests (push) Failing after 1m33s
Integration Tests / performance-tests (push) Has been skipped
Service Adapters (Python FastAPI) / test (3.1) (push) Failing after 35s
Service Adapters (Python FastAPI) / test (3.11) (push) Failing after 5m20s
Service Adapters (Python FastAPI) / test (3.12) (push) Failing after 5m27s
Service Adapters (Python FastAPI) / test (3.9) (push) Failing after 5m50s
Docker Build and Push / deploy-staging (push) Has been skipped
Service Adapters (Python FastAPI) / build (push) Has been skipped
Service Adapters (Python FastAPI) / security (push) Has been skipped
Docker Build and Push / deploy-production (push) Has been skipped
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
import json
|
|
from datetime import datetime
|
|
|
|
from fastapi import APIRouter, BackgroundTasks, HTTPException, Query
|
|
|
|
from models.schemas import Event, EventData, EventResponse, EventsResponse
|
|
from services.redis_client import redis_client
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post(
|
|
"/publish-event",
|
|
response_model=EventResponse,
|
|
summary="Publish Event",
|
|
description="Publish an event to the Redis message bus",
|
|
responses={
|
|
200: {"description": "Event published successfully"},
|
|
500: {"description": "Failed to publish event"},
|
|
},
|
|
tags=["Events"],
|
|
)
|
|
async def publish_event(event_data: EventData, background_tasks: BackgroundTasks):
|
|
"""Publish an event to the Redis message bus for consumption by other services"""
|
|
try:
|
|
event = {
|
|
"timestamp": datetime.now().isoformat(),
|
|
"service": event_data.service,
|
|
"event_type": event_data.event_type,
|
|
"metadata": json.dumps(event_data.metadata),
|
|
}
|
|
|
|
# Publish to Redis
|
|
redis_client.lpush("events", json.dumps(event))
|
|
|
|
return EventResponse(status="published", event=event)
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.get(
|
|
"/events",
|
|
response_model=EventsResponse,
|
|
summary="Get Events",
|
|
description="Retrieve recent events from the message bus",
|
|
responses={
|
|
200: {"description": "Successfully retrieved events"},
|
|
500: {"description": "Failed to retrieve events"},
|
|
},
|
|
tags=["Events"],
|
|
)
|
|
async def get_events(
|
|
limit: int = Query(
|
|
100, ge=1, le=1000, description="Maximum number of events to retrieve"
|
|
)
|
|
):
|
|
"""Get recent events from the Redis message bus"""
|
|
try:
|
|
events = redis_client.lrange("events", 0, limit - 1)
|
|
parsed_events = []
|
|
for event in events:
|
|
try:
|
|
event_data = json.loads(event)
|
|
parsed_events.append(Event(**event_data))
|
|
except json.JSONDecodeError:
|
|
continue
|
|
|
|
return EventsResponse(events=parsed_events)
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|