mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-20 00:10:03 +02:00
socketio: adds support for logging client information
This commit is contained in:
parent
192075057f
commit
e3c144fa6e
@ -141,22 +141,41 @@ def setup_sio_server(
|
|||||||
def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) -> None: # noqa: C901
|
def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) -> None: # noqa: C901
|
||||||
@sio.event # type: ignore
|
@sio.event # type: ignore
|
||||||
async def connect(sid: str, environ: Any) -> None:
|
async def connect(sid: str, environ: Any) -> None:
|
||||||
logger.debug("Client [%s] connected", click.style(str(sid), fg="cyan"))
|
client_id_header = environ.get("HTTP_X_CLIENT_ID", None)
|
||||||
|
remote_username_header = environ.get("HTTP_REMOTE_USER", None)
|
||||||
|
|
||||||
|
if client_id_header is not None:
|
||||||
|
log_id = f"id={click.style(client_id_header, fg='cyan')}"
|
||||||
|
elif remote_username_header is not None:
|
||||||
|
log_id = f"user={click.style(remote_username_header, fg='cyan')}"
|
||||||
|
else:
|
||||||
|
log_id = f"sid={click.style(sid, fg='cyan')}"
|
||||||
|
|
||||||
|
async with sio.session(sid) as session:
|
||||||
|
session["client_id"] = log_id
|
||||||
|
logger.info("Client [%s] connected", session["client_id"])
|
||||||
|
|
||||||
@sio.event # type: ignore
|
@sio.event # type: ignore
|
||||||
async def disconnect(sid: str) -> None:
|
async def disconnect(sid: str) -> None:
|
||||||
logger.debug("Client [%s] disconnected", click.style(str(sid), fg="cyan"))
|
async with sio.session(sid) as session:
|
||||||
|
logger.info("Client [%s] disconnected", session["client_id"])
|
||||||
|
|
||||||
@sio.event # type: ignore
|
@sio.event # type: ignore
|
||||||
async def service_serialization(sid: str) -> SerializedObject:
|
async def service_serialization(sid: str) -> SerializedObject:
|
||||||
logger.debug(
|
async with sio.session(sid) as session:
|
||||||
"Client [%s] requested service serialization",
|
logger.info(
|
||||||
click.style(str(sid), fg="cyan"),
|
"Client [%s] requested service serialization", session["client_id"]
|
||||||
)
|
)
|
||||||
return state_manager.cache_manager.cache
|
return state_manager.cache_manager.cache
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
async def update_value(sid: str, data: UpdateDict) -> SerializedObject | None:
|
async def update_value(sid: str, data: UpdateDict) -> SerializedObject | None:
|
||||||
|
async with sio.session(sid) as session:
|
||||||
|
logger.info(
|
||||||
|
"Client [%s] is updating the value of '%s'",
|
||||||
|
session["client_id"],
|
||||||
|
data["access_path"],
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
endpoints.update_value(state_manager=state_manager, data=data)
|
endpoints.update_value(state_manager=state_manager, data=data)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -166,6 +185,12 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) ->
|
|||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
async def get_value(sid: str, access_path: str) -> SerializedObject:
|
async def get_value(sid: str, access_path: str) -> SerializedObject:
|
||||||
|
async with sio.session(sid) as session:
|
||||||
|
logger.info(
|
||||||
|
"Client [%s] is getting the value of '%s'",
|
||||||
|
session["client_id"],
|
||||||
|
access_path,
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
return endpoints.get_value(
|
return endpoints.get_value(
|
||||||
state_manager=state_manager, access_path=access_path
|
state_manager=state_manager, access_path=access_path
|
||||||
@ -178,6 +203,12 @@ def setup_sio_events(sio: socketio.AsyncServer, state_manager: StateManager) ->
|
|||||||
async def trigger_method(sid: str, data: TriggerMethodDict) -> Any:
|
async def trigger_method(sid: str, data: TriggerMethodDict) -> Any:
|
||||||
method = get_object_attr_from_path(state_manager.service, data["access_path"])
|
method = get_object_attr_from_path(state_manager.service, data["access_path"])
|
||||||
|
|
||||||
|
async with sio.session(sid) as session:
|
||||||
|
logger.debug(
|
||||||
|
"Client [%s] is triggering the method '%s'",
|
||||||
|
session["client_id"],
|
||||||
|
data["access_path"],
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
if inspect.iscoroutinefunction(method):
|
if inspect.iscoroutinefunction(method):
|
||||||
return await endpoints.trigger_async_method(
|
return await endpoints.trigger_async_method(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user