Spaces:
Running
Running
Download src/templates/admin/admin.html from heisbuba/quantvat: direct link, hf CLI and curl.
- Browser
- Download file 5.38 kB
-
https://huggingface.co/spaces/heisbuba/quantvat/resolve/main/src/templates/admin/admin.html
- Command line
-
hf download hf://spaces/heisbuba/quantvat/src/templates/admin/admin.html
-
curl -L -o admin.html https://huggingface.co/spaces/heisbuba/quantvat/resolve/main/src/templates/admin/admin.html
5.38 kB
| {% extends "base.html" %} | |
| {% block title %}Admin Dashboard - QuantVAT{% endblock %} | |
| {% block extra_css %} | |
| <link rel="stylesheet" href="{{ url_for('static', filename='css/admin.css') }}"> | |
| {% endblock %} | |
| {% block content %} | |
| <div class="container wide"> | |
| <div class="admin-header"> | |
| <h1 class="admin-title"> | |
| <svg class="icon-inline" viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> | |
| Admin Panel | |
| </h1> | |
| </div> | |
| <div class="stats-grid"> | |
| <div class="stat-card"> | |
| <div class="stat-label">Total Users</div> | |
| <div class="stat-value">{{ user_count }}</div> | |
| </div> | |
| <div class="stat-card"> | |
| <div class="stat-label">Lifetime Scans</div> | |
| <div class="stat-value" style="color: var(--accent-green);">{{ active_tasks }}</div> | |
| </div> | |
| <div class="stat-card"> | |
| <div class="stat-label">Report Views</div> | |
| <div class="stat-value" style="color: var(--accent-blue);">{{ report_views }}</div> | |
| </div> | |
| <div class="stat-card"> | |
| <div class="stat-label">System Storage</div> | |
| <div class="stat-value" style="color: var(--accent-purple);">{{ storage_usage }}<small style="font-size: 0.9rem;">MB</small></div> | |
| </div> | |
| </div> | |
| <div class="table-card"> | |
| <div class="table-header"> | |
| <div class="header-title"> | |
| <svg class="icon-inline" viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg> | |
| <span>LIVE ACTIVITY</span> | |
| </div> | |
| </div> | |
| <div class="table-wrapper"> | |
| <table> | |
| <thead> | |
| <tr> | |
| <th>User ID</th> | |
| <th>Status</th> | |
| <th>Progress</th> | |
| <th>Current Action</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| {% for uid, data in progress.items() %} | |
| <tr> | |
| <td style="font-family: 'JetBrains Mono'; color: var(--accent-blue);">{{ uid[:8] }}</td> | |
| <td><span class="status-badge {{'status-active' if data.status == 'active' else 'status-idle'}}">{{ data.status }}</span></td> | |
| <td><div class="progress-track"><div class="progress-fill" style="width: {{ data.percent }}%"></div></div></td> | |
| <td style="color: var(--text-dim);">{{ data.text }}</td> | |
| </tr> | |
| {% else %} | |
| <tr><td colspan="4" style="text-align:center; padding: 40px; color: var(--text-dim);">No sessions found in memory</td></tr> | |
| {% endfor %} | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <div class="table-card" style="margin-top: 25px;"> | |
| <div class="table-header error-header"> | |
| <div class="header-title"> | |
| <svg class="icon-inline" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg> | |
| <span>ERROR LOGS ({{ error_logs|length }})</span> | |
| </div> | |
| <div style="display: flex; gap: 8px;"> | |
| <a href="{{ url_for('main.download_error_logs') }}" class="btn-icon-text btn-download"> | |
| <svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg> | |
| <span>CSV</span> | |
| </a> | |
| <form method="POST" action="{{ url_for('main.clear_admin_error_logs') }}" onsubmit="return confirm('Clear all error logs? This cannot be undone.');"> | |
| <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> | |
| <button type="submit" class="btn-icon-text btn-clear"> | |
| <svg viewBox="0 0 24 24"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/></svg> | |
| <span>Clear</span> | |
| </button> | |
| </form> | |
| </div> | |
| </div> | |
| <div class="table-wrapper"> | |
| <table> | |
| <thead> | |
| <tr> | |
| <th>Time</th> | |
| <th>Source</th> | |
| <th>User</th> | |
| <th>Message</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| {% for entry in error_logs %} | |
| <tr> | |
| <td class="error-time">{{ entry.timestamp }}</td> | |
| <td class="error-source">{{ entry.source }}</td> | |
| <td style="font-family: 'JetBrains Mono'; color: var(--text-dim);">{{ (entry.uid or "—")[:8] }}</td> | |
| <td class="error-message">{{ entry.message }}</td> | |
| </tr> | |
| {% else %} | |
| <tr><td colspan="4" style="text-align:center; padding: 40px; color: var(--text-dim);">No errors logged 🎉</td></tr> | |
| {% endfor %} | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| </div> | |
| {% endblock %} |