aboutsummaryrefslogtreecommitdiffstats
path: root/src/account
diff options
context:
space:
mode:
Diffstat (limited to 'src/account')
-rw-r--r--src/account/migrations/0004_downtime.py24
-rw-r--r--src/account/models.py20
2 files changed, 44 insertions, 0 deletions
diff --git a/src/account/migrations/0004_downtime.py b/src/account/migrations/0004_downtime.py
new file mode 100644
index 0000000..fc700d1
--- /dev/null
+++ b/src/account/migrations/0004_downtime.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.2 on 2019-08-13 16:45
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('account', '0003_publicnetwork'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Downtime',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('start', models.DateTimeField()),
+ ('end', models.DateTimeField()),
+ ('description', models.TextField(default='This lab will be down for maintenance')),
+ ('lab', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='account.Lab')),
+ ],
+ ),
+ ]
diff --git a/src/account/models.py b/src/account/models.py
index 4fc7c40..4862231 100644
--- a/src/account/models.py
+++ b/src/account/models.py
@@ -168,3 +168,23 @@ class PublicNetwork(models.Model):
in_use = models.BooleanField(default=False)
cidr = models.CharField(max_length=50, default="0.0.0.0/0")
gateway = models.CharField(max_length=50, default="0.0.0.0")
+
+
+class Downtime(models.Model):
+ start = models.DateTimeField()
+ end = models.DateTimeField()
+ lab = models.ForeignKey(Lab, on_delete=models.CASCADE)
+ description = models.TextField(default="This lab will be down for maintenance")
+
+ def save(self, *args, **kwargs):
+ if self.start >= self.end:
+ raise ValueError('Start date is after end date')
+
+ # check for overlapping downtimes
+ overlap_start = Downtime.objects.filter(lab=self.lab, start__gt=self.start, start__lt=self.end).exists()
+ overlap_end = Downtime.objects.filter(lab=self.lab, end__lt=self.end, end__gt=self.start).exists()
+
+ if overlap_start or overlap_end:
+ raise ValueError('Overlapping Downtime')
+
+ return super(Downtime, self).save(*args, **kwargs)