Hides expired bookings in the "My Bookings" Page
[pharos-tools.git] / dashboard / src / dashboard / tasks.py
index 0f7af1c..597629f 100644 (file)
 
 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 *
-from notifier.models import *
-from api.models import *
+from notifier.manager import NotificationHandler
+from api.models import Job, JobStatus, SoftwareRelation, HostHardwareRelation, HostNetworkRelation, AccessRelation
 from resource_inventory.resource_manager import ResourceManager
 
 
-@shared_task
-def conjure_aggregate_notifiers():
-    NotifyPeriodic.task()
-
-
 @shared_task
 def booking_poll():
     def cleanup_hardware(qs):
@@ -32,7 +25,7 @@ def booking_poll():
             config.clear_delta()
             config.set_power("off")
             config.save()
-            hostrelation.status=JobStatus.NEW
+            hostrelation.status = JobStatus.NEW
             hostrelation.save()
 
     def cleanup_network(qs):
@@ -47,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)
@@ -59,7 +52,7 @@ def booking_poll():
                 interface.config.clear()
                 network.add_interface(interface)
                 network.save()
-            hostrelation.status=JobStatus.NEW
+            hostrelation.status = JobStatus.NEW
             hostrelation.save()
 
     def cleanup_software(qs):
@@ -68,7 +61,7 @@ def booking_poll():
             software = relation.config.opnfv
             software.clear_delta()
             software.save()
-            relation.status=JobStatus.NEW
+            relation.status = JobStatus.NEW
             relation.save()
 
     def cleanup_access(qs):
@@ -90,6 +83,7 @@ def booking_poll():
             cleanup_access(AccessRelation.objects.filter(job=job))
             job.complete = True
             job.save()
+            NotificationHandler.notify_booking_end(booking)
 
 
 @shared_task
@@ -97,15 +91,18 @@ 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))
-
-    bookings = Booking.objects.filter(
-            networks,
-            hardware,
-            end__lt=timezone.now(),
-            job__complete=True,
-            resource__isnull=False
-            )
+    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.exclude(
+        job__in=undone_jobs
+    ).filter(
+        end__lt=timezone.now(),
+        job__complete=True,
+        resource__isnull=False
+    )
     for booking in bookings:
         ResourceManager.getInstance().deleteResourceBundle(booking.resource)