add API endpoint to submit WireGuard stats

This commit is contained in:
Eduardo Silva
2026-01-08 13:43:51 -03:00
parent 511eb62860
commit b40e9afcb6
3 changed files with 37 additions and 4 deletions

View File

@@ -1,9 +1,11 @@
import glob import glob
import json
import os import os
from django.conf import settings from django.conf import settings
from django.http import JsonResponse, FileResponse from django.http import JsonResponse, FileResponse
from django.utils import timezone from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from .models import ClusterSettings, Worker, WorkerStatus from .models import ClusterSettings, Worker, WorkerStatus
@@ -131,7 +133,7 @@ def api_get_worker_dnsmasq_config(request):
response["Content-Length"] = str(os.path.getsize(dnsmasq_file)) response["Content-Length"] = str(os.path.getsize(dnsmasq_file))
return response return response
@csrf_exempt
def api_submit_worker_wireguard_stats(request): def api_submit_worker_wireguard_stats(request):
worker, success = get_worker(request) worker, success = get_worker(request)
if worker: if worker:
@@ -141,9 +143,21 @@ def api_submit_worker_wireguard_stats(request):
else: else:
data = {'status': 'error', 'message': 'Worker not found'} data = {'status': 'error', 'message': 'Worker not found'}
return JsonResponse(data, status=403) return JsonResponse(data, status=403)
try:
if request.method == 'POST':
payload = json.loads(request.body)
worker_status = worker.workerstatus worker_status = worker.workerstatus
worker_status.wireguard_status = payload
worker_status.wireguard_status_updated = timezone.now()
worker_status.save()
data = {'status': 'success', 'message': 'Stats received'} data = {'status': 'success', 'message': 'Stats received'}
return JsonResponse(data, status=200) return JsonResponse(data, status=200)
except Exception as e:
pass
data = {'status': 'error', 'message': 'Stats not received'}
return JsonResponse(data, status=400)
def api_get_worker_config_files(request): def api_get_worker_config_files(request):

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.2.9 on 2026-01-08 16:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cluster', '0015_alter_workerstatus_wireguard_status'),
]
operations = [
migrations.AddField(
model_name='workerstatus',
name='wireguard_status_updated',
field=models.DateTimeField(blank=True, null=True),
),
]

View File

@@ -65,6 +65,7 @@ class WorkerStatus(models.Model):
worker_version = models.PositiveIntegerField(default=0) worker_version = models.PositiveIntegerField(default=0)
active_peers = models.PositiveIntegerField(default=0) active_peers = models.PositiveIntegerField(default=0)
wireguard_status = models.JSONField() wireguard_status = models.JSONField()
wireguard_status_updated = models.DateTimeField(blank=True, null=True)
updated = models.DateTimeField(auto_now=True) updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)