New status page

This commit is contained in:
Eduardo Silva 2025-02-24 15:18:41 -03:00
parent da0fc7ed3c
commit 8c780d297c
5 changed files with 59 additions and 29 deletions

View File

@ -55,9 +55,6 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a> <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
</li> </li>
<li class="nav-item d-none d-sm-inline-block">
<a href="/" class="nav-link">Home</a>
</li>
<li class="nav-item d-none d-sm-inline-block"> <li class="nav-item d-none d-sm-inline-block">
<a href="/status/" class="nav-link">Status</a> <a href="/status/" class="nav-link">Status</a>
</li> </li>
@ -87,14 +84,6 @@
<nav class="mt-2"> <nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false"> <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class with font-awesome or any other icon font library --> <!-- Add icons to the links using the .nav-icon class with font-awesome or any other icon font library -->
<li class="nav-item">
<a href="/" class="nav-link {% if '/' == request.path %}active{% endif %}">
<i class="fas fa-home nav-icon"></i>
<p>
Home
</p>
</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a href="/status/" class="nav-link {% if '/status/' in request.path %}active{% endif %}"> <a href="/status/" class="nav-link {% if '/status/' in request.path %}active{% endif %}">

View File

@ -6,25 +6,45 @@
<div class='col-lg-12'> <div class='col-lg-12'>
<div class="card card-primary card-outline"> <div class="card card-primary card-outline">
<div class="card-header"> <div class="card-header">
<a href='/status/' class='btn btn-outline-primary'>wg show</a>
<a href='/tools/export_wireguard_config/' class='btn btn-outline-primary'>Update Configuration</a> <a href='/tools/export_wireguard_config/' class='btn btn-outline-primary'>Update Configuration</a>
<a href='/tools/restart_wireguard/' class='btn btn-outline-primary'>Restart Wireguard service</a> <a href='/tools/restart_wireguard/' class='btn btn-outline-primary'>Restart Wireguard service</a>
<div class="btn-group float-right" role="group" aria-label="Graph interval">
<a href="?period=6h" data-period="6h" class="btn btn-outline-primary">6h</a>
<a href="?period=7d" data-period="7d" class="btn btn-outline-primary">7d</a>
<a href="?period=30d" data-period="30d" class="btn btn-outline-primary">1m</a>
<a href="?period=180d" data-period="180d" class="btn btn-outline-primary">6m</a>
<a href="?period=365d" data-period="365d" class="btn btn-outline-primary">1y</a>
</div>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class='row'> <div class='row'>
<div class='col-md-12'> <div class='col-md-12'>
<pre>{{command_output}}</pre> <div class="row" style="padding-bottom: 20px">
{% for wireguard_instance in wireguard_instances %}
</div> <div class="col-md-12">
</div> <h3>wg{{ wireguard_instance.instance_id }} {% if wireguard_instance.name %}({{ wireguard_instance.name }}){% endif %}</h3>
<p><b><i class="fas fa-chart-area nav-icon"></i> Instance Traffic</b></p>
</div> <img id="graphImg" src="/rrd/graph/?instance={{ wireguard_instance.uuid }}{% if request.GET.period %}&period={{ request.GET.period }}{% endif %}" class="img-fluid" alt="No traffic history, please wait a few minutes" onerror="this.onerror=null; this.style.display='none'; this.insertAdjacentHTML('afterend', this.alt);">
</div> <p>
<b><i class="fas fa-network-wired nav-icon"></i> IP Address: </b>{{ wireguard_instance.address }}/{{ wireguard_instance.netmask }}<br>
</div> <b><i class="fas fa-link nav-icon"></i> Public Address: </b>{{ wireguard_instance.hostname }}<br>
</div> <b><i class="fas fa-door-open nav-icon"></i> Port: </b>{{ wireguard_instance.listen_port }}<br>
<p style="text-align: right" class="small"> <b><i class="fas fa-users-cog nav-icon"></i> Peers: </b>{{ wireguard_instance.peer_set.count }}<br>
This is just a placeholder for the WireGuard status page. It will be updated with more information in the near future.
</p> </p>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<div class="card-footer">
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View File

@ -70,14 +70,7 @@ def generate_instance_defaults():
@login_required @login_required
def view_welcome(request): def legacy_view_wireguard_status(request):
#page_title = 'Welcome'
#context = {'page_title': page_title}
return render(request, 'wireguard/welcome.html')
@login_required
def view_wireguard_status(request):
user_acl = get_object_or_404(UserAcl, user=request.user) user_acl = get_object_or_404(UserAcl, user=request.user)
page_title = 'WireGuard Status' page_title = 'WireGuard Status'
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id') wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
@ -102,6 +95,32 @@ def view_wireguard_status(request):
return render(request, 'wireguard/wireguard_status.html', context) return render(request, 'wireguard/wireguard_status.html', context)
@login_required
def view_wireguard_status(request):
user_acl = get_object_or_404(UserAcl, user=request.user)
page_title = 'WireGuard Status'
if user_acl.peer_groups.exists():
wireguard_instances = []
for peer_group in user_acl.peer_groups.all():
for instance_temp in peer_group.server_instance.all():
if instance_temp not in wireguard_instances:
wireguard_instances.append(instance_temp)
else:
wireguard_instances = WireGuardInstance.objects.all().order_by('instance_id')
if WireGuardInstance.objects.filter(pending_changes=True).exists():
pending_changes_warning = True
else:
pending_changes_warning = False
if user_acl.enable_enhanced_filter:
pass
context = {'page_title': page_title, 'pending_changes_warning': pending_changes_warning, 'wireguard_instances': wireguard_instances}
return render(request, 'wireguard/wireguard_status.html', context)
@login_required @login_required
def view_wireguard_manage_instance(request): def view_wireguard_manage_instance(request):
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists(): if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():

View File

@ -134,6 +134,6 @@ STATICFILES_DIRS = [
DNS_CONFIG_FILE = '/etc/dnsmasq/wireguard_webadmin_dns.conf' DNS_CONFIG_FILE = '/etc/dnsmasq/wireguard_webadmin_dns.conf'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
WIREGUARD_WEBADMIN_VERSION = 9901 WIREGUARD_WEBADMIN_VERSION = 9951
from wireguard_webadmin.production_settings import * from wireguard_webadmin.production_settings import *

View File

@ -16,7 +16,9 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from wireguard.views import view_welcome, view_wireguard_status, view_wireguard_manage_instance from django.views.generic import RedirectView
from wireguard.views import view_wireguard_status, view_wireguard_manage_instance
from wireguard_peer.views import view_wireguard_peer_list, view_wireguard_peer_manage, view_manage_ip_address, view_wireguard_peer_sort from wireguard_peer.views import view_wireguard_peer_list, view_wireguard_peer_manage, view_manage_ip_address, view_wireguard_peer_sort
from console.views import view_console from console.views import view_console
from user_manager.views import view_user_list, view_manage_user, view_peer_group_list, view_peer_group_manage from user_manager.views import view_user_list, view_manage_user, view_peer_group_list, view_peer_group_manage
@ -28,8 +30,8 @@ from dns.views import view_static_host_list, view_manage_static_host, view_manag
from wgrrd.views import view_rrd_graph from wgrrd.views import view_rrd_graph
urlpatterns = [ urlpatterns = [
# path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('', view_welcome, name='welcome'), path('', RedirectView.as_view(url='/status/', permanent=False), name='redirect_to_status'),
path('status/', view_wireguard_status, name='wireguard_status'), path('status/', view_wireguard_status, name='wireguard_status'),
path('dns/', view_static_host_list, name='static_host_list'), path('dns/', view_static_host_list, name='static_host_list'),
path('dns/apply_config/', view_apply_dns_config, name='apply_dns_config'), path('dns/apply_config/', view_apply_dns_config, name='apply_dns_config'),