aboutsummaryrefslogtreecommitdiffstats
path: root/src/notifier/manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/notifier/manager.py')
-rw-r--r--src/notifier/manager.py162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/notifier/manager.py b/src/notifier/manager.py
deleted file mode 100644
index e2afdec..0000000
--- a/src/notifier/manager.py
+++ /dev/null
@@ -1,162 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 Parker Berberian, Sawyer Bergeron and others.
-# Copyright (c) 2020 Sawyer Bergeron, Sean Smith, and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-import os
-from notifier.models import Notification, Emailed, Email
-
-from django.template.loader import render_to_string
-from django.utils import timezone
-
-
-class NotificationHandler(object):
-
- @classmethod
- def notify_new_booking(cls, booking):
- template = "notifier/new_booking.html"
- titles = ["You have a new booking (" + str(booking.id) + ")", "You have been added to a booking (" + str(booking.id) + ")"]
- cls.booking_notify(booking, template, titles)
-
- @classmethod
- def notify_booking_end(cls, booking):
- template = "notifier/end_booking.html"
- titles = ["Your booking (" + str(booking.id) + ") has ended", "A booking (" + str(booking.id) + ") that you collaborate on has ended"]
- cls.booking_notify(booking, template, titles)
-
- @classmethod
- def notify_booking_expiring(cls, booking):
- template = "notifier/expiring_booking.html"
- titles = ["Your booking (" + str(booking.id) + ") is about to expire", "A booking (" + str(booking.id) + ") that you collaborate on is about to expire"]
- cls.booking_notify(booking, template, titles)
- cls.email_booking_expiring(booking)
-
- @classmethod
- def booking_notify(cls, booking, template, titles):
- """
- Create a notification for a booking owner and collaborators using the template.
-
- titles is a list - the first is the title for the owner's notification,
- the last is the title for the collaborators'
- """
- owner_notif = Notification.objects.create(
- title=titles[0],
- content=render_to_string(
- template,
- context={
- "booking": booking,
- "owner": True
- }
- )
- )
- owner_notif.recipients.add(booking.owner.userprofile)
- if not booking.collaborators.all().exists():
- return # no collaborators - were done
-
- collab_notif = Notification.objects.create(
- title=titles[-1],
- content=render_to_string(
- template,
- context={
- "booking": booking,
- "owner": False
- }
- )
- )
- for c in booking.collaborators.all():
- collab_notif.recipients.add(c.userprofile)
-
- @classmethod
- def email_job_fulfilled(cls, job):
- template_name = "notifier/email_fulfilled.txt"
- all_tasks = job.get_tasklist()
- users = list(job.booking.collaborators.all())
- users.append(job.booking.owner)
- for user in users:
- user_tasklist = []
- # gather up all the relevant messages from the lab
- for task in all_tasks:
- if (not hasattr(task.config, "user")) or task.config.user == user:
- user_tasklist.append(
- {
- "title": task.type_str() + " Message: ",
- "content": task.message
- }
- )
- # gather up all the other needed info
- context = {
- "owner": user == job.booking.owner,
- "user_name": user.userprofile.full_name,
- "messages": user_tasklist,
- "booking_url": os.environ.get("DASHBOARD_URL", "<Dashboard url>") + "/booking/detail/" + str(job.booking.id) + "/"
- }
-
- # render email template
- message = render_to_string(template_name, context)
-
- # finally, queue email for sending
- Email.objects.create(title="Your Booking is Ready", message=message, recipient=user.userprofile.email_addr)
-
- @classmethod
- def email_booking_over(cls, booking):
- template_name = "notifier/email_ended.txt"
- hostnames = [host.name for host in booking.resource.get_resources()]
- users = list(booking.collaborators.all())
- users.append(booking.owner)
- for user in users:
- context = {
- "user_name": user.userprofile.full_name,
- "booking": booking,
- "hosts": hostnames,
- "booking_url": os.environ.get("DASHBOARD_URL", "<Dashboard url>") + "/booking/detail/" + str(booking.id) + "/"
- }
-
- message = render_to_string(template_name, context)
-
- Email.objects.create(title="Your Booking has Expired", message=message, recipient=user.userprofile.email_addr)
-
- @classmethod
- def email_booking_expiring(cls, booking):
- template_name = "notifier/email_expiring.txt"
- hostnames = [host.name for host in booking.resource.get_resources()]
- users = list(booking.collaborators.all())
- users.append(booking.owner)
- for user in users:
- context = {
- "user_name": user.userprofile.full_name,
- "booking": booking,
- "hosts": hostnames,
- "booking_url": os.environ.get("DASHBOARD_URL", "<Dashboard url>") + "/booking/detail/" + str(booking.id) + "/"
- }
-
- message = render_to_string(template_name, context)
-
- Email.objects.create(title="Your Booking is Expiring", message=message, recipient=user.userprofile.email_addr)
-
- @classmethod
- def task_updated(cls, task):
- """
- Notification of task changing.
-
- called every time a lab updated info about a task.
- sends an email when 'task' changing state means a booking has
- just been fulfilled (all tasks done, servers ready to use)
- or is over.
- """
- if task.job is None or task.job.booking is None:
- return
- if task.job.is_fulfilled():
- if task.job.booking.end < timezone.now():
- if Emailed.objects.filter(end_booking=task.job.booking).exists():
- return
- Emailed.objects.create(end_booking=task.job.booking)
- cls.email_booking_over(task.job.booking)
- if task.job.booking.end > timezone.now() and task.job.booking.start < timezone.now():
- if Emailed.objects.filter(begin_booking=task.job.booking).exists():
- return
- Emailed.objects.create(begin_booking=task.job.booking)
- cls.email_job_fulfilled(task.job)