33 lines
811 B
Python
33 lines
811 B
Python
import logging
|
|
|
|
import zmq
|
|
from fastapi import APIRouter
|
|
from fastapi.responses import StreamingResponse
|
|
from zmq.asyncio import Context
|
|
|
|
from control_backend.core.config import settings
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
# DO NOT LOG INSIDE THIS FUNCTION
|
|
@router.get("/logs/stream")
|
|
async def log_stream():
|
|
context = Context.instance()
|
|
socket = context.socket(zmq.SUB)
|
|
|
|
for level in logging.getLevelNamesMapping():
|
|
socket.subscribe(topic=level)
|
|
|
|
socket.connect(settings.zmq_settings.internal_sub_address)
|
|
|
|
async def gen():
|
|
while True:
|
|
_, message = await socket.recv_multipart()
|
|
message = message.decode().strip()
|
|
yield f"data: {message}\n\n"
|
|
|
|
return StreamingResponse(gen(), media_type="text/event-stream")
|