logging
This commit is contained in:
parent
f02582b835
commit
052d11d15b
11
Dockerfile
11
Dockerfile
@ -2,10 +2,10 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
|
|
||||||
# Install ffmpeg and other dependencies
|
# Install ffmpeg and other dependencies
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y ffmpeg \
|
||||||
ffmpeg \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& pip install yt_dlp
|
&& pip install yt_dlp
|
||||||
|
# && install -y cron
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
ENV PYTHONDONTWRITEBYTECODE=1
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
@ -14,7 +14,7 @@ ENV PYTHONUNBUFFERED=1
|
|||||||
# Set work directory
|
# Set work directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN mkdir /app/data /app/tv /app/youtube /app/asmr /app/nsfw /app/temp
|
RUN mkdir /app/data /app/tv /app/youtube /app/asmr /app/nsfw /app/temp /app/data/logs
|
||||||
|
|
||||||
# Install dependencies
|
# Install dependencies
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
@ -23,8 +23,13 @@ RUN pip install --no-cache-dir -r requirements.txt
|
|||||||
# Copy project files
|
# Copy project files
|
||||||
COPY /app .
|
COPY /app .
|
||||||
|
|
||||||
|
# Make sure your script is executable
|
||||||
|
# RUN chmod +x /app/my_script.sh
|
||||||
|
# RUN chmod +x /start.sh
|
||||||
|
|
||||||
# Expose port
|
# Expose port
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
|
|
||||||
# Run the app with Uvicorn
|
# Run the app with Uvicorn
|
||||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
|
# CMD ["/start.sh"]
|
||||||
|
|||||||
60
app/main.py
60
app/main.py
@ -1,24 +1,66 @@
|
|||||||
from fastapi import FastAPI, Request, Form
|
from fastapi import FastAPI, Request, Form, BackgroundTasks
|
||||||
from fastapi.responses import HTMLResponse, JSONResponse
|
from fastapi.responses import HTMLResponse, JSONResponse
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi import BackgroundTasks
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import json, download, asyncio
|
import json, download, asyncio
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
import logging, os
|
||||||
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
|
||||||
|
# Ensure log directory exists
|
||||||
|
os.makedirs("/data/logs", exist_ok=True)
|
||||||
|
|
||||||
|
# Setup timed rotating logger
|
||||||
|
log_path = "/data/logs/syllabus.log"
|
||||||
|
logger = logging.getLogger("syllabus_logger")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
# Remove any default handlers
|
||||||
|
logger.handlers = []
|
||||||
|
|
||||||
|
# Set up TimedRotatingFileHandler
|
||||||
|
handler = TimedRotatingFileHandler(
|
||||||
|
filename=log_path,
|
||||||
|
when="midnight", # Rotate at midnight
|
||||||
|
interval=1, # Every 1 day
|
||||||
|
backupCount=30, # Keep last 7 logs
|
||||||
|
encoding="utf-8",
|
||||||
|
utc=False # Use UTC for time reference
|
||||||
|
)
|
||||||
|
|
||||||
|
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
||||||
|
handler.setFormatter(formatter)
|
||||||
|
logger.addHandler(handler)
|
||||||
|
|
||||||
|
# App setup
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
app.mount("/data", StaticFiles(directory="/data"), name="data")
|
app.mount("/data", StaticFiles(directory="/data"), name="data")
|
||||||
|
|
||||||
|
|
||||||
templates = Jinja2Templates(directory="templates")
|
templates = Jinja2Templates(directory="templates")
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
# JSON cache
|
# Optional cache
|
||||||
cached_data = None
|
cached_data = None
|
||||||
|
|
||||||
|
# Middleware
|
||||||
|
@app.middleware("http")
|
||||||
|
async def log_requests(request: Request, call_next):
|
||||||
|
try:
|
||||||
|
response = await call_next(request)
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"EXCEPTION: {request.method} {request.url} - {str(e)}")
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=500,
|
||||||
|
content={"detail": "Internal Server Error"},
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.info(
|
||||||
|
f"request_client={request.client.host}:{request.client.port}, "
|
||||||
|
f"request_method={request.method}, request_url={request.url}, "
|
||||||
|
f"status_code={response.status_code}"
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
# api
|
# api
|
||||||
@app.post("/ebook/download", description="Download an ebook via a url.")
|
@app.post("/ebook/download", description="Download an ebook via a url.")
|
||||||
async def ebookDownload(
|
async def ebookDownload(
|
||||||
@ -89,7 +131,7 @@ async def ydl(background_tasks: BackgroundTasks, url: str = Form(...), location:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return JSONResponse(status_code=500, content={"status": "error", "message": str(e)})
|
return JSONResponse(status_code=500, content={"status": "error", "message": str(e)})
|
||||||
|
|
||||||
|
#web ui
|
||||||
@app.get("/", include_in_schema=False, response_class=HTMLResponse)
|
@app.get("/", include_in_schema=False, response_class=HTMLResponse)
|
||||||
async def index(request: Request):
|
async def index(request: Request):
|
||||||
global cached_data
|
global cached_data
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user