aboutsummaryrefslogtreecommitdiffstats
path: root/src/booking/views.py
diff options
context:
space:
mode:
authorJustin Choquette <jchoquette@iol.unh.edu>2023-06-08 12:46:53 -0400
committerJustin Choquette <jchoquette@iol.unh.edu>2023-07-21 13:17:51 -0400
commita09db9f287a02873c0226759f8ea444bb304cd59 (patch)
tree59e744e4b998973a808abbae2d21fbdd6201d829 /src/booking/views.py
parent8ddc7e820e120f1dde4e901d3cb6f1dd3f281e65 (diff)
LaaS 3.0 Almost MVP
Change-Id: Ided9a43cf3088bb58a233dc459711c03f43e11b8 Signed-off-by: Justin Choquette <jchoquette@iol.unh.edu>
Diffstat (limited to 'src/booking/views.py')
-rw-r--r--src/booking/views.py123
1 files changed, 5 insertions, 118 deletions
diff --git a/src/booking/views.py b/src/booking/views.py
index 367a18d..25cac43 100644
--- a/src/booking/views.py
+++ b/src/booking/views.py
@@ -18,63 +18,9 @@ from django.shortcuts import redirect, render
from django.db.models import Q
from django.urls import reverse
-from resource_inventory.models import ResourceBundle, ResourceProfile, Image, ResourceQuery
from account.models import Downtime, Lab
+from api.views import get_booking_status
from booking.models import Booking
-from booking.stats import StatisticsManager
-from booking.forms import HostReImageForm
-from workflow.forms import FormUtils
-from api.models import JobFactory, GeneratedCloudConfig
-from workflow.views import login
-from booking.forms import QuickBookingForm
-from booking.quick_deployer import create_from_form, drop_filter
-import traceback
-
-
-def quick_create_clear_fields(request):
- request.session['quick_create_forminfo'] = None
-
-
-def quick_create(request):
- if not request.user.is_authenticated:
- return login(request)
-
- if request.method == 'GET':
- context = {}
- attrs = FormUtils.getLabData(user=request.user)
- context['form'] = QuickBookingForm(lab_data=attrs, default_user=request.user.username, user=request.user)
- context['lab_profile_map'] = {}
- context.update(drop_filter(request.user))
- context['contact_email'] = Lab.objects.filter(name="UNH_IOL").first().contact_email
- return render(request, 'booking/quick_deploy.html', context)
-
- if request.method == 'POST':
- attrs = FormUtils.getLabData(user=request.user)
- form = QuickBookingForm(request.POST, lab_data=attrs, user=request.user)
-
- context = {}
- context['lab_profile_map'] = {}
- context['form'] = form
-
- if form.is_valid():
- try:
- booking = create_from_form(form, request)
- messages.success(request, "We've processed your request. "
- "Check Account->My Bookings for the status of your new booking")
- return redirect(reverse('booking:booking_detail', kwargs={'booking_id': booking.id}))
- except Exception as e:
- print("Error occurred while handling quick deployment:")
- traceback.print_exc()
- print(str(e))
- messages.error(request, "Whoops, an error occurred: " + str(e))
- context.update(drop_filter(request.user))
- return render(request, 'booking/quick_deploy.html', context)
- else:
- messages.error(request, "Looks like the form didn't validate. Check that you entered everything correctly")
- context['status'] = 'false'
- context.update(drop_filter(request.user))
- return render(request, 'booking/quick_deploy.html', context)
-
class BookingView(TemplateView):
template_name = "booking/booking_detail.html"
@@ -123,31 +69,6 @@ class BookingListView(TemplateView):
return context
-class ResourceBookingsJSON(View):
- def get(self, request, *args, **kwargs):
- resource = get_object_or_404(ResourceBundle, id=self.kwargs['resource_id'])
- bookings = resource.booking_set.get_queryset().values(
- 'id',
- 'start',
- 'end',
- 'purpose',
- 'config_bundle__name'
- )
- return JsonResponse({'bookings': list(bookings)})
-
-
-def build_image_mapping(lab, user):
- mapping = {}
- for profile in ResourceProfile.objects.filter(labs=lab):
- images = Image.objects.filter(
- from_lab=lab,
- architecture=profile.architecture
- ).filter(
- Q(public=True) | Q(owner=user)
- )
- mapping[profile.name] = [{"name": image.name, "value": image.id} for image in images]
- return mapping
-
def booking_detail_view(request, booking_id):
user = None
@@ -157,18 +78,17 @@ def booking_detail_view(request, booking_id):
return render(request, "dashboard/login.html", {'title': 'Authentication Required'})
booking = get_object_or_404(Booking, id=booking_id)
+ statuses = get_booking_status(booking)
allowed_users = set(list(booking.collaborators.all()))
allowed_users.add(booking.owner)
if user not in allowed_users:
return render(request, "dashboard/login.html", {'title': 'This page is private'})
-
+
context = {
'title': 'Booking Details',
'booking': booking,
- 'pdf': booking.pdf,
- 'user_id': user.id,
- 'image_mapping': build_image_mapping(booking.lab, user),
- 'posix_username': GeneratedCloudConfig._normalize_username(None, user.username)
+ 'statuses': statuses,
+ 'collab_string': ', '.join(map(str, booking.collaborators.all()))
}
return render(
@@ -176,36 +96,3 @@ def booking_detail_view(request, booking_id):
"booking/booking_detail.html",
context
)
-
-
-def booking_modify_image(request, booking_id):
- form = HostReImageForm(request.POST)
- if form.is_valid():
- booking = Booking.objects.get(id=booking_id)
- if request.user != booking.owner:
- return HttpResponse("unauthorized")
- if timezone.now() > booking.end:
- return HttpResponse("unauthorized")
- new_image = Image.objects.get(id=form.cleaned_data['image_id'])
- host = ResourceQuery.get(id=form.cleaned_data['host_id'])
- host.config.image = new_image
- host.config.save()
- JobFactory.reimageHost(new_image, booking, host)
- return HttpResponse(new_image.name)
- return HttpResponse("error")
-
-
-def booking_stats_view(request):
- return render(
- request,
- "booking/stats.html",
- context={"data": StatisticsManager.getContinuousBookingTimeSeries(), "title": ""}
- )
-
-
-def booking_stats_json(request):
- try:
- span = int(request.GET.get("days", 14))
- except Exception:
- span = 14
- return JsonResponse(StatisticsManager.getContinuousBookingTimeSeries(span), safe=False)