mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2026-01-10 01:46:17 +00:00
add API endpoint to submit WireGuard stats
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import glob
|
||||
import os
|
||||
|
||||
from django.conf import settings
|
||||
from django.http import JsonResponse, FileResponse
|
||||
from django.utils import timezone
|
||||
|
||||
@@ -16,6 +17,19 @@ def get_ip_address(request):
|
||||
return ip_address
|
||||
|
||||
|
||||
def get_cluster_settings():
|
||||
cluster_settings, created = ClusterSettings.objects.get_or_create(name='cluster_settings')
|
||||
return {
|
||||
'enabled': cluster_settings.enabled,
|
||||
'primary_enable_wireguard': cluster_settings.primary_enable_wireguard,
|
||||
'stats_sync_interval': settings.WIREGUARD_STATUS_CACHE_REFRESH_INTERVAL,
|
||||
'cluster_mode': cluster_settings.cluster_mode,
|
||||
'restart_mode': cluster_settings.restart_mode,
|
||||
'config_version': cluster_settings.config_version,
|
||||
'dns_version': cluster_settings.dns_version,
|
||||
}
|
||||
|
||||
|
||||
def get_worker(request):
|
||||
min_worker_version = 1
|
||||
success = True
|
||||
@@ -118,6 +132,20 @@ def api_get_worker_dnsmasq_config(request):
|
||||
return response
|
||||
|
||||
|
||||
def api_submit_worker_wireguard_stats(request):
|
||||
worker, success = get_worker(request)
|
||||
if worker:
|
||||
if worker.error_status or not success:
|
||||
data = {'status': 'error', 'message': worker.error_status}
|
||||
return JsonResponse(data, status=400)
|
||||
else:
|
||||
data = {'status': 'error', 'message': 'Worker not found'}
|
||||
return JsonResponse(data, status=403)
|
||||
worker_status = worker.workerstatus
|
||||
data = {'status': 'success', 'message': 'Stats received'}
|
||||
return JsonResponse(data, status=200)
|
||||
|
||||
|
||||
def api_get_worker_config_files(request):
|
||||
worker, success = get_worker(request)
|
||||
if worker:
|
||||
@@ -139,24 +167,9 @@ def api_get_worker_config_files(request):
|
||||
filename = os.path.basename(path)
|
||||
with open(path, 'r') as f:
|
||||
files[filename] = f.read()
|
||||
cluster_settings, created = ClusterSettings.objects.get_or_create(name='cluster_settings')
|
||||
return JsonResponse(
|
||||
{
|
||||
'status': 'success',
|
||||
'files': files,
|
||||
'cluster_settings': {
|
||||
'enabled': cluster_settings.enabled,
|
||||
'primary_enable_wireguard': cluster_settings.primary_enable_wireguard,
|
||||
'stats_sync_interval': cluster_settings.stats_sync_interval,
|
||||
'stats_cache_interval': cluster_settings.stats_cache_interval,
|
||||
'cluster_mode': cluster_settings.cluster_mode,
|
||||
'restart_mode': cluster_settings.restart_mode,
|
||||
'config_version': cluster_settings.config_version,
|
||||
'dns_version': cluster_settings.dns_version,
|
||||
},
|
||||
},
|
||||
status=200
|
||||
)
|
||||
|
||||
data = {'status': 'success', 'files': files, 'cluster_settings': get_cluster_settings()}
|
||||
return JsonResponse(data, status=200)
|
||||
|
||||
|
||||
def api_worker_ping(request):
|
||||
@@ -186,20 +199,5 @@ def api_cluster_status(request):
|
||||
else:
|
||||
data = {'status': 'error', 'message': 'Worker not found'}
|
||||
return JsonResponse(data, status=403)
|
||||
cluster_settings, created = ClusterSettings.objects.get_or_create(name='cluster_settings')
|
||||
data = {
|
||||
'status': 'success',
|
||||
'worker_error_status': worker.error_status,
|
||||
'cluster_settings': {
|
||||
'enabled': cluster_settings.enabled,
|
||||
'primary_enable_wireguard': cluster_settings.primary_enable_wireguard,
|
||||
'stats_sync_interval': cluster_settings.stats_sync_interval,
|
||||
'stats_cache_interval': cluster_settings.stats_cache_interval,
|
||||
'cluster_mode': cluster_settings.cluster_mode,
|
||||
'restart_mode': cluster_settings.restart_mode,
|
||||
'config_version': cluster_settings.config_version,
|
||||
'dns_version': cluster_settings.dns_version,
|
||||
},
|
||||
}
|
||||
|
||||
data = {'status': 'success', 'worker_error_status': worker.error_status, 'cluster_settings': get_cluster_settings()}
|
||||
return JsonResponse(data, status=200)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.9 on 2026-01-08 14:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cluster', '0014_remove_clustersettings_stats_cache_interval_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='workerstatus',
|
||||
name='wireguard_status',
|
||||
field=models.JSONField(),
|
||||
),
|
||||
]
|
||||
@@ -64,7 +64,7 @@ class WorkerStatus(models.Model):
|
||||
config_version = models.PositiveIntegerField(default=0)
|
||||
worker_version = models.PositiveIntegerField(default=0)
|
||||
active_peers = models.PositiveIntegerField(default=0)
|
||||
wireguard_status = models.JSONField(default=dict)
|
||||
wireguard_status = models.JSONField()
|
||||
|
||||
updated = models.DateTimeField(auto_now=True)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
@@ -22,7 +22,7 @@ from api.views import api_instance_info, api_peer_invite, api_peer_list, cron_ch
|
||||
cron_update_peer_latest_handshake, peer_info, routerfleet_authenticate_session, routerfleet_get_user_token, \
|
||||
wireguard_status, cron_refresh_wireguard_status_cache
|
||||
from cluster.cluster_api import api_cluster_status, api_get_worker_config_files, api_get_worker_dnsmasq_config, \
|
||||
api_worker_ping
|
||||
api_worker_ping, api_submit_worker_wireguard_stats
|
||||
from cluster.views import cluster_main, cluster_settings, worker_manage
|
||||
from console.views import view_console
|
||||
from dns.views import view_apply_dns_config, view_manage_dns_settings, view_manage_filter_list, view_manage_static_host, \
|
||||
@@ -82,6 +82,7 @@ urlpatterns = [
|
||||
path('api/cluster/worker/get_config_files/', api_get_worker_config_files, name='api_get_worker_config_files'),
|
||||
path('api/cluster/worker/get_dnsmasq_config/', api_get_worker_dnsmasq_config, name='api_get_worker_dnsmasq_config'),
|
||||
path('api/cluster/worker/ping/', api_worker_ping, name='api_worker_ping'),
|
||||
path('api/cluster/worker/submit_wireguard_stats/', api_submit_worker_wireguard_stats, name='api_submit_worker_wireguard_stats'),
|
||||
path('firewall/port_forward/', view_redirect_rule_list, name='redirect_rule_list'),
|
||||
path('firewall/manage_port_forward_rule/', manage_redirect_rule, name='manage_redirect_rule'),
|
||||
path('firewall/rule_list/', view_firewall_rule_list, name='firewall_rule_list'),
|
||||
|
||||
Reference in New Issue
Block a user