Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-26 08:40:23

0001 """System status views for the production monitor."""
0002 
0003 import json
0004 import logging
0005 
0006 from django.contrib import messages
0007 from django.http import JsonResponse
0008 from django.shortcuts import redirect, render
0009 from django.views.decorators.http import require_POST
0010 
0011 from ..activemq_connection import ActiveMQConnectionManager
0012 from ..system_status import grouped_current_status, status_summary
0013 
0014 logger = logging.getLogger(__name__)
0015 
0016 
0017 def system_status_page(request):
0018     return render(request, 'monitor_app/system_status.html', {
0019         'groups': grouped_current_status(),
0020         'summary': status_summary(),
0021     })
0022 
0023 
0024 def system_status_json(request):
0025     summary = status_summary()
0026     latest = summary.get('latest_checked_at')
0027     return JsonResponse({
0028         'overall_status': summary.get('overall_status', 'unknown'),
0029         'overall_reason': summary.get('overall_reason', ''),
0030         'latest_checked_at': latest.isoformat() if latest else None,
0031         'counts': {
0032             'ok': summary.get('ok', 0),
0033             'warning': summary.get('warning', 0),
0034             'error': summary.get('error', 0),
0035             'unknown': summary.get('unknown', 0),
0036             'total': summary.get('total', 0),
0037         },
0038     })
0039 
0040 
0041 @require_POST
0042 def system_status_refresh(request):
0043     msg = {
0044         'msg_type': 'refresh_system_status',
0045         'namespace': 'prodops',
0046         'source': 'system_page',
0047     }
0048     try:
0049         ok = ActiveMQConnectionManager().send_message('/queue/epicprod.ops', json.dumps(msg))
0050     except Exception as exc:
0051         ok = False
0052         logger.error("system status refresh trigger failed: %s", exc)
0053     if ok:
0054         messages.info(request, 'System status refresh queued.')
0055     else:
0056         messages.error(request, 'System status refresh could not be queued.')
0057     return redirect('monitor_app:system_status')