Implement Booking Cleanup Task
authorSawyer Bergeron <sbergeron@iol.unh.edu>
Mon, 26 Mar 2018 21:07:55 +0000 (17:07 -0400)
committerSawyer Bergeron <sbergeron@iol.unh.edu>
Tue, 27 Mar 2018 18:47:53 +0000 (18:47 +0000)
Jira: PHAROS-344

Two new settings in config.env allow setting
1) how "stale" an expired booking can get before being culled and
2) how many expired bookings are kept around before culling
If either condition is met, expired bookings will be deleted until
both are false.

Change-Id: I6b091e93c6fe5d47b75ebf5325b717fa898c773c
Signed-off-by: Sawyer Bergeron <sbergeron@iol.unh.edu>
config.env.sample
src/dashboard/tasks.py
src/pharos_dashboard/settings.py

index c36e52a..8d0afd6 100644 (file)
@@ -23,6 +23,10 @@ JIRA_USER_PASSWORD=sample_jira_pass
 RABBITMQ_USER=opnfv
 RABBITMQ_PASSWORD=opnfvopnfv
 
+# Cleanup: time is in days
+BOOKING_EXPIRE_TIME=30
+BOOKING_MAXIMUM_NUMBER=10
+
 #Jenkins Build Server
 JENKINS_URL=https://build.opnfv.org/ci
 
index aab3345..fa2ee9d 100644 (file)
@@ -7,16 +7,32 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-
 from datetime import timedelta
 
 from celery import shared_task
 from django.utils import timezone
+from django.conf import settings
+from booking.models import Booking
 
 from jenkins.models import JenkinsStatistic
 
-
 @shared_task
 def database_cleanup():
     now = timezone.now()
     JenkinsStatistic.objects.filter(timestamp__lt=now - timedelta(weeks=4)).delete()
+
+def booking_cleanup():
+    expire_time = timedelta(days=int(settings.BOOKING_EXP_TIME))
+    expire_number = int(settings.BOOKING_MAX_NUM)
+    expired_set = Booking.objects.filter(end__lte=timezone.now())
+    expired_count = len(expired_set)
+
+    for booking in expired_set:
+        if timezone.now() - booking.end > expire_time:
+            booking.delete()
+            expired_count = expired_count - 1
+
+    if expired_count > expire_number:
+        oldest = expired_set.order_by("end")[:expired_count-expire_number]
+        for booking in oldest:
+            booking.delete()
index 0ac5479..07e3920 100644 (file)
@@ -170,6 +170,9 @@ RABBITMQ_PASSWORD = os.environ['RABBITMQ_PASSWORD']
 
 BROKER_URL = 'amqp://' + RABBITMQ_USER + ':' + RABBITMQ_PASSWORD + '@rabbitmq:5672//'
 
+BOOKING_EXP_TIME = os,environ['BOOKING_EXPIRE_TIME']
+BOOKING_MAX_NUM = os.environ['BOOKING_MAXIMUM_NUMBER']
+
 CELERYBEAT_SCHEDULE = {
     'sync-jenkins': {
         'task': 'jenkins.tasks.sync_jenkins',
@@ -183,6 +186,10 @@ CELERYBEAT_SCHEDULE = {
         'task': 'dashboard.tasks.database_cleanup',
         'schedule': timedelta(hours=24)
     },
+    'booking_cleanup': {
+        'task': 'dashboard.tasks.booking_cleanup',
+        'schedule': timedelta(hours=24)
+    },
 }
 # Jenkins Settings
 ALL_SLAVES_URL = os.environ['JENKINS_URL'] + '/computer/api/json?tree=computer[displayName,offline,idle]'