Skip to content

Commit fe09586

Browse files
Mireille NiwemuhuzaMireille Niwemuhuza
authored andcommitted
CV3-47 implement use celery to delete archived data
- configure celery beat - implement use celery to delete archived data that is over 30 days old [Delivers CV3-47]
1 parent 698c7a8 commit fe09586

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

config.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from celery.schedules import crontab
23
basedir = os.path.abspath(os.path.dirname(__file__))
34

45

@@ -18,6 +19,13 @@ class Config:
1819
# Celery configuration
1920
CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL')
2021
CELERY_RESULT_BACKEND = os.getenv('CELERY_RESULT_BACKEND')
22+
CELERY_IMPORTS = ["services.data_deletion.clean_archived_data"]
23+
CELERYBEAT_SCHEDULE = {
24+
'clean_archived_data': {
25+
'task': 'clean_archived_data.delete_archived_data',
26+
'schedule': crontab(hour=23, minute=00)
27+
},
28+
}
2129

2230
@staticmethod
2331
def init_app(app):

docker/dev/start_redis.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
#done
55
cd /app
66
export $(cat .env | xargs)
7-
celery worker -A cworker.celery --loglevel=info
7+
celery worker -A cworker.celery --loglevel=info & celery beat -A cworker.celery --schedule=/tmp/celerybeat-schedule --loglevel=info --pidfile=/tmp/celerybeat.pid
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from helpers.database import database_uri
2+
from sqlalchemy import create_engine, MetaData, and_
3+
from datetime import timedelta, datetime
4+
import celery
5+
6+
7+
@celery.task(name='clean_archived_data.delete_archived_data')
8+
def delete_archived_data():
9+
database_engine = create_engine(database_uri)
10+
metadata = MetaData()
11+
metadata.reflect(bind=database_engine)
12+
print('deleting archived data...')
13+
14+
for table in reversed(metadata.sorted_tables):
15+
try:
16+
now = datetime.now()
17+
delta = now - timedelta(days=30)
18+
statement = table.delete().where(
19+
and_(table.c.date_updated < delta, table.c.state == 'archived'))
20+
database_engine.execute(statement)
21+
except AttributeError:
22+
continue

0 commit comments

Comments
 (0)