I implemented new APIs for deleting tasks
Events:
None delete_tasks_by_time(int to_timestamp)
Example: delete tasks older than 48 hours
import celery
import os
import timedelta
import datetime
broker = os.environ.get('CELERY_BROKER_URL')
app = celery.Celery('tasks', broker=broker)
flower = Flower(capp=app, options=flower_options)
time_delta = timedelta(hours=48)
now = datetime.datetime.now()
delete_before_time = now-time_delta
flower.events.delete_tasks_by_time(delete_before_time.timestamp())
Then we can a celery beat scheduler, that runs each hour, and delete the tasks
@app.task(queue='cleanup_tasks')
def clean_up_tasks():
from flower.app import Flower
time_delta = timedelta(hours=48)
now = datetime.datetime.now()
delete_before_time = now-time_delta
flower_options = object()
flower_options.db = 'flower'
flower_options.persistent = True
flower_options.purge_offline_workers = 1
# note: use env vars better
flower = Flower(capp=app, options=flower_options)
flower.events.delete_tasks_by_time(delete_before_time.timestamp())
@app.on_after_configure.connect
def add_periodic(**kwargs):
app.add_periodic_task(crontab(hour="*", minute=0), clean_up_tasks.s(), name='cleanup-tasks')
This is especially helpful for people who wants to maintain a good GDPR compliance, as you keep only data for a short time for basically debugging, everything is configurable to taste
References:
https://github.com/mher/flower/issues/1189
https://github.com/mher/flower/pull/1188
Hopefully the PR gets merged soon!
Enjoy <3