|
|
|
@ -29,7 +29,7 @@ class CrawlRun(models.Model):
|
|
|
|
|
startTime = models.DateTimeField()
|
|
|
|
|
endTime = models.DateTimeField(null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
hostsCrawled = models.ManyToManyField(ConfigHost, null=True, blank=True)
|
|
|
|
|
hostsCrawled = models.ManyToManyField(ConfigHost, blank=True)
|
|
|
|
|
graph = models.TextField()
|
|
|
|
|
|
|
|
|
|
asCount = models.IntegerField(default=0)
|
|
|
|
@ -65,7 +65,7 @@ class CrawlLog(models.Model):
|
|
|
|
|
(WARN, 'warning'),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
crawl = models.ForeignKey(CrawlRun)
|
|
|
|
|
crawl = models.ForeignKey(CrawlRun, on_delete=models.CASCADE)
|
|
|
|
|
host = models.ForeignKey(ConfigHost, null=True, blank=True, on_delete=models.SET_NULL)
|
|
|
|
|
logtime = models.DateTimeField(auto_now_add=True)
|
|
|
|
|
severity = models.CharField(max_length=10, choices=SEVERITY)
|
|
|
|
@ -90,12 +90,13 @@ class CrawlLog(models.Model):
|
|
|
|
|
|
|
|
|
|
class AS(models.Model):
|
|
|
|
|
# asno
|
|
|
|
|
crawl = models.ForeignKey(CrawlRun)
|
|
|
|
|
crawl = models.ForeignKey(CrawlRun, on_delete=models.CASCADE)
|
|
|
|
|
number = models.IntegerField(db_index=True)
|
|
|
|
|
|
|
|
|
|
directlyCrawled = models.BooleanField(default=False)
|
|
|
|
|
online = models.BooleanField(default=True, db_index=True)
|
|
|
|
|
lastSeen = models.ForeignKey(CrawlRun, blank=True, null=True, default=None, related_name='as_lastseen')
|
|
|
|
|
lastSeen = models.ForeignKey(CrawlRun, blank=True, null=True, default=None, related_name='as_lastseen',
|
|
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
unique_together = (('crawl', 'number'),)
|
|
|
|
@ -126,7 +127,7 @@ class AS(models.Model):
|
|
|
|
|
class BorderRouter(models.Model):
|
|
|
|
|
# as id, ip, check method, pingable, reachable
|
|
|
|
|
# unique: (crawl_id, asno, as id)
|
|
|
|
|
AS = models.ForeignKey(AS)
|
|
|
|
|
AS = models.ForeignKey(AS, on_delete=models.CASCADE)
|
|
|
|
|
routerID = models.GenericIPAddressField()
|
|
|
|
|
|
|
|
|
|
pingable = models.BooleanField(default=False)
|
|
|
|
@ -139,7 +140,7 @@ class BorderRouter(models.Model):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Announcement(models.Model):
|
|
|
|
|
router = models.ForeignKey(BorderRouter)
|
|
|
|
|
router = models.ForeignKey(BorderRouter, on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
|
|
ip = models.GenericIPAddressField()
|
|
|
|
|
prefix = models.IntegerField()
|
|
|
|
@ -147,8 +148,8 @@ class Announcement(models.Model):
|
|
|
|
|
# NOTE: increase length for longer pathes (currently supports a length of ~85)
|
|
|
|
|
ASPath = models.CharField(max_length=512)
|
|
|
|
|
nextHop = models.GenericIPAddressField()
|
|
|
|
|
originAS = models.ForeignKey(AS, null=True)
|
|
|
|
|
crawlAS = models.ForeignKey(AS, related_name='crawl_as', null=True)
|
|
|
|
|
originAS = models.ForeignKey(AS, null=True, on_delete=models.CASCADE)
|
|
|
|
|
crawlAS = models.ForeignKey(AS, related_name='crawl_as', null=True, on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return "%s/%s via %s (crawl %s)" % (self.ip, self.prefix, self.ASPath, self.router.AS.crawl.pk)
|
|
|
|
@ -167,8 +168,8 @@ class Peering(models.Model):
|
|
|
|
|
('as1', 'as2'),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
as1 = models.ForeignKey(AS, related_name='peering1')
|
|
|
|
|
as2 = models.ForeignKey(AS, related_name='peering2')
|
|
|
|
|
as1 = models.ForeignKey(AS, related_name='peering1', on_delete=models.CASCADE)
|
|
|
|
|
as2 = models.ForeignKey(AS, related_name='peering2', on_delete=models.CASCADE)
|
|
|
|
|
origin = models.CharField(max_length=10, choices=ORIGIN)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
@ -188,9 +189,11 @@ class Peering(models.Model):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BorderRouterPair(models.Model):
|
|
|
|
|
peering = models.ForeignKey(Peering)
|
|
|
|
|
router1 = models.ForeignKey(BorderRouter, default=None, blank=True, null=True, related_name='routerpair1')
|
|
|
|
|
router2 = models.ForeignKey(BorderRouter, default=None, blank=True, null=True, related_name='routerpair2')
|
|
|
|
|
peering = models.ForeignKey(Peering, on_delete=models.CASCADE)
|
|
|
|
|
router1 = models.ForeignKey(BorderRouter, default=None, blank=True, null=True, related_name='routerpair1',
|
|
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
router2 = models.ForeignKey(BorderRouter, default=None, blank=True, null=True, related_name='routerpair2',
|
|
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return "%s <--> %s (crawl %d)" % (self.router1, self.router2, self.router1.AS.crawl.pk)
|
|
|
|
@ -208,7 +211,7 @@ class ASLastSeen(models.Model):
|
|
|
|
|
directlyCrawled = models.BooleanField(default=False)
|
|
|
|
|
online = models.BooleanField()
|
|
|
|
|
lastSeen = models.DateTimeField(blank=True, null=True)
|
|
|
|
|
crawlLastSeen = models.ForeignKey(CrawlRun)
|
|
|
|
|
crawlLastSeen = models.ForeignKey(CrawlRun, null=True, on_delete=models.SET_NULL)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return ("AS{} {}, last seen {} (crawl {})"
|
|
|
|
@ -217,4 +220,4 @@ class ASLastSeen(models.Model):
|
|
|
|
|
|
|
|
|
|
class ASLastSeenNeighbor(models.Model):
|
|
|
|
|
asn = models.IntegerField()
|
|
|
|
|
neighbor = models.ForeignKey(ASLastSeen)
|
|
|
|
|
neighbor = models.ForeignKey(ASLastSeen, on_delete=models.CASCADE)
|
|
|
|
|