Statistics
| Branch: | Tag: | Revision:

root / peers / models.py @ 71dfe7e1

History | View | Annotate | Download (2.6 kB)

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

    
4
# Copyright © 2011-2014 Greek Research and Technology Network (GRNET S.A.)
5
# Copyright © 2011-2014 Leonidas Poulopoulos (@leopoul)
6
# 
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.
10
# 
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
17
# SOFTWARE.
18

    
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
23

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

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

    
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)
49

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

    
57
        
58
    def fill_networks(self):
59
        network_range = []
60
        networks_list = []
61
        peer_as = "AS%s" %self.peer_as
62
        network_range = whois(peer_as)
63
        if network_range:
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
68
            self.save()
69

    
70