Move live websocket to old url (/gj/live)
This commit is contained in:
parent
ae19ba9f27
commit
0bf74b2bba
3 changed files with 45 additions and 35 deletions
|
@ -3,7 +3,6 @@ Geographical json stores, served under /gj
|
||||||
Used for displaying features on maps
|
Used for displaying features on maps
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from json import JSONDecodeError
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from asyncio import CancelledError
|
from asyncio import CancelledError
|
||||||
|
@ -15,17 +14,14 @@ from fastapi import (
|
||||||
Response,
|
Response,
|
||||||
Header,
|
Header,
|
||||||
WebSocket,
|
WebSocket,
|
||||||
WebSocketDisconnect,
|
|
||||||
status,
|
status,
|
||||||
)
|
)
|
||||||
|
|
||||||
from gisaf.models.authentication import User
|
from gisaf.models.authentication import User
|
||||||
from gisaf.redis_tools import store as redis_store
|
from gisaf.redis_tools import store as redis_store
|
||||||
from gisaf.live import live_server
|
|
||||||
from gisaf.registry import registry
|
from gisaf.registry import registry
|
||||||
from gisaf.security import get_current_active_user
|
from gisaf.security import get_current_active_user
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
api = APIRouter(
|
api = APIRouter(
|
||||||
|
@ -59,37 +55,6 @@ class ConnectionManager:
|
||||||
manager = ConnectionManager()
|
manager = ConnectionManager()
|
||||||
|
|
||||||
|
|
||||||
@api.websocket("/live/{store}")
|
|
||||||
async def live_layer(store: str, websocket: WebSocket):
|
|
||||||
"""
|
|
||||||
Websocket for live layer updates
|
|
||||||
"""
|
|
||||||
await websocket.accept()
|
|
||||||
try:
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
msg_data = await websocket.receive_json()
|
|
||||||
except JSONDecodeError:
|
|
||||||
msg_text = await websocket.receive_text()
|
|
||||||
if msg_text == "close":
|
|
||||||
await websocket.close()
|
|
||||||
continue
|
|
||||||
# else:
|
|
||||||
if "message" in msg_data:
|
|
||||||
if msg_data["message"] == "subscribeLiveLayer":
|
|
||||||
live_server.add_subscription(websocket, store)
|
|
||||||
elif msg_data["message"] == "unsubscribeLiveLayer":
|
|
||||||
live_server.remove_subscription(websocket, store)
|
|
||||||
else:
|
|
||||||
logger.warning(
|
|
||||||
f"Got websocket message with no message field: {msg_data}"
|
|
||||||
)
|
|
||||||
except WebSocketDisconnect:
|
|
||||||
logger.debug("Websocket disconnected")
|
|
||||||
|
|
||||||
# logger.debug('websocket connection closed')
|
|
||||||
|
|
||||||
|
|
||||||
@api.get("/{store_name}")
|
@api.get("/{store_name}")
|
||||||
async def get_geojson(
|
async def get_geojson(
|
||||||
store_name,
|
store_name,
|
||||||
|
|
43
src/gisaf/api/ws.py
Normal file
43
src/gisaf/api/ws.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
from json import JSONDecodeError
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from fastapi import WebSocket, APIRouter, WebSocketDisconnect
|
||||||
|
|
||||||
|
from gisaf.live import live_server
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
api = APIRouter(
|
||||||
|
tags=["websockets"],
|
||||||
|
responses={404: {"description": "Not found"}},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@api.websocket("/live/{store}")
|
||||||
|
async def live_layer(store: str, websocket: WebSocket):
|
||||||
|
"""
|
||||||
|
Websocket for live layer updates
|
||||||
|
"""
|
||||||
|
await websocket.accept()
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
msg_data = await websocket.receive_json()
|
||||||
|
except JSONDecodeError:
|
||||||
|
msg_text = await websocket.receive_text()
|
||||||
|
if msg_text == "close":
|
||||||
|
await websocket.close()
|
||||||
|
continue
|
||||||
|
# else:
|
||||||
|
if "message" in msg_data:
|
||||||
|
if msg_data["message"] == "subscribeLiveLayer":
|
||||||
|
live_server.add_subscription(websocket, store)
|
||||||
|
elif msg_data["message"] == "unsubscribeLiveLayer":
|
||||||
|
live_server.remove_subscription(websocket, store)
|
||||||
|
else:
|
||||||
|
logger.warning(
|
||||||
|
f"Got websocket message with no message field: {msg_data}"
|
||||||
|
)
|
||||||
|
except WebSocketDisconnect:
|
||||||
|
logger.debug("Websocket disconnected")
|
||||||
|
# logger.debug('websocket connection closed')
|
|
@ -15,6 +15,7 @@ from gisaf.api.admin import api as admin_api
|
||||||
from gisaf.api.dashboard import api as dashboard_api
|
from gisaf.api.dashboard import api as dashboard_api
|
||||||
from gisaf.api.map import api as map_api
|
from gisaf.api.map import api as map_api
|
||||||
from gisaf.api.download import api as download_api
|
from gisaf.api.download import api as download_api
|
||||||
|
from gisaf.api.ws import api as ws_api
|
||||||
from gisaf.plugins import manager as plugin_manager
|
from gisaf.plugins import manager as plugin_manager
|
||||||
|
|
||||||
logging.basicConfig(level=conf.gisaf.debugLevel)
|
logging.basicConfig(level=conf.gisaf.debugLevel)
|
||||||
|
@ -45,6 +46,7 @@ app = FastAPI(
|
||||||
|
|
||||||
app.include_router(api, prefix="/api")
|
app.include_router(api, prefix="/api")
|
||||||
app.include_router(geoapi, prefix="/api/gj")
|
app.include_router(geoapi, prefix="/api/gj")
|
||||||
|
app.include_router(ws_api, prefix="/gj")
|
||||||
app.include_router(admin_api, prefix="/api/admin")
|
app.include_router(admin_api, prefix="/api/admin")
|
||||||
app.include_router(dashboard_api, prefix="/api/dashboard")
|
app.include_router(dashboard_api, prefix="/api/dashboard")
|
||||||
app.include_router(map_api, prefix="/api/map")
|
app.include_router(map_api, prefix="/api/map")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue