Merge "Limit User Booking Length and Extensions"
authorParker Berberian <pberberian@iol.unh.edu>
Fri, 13 Apr 2018 18:49:48 +0000 (18:49 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Fri, 13 Apr 2018 18:49:48 +0000 (18:49 +0000)
config.env.sample
src/dashboard/tasks.py
src/dashboard/views.py
src/pharos_dashboard/settings.py

index edd2bf0..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
 
@@ -31,3 +35,4 @@ EMAIL_HOST=
 EMAIL_PORT=
 EMAIL_HOST_USER=
 EMAIL_HOST_PASSWORD=
+DEFAULT_FROM_EMAIL=webmaster@localhost
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 62a9f83..4bab036 100644 (file)
@@ -120,22 +120,27 @@ class JenkinsUtilizationJSON(View):
     def get(self, request, *args, **kwargs):
         resource = get_object_or_404(Resource, id=kwargs['resource_id'])
         weeks = int(kwargs['weeks'])
-        utilization = resource.slave.get_utilization(timedelta(weeks=weeks))
-        utilization = [
-            {
-                'label': 'Offline',
-                'data': utilization['offline'],
-                'color': '#d9534f'
-            },
-            {
-                'label': 'Online',
-                'data': utilization['online'],
-                'color': '#5cb85c'
-            },
-            {
-                'label': 'Idle',
-                'data': utilization['idle'],
-                'color': '#5bc0de'
-            },
-        ]
-        return JsonResponse({'data': utilization})
+        try:
+            utilization = resource.slave.get_utilization(timedelta(weeks=weeks))
+            utilization = [
+                {
+                    'label': 'Offline',
+                    'data': utilization['offline'],
+                    'color': '#d9534f'
+                },
+                {
+                    'label': 'Online',
+                    'data': utilization['online'],
+                    'color': '#5cb85c'
+                },
+                {
+                    'label': 'Idle',
+                    'data': utilization['idle'],
+                    'color': '#5bc0de'
+                },
+            ]
+            jutilization = JsonResponse({'data': utilization})
+        except AttributeError:
+            return JsonResponse({'data': ''})
+        if jutilization:
+            return jutilization
index 361c4a1..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]'
@@ -196,3 +203,4 @@ EMAIL_PORT = os.environ['EMAIL_PORT']
 EMAIL_HOST_USER = os.environ['EMAIL_HOST_USER']
 EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']
 EMAIL_USE_TLS=True
+DEFAULT_EMAIL_FROM = os.environ.get('DEFAULT_EMAIL_FROM', 'webmaster@localhost')