aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.env.sample5
-rw-r--r--src/dashboard/tasks.py20
-rw-r--r--src/dashboard/views.py43
-rw-r--r--src/pharos_dashboard/settings.py8
4 files changed, 55 insertions, 21 deletions
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')