67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
|
|
from django.db import models
|
||
|
|
from django.contrib.auth import get_user_model
|
||
|
|
from plans.models import Plan
|
||
|
|
|
||
|
|
|
||
|
|
User = get_user_model()
|
||
|
|
|
||
|
|
|
||
|
|
class Domain(models.Model):
|
||
|
|
STATUS_PENDING = 'pending_dns'
|
||
|
|
STATUS_ACTIVE = 'active'
|
||
|
|
STATUS_SUSPENDED = 'suspended'
|
||
|
|
STATUS_DELETED = 'deleted'
|
||
|
|
STATUS_CHOICES = [
|
||
|
|
(STATUS_PENDING, '等待DNS配置'),
|
||
|
|
(STATUS_ACTIVE, '正常'),
|
||
|
|
(STATUS_SUSPENDED, '暂停'),
|
||
|
|
(STATUS_DELETED, '已删除'),
|
||
|
|
]
|
||
|
|
|
||
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='domains')
|
||
|
|
name = models.CharField(max_length=253, unique=True)
|
||
|
|
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_PENDING)
|
||
|
|
current_plan = models.ForeignKey(Plan, null=True, blank=True, on_delete=models.SET_NULL)
|
||
|
|
current_cycle_start = models.DateField(null=True, blank=True)
|
||
|
|
current_cycle_end = models.DateField(null=True, blank=True)
|
||
|
|
cname_targets = models.JSONField(default=dict, blank=True)
|
||
|
|
origin_config = models.JSONField(default=dict, blank=True)
|
||
|
|
edge_server_id = models.BigIntegerField(null=True, blank=True)
|
||
|
|
|
||
|
|
# overrides (optional)
|
||
|
|
extra_free_traffic_gb_current_cycle = models.PositiveIntegerField(default=0)
|
||
|
|
custom_overage_price_per_gb = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
|
||
|
|
custom_features = models.JSONField(default=dict, blank=True)
|
||
|
|
|
||
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
||
|
|
updated_at = models.DateTimeField(auto_now=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
verbose_name = '域名'
|
||
|
|
verbose_name_plural = '域名'
|
||
|
|
indexes = [
|
||
|
|
models.Index(fields=['user', 'name']),
|
||
|
|
models.Index(fields=['status']),
|
||
|
|
]
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return self.name
|
||
|
|
|
||
|
|
|
||
|
|
class DomainTrafficDaily(models.Model):
|
||
|
|
domain = models.ForeignKey(Domain, on_delete=models.CASCADE, related_name='daily_traffic')
|
||
|
|
day = models.DateField()
|
||
|
|
bytes = models.BigIntegerField(default=0)
|
||
|
|
peak_bandwidth_mbps = models.FloatField(default=0)
|
||
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
verbose_name = '域名日流量'
|
||
|
|
verbose_name_plural = '域名日流量'
|
||
|
|
unique_together = ('domain', 'day')
|
||
|
|
indexes = [
|
||
|
|
models.Index(fields=['domain', 'day']),
|
||
|
|
]
|
||
|
|
|
||
|
|
# Create your models here.
|