mirror of
https://github.com/kemko/icecast-ripper.git
synced 2026-01-01 15:55:42 +03:00
Refactor logging in server.py
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user