Invoked mailing mechanism
authorLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Tue, 6 Dec 2011 13:29:33 +0000 (15:29 +0200)
committerLeonidas Poulopoulos <leopoul@noc.grnet.gr>
Tue, 6 Dec 2011 13:29:33 +0000 (15:29 +0200)
cron_notify_expired.py [changed mode: 0644->0755]
flowspec/admin.py
flowspec/models.py
flowspec/tasks.py
flowspec/views.py
templates/application_rejected_mail.txt [deleted file]
templates/instance_created_mail.txt [deleted file]

old mode 100644 (file)
new mode 100755 (executable)
index e69de29..cba2c00
@@ -0,0 +1,29 @@
+from django.core.management import setup_environ  
+import settings
+setup_environ(settings)
+from django.core.mail import send_mail
+from flowspy.flowspec.models import *
+from django.template.loader import render_to_string
+import datetime
+
+
+def notify_expired():
+    routes = Route.objects.all()
+    for route in routes:
+        if route.status != 'EXPIRED':
+            expiration_days = (route.expires - datetime.date.today()).days
+            if expiration_days < settings.EXPIRATION_NOTIFY_DAYS:
+                try:
+                    mail_body = render_to_string("rule_expiration.txt",
+                                             {"route": route, 'expiration_days':expiration_days})
+                    send_mail(settings.EMAIL_SUBJECT_PREFIX + "Rule %s expires in %s days" %
+                              (route.name,expiration_days),
+                              mail_body, settings.SERVER_EMAIL,
+                              [route.applier.email])
+                except Exception as e:
+                    print e
+                    pass
+
+if __name__ == "__main__":
+    notify_expired()
+
index 7ca2534..8743f1f 100644 (file)
@@ -13,6 +13,8 @@ class RouteAdmin(admin.ModelAdmin):
     actions = ['deactivate']
     
     def deactivate(self, request, queryset):
+        queryset = queryset.filter(status='ACTIVE')
+        rows = queryset.update(status='PENDING')
         response = batch_delete.delay(queryset, reason="ADMININACTIVE")
         self.message_user(request, "Added request %s to job que. Check in a while for result" % response)
     deactivate.short_description = "Remove selected routes from network"
index 9abea82..f0c21bf 100644 (file)
@@ -253,6 +253,8 @@ class Route(models.Model):
                      self.status = "ACTIVE"
                      self.save()
                      found = True
+                if not found and self.status == "ADMININACTIVE":
+                     found = True
         return found
 
     def get_then(self):
index 3a95590..199c4f3 100644 (file)
@@ -3,7 +3,6 @@ from celery.task import task
 from celery.task.sets import subtask
 import logging
 import json
-
 from celery.task.http import *
 from flowspy.utils import beanstalkc
 from django.conf import settings
@@ -105,15 +104,16 @@ def check_sync(route_name=None, selected_routes = []):
     if route_name:
         routes = routes.filter(name=route_name)
     for route in routes:
-        if route.has_expired() and (route.status != 'EXPIRED' or route.status != 'ADMININACTIVE' or route.status != 'INACTIVE'):
+        if route.has_expired() and (route.status != 'EXPIRED' and route.status != 'ADMININACTIVE' and route.status != 'INACTIVE'):
             logger.info('Expiring route %s' %route.name)
             subtask(delete).delay(route, reason="EXPIRED")
         elif route.has_expired() and (route.status == 'ADMININACTIVE' or route.status == 'INACTIVE'):
             route.status = 'EXPIRED'
             route.response = 'Route Expired'
             route.save()
-        elif route.status != 'EXPIRED':
-            route.check_sync()
+        else:
+            if route.status != 'EXPIRED':
+                route.check_sync()
 
 
 #def delete(route):
index 4a60763..23cd393 100644 (file)
@@ -11,7 +11,7 @@ from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpRespons
 from django.shortcuts import get_object_or_404, render_to_response
 from django.core.context_processors import request
 from django.template.context import RequestContext
-from django.template.loader import get_template
+from django.template.loader import get_template, render_to_string
 from django.utils import simplejson
 from django.core.urlresolvers import reverse
 from django.contrib import messages
@@ -30,6 +30,7 @@ import datetime
 
 from django.views.decorators.cache import never_cache
 from django.conf import settings
+from django.core.mail import mail_admins, mail_managers, send_mail
 
 
 def days_offset(): return datetime.date.today() + datetime.timedelta(days = settings.EXPIRATION_DAYS_OFFSET)
@@ -80,6 +81,10 @@ def add_route(request):
             route.save()
             form.save_m2m()
             route.commit_add()
+            mail_body = render_to_string("rule_add_mail.txt",
+                                             {"route": route})
+            mail_admins("Rule %s creation request submitted by %s" %(route.name, route.applier.username),
+                          mail_body, fail_silently=True)
             return HttpResponseRedirect(reverse("group-routes"))
         else:
             return render_to_response('apply.html', {'form': form, 'applier':applier},
@@ -127,6 +132,10 @@ def edit_route(request, route_slug):
         messages.add_message(request, messages.WARNING,
                              "Cannot edit the expired rule %s. Contact helpdesk to enable it" %(route_slug))
         return HttpResponseRedirect(reverse("group-routes"))
+    if route_edit.status == "PENDING" :
+        messages.add_message(request, messages.WARNING,
+                             "Cannot edit a pending rule: %s." %(route_slug))
+        return HttpResponseRedirect(reverse("group-routes"))
     route_original = deepcopy(route_edit)
     if request.POST:
         form = RouteForm(request.POST, instance = route_edit)
@@ -139,6 +148,10 @@ def edit_route(request, route_slug):
             route.save()
             form.save_m2m()
             route.commit_edit()
+            mail_body = render_to_string("rule_edit_mail.txt",
+                                             {"route": route})
+            mail_admins("Rule %s edit request submitted by %s" %(route.name, route.applier.username),
+                          mail_body, fail_silently=True)
             return HttpResponseRedirect(reverse("group-routes"))
         else:
             return render_to_response('apply.html', {'form': form, 'edit':True, 'applier': applier},
@@ -160,6 +173,10 @@ def delete_route(request, route_slug):
         if applier_peer == requester_peer:
             route.status = "PENDING"
             route.commit_delete()
+            mail_body = render_to_string("rule_delete_mail.txt",
+                                             {"route": route})
+            mail_admins("Rule %s removal request submitted by %s" %(route.name, route.applier.username),
+                          mail_body, fail_silently=True)
         html = "<html><body>Done</body></html>"
         return HttpResponse(html)
     else:
diff --git a/templates/application_rejected_mail.txt b/templates/application_rejected_mail.txt
deleted file mode 100644 (file)
index c8a6798..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Η αίτησή σας #{{ application.pk }} για τη δημιουργία εικονικής μηχανής με όνομα
-{{ application.hostname }} απορρίφθηκε για τους παρακάτω λόγους:
-
-{{ application.admin_comments }}
-
-Για το ΚΕΔ ΕΔΕΤ
diff --git a/templates/instance_created_mail.txt b/templates/instance_created_mail.txt
deleted file mode 100644 (file)
index 56e32f1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Η εικονική μηχανή με όνομα {{ application.hostname }} δημιουργήθηκε.
-
-Μπορείτε να τη χειριστείτε και να δείτε τα στοιχεία της στην ακόλουθη
-διεύθυνση:
-  {{instance_url}}
-
-{% if application.admin_comments %}Σχόλια διαχειριστή:
-{{ application.admin_comments }}
-{% endif %}
-Για το ΚΕΔ ΕΔΕΤ