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 (&gt;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>