index.community/backend/api/scraper/models.py

59 lines
2.2 KiB
Python
Raw Normal View History

2018-08-26 00:32:55 +00:00
from django.db import models
class Instance(models.Model):
"""
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)
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
2018-09-03 14:10:44 +00:00
# Graph
x_coord = models.FloatField(blank=True, null=True)
y_coord = models.FloatField(blank=True, null=True)
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)
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)
# Interaction stats
mention_count = models.IntegerField(blank=True, null=True)
statuses_seen = models.IntegerField(blank=True, null=True) # in case we want mention_count as a ratio
# Metadata
first_seen = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now=True)
2018-09-03 14:10:44 +00:00
class Edge(models.Model):
"""
This class is automatically generated from PeerRelationship using the build_graph command.
It aggregates stats from the asymmetrical PeerRelationship to a symmetrical one that's suitable for serving
to the front-end.
"""
source = models.ForeignKey(Instance, related_name='+', on_delete=models.CASCADE)
target = models.ForeignKey(Instance, related_name='+', on_delete=models.CASCADE)
weight = models.FloatField(blank=True, null=True)
# Metadata
last_updated = models.DateTimeField(blank=False, null=False)