Implement OPNFV workflow
[pharos-tools.git] / dashboard / src / api / views.py
index 84fa1b5..2ae1ac5 100644 (file)
@@ -1,5 +1,6 @@
 ##############################################################################
 # Copyright (c) 2016 Max Breitenfeldt and others.
+# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
@@ -12,12 +13,17 @@ from django.contrib.auth.decorators import login_required
 from django.shortcuts import redirect
 from django.utils.decorators import method_decorator
 from django.views import View
+from django.http.response import JsonResponse
 from rest_framework import viewsets
 from rest_framework.authtoken.models import Token
+from django.views.decorators.csrf import csrf_exempt
 
-from api.serializers import *
+from api.serializers.booking_serializer import BookingSerializer
+from api.serializers.old_serializers import UserSerializer
+from account.models import UserProfile
 from booking.models import Booking
-from dashboard.models import Resource, Server, ResourceStatus
+from api.models import LabManagerTracker, get_task
+from notifier.manager import NotificationHandler
 
 
 class BookingViewSet(viewsets.ModelViewSet):
@@ -26,20 +32,9 @@ class BookingViewSet(viewsets.ModelViewSet):
     filter_fields = ('resource', 'id')
 
 
-class ServerViewSet(viewsets.ModelViewSet):
-    queryset = Server.objects.all()
-    serializer_class = ServerSerializer
-    filter_fields = ('resource', 'name')
-
-
-class ResourceViewSet(viewsets.ModelViewSet):
-    queryset = Resource.objects.all()
-    serializer_class = ResourceSerializer
-    filter_fields = ('name', 'id')
-
-class ResourceStatusViewSet(viewsets.ModelViewSet):
-    queryset = ResourceStatus.objects.all()
-    serializer_class = ResourceStatusSerializer
+class UserViewSet(viewsets.ModelViewSet):
+    queryset = UserProfile.objects.all()
+    serializer_class = UserSerializer
 
 
 @method_decorator(login_required, name='dispatch')
@@ -51,3 +46,99 @@ class GenerateTokenView(View):
             token.delete()
             Token.objects.create(user=user)
         return redirect('account:settings')
+
+
+def lab_inventory(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    return JsonResponse(lab_manager.get_inventory(), safe=False)
+
+
+@csrf_exempt
+def lab_host(request, lab_name="", host_id=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    if request.method == "GET":
+        return JsonResponse(lab_manager.get_host(host_id), safe=False)
+    if request.method == "POST":
+        return JsonResponse(lab_manager.update_host(host_id, request.POST), safe=False)
+
+
+def lab_status(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    if request.method == "POST":
+        return JsonResponse(lab_manager.set_status(request.POST), safe=False)
+    return JsonResponse(lab_manager.get_status(), safe=False)
+
+
+@csrf_exempt
+def update_host_bmc(request, lab_name="", host_id=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    if request.method == "POST":
+        # update / create RemoteInfo for host
+        return JsonResponse(
+            lab_manager.update_host_remote_info(request.POST, host_id),
+            safe=False
+        )
+
+
+def lab_profile(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    return JsonResponse(lab_manager.get_profile(), safe=False)
+
+
+@csrf_exempt
+def specific_task(request, lab_name="", job_id="", task_id=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    LabManagerTracker.get(lab_name, lab_token)  # Authorize caller, but we dont need the result
+
+    if request.method == "POST":
+        task = get_task(task_id)
+        if 'status' in request.POST:
+            task.status = request.POST.get('status')
+        if 'message' in request.POST:
+            task.message = request.POST.get('message')
+        if 'lab_token' in request.POST:
+            task.lab_token = request.POST.get('lab_token')
+        task.save()
+        NotificationHandler.task_updated(task)
+        d = {}
+        d['task'] = task.config.get_delta()
+        m = {}
+        m['status'] = task.status
+        m['job'] = str(task.job)
+        m['message'] = task.message
+        d['meta'] = m
+        return JsonResponse(d, safe=False)
+    elif request.method == "GET":
+        return JsonResponse(get_task(task_id).config.get_delta())
+
+
+@csrf_exempt
+def specific_job(request, lab_name="", job_id=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    if request.method == "POST":
+        return JsonResponse(lab_manager.update_job(job_id, request.POST), safe=False)
+    return JsonResponse(lab_manager.get_job(job_id), safe=False)
+
+
+def new_jobs(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    return JsonResponse(lab_manager.get_new_jobs(), safe=False)
+
+
+def current_jobs(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    return JsonResponse(lab_manager.get_current_jobs(), safe=False)
+
+
+def done_jobs(request, lab_name=""):
+    lab_token = request.META.get('HTTP_AUTH_TOKEN')
+    lab_manager = LabManagerTracker.get(lab_name, lab_token)
+    return JsonResponse(lab_manager.get_done_jobs(), safe=False)