Sebastien Laithier 31fa8f3e9c Refactor
2022-08-18 10:19:10 +02:00

137 lines
3.9 KiB
Python

from django.db import models
from datetime import date
from django.utils import timezone
UPTIME_OK = 100
UPTIME_CRITICAL = 365
UPDATES_OK = 20
UPDATES_CRITICAL = 100
class Os(models.Model):
distribution = models.CharField(max_length=20)
version = models.CharField(max_length=10)
end_of_support = models.DateField('End of support date', blank=True, null=True)
def __str__(self):
return self.distribution + " " + self.version
def maintained_status(self):
if date.today() > self.support_end_date:
return 3
elif (self.support_end_date - date.today()).days < 365:
return 2
else:
return 1
class Meta:
unique_together = ('distribution', 'version')
verbose_name = "OS"
verbose_name_plural = "OS"
class Group(models.Model):
name = models.CharField(max_length=50, unique=True)
full_name = models.CharField(max_length=50, null=True)
def __str__(self):
if self.full_name:
return self.full_name
else:
return self.name
class Team(models.Model):
name = models.CharField(max_length=20)
color = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.name
class Server(models.Model):
hostname = models.CharField(max_length=200, unique=True)
os = models.ForeignKey(Os, null=True, related_name="servers", on_delete=models.SET_NULL)
group = models.ForeignKey(Group, null=True, blank=True, related_name="groups", on_delete=models.SET_NULL)
team = models.ForeignKey(Team, null=True, related_name="teams", on_delete=models.SET_NULL)
def __str__(self):
return self.hostname
class PackageStatus(models.Model):
server = models.ForeignKey(Server, related_name="packages", on_delete=models.CASCADE)
package_name = models.CharField(max_length=50)
package_version = models.CharField(max_length=50)
def __str__(self):
return str(self.server) + '-' + self.package_name + '-' + self.package_version
class ServerStatus(models.Model):
AUTO_UPDATES_CHOICES = (
('UNK', 'Unknown'),
('OK', 'Ok'),
('ERR', 'Error'),
('OUT', 'Outdated'),
('NA', 'N/A'),
)
date = models.DateField(default=timezone.now)
uptime = models.IntegerField(null=True)
updates = models.IntegerField(null=True)
server = models.ForeignKey(Server, related_name="status", on_delete=models.CASCADE)
auto_updates = models.CharField(max_length=3, choices=AUTO_UPDATES_CHOICES, default='UNK')
def __str__(self):
return str(self.date) + '-' + self.server.hostname
def os_status(self):
if self.server.os.end_of_support is None:
return 0
elif self.date > self.server.os.end_of_support:
return 3
elif (self.server.os.end_of_support - self.date).days < 365:
return 2
else:
return 1
def updates_status(self):
if self.updates is None:
return 0
elif self.updates < UPDATES_OK:
return 1
elif self.updates < UPDATES_CRITICAL:
return 2
else:
return 3
def uptime_status(self):
if self.uptime is None:
return 0
elif self.uptime < UPTIME_OK:
return 1
elif self.uptime < UPTIME_CRITICAL:
return 2
else:
return 3
def auto_updates_status(self):
if self.auto_updates == 'OK':
return 1
elif self.auto_updates == 'UNK':
return 2
elif self.auto_updates == 'ERR' or self.auto_updates == 'OUT':
return 3
else:
return 0
class Meta:
unique_together = ('date', 'server')
verbose_name_plural = "Server status"