2018-08-26 00:32:55 +00:00
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
|
|
|
|
class Instance(models.Model):
|
2018-09-01 13:32:04 +00:00
|
|
|
"""
|
|
|
|
The main model that saves details of an instance and links between them in the peers
|
|
|
|
property.
|
|
|
|
|
|
|
|
Don't change the schema without verifying that the gephi script can still read the data.
|
|
|
|
"""
|
2018-08-29 17:58:06 +00:00
|
|
|
# Primary key
|
2018-08-26 01:17:10 +00:00
|
|
|
name = models.CharField(max_length=200, primary_key=True)
|
2018-08-26 00:32:55 +00:00
|
|
|
|
2018-08-29 17:58:06 +00:00
|
|
|
# Details
|
2018-08-29 18:04:03 +00:00
|
|
|
description = models.TextField(blank=True)
|
2018-08-28 22:22:29 +00:00
|
|
|
domain_count = models.IntegerField(blank=True, null=True)
|
|
|
|
status_count = models.IntegerField(blank=True, null=True)
|
|
|
|
user_count = models.IntegerField(blank=True, null=True)
|
2018-08-29 17:05:55 +00:00
|
|
|
version = models.CharField(max_length=1000, blank=True) # In Django CharField is never stored as NULL in the db
|
2018-08-26 00:32:55 +00:00
|
|
|
status = models.CharField(max_length=100)
|
2018-08-29 17:58:06 +00:00
|
|
|
|
|
|
|
# Foreign keys
|
2018-09-01 17:24:05 +00:00
|
|
|
peers = models.ManyToManyField('self', symmetrical=False, through='PeerRelationship')
|
2018-08-29 17:58:06 +00:00
|
|
|
|
|
|
|
# Automatic fields
|
|
|
|
first_seen = models.DateTimeField(auto_now_add=True)
|
|
|
|
last_updated = models.DateTimeField(auto_now=True)
|
2018-09-01 13:32:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
class PeerRelationship(models.Model):
|
|
|
|
source = models.ForeignKey(Instance, related_name="following_relationship", on_delete=models.CASCADE)
|
|
|
|
target = models.ForeignKey(Instance, related_name="follower_relationships", on_delete=models.CASCADE)
|
|
|
|
|
|
|
|
# Metadata
|
|
|
|
first_seen = models.DateTimeField(auto_now_add=True)
|