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 @@

Server List

server + build environment connectivity @@ -19,6 +21,13 @@

Server List

{% for server in server_list %} {{ server.name }} + + + {% for srv_env in server.envs.all %} + {{ srv_env }} + {% endfor %} + + {% if server.v4 %} IPv4 diff --git a/ports/templatetags/link_badge.py b/ports/templatetags/link_badge.py new file mode 100644 index 0000000..cc581e0 --- /dev/null +++ b/ports/templatetags/link_badge.py @@ -0,0 +1,23 @@ +from django import template +import re + +register = template.Library() + +@register.filter(is_safe=True) +def get_link_badge(loop_count): + badges = ['badge-secondary', + 'badge-info', + 'badge-light', + 'badge-dark', + 'badge-warning', + 'badge-primary', + 'badge-success', + 'badge-danger', + ] + while loop_count > len(badges): + loop_count = loop_count - len(badges) + + return badges[loop_count - 1] + + +