diff options
author | Michael Elkins <melkins@tislabs.com> | 2013-04-03 18:38:40 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2013-04-03 18:38:40 +0000 |
commit | d0e81d8047779b7889e8773c964c2a35c1674dc4 (patch) | |
tree | 8224b66f0ad5c0bb15f6212b90bbd468c36dd28a /rpkid | |
parent | 832d9f65e0d0eaff1e26c0ac8c37e914c7aa6f4a (diff) |
add Conf.send_alert() to store an alert for a resource holder. takes care of storing it in the db for presentation to the user in the gui as well as emailing contacts in ghostbusters
move definition of Alert above Conf so that Conf.send_alert() can reference Alert in send_alert()
svn path=/branches/tk500/; revision=5259
Diffstat (limited to 'rpkid')
-rw-r--r-- | rpkid/rpki/gui/app/models.py | 77 |
1 files changed, 52 insertions, 25 deletions
diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py index fa48c319..5b33be5e 100644 --- a/rpkid/rpki/gui/app/models.py +++ b/rpkid/rpki/gui/app/models.py @@ -17,6 +17,7 @@ __version__ = '$Id$' from django.db import models from django.contrib.auth.models import User +from django.core.mail import send_mail import rpki.resource_set import rpki.exceptions @@ -84,6 +85,31 @@ class ChildNet(rpki.irdb.models.ChildNet): return u'%s' % self.as_resource_range() +class Alert(models.Model): + """Stores alert messages intended to be consumed by the user.""" + + INFO = 0 + WARNING = 1 + ERROR = 2 + + SEVERITY_CHOICES = ( + (INFO, 'info'), + (WARNING, 'warning'), + (ERROR, 'error'), + ) + + conf = models.ForeignKey('Conf', related_name='alerts') + severity = models.SmallIntegerField(choices=SEVERITY_CHOICES, default=INFO) + when = models.DateTimeField(auto_now_add=True) + seen = models.BooleanField(default=False) + subject = models.CharField(max_length=66) + text = models.TextField() + + @models.permalink + def get_absolute_url(self): + return ('alert-detail', [str(self.pk)]) + + class Conf(rpki.irdb.models.ResourceHolderCA): """This is the center of the universe, also known as a place to have a handle on a resource-holding entity. It's the <self> @@ -146,6 +172,32 @@ class Conf(rpki.irdb.models.ResourceHolderCA): prefix_max__lte=p.prefix_max) return RouteOriginV6.objects.filter(q) + def send_alert(self, subject, message, from_email, severity=Alert.INFO): + """Store an alert for this resource holder.""" + self.alerts.create(subject=subject, text=message, severity=severity) + + send_mail( + subject=subject, + message=message, + from_email=from_email, + recipient_list=self.email_list + ) + + @property + def email_list(self): + """Return a list of the contact emails for this resource holder. + + Contact emails are extract from any ghostbuster requests, and any + linked user accounts. + + """ + notify_emails = [gbr.email_address for gbr in self.ghostbusters if gbr.email_address] + notify_emails.extend( + [acl.user.email for acl in ConfACL.objects.filter(conf=self) if acl.user.email] + ) + return notify_emails + + class Meta: proxy = True @@ -363,28 +415,3 @@ class ConfACL(models.Model): class Meta: unique_together = (('user', 'conf')) - - -class Alert(models.Model): - """Stores alert messages intended to be consumed by the user.""" - - INFO = 0 - WARNING = 1 - ERROR = 2 - - SEVERITY_CHOICES = ( - (INFO, 'info'), - (WARNING, 'warning'), - (ERROR, 'error'), - ) - - conf = models.ForeignKey(Conf, related_name='alerts') - severity = models.SmallIntegerField(choices=SEVERITY_CHOICES, default=INFO) - when = models.DateTimeField(auto_now_add=True) - seen = models.BooleanField(default=False) - subject = models.CharField(max_length=66) - text = models.TextField() - - @models.permalink - def get_absolute_url(self): - return ('alert-detail', [str(self.pk)]) |