1 # -*- coding: utf-8 -*- vim:fileencoding=utf-8:
2 # vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
4 # Copyright © 2011-2014 Greek Research and Technology Network (GRNET S.A.)
5 # Copyright © 2011-2014 Leonidas Poulopoulos (@leopoul)
7 # Permission to use, copy, modify, and/or distribute this software for any
8 # purpose with or without fee is hereby granted, provided that the above
9 # copyright notice and this permission notice appear in all copies.
11 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
12 # TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
13 # FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
14 # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
15 # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
16 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
19 from django.db import models
20 from utils.whois import *
21 from django.contrib.auth.models import User
22 from django.conf import settings
24 class PeerRange(models.Model):
25 network = models.CharField(max_length=128)
26 def __unicode__(self):
29 db_table = u'peer_range'
30 ordering = ['network']
31 managed = settings.PEER_RANGE_MANAGED_TABLE
33 class TechcEmail(models.Model):
34 email = models.CharField(max_length=352, db_column="email")
35 def __unicode__(self):
38 db_table="techc_email"
39 managed = settings.PEER_TECHC_MANAGED_TABLE
41 class Peer(models.Model):
42 peer_id = models.AutoField(primary_key=True)
43 peer_name = models.CharField(max_length=128)
44 peer_as = models.IntegerField()
45 peer_tag = models.CharField(max_length=64)
46 domain_name = models.CharField(max_length=128, null=True, blank=True)
47 networks = models.ManyToManyField(PeerRange, null=True, blank=True)
48 techc_emails = models.ManyToManyField(TechcEmail, null=True, blank=True)
50 def __unicode__(self):
54 ordering = ['peer_name']
55 managed = settings.PEER_MANAGED_TABLE
58 def fill_networks(self):
61 peer_as = "AS%s" %self.peer_as
62 network_range = whois(peer_as)
64 for network_item in network_range:
65 range, created = PeerRange.objects.get_or_create(network=network_item.compressed)
66 networks_list.append(range)
67 self.networks = networks_list