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')