adonisjs-server-stats 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -9
- package/dist/src/dashboard/chart_aggregator.d.ts +21 -0
- package/dist/src/dashboard/chart_aggregator.d.ts.map +1 -0
- package/dist/src/dashboard/chart_aggregator.js +89 -0
- package/dist/src/dashboard/dashboard_controller.d.ts +147 -0
- package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -0
- package/dist/src/dashboard/dashboard_controller.js +1008 -0
- package/dist/src/dashboard/dashboard_routes.d.ts +16 -0
- package/dist/src/dashboard/dashboard_routes.d.ts.map +1 -0
- package/dist/src/dashboard/dashboard_routes.js +88 -0
- package/dist/src/dashboard/dashboard_store.d.ts +158 -0
- package/dist/src/dashboard/dashboard_store.d.ts.map +1 -0
- package/dist/src/dashboard/dashboard_store.js +723 -0
- package/dist/src/dashboard/integrations/cache_inspector.d.ts +88 -0
- package/dist/src/dashboard/integrations/cache_inspector.d.ts.map +1 -0
- package/dist/src/dashboard/integrations/cache_inspector.js +215 -0
- package/dist/src/dashboard/integrations/config_inspector.d.ts +33 -0
- package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -0
- package/dist/src/dashboard/integrations/config_inspector.js +155 -0
- package/dist/src/dashboard/integrations/index.d.ts +7 -0
- package/dist/src/dashboard/integrations/index.d.ts.map +1 -0
- package/dist/src/dashboard/integrations/index.js +3 -0
- package/dist/src/dashboard/integrations/queue_inspector.d.ts +106 -0
- package/dist/src/dashboard/integrations/queue_inspector.d.ts.map +1 -0
- package/dist/src/dashboard/integrations/queue_inspector.js +182 -0
- package/dist/src/dashboard/migrator.d.ts +18 -0
- package/dist/src/dashboard/migrator.d.ts.map +1 -0
- package/dist/src/dashboard/migrator.js +144 -0
- package/dist/src/dashboard/models/stats_email.d.ts +19 -0
- package/dist/src/dashboard/models/stats_email.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_email.js +66 -0
- package/dist/src/dashboard/models/stats_event.d.ts +14 -0
- package/dist/src/dashboard/models/stats_event.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_event.js +43 -0
- package/dist/src/dashboard/models/stats_log.d.ts +12 -0
- package/dist/src/dashboard/models/stats_log.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_log.js +42 -0
- package/dist/src/dashboard/models/stats_metric.d.ts +15 -0
- package/dist/src/dashboard/models/stats_metric.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_metric.js +50 -0
- package/dist/src/dashboard/models/stats_query.d.ts +20 -0
- package/dist/src/dashboard/models/stats_query.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_query.js +67 -0
- package/dist/src/dashboard/models/stats_request.d.ts +21 -0
- package/dist/src/dashboard/models/stats_request.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_request.js +61 -0
- package/dist/src/dashboard/models/stats_saved_filter.d.ts +11 -0
- package/dist/src/dashboard/models/stats_saved_filter.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_saved_filter.js +38 -0
- package/dist/src/dashboard/models/stats_trace.d.ts +19 -0
- package/dist/src/dashboard/models/stats_trace.d.ts.map +1 -0
- package/dist/src/dashboard/models/stats_trace.js +67 -0
- package/dist/src/debug/debug_store.d.ts +5 -0
- package/dist/src/debug/debug_store.d.ts.map +1 -1
- package/dist/src/debug/debug_store.js +10 -0
- package/dist/src/debug/email_collector.d.ts +2 -0
- package/dist/src/debug/email_collector.d.ts.map +1 -1
- package/dist/src/debug/email_collector.js +4 -0
- package/dist/src/debug/event_collector.d.ts +2 -0
- package/dist/src/debug/event_collector.d.ts.map +1 -1
- package/dist/src/debug/event_collector.js +11 -2
- package/dist/src/debug/query_collector.d.ts +2 -0
- package/dist/src/debug/query_collector.d.ts.map +1 -1
- package/dist/src/debug/query_collector.js +11 -0
- package/dist/src/debug/ring_buffer.d.ts +3 -0
- package/dist/src/debug/ring_buffer.d.ts.map +1 -1
- package/dist/src/debug/ring_buffer.js +6 -0
- package/dist/src/debug/trace_collector.d.ts +4 -2
- package/dist/src/debug/trace_collector.d.ts.map +1 -1
- package/dist/src/debug/trace_collector.js +7 -2
- package/dist/src/debug/types.d.ts +8 -0
- package/dist/src/debug/types.d.ts.map +1 -1
- package/dist/src/edge/client/dashboard.css +1504 -0
- package/dist/src/edge/client/dashboard.js +2378 -0
- package/dist/src/edge/client/debug-panel.css +530 -110
- package/dist/src/edge/client/debug-panel.js +663 -22
- package/dist/src/edge/client/stats-bar.css +115 -41
- package/dist/src/edge/client/stats-bar.js +37 -3
- package/dist/src/edge/plugin.d.ts.map +1 -1
- package/dist/src/edge/plugin.js +21 -0
- package/dist/src/edge/views/dashboard.edge +382 -0
- package/dist/src/edge/views/debug-panel.edge +60 -14
- package/dist/src/edge/views/stats-bar.edge +9 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/middleware/request_tracking_middleware.d.ts +20 -0
- package/dist/src/middleware/request_tracking_middleware.d.ts.map +1 -1
- package/dist/src/middleware/request_tracking_middleware.js +66 -2
- package/dist/src/provider/server_stats_provider.d.ts +13 -0
- package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
- package/dist/src/provider/server_stats_provider.js +175 -1
- package/dist/src/types.d.ts +42 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +14 -1
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Server Stats Dashboard</title>
|
|
7
|
+
<style>{{{ css }}}</style>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="ss-dash" data-path="{{ dashboardPath }}" data-tracing="{{ showTracing ? '1' : '0' }}">
|
|
11
|
+
|
|
12
|
+
{{-- ── Header ──────────────────────────────────────────────── --}}
|
|
13
|
+
<div class="ss-dash-header">
|
|
14
|
+
<div class="ss-dash-header-left">
|
|
15
|
+
<span class="ss-dash-logo">Server Stats</span>
|
|
16
|
+
<span class="ss-dash-logo-sub">Dashboard</span>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="ss-dash-header-center">
|
|
19
|
+
<span class="ss-dash-live-dot" id="ss-dash-live-dot"></span>
|
|
20
|
+
<span class="ss-dash-live-label" id="ss-dash-live-label">Polling</span>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="ss-dash-header-right">
|
|
23
|
+
<button type="button" class="ss-dash-theme-btn" id="ss-dash-theme-btn" title="Toggle theme">☽</button>
|
|
24
|
+
<a href="/" class="ss-dash-back-link" title="Back to app">← App</a>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
{{-- ── Body: Sidebar + Main ────────────────────────────────── --}}
|
|
29
|
+
<div class="ss-dash-body">
|
|
30
|
+
|
|
31
|
+
{{-- ── Sidebar ─────────────────────────────────────────────── --}}
|
|
32
|
+
<div class="ss-dash-sidebar" id="ss-dash-sidebar">
|
|
33
|
+
<nav class="ss-dash-nav">
|
|
34
|
+
|
|
35
|
+
{{-- Overview --}}
|
|
36
|
+
<button type="button" class="ss-dash-nav-item ss-dash-active" data-ss-section="overview">
|
|
37
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg></span>
|
|
38
|
+
<span class="ss-dash-nav-label">Overview</span>
|
|
39
|
+
</button>
|
|
40
|
+
|
|
41
|
+
{{-- Requests --}}
|
|
42
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="requests">
|
|
43
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg></span>
|
|
44
|
+
<span class="ss-dash-nav-label">Requests</span>
|
|
45
|
+
<span class="ss-dash-nav-badge" id="ss-dash-badge-requests"></span>
|
|
46
|
+
</button>
|
|
47
|
+
|
|
48
|
+
{{-- Queries --}}
|
|
49
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="queries">
|
|
50
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg></span>
|
|
51
|
+
<span class="ss-dash-nav-label">Queries</span>
|
|
52
|
+
<span class="ss-dash-nav-badge" id="ss-dash-badge-queries"></span>
|
|
53
|
+
</button>
|
|
54
|
+
|
|
55
|
+
{{-- Events --}}
|
|
56
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="events">
|
|
57
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg></span>
|
|
58
|
+
<span class="ss-dash-nav-label">Events</span>
|
|
59
|
+
</button>
|
|
60
|
+
|
|
61
|
+
{{-- Routes --}}
|
|
62
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="routes">
|
|
63
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></span>
|
|
64
|
+
<span class="ss-dash-nav-label">Routes</span>
|
|
65
|
+
</button>
|
|
66
|
+
|
|
67
|
+
{{-- Logs --}}
|
|
68
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="logs">
|
|
69
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></svg></span>
|
|
70
|
+
<span class="ss-dash-nav-label">Logs</span>
|
|
71
|
+
<span class="ss-dash-nav-badge ss-dash-badge-red" id="ss-dash-badge-logs"></span>
|
|
72
|
+
</button>
|
|
73
|
+
|
|
74
|
+
{{-- Emails --}}
|
|
75
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="emails">
|
|
76
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><path d="M22 6l-10 7L2 6"/></svg></span>
|
|
77
|
+
<span class="ss-dash-nav-label">Emails</span>
|
|
78
|
+
</button>
|
|
79
|
+
|
|
80
|
+
{{-- Timeline (if tracing) --}}
|
|
81
|
+
@if(showTracing)
|
|
82
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="timeline">
|
|
83
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><line x1="12" y1="20" x2="12" y2="10"/><line x1="18" y1="20" x2="18" y2="4"/><line x1="6" y1="20" x2="6" y2="16"/></svg></span>
|
|
84
|
+
<span class="ss-dash-nav-label">Timeline</span>
|
|
85
|
+
</button>
|
|
86
|
+
@end
|
|
87
|
+
|
|
88
|
+
{{-- Cache --}}
|
|
89
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="cache">
|
|
90
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><path d="M22 12H2"/><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/><line x1="6" y1="16" x2="6.01" y2="16"/><line x1="10" y1="16" x2="10.01" y2="16"/></svg></span>
|
|
91
|
+
<span class="ss-dash-nav-label">Cache</span>
|
|
92
|
+
</button>
|
|
93
|
+
|
|
94
|
+
{{-- Jobs --}}
|
|
95
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="jobs">
|
|
96
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg></span>
|
|
97
|
+
<span class="ss-dash-nav-label">Jobs</span>
|
|
98
|
+
</button>
|
|
99
|
+
|
|
100
|
+
{{-- Config --}}
|
|
101
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="config">
|
|
102
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg></span>
|
|
103
|
+
<span class="ss-dash-nav-label">Config</span>
|
|
104
|
+
</button>
|
|
105
|
+
|
|
106
|
+
{{-- Separator before custom panes --}}
|
|
107
|
+
@if(customPanes && customPanes.length)
|
|
108
|
+
<div class="ss-dash-nav-sep"></div>
|
|
109
|
+
@each(pane in customPanes)
|
|
110
|
+
<button type="button" class="ss-dash-nav-item" data-ss-section="{{ pane.id }}">
|
|
111
|
+
<span class="ss-dash-nav-icon"><svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 3v18"/></svg></span>
|
|
112
|
+
<span class="ss-dash-nav-label">{{ pane.label }}</span>
|
|
113
|
+
</button>
|
|
114
|
+
@end
|
|
115
|
+
@end
|
|
116
|
+
|
|
117
|
+
</nav>
|
|
118
|
+
|
|
119
|
+
{{-- Collapse toggle --}}
|
|
120
|
+
<button type="button" class="ss-dash-sidebar-toggle" id="ss-dash-sidebar-toggle" title="Toggle sidebar">
|
|
121
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M15 18l-6-6 6-6"/></svg>
|
|
122
|
+
</button>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
{{-- ── Main content ──────────────────────────────────────── --}}
|
|
126
|
+
<div class="ss-dash-main">
|
|
127
|
+
|
|
128
|
+
{{-- ═══ Overview ═══ --}}
|
|
129
|
+
<div id="ss-dash-pane-overview" class="ss-dash-pane ss-dash-active">
|
|
130
|
+
<div id="ss-dash-overview-content">
|
|
131
|
+
<div class="ss-dash-empty">Loading overview...</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
{{-- ═══ Requests ═══ --}}
|
|
136
|
+
<div id="ss-dash-pane-requests" class="ss-dash-pane">
|
|
137
|
+
<div class="ss-dash-pane-inner">
|
|
138
|
+
<div id="ss-dash-requests-list" class="ss-dash-list-view">
|
|
139
|
+
<div class="ss-dash-search-bar">
|
|
140
|
+
<span id="ss-dash-requests-summary" class="ss-dash-summary"></span>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="ss-dash-table-wrap" id="ss-dash-requests-body">
|
|
143
|
+
<div class="ss-dash-empty">Loading requests...</div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-requests"></div>
|
|
146
|
+
</div>
|
|
147
|
+
<div id="ss-dash-requests-detail" class="ss-dash-detail-view">
|
|
148
|
+
<div class="ss-dash-tl-detail-header">
|
|
149
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-requests-back">← Back</button>
|
|
150
|
+
<span id="ss-dash-requests-detail-title" class="ss-dash-summary"></span>
|
|
151
|
+
</div>
|
|
152
|
+
<div id="ss-dash-requests-waterfall" class="ss-dash-tl-waterfall"></div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
{{-- ═══ Queries ═══ --}}
|
|
158
|
+
<div id="ss-dash-pane-queries" class="ss-dash-pane">
|
|
159
|
+
<div class="ss-dash-pane-inner">
|
|
160
|
+
<div class="ss-dash-search-bar">
|
|
161
|
+
<span id="ss-dash-queries-summary" class="ss-dash-summary"></span>
|
|
162
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-queries-group-btn">Grouped</button>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="ss-dash-table-wrap" id="ss-dash-queries-body">
|
|
165
|
+
<div class="ss-dash-empty">Loading queries...</div>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-queries"></div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
{{-- ═══ Events ═══ --}}
|
|
172
|
+
<div id="ss-dash-pane-events" class="ss-dash-pane">
|
|
173
|
+
<div class="ss-dash-pane-inner">
|
|
174
|
+
<div class="ss-dash-search-bar">
|
|
175
|
+
<span id="ss-dash-events-summary" class="ss-dash-summary"></span>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="ss-dash-table-wrap" id="ss-dash-events-body">
|
|
178
|
+
<div class="ss-dash-empty">Loading events...</div>
|
|
179
|
+
</div>
|
|
180
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-events"></div>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
{{-- ═══ Routes ═══ --}}
|
|
185
|
+
<div id="ss-dash-pane-routes" class="ss-dash-pane">
|
|
186
|
+
<div class="ss-dash-pane-inner">
|
|
187
|
+
<div class="ss-dash-search-bar">
|
|
188
|
+
<span id="ss-dash-routes-summary" class="ss-dash-summary"></span>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="ss-dash-table-wrap" id="ss-dash-routes-body">
|
|
191
|
+
<div class="ss-dash-empty">Loading routes...</div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
{{-- ═══ Logs ═══ --}}
|
|
197
|
+
<div id="ss-dash-pane-logs" class="ss-dash-pane">
|
|
198
|
+
<div class="ss-dash-pane-inner">
|
|
199
|
+
{{-- Level filters --}}
|
|
200
|
+
<div class="ss-dash-log-filters">
|
|
201
|
+
<button type="button" class="ss-dash-log-filter ss-dash-active" data-ss-log-level="all">All</button>
|
|
202
|
+
<button type="button" class="ss-dash-log-filter" data-ss-log-level="error">Error</button>
|
|
203
|
+
<button type="button" class="ss-dash-log-filter" data-ss-log-level="warn">Warn</button>
|
|
204
|
+
<button type="button" class="ss-dash-log-filter" data-ss-log-level="info">Info</button>
|
|
205
|
+
<button type="button" class="ss-dash-log-filter" data-ss-log-level="debug">Debug</button>
|
|
206
|
+
<input type="text" class="ss-dash-search ss-dash-reqid-input" id="ss-dash-log-reqid-input" placeholder="Filter by request ID..." />
|
|
207
|
+
<button type="button" class="ss-dash-btn ss-dash-reqid-clear" id="ss-dash-log-reqid-clear" style="display:none">Clear</button>
|
|
208
|
+
</div>
|
|
209
|
+
{{-- Structured search --}}
|
|
210
|
+
<div class="ss-dash-structured-search">
|
|
211
|
+
<select class="ss-dash-filter-select" id="ss-dash-log-filter-field">
|
|
212
|
+
<option value="level">level</option>
|
|
213
|
+
<option value="message">message</option>
|
|
214
|
+
<option value="request_id">request_id</option>
|
|
215
|
+
<option value="userId">userId</option>
|
|
216
|
+
<option value="email">email</option>
|
|
217
|
+
<option value="path">path</option>
|
|
218
|
+
</select>
|
|
219
|
+
<select class="ss-dash-filter-select" id="ss-dash-log-filter-op">
|
|
220
|
+
<option value="equals">equals</option>
|
|
221
|
+
<option value="contains">contains</option>
|
|
222
|
+
<option value="starts_with">starts with</option>
|
|
223
|
+
</select>
|
|
224
|
+
<input type="text" class="ss-dash-filter-input" id="ss-dash-log-filter-value" placeholder="Value..." />
|
|
225
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-log-add-filter">Add Filter</button>
|
|
226
|
+
<div class="ss-dash-filter-chips" id="ss-dash-log-filter-chips"></div>
|
|
227
|
+
<div class="ss-dash-saved-filters">
|
|
228
|
+
<select class="ss-dash-saved-select" id="ss-dash-log-saved-select">
|
|
229
|
+
<option value="">Saved Filters...</option>
|
|
230
|
+
</select>
|
|
231
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-log-save-filter">Save</button>
|
|
232
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-log-delete-filter">Delete</button>
|
|
233
|
+
</div>
|
|
234
|
+
</div>
|
|
235
|
+
{{-- Log entries --}}
|
|
236
|
+
<div class="ss-dash-log-entries" id="ss-dash-logs-body">
|
|
237
|
+
<div class="ss-dash-empty">Loading logs...</div>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-logs"></div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
|
|
243
|
+
{{-- ═══ Emails ═══ --}}
|
|
244
|
+
<div id="ss-dash-pane-emails" class="ss-dash-pane">
|
|
245
|
+
<div class="ss-dash-pane-inner" style="position:relative">
|
|
246
|
+
<div class="ss-dash-search-bar">
|
|
247
|
+
<span id="ss-dash-emails-summary" class="ss-dash-summary"></span>
|
|
248
|
+
</div>
|
|
249
|
+
<div class="ss-dash-table-wrap" id="ss-dash-emails-body">
|
|
250
|
+
<div class="ss-dash-empty">Loading emails...</div>
|
|
251
|
+
</div>
|
|
252
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-emails"></div>
|
|
253
|
+
{{-- Email preview overlay --}}
|
|
254
|
+
<div id="ss-dash-email-preview" class="ss-dash-email-preview" style="display:none">
|
|
255
|
+
<div class="ss-dash-email-preview-header">
|
|
256
|
+
<div id="ss-dash-email-preview-meta" class="ss-dash-email-preview-meta"></div>
|
|
257
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-email-preview-close">Close</button>
|
|
258
|
+
</div>
|
|
259
|
+
<iframe id="ss-dash-email-iframe" class="ss-dash-email-iframe" sandbox="allow-same-origin" src="about:blank"></iframe>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
{{-- ═══ Timeline ═══ --}}
|
|
265
|
+
@if(showTracing)
|
|
266
|
+
<div id="ss-dash-pane-timeline" class="ss-dash-pane">
|
|
267
|
+
<div class="ss-dash-pane-inner">
|
|
268
|
+
<div id="ss-dash-timeline-list" class="ss-dash-list-view">
|
|
269
|
+
<div class="ss-dash-search-bar">
|
|
270
|
+
<span id="ss-dash-timeline-summary" class="ss-dash-summary"></span>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="ss-dash-table-wrap" id="ss-dash-timeline-body">
|
|
273
|
+
<div class="ss-dash-empty">Loading traces...</div>
|
|
274
|
+
</div>
|
|
275
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-timeline"></div>
|
|
276
|
+
</div>
|
|
277
|
+
<div id="ss-dash-timeline-detail" class="ss-dash-detail-view">
|
|
278
|
+
<div class="ss-dash-tl-detail-header">
|
|
279
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-timeline-back">← Back</button>
|
|
280
|
+
<span id="ss-dash-timeline-detail-title" class="ss-dash-summary"></span>
|
|
281
|
+
</div>
|
|
282
|
+
<div id="ss-dash-timeline-waterfall" class="ss-dash-tl-waterfall"></div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
@end
|
|
287
|
+
|
|
288
|
+
{{-- ═══ Cache ═══ --}}
|
|
289
|
+
<div id="ss-dash-pane-cache" class="ss-dash-pane">
|
|
290
|
+
<div class="ss-dash-pane-inner">
|
|
291
|
+
<div id="ss-dash-cache-stats-area"></div>
|
|
292
|
+
<div class="ss-dash-table-wrap" id="ss-dash-cache-body">
|
|
293
|
+
<div class="ss-dash-empty">Loading cache...</div>
|
|
294
|
+
</div>
|
|
295
|
+
<div id="ss-dash-cache-detail"></div>
|
|
296
|
+
</div>
|
|
297
|
+
</div>
|
|
298
|
+
|
|
299
|
+
{{-- ═══ Jobs ═══ --}}
|
|
300
|
+
<div id="ss-dash-pane-jobs" class="ss-dash-pane">
|
|
301
|
+
<div class="ss-dash-pane-inner">
|
|
302
|
+
<div id="ss-dash-jobs-stats-area"></div>
|
|
303
|
+
<div class="ss-dash-search-bar">
|
|
304
|
+
<div class="ss-dash-btn-group">
|
|
305
|
+
<button type="button" class="ss-dash-btn ss-dash-active" data-ss-job-status="">All</button>
|
|
306
|
+
<button type="button" class="ss-dash-btn" data-ss-job-status="active">Active</button>
|
|
307
|
+
<button type="button" class="ss-dash-btn" data-ss-job-status="waiting">Waiting</button>
|
|
308
|
+
<button type="button" class="ss-dash-btn" data-ss-job-status="completed">Completed</button>
|
|
309
|
+
<button type="button" class="ss-dash-btn" data-ss-job-status="failed">Failed</button>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
<div class="ss-dash-table-wrap" id="ss-dash-jobs-body">
|
|
313
|
+
<div class="ss-dash-empty">Loading jobs...</div>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="ss-dash-pagination" id="ss-dash-pagination-jobs"></div>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
|
|
319
|
+
{{-- ═══ Config ═══ --}}
|
|
320
|
+
<div id="ss-dash-pane-config" class="ss-dash-pane">
|
|
321
|
+
<div class="ss-dash-pane-inner">
|
|
322
|
+
<div class="ss-dash-search-bar">
|
|
323
|
+
<div class="ss-dash-btn-group">
|
|
324
|
+
<button class="ss-dash-btn ss-dash-active" data-config-tab="config">App Config</button>
|
|
325
|
+
<button class="ss-dash-btn" data-config-tab="env">Env Vars</button>
|
|
326
|
+
</div>
|
|
327
|
+
<input type="text" class="ss-dash-search" id="ss-dash-config-search" placeholder="Search keys and values..." />
|
|
328
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-config-expand-all">Expand All</button>
|
|
329
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-config-collapse-all">Collapse All</button>
|
|
330
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-config-copy">Copy JSON</button>
|
|
331
|
+
</div>
|
|
332
|
+
<div id="ss-dash-config-body">
|
|
333
|
+
<div class="ss-dash-empty">Loading config...</div>
|
|
334
|
+
</div>
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
|
|
338
|
+
{{-- ═══ Custom Panes ═══ --}}
|
|
339
|
+
@each(pane in customPanes)
|
|
340
|
+
<div id="ss-dash-pane-{{ pane.id }}" class="ss-dash-pane">
|
|
341
|
+
<div class="ss-dash-pane-inner">
|
|
342
|
+
@if(pane.search || pane.clearable)
|
|
343
|
+
<div class="ss-dash-search-bar">
|
|
344
|
+
@if(pane.search)
|
|
345
|
+
<input type="text" class="ss-dash-search" id="ss-dash-search-{{ pane.id }}" placeholder="{{ pane.search.placeholder || 'Filter...' }}" />
|
|
346
|
+
@end
|
|
347
|
+
<span id="ss-dash-{{ pane.id }}-summary" class="ss-dash-summary"></span>
|
|
348
|
+
@if(pane.clearable)
|
|
349
|
+
<button type="button" class="ss-dash-btn" id="ss-dash-{{ pane.id }}-clear">Clear</button>
|
|
350
|
+
@end
|
|
351
|
+
</div>
|
|
352
|
+
@end
|
|
353
|
+
<div class="ss-dash-table-wrap" id="ss-dash-{{ pane.id }}-body">
|
|
354
|
+
<div class="ss-dash-empty">Loading {{ pane.label }}...</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
@end
|
|
359
|
+
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
|
|
364
|
+
{{-- ── Config JSON ────────────────────────────────────────────── --}}
|
|
365
|
+
<script type="application/json" id="ss-dash-config">{{{ JSON.stringify(dashConfig) }}}</script>
|
|
366
|
+
|
|
367
|
+
{{-- ── Transmit client (enables real-time updates if installed) ── --}}
|
|
368
|
+
@if(transmitClient)
|
|
369
|
+
<script>
|
|
370
|
+
try {
|
|
371
|
+
{{{ transmitClient }}}
|
|
372
|
+
console.log('[server-stats] Transmit client initialized, window.Transmit =', typeof window.Transmit);
|
|
373
|
+
} catch(e) {
|
|
374
|
+
console.warn('[server-stats] Transmit client failed to load:', e.message || e);
|
|
375
|
+
}
|
|
376
|
+
</script>
|
|
377
|
+
@end
|
|
378
|
+
|
|
379
|
+
{{-- ── Dashboard JS ───────────────────────────────────────────── --}}
|
|
380
|
+
<script>{{{ js }}}</script>
|
|
381
|
+
</body>
|
|
382
|
+
</html>
|
|
@@ -1,20 +1,35 @@
|
|
|
1
|
-
<div id="ss-dbg-panel" class="ss-dbg-panel" data-logs-endpoint="{{ logsEndpoint }}" data-tracing="{{ showTracing ? '1' : '0' }}">
|
|
1
|
+
<div id="ss-dbg-panel" class="ss-dbg-panel" data-logs-endpoint="{{ logsEndpoint }}" data-tracing="{{ showTracing ? '1' : '0' }}"@if(dashboardPath) data-dashboard-path="{{ dashboardPath }}"@end>
|
|
2
2
|
<div class="ss-dbg-tabs">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
<div class="ss-dbg-tabs-scroll">
|
|
4
|
+
@if(showTracing)
|
|
5
|
+
<button type="button" class="ss-dbg-tab ss-dbg-active" data-ss-dbg-tab="timeline"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><line x1="12" y1="20" x2="12" y2="10"/><line x1="18" y1="20" x2="18" y2="4"/><line x1="6" y1="20" x2="6" y2="16"/></svg>Timeline</button>
|
|
6
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="queries"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>Queries</button>
|
|
7
|
+
@else
|
|
8
|
+
<button type="button" class="ss-dbg-tab ss-dbg-active" data-ss-dbg-tab="queries"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>Queries</button>
|
|
9
|
+
@end
|
|
10
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="events"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/></svg>Events</button>
|
|
11
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="routes"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Routes</button>
|
|
12
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="logs"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></svg>Logs</button>
|
|
13
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="emails"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><path d="M22 6l-10 7L2 6"/></svg>Emails</button>
|
|
14
|
+
@if(dashboardPath)
|
|
15
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="cache"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><path d="M22 12H2"/><path d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/><line x1="6" y1="16" x2="6.01" y2="16"/><line x1="10" y1="16" x2="10.01" y2="16"/></svg>Cache</button>
|
|
16
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="jobs"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><rect x="2" y="7" width="20" height="14" rx="2" ry="2"/><path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/></svg>Jobs</button>
|
|
17
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="config"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>Config</button>
|
|
18
|
+
@end
|
|
19
|
+
@each(pane in customPanes)
|
|
20
|
+
<button type="button" class="ss-dbg-tab" data-ss-dbg-tab="{{ pane.id }}"><svg class="ss-dbg-tab-icon" viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M9 3v18"/></svg>{{ pane.label }}</button>
|
|
21
|
+
@end
|
|
22
|
+
</div>
|
|
16
23
|
<div class="ss-dbg-tabs-right">
|
|
24
|
+
<span id="ss-dbg-conn-mode" class="ss-dbg-conn-mode ss-dbg-conn-polling" title="Polling">polling</span>
|
|
17
25
|
<span id="ss-dbg-query-badge" class="ss-dbg-summary"></span>
|
|
26
|
+
<button type="button" class="ss-dbg-theme-toggle" id="ss-dbg-theme-btn" title="Toggle theme">☀</button>
|
|
27
|
+
@if(dashboardPath)
|
|
28
|
+
<span id="ss-dbg-mini-stats" class="ss-dbg-mini-stats"></span>
|
|
29
|
+
<a href="{{ dashboardPath }}" target="_blank" class="ss-dbg-dashboard-link" id="ss-dbg-dashboard-link" title="Open full dashboard">
|
|
30
|
+
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
|
31
|
+
</a>
|
|
32
|
+
@end
|
|
18
33
|
<button type="button" class="ss-dbg-close" id="ss-dbg-close" title="Close debug panel">×</button>
|
|
19
34
|
</div>
|
|
20
35
|
</div>
|
|
@@ -87,6 +102,37 @@
|
|
|
87
102
|
<iframe id="ss-dbg-email-iframe" class="ss-dbg-email-iframe" sandbox="allow-same-origin" src="about:blank"></iframe>
|
|
88
103
|
</div>
|
|
89
104
|
</div>
|
|
105
|
+
@if(dashboardPath)
|
|
106
|
+
<div id="ss-dbg-pane-cache" class="ss-dbg-pane">
|
|
107
|
+
<div id="ss-dbg-cache-stats-area" class="ss-dbg-cache-stats"></div>
|
|
108
|
+
<div class="ss-dbg-search-bar">
|
|
109
|
+
<input type="text" class="ss-dbg-search" id="ss-dbg-search-cache" placeholder="Filter cache keys..." />
|
|
110
|
+
<span id="ss-dbg-cache-summary" class="ss-dbg-summary"></span>
|
|
111
|
+
</div>
|
|
112
|
+
<div id="ss-dbg-cache-body"><div class="ss-dbg-empty">Loading cache...</div></div>
|
|
113
|
+
</div>
|
|
114
|
+
<div id="ss-dbg-pane-jobs" class="ss-dbg-pane">
|
|
115
|
+
<div id="ss-dbg-jobs-stats-area" class="ss-dbg-job-stats-area"></div>
|
|
116
|
+
<div class="ss-dbg-search-bar">
|
|
117
|
+
<button type="button" class="ss-dbg-job-filter ss-dbg-active" data-ss-dbg-job-status="all">All</button>
|
|
118
|
+
<button type="button" class="ss-dbg-job-filter" data-ss-dbg-job-status="completed">Completed</button>
|
|
119
|
+
<button type="button" class="ss-dbg-job-filter" data-ss-dbg-job-status="failed">Failed</button>
|
|
120
|
+
<button type="button" class="ss-dbg-job-filter" data-ss-dbg-job-status="active">Active</button>
|
|
121
|
+
<button type="button" class="ss-dbg-job-filter" data-ss-dbg-job-status="waiting">Waiting</button>
|
|
122
|
+
<span id="ss-dbg-jobs-summary" class="ss-dbg-summary"></span>
|
|
123
|
+
</div>
|
|
124
|
+
<div id="ss-dbg-jobs-body"><div class="ss-dbg-empty">Loading jobs...</div></div>
|
|
125
|
+
</div>
|
|
126
|
+
<div id="ss-dbg-pane-config" class="ss-dbg-pane">
|
|
127
|
+
<div class="ss-dbg-search-bar">
|
|
128
|
+
<button type="button" class="ss-dbg-config-tab ss-dbg-active" data-ss-dbg-config-tab="config">App Config</button>
|
|
129
|
+
<button type="button" class="ss-dbg-config-tab" data-ss-dbg-config-tab="env">Env Vars</button>
|
|
130
|
+
<input type="text" class="ss-dbg-search" id="ss-dbg-search-config" placeholder="Search config keys..." />
|
|
131
|
+
<span id="ss-dbg-config-summary" class="ss-dbg-summary"></span>
|
|
132
|
+
</div>
|
|
133
|
+
<div id="ss-dbg-config-body"><div class="ss-dbg-empty">Loading config...</div></div>
|
|
134
|
+
</div>
|
|
135
|
+
@end
|
|
90
136
|
@each(pane in customPanes)
|
|
91
137
|
<div id="ss-dbg-pane-{{ pane.id }}" class="ss-dbg-pane">
|
|
92
138
|
@if(pane.search || pane.clearable)
|
|
@@ -43,5 +43,14 @@
|
|
|
43
43
|
@if(showDebug)
|
|
44
44
|
<style>{{{ debugCss }}}</style>
|
|
45
45
|
@include('ss::debug-panel')
|
|
46
|
+
@if(transmitClient)
|
|
47
|
+
<script>
|
|
48
|
+
try {
|
|
49
|
+
if (typeof window.Transmit === 'undefined') {
|
|
50
|
+
{{{ transmitClient }}}
|
|
51
|
+
}
|
|
52
|
+
} catch(e) { /* Transmit client failed to load */ }
|
|
53
|
+
</script>
|
|
54
|
+
@end
|
|
46
55
|
<script type="module">{{{ debugJs }}}</script>
|
|
47
56
|
@end
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ export { defineConfig } from './define_config.js';
|
|
|
2
2
|
export { StatsEngine } from './engine/stats_engine.js';
|
|
3
3
|
export { RequestMetrics } from './engine/request_metrics.js';
|
|
4
4
|
export { trace } from './debug/trace_collector.js';
|
|
5
|
+
export { DashboardStore } from './dashboard/dashboard_store.js';
|
|
5
6
|
export type { MetricCollector } from './collectors/collector.js';
|
|
6
7
|
export type { MetricValue, ServerStats, ServerStatsConfig, LogStats, DevToolbarOptions } from './types.js';
|
|
7
8
|
export type { DebugPane, DebugPaneColumn, DebugPaneFormatType, DebugPaneSearch, BadgeColor, QueryRecord, EventRecord, EmailRecord, RouteRecord, TraceSpan, TraceRecord, DevToolbarConfig, } from './debug/types.js';
|
|
9
|
+
export type { RequestFilters, QueryFilters, EventFilters, EmailFilters, LogFilters, TraceFilters, PaginatedResult, } from './dashboard/dashboard_store.js';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC1G,YAAY,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC1G,YAAY,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,gCAAgC,CAAA"}
|
package/dist/src/index.js
CHANGED
|
@@ -2,3 +2,4 @@ export { defineConfig } from './define_config.js';
|
|
|
2
2
|
export { StatsEngine } from './engine/stats_engine.js';
|
|
3
3
|
export { RequestMetrics } from './engine/request_metrics.js';
|
|
4
4
|
export { trace } from './debug/trace_collector.js';
|
|
5
|
+
export { DashboardStore } from './dashboard/dashboard_store.js';
|
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
import type { HttpContext } from "@adonisjs/core/http";
|
|
2
2
|
import type { NextFn } from "@adonisjs/core/types/http";
|
|
3
3
|
import type { TraceCollector } from "../debug/trace_collector.js";
|
|
4
|
+
import type { TraceRecord } from "../debug/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Returns true if the current async context is inside an excluded request
|
|
7
|
+
* (e.g. a debug panel polling request). Used by collectors to skip
|
|
8
|
+
* self-generated data.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isExcludedRequest(): boolean;
|
|
4
11
|
export declare function setShouldShow(fn: ((ctx: any) => boolean) | null): void;
|
|
5
12
|
export declare function setTraceCollector(collector: TraceCollector | null): void;
|
|
13
|
+
export declare function setDashboardPath(path: string | null): void;
|
|
14
|
+
export declare function setExcludedPrefixes(prefixes: string[]): void;
|
|
15
|
+
/**
|
|
16
|
+
* Data passed to the onRequestComplete callback.
|
|
17
|
+
*/
|
|
18
|
+
export interface RequestCompleteData {
|
|
19
|
+
method: string;
|
|
20
|
+
url: string;
|
|
21
|
+
statusCode: number;
|
|
22
|
+
duration: number;
|
|
23
|
+
trace?: TraceRecord;
|
|
24
|
+
}
|
|
25
|
+
export declare function setOnRequestComplete(fn: ((data: RequestCompleteData) => void) | null): void;
|
|
6
26
|
export default class RequestTrackingMiddleware {
|
|
7
27
|
handle(ctx: HttpContext, next: NextFn): Promise<void>;
|
|
8
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request_tracking_middleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/request_tracking_middleware.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request_tracking_middleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/request_tracking_middleware.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AASrD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAOD,wBAAgB,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,QAE/D;AAOD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,QAEjE;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,QAEnD;AASD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAErD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAQD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,QAGjD;AAED,MAAM,CAAC,OAAO,OAAO,yBAAyB;IACtC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;CAsE5C"}
|