Files
altium-render-engine/backend/app/cleanup.py
T
2026-11-09 12:34:50 +03:30

30 خطوط
1.2 KiB
Python

"""Delete expired uploads/artifacts after any active lease has elapsed."""
import logging
import time
from sqlalchemy import select, delete, or_
from .db import Job, sessions, engine
from .storage import storage
from .job_types import comparison_sources
log=logging.getLogger(__name__)
def cleanup(batch=100):
now=time.time(); removed=0
with sessions().begin() as db:
q=select(Job).where(Job.expires_at<=now, or_(Job.status!='processing', Job.lease_until<now)).limit(batch)
if engine().dialect.name=='postgresql': q=q.with_for_update(skip_locked=True)
for job in db.scalars(q):
try:
storage().delete(job.input_key)
for source in comparison_sources(job.input_key): storage().delete(source)
for attempt in (1,2):
for name in ('data.json','drawing.svg','old.svg','new.svg'):
storage().delete(f'{job.id}/attempt-{attempt}/{name}')
db.delete(job); removed+=1
except Exception: log.exception('Expired artifact cleanup failed for %s',job.id)
return removed
if __name__=='__main__':
from .db import initialize
initialize(); print(f'Removed {cleanup()} expired schematics')