mirror of
https://github.com/eduardogsilva/routerfleet.git
synced 2025-06-20 17:15:39 +02:00
100 lines
No EOL
4.6 KiB
Python
100 lines
No EOL
4.6 KiB
Python
from django.shortcuts import render, get_object_or_404
|
|
|
|
from message_center.functions import notify_router_status_update
|
|
from monitoring.models import RouterDownTime
|
|
from router_manager.models import Router, RouterStatus, RouterGroup
|
|
from django.http import JsonResponse
|
|
from django.utils import timezone
|
|
from django.conf import settings
|
|
from routerfleet_tools.models import WebadminSettings
|
|
|
|
|
|
def view_router_config_timestamp(request):
|
|
if not request.user.is_authenticated and request.GET.get('key') != settings.MONITORING_KEY:
|
|
return JsonResponse({'error': 'Not authenticated'}, status=403)
|
|
webadmin_settings, _ = WebadminSettings.objects.get_or_create(name='webadmin_settings')
|
|
if not webadmin_settings.router_config_last_updated:
|
|
webadmin_settings.router_config_last_updated = timezone.now()
|
|
webadmin_settings.monitoring_last_run = timezone.now()
|
|
webadmin_settings.save()
|
|
return JsonResponse({'router_config': webadmin_settings.router_config_last_updated.isoformat()})
|
|
|
|
|
|
def view_router_last_status_change(request):
|
|
if not request.user.is_authenticated and request.GET.get('key') != settings.MONITORING_KEY:
|
|
return JsonResponse({'error': 'Not authenticated'}, status=403)
|
|
last_router_status_change = RouterStatus.objects.filter(last_status_change__isnull=False).order_by('-last_status_change').first()
|
|
if last_router_status_change:
|
|
last_status_change_timestamp = last_router_status_change.last_status_change.isoformat()
|
|
else:
|
|
last_status_change_timestamp = "0"
|
|
return JsonResponse({'last_status_change': last_status_change_timestamp})
|
|
|
|
|
|
def view_export_router_list(request):
|
|
if not request.user.is_authenticated and request.GET.get('key') != settings.MONITORING_KEY:
|
|
return JsonResponse({'error': 'Not authenticated'}, status=403)
|
|
webadmin_settings, _ = WebadminSettings.objects.get_or_create(name='webadmin_settings')
|
|
# Not updating the monitoring last run here, as this view is also used on the dashboard
|
|
if not webadmin_settings.router_config_last_updated:
|
|
webadmin_settings.router_config_last_updated = timezone.now()
|
|
webadmin_settings.save()
|
|
|
|
if request.GET.get('filter_group'):
|
|
router_group = get_object_or_404(RouterGroup, uuid=request.GET.get('filter_group'))
|
|
query_router_list = router_group.routers.all().filter(enabled=True, monitoring=True)
|
|
else:
|
|
query_router_list = Router.objects.filter(enabled=True, monitoring=True)
|
|
|
|
router_list = {}
|
|
for router in query_router_list:
|
|
router_list[str(router.uuid)] = {
|
|
'address': router.address,
|
|
'name': router.name,
|
|
'online': router.routerstatus.status_online,
|
|
'uuid': str(router.uuid),
|
|
}
|
|
data = {
|
|
'router_list': router_list,
|
|
'router_config': webadmin_settings.router_config_last_updated.isoformat()
|
|
}
|
|
return JsonResponse(data)
|
|
|
|
|
|
def view_update_router_status(request):
|
|
if not request.user.is_authenticated and request.GET.get('key') != settings.MONITORING_KEY:
|
|
return JsonResponse({'error': 'Not authenticated'}, status=403)
|
|
router = Router.objects.get(uuid=request.GET.get('uuid'))
|
|
new_status = request.GET.get('status')
|
|
if router.routerstatus.status_online:
|
|
current_status = 'online'
|
|
else:
|
|
current_status = 'offline'
|
|
if new_status not in ['online', 'offline']:
|
|
return JsonResponse({'status': 'error', 'error_message': 'Invalid status'}, status=400)
|
|
if new_status == 'online':
|
|
router.routerstatus.status_online = True
|
|
else:
|
|
router.routerstatus.status_online = False
|
|
router.routerstatus.save()
|
|
|
|
if current_status != new_status:
|
|
if new_status == 'online':
|
|
router.routerstatus.status_online = True
|
|
downtime = RouterDownTime.objects.filter(router=router, end_time=None).first()
|
|
if downtime:
|
|
downtime.end_time = timezone.now()
|
|
downtime.save()
|
|
else:
|
|
router.routerstatus.status_online = False
|
|
downtime = RouterDownTime.objects.create(router=router, start_time=timezone.now())
|
|
router.routerstatus.last_status_change = timezone.now()
|
|
router.routerstatus.save()
|
|
if downtime:
|
|
RouterDownTime.objects.filter(router=router, end_time=None).exclude(uuid=downtime.uuid).delete()
|
|
notify_router_status_update(router)
|
|
|
|
webadmin_settings, _ = WebadminSettings.objects.get_or_create(name='webadmin_settings')
|
|
webadmin_settings.monitoring_last_run = timezone.now()
|
|
webadmin_settings.save()
|
|
return JsonResponse({'status': 'success', 'router_config': webadmin_settings.router_config_last_updated.isoformat()}) |