mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-25 01:38:08 +00:00
Fix some issues with HTTP notification streams
This commit is contained in:
parent
e8973b9c44
commit
b0e646b97d
@ -18,7 +18,7 @@
|
|||||||
API routes for controller notifications.
|
API routes for controller notifications.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect
|
from fastapi import APIRouter, Request, Depends, WebSocket, WebSocketDisconnect
|
||||||
from fastapi.responses import StreamingResponse
|
from fastapi.responses import StreamingResponse
|
||||||
from websockets.exceptions import ConnectionClosed, WebSocketException
|
from websockets.exceptions import ConnectionClosed, WebSocketException
|
||||||
|
|
||||||
@ -35,17 +35,24 @@ router = APIRouter()
|
|||||||
|
|
||||||
|
|
||||||
@router.get("", dependencies=[Depends(get_current_active_user)])
|
@router.get("", dependencies=[Depends(get_current_active_user)])
|
||||||
async def controller_http_notifications() -> StreamingResponse:
|
async def controller_http_notifications(request: Request) -> StreamingResponse:
|
||||||
"""
|
"""
|
||||||
Receive controller notifications about the controller from HTTP stream.
|
Receive controller notifications about the controller from HTTP stream.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
async def event_stream():
|
from gns3server.api.server import app
|
||||||
with Controller.instance().notification.controller_queue() as queue:
|
log.info(f"New client {request.client.host}:{request.client.port} has connected to controller HTTP "
|
||||||
while True:
|
f"notification stream")
|
||||||
msg = await queue.get_json(5)
|
|
||||||
yield f"{msg}\n".encode("utf-8")
|
|
||||||
|
|
||||||
|
async def event_stream():
|
||||||
|
try:
|
||||||
|
with Controller.instance().notification.controller_queue() as queue:
|
||||||
|
while not app.state.exiting:
|
||||||
|
msg = await queue.get_json(5)
|
||||||
|
yield f"{msg}\n".encode("utf-8")
|
||||||
|
finally:
|
||||||
|
log.info(f"Client {request.client.host}:{request.client.port} has disconnected from controller HTTP "
|
||||||
|
f"notification stream")
|
||||||
return StreamingResponse(event_stream(), media_type="application/json")
|
return StreamingResponse(event_stream(), media_type="application/json")
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,18 +210,19 @@ async def project_http_notifications(project_id: UUID) -> StreamingResponse:
|
|||||||
Receive project notifications about the controller from HTTP stream.
|
Receive project notifications about the controller from HTTP stream.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from gns3server.api.server import app
|
||||||
controller = Controller.instance()
|
controller = Controller.instance()
|
||||||
project = controller.get_project(str(project_id))
|
project = controller.get_project(str(project_id))
|
||||||
|
|
||||||
log.info(f"New client has connected to the notification stream for project ID '{project.id}' (HTTP steam method)")
|
log.info(f"New client has connected to the notification stream for project ID '{project.id}' (HTTP stream method)")
|
||||||
|
|
||||||
async def event_stream():
|
async def event_stream():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with controller.notification.project_queue(project.id) as queue:
|
with controller.notification.project_queue(project.id) as queue:
|
||||||
while True:
|
while not app.state.exiting:
|
||||||
msg = await queue.get_json(5)
|
msg = await queue.get_json(5)
|
||||||
yield (f"{msg}\n").encode("utf-8")
|
yield f"{msg}\n".encode("utf-8")
|
||||||
finally:
|
finally:
|
||||||
log.info(f"Client has disconnected from notification for project ID '{project.id}' (HTTP stream method)")
|
log.info(f"Client has disconnected from notification for project ID '{project.id}' (HTTP stream method)")
|
||||||
if project.auto_close:
|
if project.auto_close:
|
||||||
|
Loading…
Reference in New Issue
Block a user