diff options
Diffstat (limited to 'dashboard/src/dashboard/tasks.py')
-rw-r--r-- | dashboard/src/dashboard/tasks.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/dashboard/src/dashboard/tasks.py b/dashboard/src/dashboard/tasks.py index b1d97b7..597629f 100644 --- a/dashboard/src/dashboard/tasks.py +++ b/dashboard/src/dashboard/tasks.py @@ -11,10 +11,9 @@ from celery import shared_task from django.utils import timezone -from django.db.models import Q from booking.models import Booking from notifier.manager import NotificationHandler -from api.models import JobStatus, SoftwareRelation, HostHardwareRelation, HostNetworkRelation, AccessRelation +from api.models import Job, JobStatus, SoftwareRelation, HostHardwareRelation, HostNetworkRelation, AccessRelation from resource_inventory.resource_manager import ResourceManager @@ -41,7 +40,7 @@ def booking_poll(): if vlan.public: try: host.lab.vlan_manager.release_public_vlan(vlan.vlan_id) - except: # will fail if we already released in this loop + except Exception: # will fail if we already released in this loop pass else: vlans.append(vlan.vlan_id) @@ -92,12 +91,15 @@ def free_hosts(): """ gets all hosts from the database that need to be freed and frees them """ - networks = ~Q(~Q(job__hostnetworkrelation__status=200)) - hardware = ~Q(~Q(job__hosthardwarerelation__status=200)) + undone_statuses = [JobStatus.NEW, JobStatus.CURRENT, JobStatus.ERROR] + undone_jobs = Job.objects.filter( + hostnetworkrelation__status__in=undone_statuses, + hosthardwarerelation__status__in=undone_statuses + ) - bookings = Booking.objects.filter( - networks, - hardware, + bookings = Booking.objects.exclude( + job__in=undone_jobs + ).filter( end__lt=timezone.now(), job__complete=True, resource__isnull=False |