Statistics
| Branch: | Tag: | Revision:

root / peers / models.py @ 0492a5b5

History | View | Annotate | Download (2.5 kB)

1
# -*- coding: utf-8 -*- vim:fileencoding=utf-8:
2
# vim: tabstop=4:shiftwidth=4:softtabstop=4:expandtab
3

    
4
# Copyright (C) 2010-2014 GRNET S.A.
5
#
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
#
19

    
20
from django.db import models
21
from utils.whois import *
22
from django.contrib.auth.models import User
23
from django.conf import settings
24

    
25
class PeerRange(models.Model):
26
    network = models.CharField(max_length=128)
27
    def __unicode__(self):
28
        return self.network
29
    class Meta:
30
        db_table = u'peer_range'
31
        ordering = ['network']
32
        managed = settings.PEER_RANGE_MANAGED_TABLE
33

    
34
class TechcEmail(models.Model):
35
    email = models.CharField(max_length=352, db_column="email")
36
    def __unicode__(self):
37
        return self.email
38
    class Meta:
39
        db_table="techc_email"
40
        managed = settings.PEER_TECHC_MANAGED_TABLE
41

    
42
class Peer(models.Model):
43
    peer_id = models.AutoField(primary_key=True)
44
    peer_name = models.CharField(max_length=128)
45
    peer_as = models.IntegerField()
46
    # This needs to be converted to slug and an info message needs to be added.
47
    peer_tag = models.CharField(max_length=64)
48
    domain_name = models.CharField(max_length=128, null=True, blank=True)
49
    networks = models.ManyToManyField(PeerRange, null=True, blank=True)
50
    techc_emails = models.ManyToManyField(TechcEmail, null=True, blank=True)
51

    
52
    def __unicode__(self):
53
        return self.peer_name
54
    class Meta:
55
        db_table = u'peer'
56
        ordering = ['peer_name']
57
        managed = settings.PEER_MANAGED_TABLE
58

    
59
        
60
    def fill_networks(self):
61
        network_range = []
62
        networks_list = []
63
        peer_as = "AS%s" %self.peer_as
64
        network_range = whois(peer_as)
65
        if network_range:
66
            for network_item in network_range:
67
                range, created = PeerRange.objects.get_or_create(network=network_item.compressed)
68
                networks_list.append(range)
69
            self.networks = networks_list
70
            self.save()
71

    
72