mirror of
https://github.com/creyD/apilog.git
synced 2026-04-13 11:50:31 +02:00
feat: added retention_days deletion
This commit is contained in:
36
app/setup.py
36
app/setup.py
@@ -1,12 +1,32 @@
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from creyPY.fastapi.db.session import SQLALCHEMY_DATABASE_URL, name
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from creyPY.fastapi.db.session import SQLALCHEMY_DATABASE_URL, get_db, name
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from alembic import command
|
||||
from alembic.config import Config
|
||||
from app.models.app import Application
|
||||
from app.models.entry import LogEntry
|
||||
from app.services.db.session import create_if_not_exists
|
||||
|
||||
|
||||
def delete_old_logs(sess: Session | None = None):
|
||||
session = sess or next(get_db())
|
||||
|
||||
for app in session.query(Application).filter(Application.retention_days.isnot(None)):
|
||||
cutoff = datetime.now() - timedelta(days=app.retention_days)
|
||||
print(
|
||||
f"Deleting logs older than {app.retention_days} days (cutoff: {cutoff}) for {app.name}",
|
||||
)
|
||||
session.query(LogEntry).filter(
|
||||
LogEntry.application == app.id, LogEntry.created_at < cutoff
|
||||
).delete()
|
||||
|
||||
session.commit()
|
||||
|
||||
|
||||
def setup(db_name=name):
|
||||
# Create Database
|
||||
create_if_not_exists(db_name)
|
||||
@@ -18,3 +38,17 @@ def setup(db_name=name):
|
||||
"script_location", os.path.join(os.path.dirname(os.path.dirname(__file__)), "alembic")
|
||||
)
|
||||
command.upgrade(config, "head")
|
||||
|
||||
# Start retention deletion
|
||||
scheduler = BackgroundScheduler()
|
||||
scheduler.add_job(
|
||||
delete_old_logs,
|
||||
"interval",
|
||||
id="deletor",
|
||||
days=1,
|
||||
max_instances=1,
|
||||
replace_existing=True,
|
||||
next_run_time=datetime.now(),
|
||||
)
|
||||
scheduler.start()
|
||||
print("Deletion scheduler started")
|
||||
|
||||
Reference in New Issue
Block a user