aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSawyer Bergeron <sbergeron@iol.unh.edu>2018-03-26 17:07:55 -0400
committerSawyer Bergeron <sbergeron@iol.unh.edu>2018-03-27 18:47:53 +0000
commit71f34ee19c36ab44ddb8bafcc2044393ecd5667c (patch)
treebae37fa592bb19fe1b38639e44eb6de140e6baf5 /src
parent1db9f7772a9266edd84c33592322c5dd2e4aeae8 (diff)
Implement Booking Cleanup Task
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>
Diffstat (limited to 'src')
-rw-r--r--src/dashboard/tasks.py20
-rw-r--r--src/pharos_dashboard/settings.py7
2 files changed, 25 insertions, 2 deletions
diff --git a/src/dashboard/tasks.py b/src/dashboard/tasks.py
index aab3345..fa2ee9d 100644
--- a/src/dashboard/tasks.py
+++ b/src/dashboard/tasks.py
@@ -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()
diff --git a/src/pharos_dashboard/settings.py b/src/pharos_dashboard/settings.py
index 0ac5479..07e3920 100644
--- a/src/pharos_dashboard/settings.py
+++ b/src/pharos_dashboard/settings.py
@@ -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]'