You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
import time
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
import atexit
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
from app import app, db
|
|
|
|
from app.models import Url
|
|
|
|
|
|
|
|
def remove_dead_urls():
|
|
|
|
for url in Url.query.all():
|
|
|
|
check_url(url)
|
|
|
|
|
|
|
|
def check_url(url):
|
|
|
|
if url.death is not None:
|
|
|
|
if datetime.now() > url.death :
|
|
|
|
app.logger.info(f"Removed hash '{url.hash}' because its retention time has passed.")
|
|
|
|
db.session.delete(url)
|
|
|
|
db.session.commit()
|
|
|
|
return "Timeout"
|
|
|
|
if url.view_counter is not None:
|
|
|
|
if url.view_counter <= 0:
|
|
|
|
app.logger.info(f"Removed hash '{url.hash}' because its viewcouner has run out.")
|
|
|
|
db.session.delete(url)
|
|
|
|
db.session.commit()
|
|
|
|
return "Counter"
|
|
|
|
return None
|
|
|
|
|
|
|
|
scheduler = None
|
|
|
|
|
|
|
|
def start_scheduler():
|
|
|
|
global scheduler
|
|
|
|
if scheduler is not None:
|
|
|
|
app.logger.info("Database_cleaner scheduler was already started, not launching a second instane.")
|
|
|
|
return
|
|
|
|
scheduler = BackgroundScheduler()
|
|
|
|
scheduler.add_job(func=remove_dead_urls, trigger="interval", hours=1)
|
|
|
|
scheduler.start()
|
|
|
|
app.logger.info("Database_cleaner scheduler was started.")
|
|
|
|
|
|
|
|
# Shut down the scheduler when exiting the app
|
|
|
|
atexit.register(shutdown_scheduler)
|
|
|
|
|
|
|
|
def shutdown_scheduler():
|
|
|
|
scheduler.shutdown()
|
|
|
|
app.logger.info("Database_cleaner scheduler was shut down.")
|
|
|
|
|