Skip to content

Commit

Permalink
Track build environments per server
Browse files Browse the repository at this point in the history
  • Loading branch information
dbaio committed Sep 9, 2023
1 parent 7023c9b commit 3f64d33
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
-------------
Expand Down
6 changes: 5 additions & 1 deletion ports/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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)
Expand Down
12 changes: 11 additions & 1 deletion ports/management/commands/server_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
28 changes: 28 additions & 0 deletions ports/migrations/0005_buildenv_server_envs.py
Original file line number Diff line number Diff line change
@@ -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'),
),
]
11 changes: 11 additions & 0 deletions ports/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
9 changes: 9 additions & 0 deletions ports/templates/ports/server_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
{% block title %}Server list{% endblock %}
{% block body_block %}
{% load proxy %}
{% load link_badge %}

<br />

Expand All @@ -12,13 +13,21 @@ <h3>Server List</h3>
<thead>
<tr>
<th scope="col" class="text-nowrap">server</th>
<th scope="col">build environment</th>
<th scope="col" class="text-nowrap">connectivity</th>
</tr>
</thead>
<tbody>
{% for server in server_list %}
<tr>
<td class="text-nowrap"><small><a href="http://{{ server.name }}">{{ server.name }}</a></small></td>
<td>
<small>
{% for srv_env in server.envs.all %}
<a href="{% url 'ports:fallout' %}?env={{ srv_env|urlencode:"" }}" class="badge {{ forloop.counter | get_link_badge }}">{{ srv_env }}</a>
{% endfor %}
</small>
</td>
<td class="text-nowrap"><small>
{% if server.v4 %}
<span class="badge badge-success">IPv4</span>
Expand Down
23 changes: 23 additions & 0 deletions ports/templatetags/link_badge.py
Original file line number Diff line number Diff line change
@@ -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]



0 comments on commit 3f64d33

Please sign in to comment.