bc5a5781bf
Still some work to do here, but this covers the basics of the public view we can show for mirrors and their associated data. The upstream and downstream links should be working OK to aid navigation, but right now we have some potential dead links for non-authenticated users if they click a link to a "private" mirror. Signed-off-by: Dan McGee <dan@archlinux.org>
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
from django.db import models
|
|
|
|
TIER_CHOICES = (
|
|
(0, 'Tier 0'),
|
|
(1, 'Tier 1'),
|
|
(2, 'Tier 2'),
|
|
(-1, 'Untiered'),
|
|
)
|
|
|
|
class Mirror(models.Model):
|
|
name = models.CharField(max_length=255)
|
|
tier = models.SmallIntegerField(default=2, choices=TIER_CHOICES)
|
|
upstream = models.ForeignKey('self', null=True)
|
|
country = models.CharField(max_length=255, db_index=True)
|
|
admin_email = models.EmailField(max_length=255, blank=True)
|
|
public = models.BooleanField(default=True)
|
|
active = models.BooleanField(default=True)
|
|
isos = models.BooleanField(default=True)
|
|
rsync_user = models.CharField(max_length=50, blank=True, default='')
|
|
rsync_password = models.CharField(max_length=50, blank=True, default='')
|
|
notes = models.TextField(blank=True)
|
|
|
|
class Meta:
|
|
ordering = ('country', 'name')
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
def supported_protocols(self):
|
|
protocols = MirrorProtocol.objects.filter(
|
|
urls__mirror=self).order_by('protocol').distinct()
|
|
return ", ".join([p.protocol for p in protocols])
|
|
|
|
def downstream(self):
|
|
return Mirror.objects.filter(upstream=self).order_by('name')
|
|
|
|
def get_absolute_url(self):
|
|
return '/mirrors/%s/' % self.name
|
|
|
|
class MirrorProtocol(models.Model):
|
|
protocol = models.CharField(max_length=10, unique=True)
|
|
def __unicode__(self):
|
|
return self.protocol
|
|
class Meta:
|
|
verbose_name = 'Mirror Protocol'
|
|
|
|
class MirrorUrl(models.Model):
|
|
url = models.CharField(max_length=255)
|
|
protocol = models.ForeignKey(MirrorProtocol, related_name="urls")
|
|
mirror = models.ForeignKey(Mirror, related_name="urls")
|
|
def __unicode__(self):
|
|
return self.url
|
|
class Meta:
|
|
verbose_name = 'Mirror URL'
|
|
|
|
class MirrorRsync(models.Model):
|
|
ip = models.CharField(max_length=24)
|
|
mirror = models.ForeignKey(Mirror, related_name="rsync_ips")
|
|
def __unicode__(self):
|
|
return "%s" % (self.ip)
|
|
class Meta:
|
|
verbose_name = 'Mirror Rsync IP'
|
|
|
|
class MirrorLog(models.Model):
|
|
url = models.ForeignKey(MirrorUrl, related_name="logs")
|
|
check_time = models.DateTimeField(db_index=True)
|
|
last_sync = models.DateTimeField(null=True)
|
|
duration = models.FloatField(null=True)
|
|
is_success = models.BooleanField(default=True)
|
|
error = models.CharField(max_length=255, blank=True, default='')
|
|
|
|
def __unicode__(self):
|
|
return "Check of %s at %s" % (url.url, check_time)
|
|
|
|
class Meta:
|
|
verbose_name = 'Mirror Check Log'
|
|
|
|
# vim: set ts=4 sw=4 et:
|