diff --git a/changelog.rst b/changelog.rst
index 2f7c4f4..ce072d8 100644
--- a/changelog.rst
+++ b/changelog.rst
@@ -5,6 +5,7 @@ Unreleased
----------
* Add a page to show an overview count by build environment and unique ports
+* Track build environments per server
Version 1.7.3
-------------
diff --git a/ports/admin.py b/ports/admin.py
index d55e21d..12dfd5c 100644
--- a/ports/admin.py
+++ b/ports/admin.py
@@ -22,7 +22,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from django.contrib import admin
-from ports.models import Category, Port, Fallout, Server
+from ports.models import Category, Port, Fallout, Server, BuildEnv
class PortAdmin(admin.ModelAdmin):
@@ -54,6 +54,10 @@ class ServerAdmin(admin.ModelAdmin):
search_fields = ['name']
+class BuildEnvAdmin(admin.ModelAdmin):
+ ordering = ['name']
+ search_fields = ['name']
+
admin.site.register(Port, PortAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Fallout, FalloutAdmin)
diff --git a/ports/management/commands/server_update.py b/ports/management/commands/server_update.py
index 2013681..325a76f 100644
--- a/ports/management/commands/server_update.py
+++ b/ports/management/commands/server_update.py
@@ -25,7 +25,7 @@
from django.core.management.base import BaseCommand
from django.utils import timezone as dtz
-from ports.models import Server, Fallout
+from ports.models import Server, Fallout, BuildEnv
class Command(BaseCommand):
@@ -92,3 +92,13 @@ def handle(self, *args, **options):
db_srv = Server.objects.get_or_create(name=srv['server'],
v4 = bool(dns_v4),
v6 = bool(dns_v6))[0]
+
+ # Add build envs to the server
+ srv_envs = Fallout.objects.filter(date__gte=period_date, server=srv['server']).values('env').distinct().order_by('env')
+ for env in srv_envs:
+ env_obj = add_build_env(env['env'])
+ db_srv.envs.add(env_obj)
+
+def add_build_env(name):
+ e = BuildEnv.objects.get_or_create(name=name)[0]
+ return e
\ No newline at end of file
diff --git a/ports/migrations/0005_buildenv_server_envs.py b/ports/migrations/0005_buildenv_server_envs.py
new file mode 100644
index 0000000..8d1e141
--- /dev/null
+++ b/ports/migrations/0005_buildenv_server_envs.py
@@ -0,0 +1,28 @@
+# Generated by Django 4.1.3 on 2023-09-07 21:37
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ports', '0004_auto_20210523_0034'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='BuildEnv',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=48, unique=True)),
+ ],
+ options={
+ 'verbose_name_plural': 'Envs',
+ },
+ ),
+ migrations.AddField(
+ model_name='server',
+ name='envs',
+ field=models.ManyToManyField(to='ports.buildenv'),
+ ),
+ ]
diff --git a/ports/models.py b/ports/models.py
index 3837ef7..ca0efa1 100644
--- a/ports/models.py
+++ b/ports/models.py
@@ -68,10 +68,21 @@ def __str__(self):
return self.env + " | " + self.port.origin
+class BuildEnv(models.Model):
+ name = models.CharField(max_length=48, unique=True)
+
+ def __str__(self):
+ return self.name
+
+ class Meta:
+ verbose_name_plural = "Envs"
+
+
class Server(models.Model):
name = models.CharField(max_length=48, unique=True)
v4 = models.BooleanField(default=False)
v6 = models.BooleanField(default=False)
+ envs = models.ManyToManyField(BuildEnv)
def __str__(self):
return self.name
diff --git a/ports/templates/ports/server_list.html b/ports/templates/ports/server_list.html
index 852edb5..58baef6 100644
--- a/ports/templates/ports/server_list.html
+++ b/ports/templates/ports/server_list.html
@@ -2,6 +2,7 @@
{% block title %}Server list{% endblock %}
{% block body_block %}
{% load proxy %}
+{% load link_badge %}
@@ -12,6 +13,7 @@