124 lines
3.7 KiB
Python
124 lines
3.7 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 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)
|
|
|
|
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"
|
|
|
|
class Document_Servers(models.Model):
|
|
description = models.CharField(max_length=255, blank=True)
|
|
docfile = models.FileField(upload_to='results/')
|
|
uploaded_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Document_Packages(models.Model):
|
|
description = models.CharField(max_length=255, blank=True)
|
|
docfile = models.FileField(upload_to='results-packages/')
|
|
uploaded_at = models.DateTimeField(auto_now_add=True)
|