eduardogsilva.routerfleet/router_manager/models.py
2025-04-24 15:56:24 -03:00

110 lines
4.4 KiB
Python

from django.db import models
from backup.models import BackupProfile
import uuid
SUPPORTED_ROUTER_TYPES = (
('monitoring', 'Monitoring Only'),
('routeros', 'Mikrotik (RouterOS)'),
('routeros-branded', 'Mikrotik (Branded)'),
('openwrt', 'OpenWRT')
)
class SSHKey(models.Model):
name = models.CharField(max_length=100, unique=True)
public_key = models.TextField()
private_key = models.TextField()
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
def __str__(self):
return self.name
class Router(models.Model):
name = models.CharField(max_length=100, unique=True)
internal_notes = models.TextField(null=True, blank=True)
address = models.CharField(max_length=100)
port = models.IntegerField(default=22)
username = models.CharField(max_length=100, default='admin')
password = models.CharField(max_length=100, null=True, blank=True)
ssh_key = models.ForeignKey(SSHKey, on_delete=models.SET_NULL, null=True, blank=True)
monitoring = models.BooleanField(default=True)
backup_profile = models.ForeignKey(BackupProfile, on_delete=models.SET_NULL, null=True, blank=True)
router_type = models.CharField(max_length=100, choices=SUPPORTED_ROUTER_TYPES)
enabled = models.BooleanField(default=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
def __str__(self):
return self.name
class RouterStatus(models.Model):
router = models.OneToOneField(Router, on_delete=models.CASCADE)
status_online = models.BooleanField(default=True)
last_status_change = models.DateTimeField(blank=True, null=True)
last_backup = models.DateTimeField(blank=True, null=True)
last_backup_failed = models.DateTimeField(blank=True, null=True)
backup_lock = models.DateTimeField(blank=True, null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
class RouterGroup(models.Model):
name = models.CharField(max_length=100, unique=True)
default_group = models.BooleanField(default=False)
internal_notes = models.TextField(null=True, blank=True)
routers = models.ManyToManyField(Router, blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
def __str__(self):
return self.name
class BackupSchedule(models.Model):
router = models.OneToOneField(Router, on_delete=models.CASCADE)
next_daily_backup = models.DateTimeField(null=True, blank=True)
next_weekly_backup = models.DateTimeField(null=True, blank=True)
next_monthly_backup = models.DateTimeField(null=True, blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
class RouterInformation(models.Model):
router = models.OneToOneField(Router, on_delete=models.CASCADE)
success = models.BooleanField(default=False)
error = models.BooleanField(default=False)
error_message = models.TextField(blank=True, null=True)
retry_count = models.IntegerField(default=0)
next_retry = models.DateTimeField(blank=True, null=True)
last_retrieval = models.DateTimeField(blank=True, null=True)
model_name = models.CharField(max_length=100, null=True, blank=True)
model_version = models.CharField(max_length=100, null=True, blank=True)
serial_number = models.CharField(max_length=100, null=True, blank=True)
os_version = models.CharField(max_length=100, null=True, blank=True)
firmware_version = models.CharField(max_length=100, null=True, blank=True)
architecture = models.CharField(max_length=100, null=True, blank=True)
cpu = models.CharField(max_length=100, null=True, blank=True)
json_data = models.TextField(null=True, blank=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
uuid = models.UUIDField(unique=True, editable=False, default=uuid.uuid4)
def __str__(self):
return str(self.router)