50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from pathlib import Path
|
|
|
|
from aiohttp import web
|
|
from aiohttp.web import Request, Response
|
|
|
|
from app.library.config import Config
|
|
from app.library.encoder import Encoder
|
|
from app.library.router import route
|
|
from app.library.Utils import read_logfile
|
|
|
|
|
|
@route("GET", "api/logs/", "logs")
|
|
async def logs(request: Request, config: Config, encoder: Encoder) -> Response:
|
|
"""
|
|
Get recent logs
|
|
|
|
Args:
|
|
request (Request): The request object.
|
|
config (Config): The configuration instance.
|
|
encoder (Encoder): The encoder instance.
|
|
|
|
Returns:
|
|
Response: The response object.
|
|
|
|
"""
|
|
if not config.file_logging:
|
|
return web.json_response(data={"error": "File logging is not enabled."}, status=web.HTTPNotFound.status_code)
|
|
|
|
offset = int(request.query.get("offset", 0))
|
|
limit = int(request.query.get("limit", 100))
|
|
if limit < 1 or limit > 150:
|
|
limit = 50
|
|
|
|
logs_data = await read_logfile(
|
|
file=Path(config.config_path) / "logs" / "app.log",
|
|
offset=offset,
|
|
limit=limit,
|
|
)
|
|
|
|
return web.json_response(
|
|
data={
|
|
"logs": logs_data["logs"],
|
|
"offset": offset,
|
|
"limit": limit,
|
|
"next_offset": logs_data["next_offset"],
|
|
"end_is_reached": logs_data["end_is_reached"],
|
|
},
|
|
status=web.HTTPOk.status_code,
|
|
dumps=encoder.encode,
|
|
)
|