Refactor logging in server.py

This commit is contained in:
Dmitrii Andreev
2024-01-07 21:19:14 +03:00
parent d2d487d1ed
commit edee5ad7b4

View File

@@ -1,24 +1,33 @@
"""Server module for the application"""
import os
import mimetypes
from pprint import pprint
from pathlib import Path
from aiohttp import web
import logger
from rss_generator import generate_rss_feed
from logger import log_event
routes = web.RouteTableDef()
def log_request(request, level="INFO"):
"""Log an HTTP request"""
logger.log_event("http_request", {
"method": request.method,
"path": request.path,
"remote": request.remote,
"query_string": request.query_string,
"headers": dict(request.headers)
}, level)
@routes.get('/health')
async def helth_check(request):
"""Health check endpoint"""
log_event("health_check_requested", {"method": "GET", "path": request.path}, level="INFO")
log_request(request)
return web.Response(text="OK")
@routes.get('/rss')
async def rss_feed(request):
"""RSS feed endpoint"""
log_event("rss_feed_requested", {"method": "GET", "path": request.path}, level="INFO")
log_request(request)
output_directory = request.app['config'].output_directory
files = [f for f in os.listdir(output_directory) if f.endswith('.mp3')]
rss_xml = generate_rss_feed(files, output_directory, request.app['config'].server_host)
@@ -28,18 +37,17 @@ async def rss_feed(request):
async def serve_file(request):
"""File serving endpoint"""
file_name = request.match_info['file_name']
log_event("file_serve_requested", {"method": "GET", "path": request.path, "file_name": file_name}, level="INFO")
log_request(request)
output_directory = request.app['config'].output_directory
file_path = os.path.join(output_directory, file_name)
pprint(file_path)
if not Path(output_directory).joinpath(file_name).resolve().relative_to(Path(output_directory).resolve()):
log_event("file_access_denied", {"file_name": file_name}, level="WARNING")
logger.log_event("file_access_denied", {"file_name": file_name}, level="WARNING")
return web.Response(status=403, text='Access denied')
if not os.path.exists(file_path):
log_event("file_not_found", {"file_name": file_name}, level="WARNING")
logger.log_event("file_not_found", {"file_name": file_name}, level="WARNING")
return web.Response(status=404, text='File not found')
file = os.path.basename(file_path)
@@ -58,6 +66,5 @@ async def start_server(config):
runner = web.AppRunner(app)
await runner.setup()
site = web.TCPSite(runner, '0.0.0.0', config.server_port)
log_event('server_starting', {'port': config.server_port}, level="INFO")
logger.log_event('server_starting', {'port': config.server_port}, level="DEBUG")
await site.start()
log_event('server_started', {'port': config.server_port}, level="INFO")