From: Parker Berberian Date: Fri, 13 Apr 2018 18:49:48 +0000 (+0000) Subject: Merge "Limit User Booking Length and Extensions" X-Git-Tag: 2.0.99~212 X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=be7c952006cf988d3824cbd115a3e4f648efdffd;hp=752f31b9722d15a7857e5ea56966e5f17141d82e;p=laas.git Merge "Limit User Booking Length and Extensions" --- diff --git a/config.env.sample b/config.env.sample index edd2bf0..8d0afd6 100644 --- a/config.env.sample +++ b/config.env.sample @@ -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 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/dashboard/views.py b/src/dashboard/views.py index 62a9f83..4bab036 100644 --- a/src/dashboard/views.py +++ b/src/dashboard/views.py @@ -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 diff --git a/src/pharos_dashboard/settings.py b/src/pharos_dashboard/settings.py index 361c4a1..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]' @@ -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')