summaryrefslogtreecommitdiffstats
path: root/pharos-dashboard/dashboard/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'pharos-dashboard/dashboard/models.py')
-rw-r--r--pharos-dashboard/dashboard/models.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/pharos-dashboard/dashboard/models.py b/pharos-dashboard/dashboard/models.py
index d645cd5..734da38 100644
--- a/pharos-dashboard/dashboard/models.py
+++ b/pharos-dashboard/dashboard/models.py
@@ -1,3 +1,6 @@
+from datetime import timedelta
+
+from django.utils import timezone
from django.contrib.auth.models import User
from django.db import models
@@ -9,9 +12,42 @@ class Resource(models.Model):
name = models.CharField(max_length=100, unique=True)
description = models.CharField(max_length=300, blank=True, null=True)
url = models.CharField(max_length=100, blank=True, null=True)
- owner = models.ForeignKey(User)
+ owner = models.ForeignKey(User, related_name='user_lab_owner', null=True)
+ vpn_users = models.ManyToManyField(User, related_name='user_vpn_users')
slave = models.ForeignKey(JenkinsSlave, on_delete=models.DO_NOTHING, null=True)
+ def get_booking_utilization(self, weeks):
+ """
+ Return a dictionary containing the count of booked and free seconds for a resource in the
+ range [now,now + weeks] if weeks is positive,
+ or [now-weeks, now] if weeks is negative
+ """
+
+ length = timedelta(weeks=abs(weeks))
+ now = timezone.now()
+
+ start = now
+ end = now + length
+ if weeks < 0:
+ start = now - length
+ end = now
+
+ bookings = self.booking_set.filter(start__lt=start + length, end__gt=start)
+
+ booked_seconds = 0
+ for booking in bookings:
+ booking_start = booking.start
+ booking_end = booking.end
+ if booking_start < start:
+ booking_start = start
+ if booking_end > end:
+ booking_end = start + length
+ total = booking_end - booking_start
+ booked_seconds += total.total_seconds()
+
+ return {'booked_seconds': booked_seconds,
+ 'available_seconds': length.total_seconds() - booked_seconds}
+
class Meta:
db_table = 'resource'