mirror of
https://github.com/tiqi-group/pydase.git
synced 2025-04-21 00:40:01 +02:00
RestAPI: adds support for logging client information
This commit is contained in:
parent
e3c144fa6e
commit
4d84c9778f
@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
|
|||||||
|
|
||||||
import aiohttp.web
|
import aiohttp.web
|
||||||
import aiohttp_middlewares.error
|
import aiohttp_middlewares.error
|
||||||
|
import click
|
||||||
|
|
||||||
from pydase.data_service.state_manager import StateManager
|
from pydase.data_service.state_manager import StateManager
|
||||||
from pydase.server.web_server.api.v1.endpoints import (
|
from pydase.server.web_server.api.v1.endpoints import (
|
||||||
@ -28,10 +29,12 @@ STATUS_FAILED = 400
|
|||||||
async def _get_value(
|
async def _get_value(
|
||||||
request: aiohttp.web.Request, state_manager: StateManager
|
request: aiohttp.web.Request, state_manager: StateManager
|
||||||
) -> aiohttp.web.Response:
|
) -> aiohttp.web.Response:
|
||||||
logger.info("Handle api request: %s", request)
|
log_id = get_log_id(request)
|
||||||
|
|
||||||
access_path = request.rel_url.query["access_path"]
|
access_path = request.rel_url.query["access_path"]
|
||||||
|
|
||||||
|
logger.info("Client [%s] is getting the value of '%s'", log_id, access_path)
|
||||||
|
|
||||||
status = STATUS_OK
|
status = STATUS_OK
|
||||||
try:
|
try:
|
||||||
result = get_value(state_manager, access_path)
|
result = get_value(state_manager, access_path)
|
||||||
@ -45,8 +48,14 @@ async def _get_value(
|
|||||||
async def _update_value(
|
async def _update_value(
|
||||||
request: aiohttp.web.Request, state_manager: StateManager
|
request: aiohttp.web.Request, state_manager: StateManager
|
||||||
) -> aiohttp.web.Response:
|
) -> aiohttp.web.Response:
|
||||||
|
log_id = get_log_id(request)
|
||||||
|
|
||||||
data: UpdateDict = await request.json()
|
data: UpdateDict = await request.json()
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
"Client [%s] is updating the value of '%s'", log_id, data["access_path"]
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
update_value(state_manager, data)
|
update_value(state_manager, data)
|
||||||
|
|
||||||
@ -59,6 +68,12 @@ async def _update_value(
|
|||||||
async def _trigger_method(
|
async def _trigger_method(
|
||||||
request: aiohttp.web.Request, state_manager: StateManager
|
request: aiohttp.web.Request, state_manager: StateManager
|
||||||
) -> aiohttp.web.Response:
|
) -> aiohttp.web.Response:
|
||||||
|
log_id = get_log_id(request)
|
||||||
|
|
||||||
|
access_path = request.rel_url.query["access_path"]
|
||||||
|
|
||||||
|
logger.info("Client [%s] is triggering the method '%s'", log_id, access_path)
|
||||||
|
|
||||||
data: TriggerMethodDict = await request.json()
|
data: TriggerMethodDict = await request.json()
|
||||||
|
|
||||||
method = get_object_attr_from_path(state_manager.service, data["access_path"])
|
method = get_object_attr_from_path(state_manager.service, data["access_path"])
|
||||||
@ -78,6 +93,20 @@ async def _trigger_method(
|
|||||||
return aiohttp.web.json_response(dump(e), status=STATUS_FAILED)
|
return aiohttp.web.json_response(dump(e), status=STATUS_FAILED)
|
||||||
|
|
||||||
|
|
||||||
|
def get_log_id(request: aiohttp.web.Request) -> str:
|
||||||
|
client_id_header = request.headers.get("x-client-id", None)
|
||||||
|
remote_username_header = request.headers.get("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"id={click.style(None, fg='cyan')}"
|
||||||
|
|
||||||
|
return log_id
|
||||||
|
|
||||||
|
|
||||||
def create_api_application(state_manager: StateManager) -> aiohttp.web.Application:
|
def create_api_application(state_manager: StateManager) -> aiohttp.web.Application:
|
||||||
api_application = aiohttp.web.Application(
|
api_application = aiohttp.web.Application(
|
||||||
middlewares=(aiohttp_middlewares.error.error_middleware(),)
|
middlewares=(aiohttp_middlewares.error.error_middleware(),)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user