File indexing completed on 2026-07-21 08:46:28
0001 {% load static %}
0002 <!DOCTYPE html>
0003 <html lang="en">
0004 <head>
0005 <meta charset="UTF-8">
0006 <meta name="viewport" content="width=device-width, initial-scale=1.0">
0007 <title>{% block title %}ePIC Production Monitor{% endblock %}</title>
0008 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
0009 <link rel="stylesheet" href="{% static 'css/style.css' %}">
0010 <link rel="stylesheet" href="{% static 'css/state-colors.css' %}">
0011 <style>
0012 nav { display: flex; align-items: center; gap: .8em; padding: .5em 1em; background: #222; position: sticky; top: 0; z-index: 1030; }
0013 .nav-spacer { flex: 1 1 auto; }
0014 .nav-analysis { margin-left: 1.5em; }
0015 .nav-auth { display: flex; gap: 1em; align-items: center; }
0016 nav a, .dropbtn { color: #ADD8E6; text-decoration: none; }
0017 nav a:hover { text-decoration: underline; }
0018 nav a.nav-active, .dropbtn.nav-active {
0019 text-shadow: 0 0 .65px currentColor, 0 0 .65px currentColor;
0020 }
0021
0022 .dropbtn { background: inherit; padding: 0; font-size: inherit; border: none; cursor: pointer; }
0023 .dropdown { position: relative; display: inline-block; margin-right: .35em; }
0024 .dropdown-content {
0025 display: none; position: absolute; background: #f9f9f9;
0026 min-width: 180px; box-shadow: 0 8px 16px rgba(0,0,0,.2); z-index: 1;
0027 }
0028 .dropdown-content a { color: #000; padding: 10px 14px; display: block; }
0029 .dropdown-content a.nav-active { background-color: #e9ecef; }
0030 .dropdown-content a:hover { background: #f1f1f1; }
0031 .dropdown:hover .dropdown-content { display: block; }
0032 #mode-label {
0033 border-right: 1px solid rgba(255,255,255,.2);
0034 color: #fff;
0035 font-weight: 700;
0036 margin-right: 4px;
0037 padding-right: 12px;
0038 }
0039 .nav-label {
0040 color: #fff;
0041 font-weight: 700;
0042 }
0043 .nav-panda-label {
0044 margin-left: 1.5em;
0045 }
0046
0047 /* PCS canonical Edit button — filled dark green, matches swf-monitor. */
0048 .btn.btn-dark-green {
0049 background-color: #166534; border-color: #166534; color: #fff;
0050 }
0051 .btn.btn-dark-green:hover, .btn.btn-dark-green:focus {
0052 background-color: #14532d; border-color: #14532d; color: #fff;
0053 }
0054 .btn.btn-dark-green:disabled, .btn.btn-dark-green.disabled {
0055 background-color: #6c757d; border-color: #6c757d; color: #e9ecef;
0056 }
0057 </style>
0058 {% block extra_head %}{% endblock %}
0059 </head>
0060 <body>
0061 {# SYNC OBLIGATION: this nav mirrors swf-monitor's production nav
0062 (swf-monitor src/templates/base.html, nav block) and must be updated
0063 whenever that nav changes. The monitor side carries the matching
0064 sync-obligation comment pointing here. #}
0065 {% with url_name=request.resolver_match.url_name|default:'' %}
0066 <nav>
0067 <div class="dropdown" id="mode-flipper">
0068 <button class="dropbtn" id="mode-label">epicprod</button>
0069 <div class="dropdown-content">
0070 <a href="{% url 'monitor_app:prod_home' %}">epicprod - ePIC Production</a>
0071 </div>
0072 </div>
0073
0074 <a href="{% url 'monitor_app:questionnaires_list' %}" class="{% if 'questionnaire' in url_name %}nav-active{% endif %}">Requests</a>
0075
0076 <div class="dropdown">
0077 <button class="dropbtn{% if url_name|slice:':4' == 'pcs_' and url_name != 'pcs_catalog' %} nav-active{% endif %}">PCS</button>
0078 <div class="dropdown-content">
0079 <a href="{% url 'monitor_app:pcs_hub' %}" class="{% if url_name == 'pcs_hub' %}nav-active{% endif %}">PCS Hub</a>
0080 <a href="{% url 'monitor_app:pcs_categories_list' %}" class="{% if url_name == 'pcs_categories_list' %}nav-active{% endif %}">Physics Categories</a>
0081 <a href="{% url 'monitor_app:pcs_tag_compose' tag_type='p' %}">Physics Tags</a>
0082 <a href="{% url 'monitor_app:pcs_tag_compose' tag_type='e' %}">EvGen Tags</a>
0083 <a href="{% url 'monitor_app:pcs_tag_compose' tag_type='s' %}">Simu Tags</a>
0084 <a href="{% url 'monitor_app:pcs_tag_compose' tag_type='r' %}">Reco Tags</a>
0085 <a href="{% url 'monitor_app:pcs_tag_compose' tag_type='k' %}">Background Tags</a>
0086 <a href="{% url 'monitor_app:pcs_datasets_compose' %}" class="{% if url_name == 'pcs_datasets_compose' %}nav-active{% endif %}">Datasets</a>
0087 <a href="{% url 'monitor_app:pcs_prod_configs_compose' %}" class="{% if url_name == 'pcs_prod_configs_compose' %}nav-active{% endif %}">Prod Configs</a>
0088 <a href="{% url 'monitor_app:pcs_task_compose' %}?tab=tasks" class="{% if url_name == 'pcs_task_compose' %}nav-active{% endif %}">Prod Tasks</a>
0089 </div>
0090 </div>
0091
0092 <a href="{% url 'monitor_app:pcs_catalog' %}" class="{% if url_name == 'pcs_catalog' %}nav-active{% endif %}">Campaigns</a>
0093 <div class="dropdown">
0094 <button class="dropbtn">AI</button>
0095 <div class="dropdown-content">
0096 <a href="{% url 'monitor_app:ai_proxy_all' %}assessments/">Assessments</a>
0097 <a href="{% url 'monitor_app:ai_proxy_all' %}proposals/">Proposals</a>
0098 </div>
0099 </div>
0100 <strong class="nav-label nav-panda-label">PanDA</strong>
0101 <a href="{% url 'monitor_app:panda_activity' %}" class="{% if url_name == 'panda_activity' %}nav-active{% endif %}">Activity</a>
0102 <a href="{% url 'monitor_app:panda_tasks_list' %}" class="{% if 'panda_task' in url_name %}nav-active{% endif %}">Tasks</a>
0103 <a href="{% url 'monitor_app:panda_jobs_list' %}" class="{% if 'panda_job' in url_name %}nav-active{% endif %}">Jobs</a>
0104 <a href="{% url 'monitor_app:panda_errors_list' %}" class="{% if 'panda_errors' in url_name %}nav-active{% endif %}">Errors</a>
0105 <a href="{% url 'monitor_app:logs_proxy_all' %}?app_name=epicprod" class="{% if 'logs' in url_name %}nav-active{% endif %}">Logs</a>
0106 <a href="{% url 'monitor_app:alarms_dashboard' %}" class="{% if 'alarms' in url_name %}nav-active{% endif %}">Alarms</a>
0107 <a href="{% url 'monitor_app:panda_diagnostics_list' %}" class="{% if 'panda_diagnostics' in url_name %}nav-active{% endif %}">Diagnostics</a>
0108 <div class="dropdown">
0109 <button class="dropbtn{% if 'epic_queue' in url_name or 'compute_usage' in url_name %} nav-active{% endif %}">Sites</button>
0110 <div class="dropdown-content">
0111 <a href="{% url 'monitor_app:compute_usage_proxy_all' %}">Site usage</a>
0112 <a href="{% url 'monitor_app:epic_queues_list' %}" class="{% if 'epic_queue' in url_name %}nav-active{% endif %}">PanDA queues</a>
0113 </div>
0114 </div>
0115 <a href="{% url 'monitor_app:analysis' %}" class="nav-analysis{% if 'analysis' in url_name %} nav-active{% endif %}">Analysis</a>
0116
0117 <span class="nav-spacer"></span>
0118 <div class="dropdown">
0119 <button class="dropbtn{% if 'snapper' in url_name or url_name == 'about' %} nav-active{% endif %}">System</button>
0120 <div class="dropdown-content">
0121 <a href="{% url 'monitor_app:snapper_report' %}"
0122 class="{% if 'snapper' in url_name %}nav-active{% endif %}">Snapper</a>
0123 <a href="{% url 'monitor_app:about' %}"
0124 class="{% if url_name == 'about' %}nav-active{% endif %}">About</a>
0125 </div>
0126 </div>
0127 {% include 'monitor_app/_nav_auth.html' %}
0128 </nav>
0129 {% endwith %}
0130 <main>
0131 {% block content %}{% endblock %}
0132 </main>
0133 </body>
0134 </html>