Spaces:
Sleeping
Sleeping
File size: 6,832 Bytes
d70361b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exception Log — Vedangsoft Change Detection</title>
<link rel="stylesheet" href="/static/css/style.css?v=34" />
<link rel="stylesheet" href="/static/css/dda.css?v=47" />
</head>
<body>
<div class="app dda-app dda-app-full">
{% include "partials/navbar_dda.html" %}
<div class="dda-main-col">
{% include "partials/alerts_dda.html" %}
<section class="dda-panel active">
<div class="dda-hero dda-hero-row">
<div>
<h1 id="log-page-title">💥 Exception Log</h1>
<p class="sub" id="exception-log-subtitle">System errors captured by the global exception handler</p>
</div>
<div class="dda-mode-toggle" id="log-tab-switch" role="radiogroup" aria-label="Log view">
<button type="button" class="dda-mode-btn is-active" data-tab="exceptions" role="radio" aria-checked="true">Exceptions</button>
<button type="button" class="dda-mode-btn" data-tab="applogs" role="radio" aria-checked="false">Application Logs</button>
</div>
</div>
<!-- ===================== Exceptions tab ===================== -->
<div id="exceptions-tab">
<div class="dda-stat-cards">
<div class="dda-stat-card is-danger">
<div class="dda-stat-icon">💥</div>
<div class="dda-stat-value" id="exception-stat-500">0</div>
<div class="dda-stat-label">500 Errors (this page)</div>
</div>
<div class="dda-stat-card is-warn">
<div class="dda-stat-icon">⚠️</div>
<div class="dda-stat-value" id="exception-stat-other">0</div>
<div class="dda-stat-label">Other Errors (this page)</div>
</div>
<div class="dda-stat-card">
<div class="dda-stat-icon">📋</div>
<div class="dda-stat-value" id="exception-stat-total">0</div>
<div class="dda-stat-label">Total Filtered Records</div>
</div>
<div class="dda-stat-card is-danger">
<div class="dda-stat-icon">🔥</div>
<div class="dda-stat-value" id="exception-stat-unhandled">0</div>
<div class="dda-stat-label">Unhandled (this page)</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h3>Errors</h3>
<div class="dda-reports-toolbar">
<span id="exception-log-meta" class="dim dda-filter-meta"></span>
<button type="button" class="btn btn-secondary btn-sm" id="btn-exception-refresh">Refresh</button>
<button type="button" class="btn btn-danger btn-sm" id="btn-exception-clear-old" data-requires-permission="exception_log:delete">🗑 Clear Old (>30 days)</button>
</div>
</div>
<div class="dda-filter-bar">
<label class="dda-filter-field">Exception Type
<select id="exception-filter-type"><option value="">— All Types —</option></select>
</label>
<label class="dda-filter-field">Status Code
<select id="exception-filter-status"><option value="">— All —</option></select>
</label>
<label class="dda-filter-field">From
<input type="date" id="exception-filter-from" class="dda-date-input" />
</label>
<label class="dda-filter-field">To
<input type="date" id="exception-filter-to" class="dda-date-input" />
</label>
<button type="button" class="btn btn-primary btn-sm" id="btn-exception-filter">Filter</button>
<button type="button" class="btn btn-secondary btn-sm" id="btn-exception-reset">Reset</button>
</div>
<div id="exception-log-table-wrap" class="dda-logs-wrap"><p class="dim">Loading exception log…</p></div>
<div class="pagination" id="exception-log-pagination"></div>
</div>
</div>
<!-- ================== Application Logs tab =================== -->
<div id="applogs-tab" hidden>
<div class="card">
<div class="card-header">
<h3>Application logs</h3>
<div class="dda-reports-toolbar">
<span id="logs-meta" class="dim dda-filter-meta"></span>
<label class="dda-check"><input type="checkbox" id="logs-live" checked /> Live</label>
<button type="button" class="btn btn-secondary btn-sm" id="btn-logs-refresh">Refresh</button>
<a class="btn btn-secondary btn-sm" id="btn-logs-download" href="/api/dda/logs/download">Download</a>
<button type="button" class="btn btn-danger btn-sm" id="btn-logs-clear" data-requires-permission="logs:delete">Clear</button>
</div>
</div>
<div class="dda-filter-bar">
<label class="dda-filter-field">Search
<input type="search" id="logs-q" class="dda-search" placeholder="Message or logger…" />
</label>
<label class="dda-filter-field">Level
<select id="logs-level">
<option value="">All</option>
<option value="DEBUG">Debug+</option>
<option value="INFO">Info+</option>
<option value="WARNING">Warning+</option>
<option value="ERROR">Error+</option>
</select>
</label>
<label class="dda-filter-field">Logger
<input type="search" id="logs-logger" class="dda-search" placeholder="e.g. app.dda" />
</label>
</div>
<div id="logs-table-wrap" class="dda-logs-wrap"><p class="dim">Loading logs…</p></div>
<div class="pagination" id="logs-pagination"></div>
</div>
</div>
</section>
</div>
</div>
<!-- Details modal -->
<div id="exception-detail-modal" class="dda-modal hidden" role="dialog" aria-modal="true">
<div class="dda-modal-panel card" style="max-width:720px">
<div class="card-header">
<h3>Exception details</h3>
<button type="button" class="btn btn-secondary btn-sm" id="btn-exception-detail-close">Close</button>
</div>
<pre id="exception-detail-content" class="dda-log-msg"></pre>
</div>
</div>
<script src="/static/js/dda/shared.js?v=4"></script>
<script src="/static/js/dda/app.js?v=28"></script>
<script src="/static/js/dda/notifications.js?v=5"></script>
<script src="/static/js/dda/exception_log.js?v=2"></script>
</body>
</html>
|