adonisjs-server-stats 1.8.0 → 1.10.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.
Files changed (91) hide show
  1. package/dist/core/index.js +24 -22
  2. package/dist/core/log-utils.d.ts +14 -0
  3. package/dist/core/split-pane.d.ts +18 -0
  4. package/dist/core/trace-utils.d.ts +5 -0
  5. package/dist/core/types.d.ts +1 -1
  6. package/dist/react/{CacheSection-D5J5moz7.js → CacheSection-UCMptWyn.js} +1 -1
  7. package/dist/react/{CacheTab-F1MkWSZl.js → CacheTab-CA8LB1J5.js} +1 -1
  8. package/dist/react/{ConfigSection-DerLBu4o.js → ConfigSection-DfFd-WRq.js} +1 -1
  9. package/dist/react/{ConfigTab-Bsj7v9JW.js → ConfigTab-Bdg8YMer.js} +1 -1
  10. package/dist/react/{CustomPaneTab-gzdtDEvz.js → CustomPaneTab-Bxtv_8Rw.js} +1 -1
  11. package/dist/react/{EmailsSection-ndH3cvJk.js → EmailsSection-CM7stSyh.js} +1 -1
  12. package/dist/react/{EmailsTab-DVPHRx0L.js → EmailsTab-BDhEiomM.js} +1 -1
  13. package/dist/react/{EventsSection-ClIByDSk.js → EventsSection-ByQ-9blq.js} +1 -1
  14. package/dist/react/{EventsTab-CCzWEKrk.js → EventsTab-CMfY98Rl.js} +1 -1
  15. package/dist/react/{JobsSection-CVMyAs7O.js → JobsSection-DF3qEv9O.js} +1 -1
  16. package/dist/react/{JobsTab-CATUyb9V.js → JobsTab-BbrBWIOb.js} +1 -1
  17. package/dist/react/LogsSection-DcFTZY7b.js +227 -0
  18. package/dist/react/LogsTab-CicucmVk.js +103 -0
  19. package/dist/react/{OverviewSection-ae5AO2RG.js → OverviewSection-C4T1ur51.js} +1 -1
  20. package/dist/react/{QueriesSection-DFFr9Tbb.js → QueriesSection-PswteoF9.js} +1 -1
  21. package/dist/react/{QueriesTab-GrHRAREt.js → QueriesTab-osLUWd4L.js} +1 -1
  22. package/dist/react/RelatedLogs-DFDOyUMr.js +40 -0
  23. package/dist/react/RequestsSection-Nag30rEA.js +341 -0
  24. package/dist/react/{RoutesSection-F7nANhF0.js → RoutesSection-BUSkM6PY.js} +1 -1
  25. package/dist/react/{RoutesTab-rugjhCPH.js → RoutesTab-DgVzd2PZ.js} +1 -1
  26. package/dist/react/TimelineTab-Covg5weo.js +220 -0
  27. package/dist/react/{index-DDzo1bZk.js → index-Cflz9Ebj.js} +390 -395
  28. package/dist/react/index.js +1 -1
  29. package/dist/react/react/components/shared/JsonViewer.d.ts +2 -1
  30. package/dist/react/react/components/shared/RelatedLogs.d.ts +7 -0
  31. package/dist/react/style.css +1 -1
  32. package/dist/src/controller/debug_controller.js +1 -1
  33. package/dist/src/dashboard/dashboard_controller.js +13 -0
  34. package/dist/src/dashboard/dashboard_store.d.ts +1 -0
  35. package/dist/src/dashboard/dashboard_store.js +88 -41
  36. package/dist/src/dashboard/migrator.js +6 -0
  37. package/dist/src/data/data_access.d.ts +7 -0
  38. package/dist/src/data/data_access.js +32 -1
  39. package/dist/src/debug/trace_collector.d.ts +1 -1
  40. package/dist/src/debug/trace_collector.js +2 -1
  41. package/dist/src/debug/types.d.ts +4 -0
  42. package/dist/src/edge/client/dashboard.js +2 -2
  43. package/dist/src/edge/client/debug-panel-deferred.js +1 -1
  44. package/dist/src/edge/client-vue/dashboard.js +4 -4
  45. package/dist/src/edge/client-vue/debug-panel-deferred.js +3 -3
  46. package/dist/src/middleware/request_tracking_middleware.d.ts +1 -0
  47. package/dist/src/middleware/request_tracking_middleware.js +3 -1
  48. package/dist/src/provider/server_stats_provider.d.ts +3 -3
  49. package/dist/src/provider/server_stats_provider.js +29 -15
  50. package/dist/src/routes/register_routes.js +7 -2
  51. package/dist/src/styles/components.css +162 -0
  52. package/dist/src/styles/debug-panel.css +9 -0
  53. package/dist/src/types.d.ts +1 -1
  54. package/dist/vue/{CacheSection-DDvJ7bs2.js → CacheSection-oFAJL3mo.js} +2 -2
  55. package/dist/vue/{ConfigSection-GTCrvsPr.js → ConfigSection-BhfJ4KqL.js} +1 -1
  56. package/dist/vue/{EmailsSection-Ct5vsLCc.js → EmailsSection-BcNyhyHs.js} +1 -1
  57. package/dist/vue/{EventsSection-CRVhtagq.js → EventsSection-r60Q5Lmu.js} +2 -2
  58. package/dist/vue/{EventsTab-DQ4Nd6AK.js → EventsTab-BBM7olXF.js} +1 -1
  59. package/dist/vue/{JobsSection-B_wH2Co7.js → JobsSection-BHL-hkQw.js} +2 -2
  60. package/dist/vue/{JobsTab-BCvhOARO.js → JobsTab-WFnxPdN7.js} +1 -1
  61. package/dist/vue/{JsonViewer.vue_vue_type_script_setup_true_lang-Vsqar1zx.js → JsonViewer.vue_vue_type_script_setup_true_lang-Bid05zpm.js} +25 -23
  62. package/dist/vue/LogsSection-DRMGzJmg.js +252 -0
  63. package/dist/vue/LogsTab-Bg3o0Mm6.js +147 -0
  64. package/dist/vue/{OverviewSection-BqSwuMKH.js → OverviewSection-CXh6Ja1B.js} +1 -1
  65. package/dist/vue/{QueriesSection-D4Fs0YH6.js → QueriesSection-IodIsCJ-.js} +1 -1
  66. package/dist/vue/RelatedLogs.vue_vue_type_script_setup_true_lang-CB2_TzYW.js +84 -0
  67. package/dist/vue/RequestsSection-BPuMdmMc.js +401 -0
  68. package/dist/vue/{RoutesSection-Ys5dTzvF.js → RoutesSection-NKo3Rbq3.js} +1 -1
  69. package/dist/vue/TimelineTab-zj5Z5OdT.js +338 -0
  70. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +4 -0
  71. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +4 -0
  72. package/dist/vue/components/shared/JsonViewer.vue.d.ts +3 -0
  73. package/dist/vue/components/{Dashboard/sections/TimelineSection.vue.d.ts → shared/RelatedLogs.vue.d.ts} +5 -6
  74. package/dist/vue/index-Dtgysd26.js +1229 -0
  75. package/dist/vue/index.js +1 -1
  76. package/dist/vue/style.css +1 -1
  77. package/package.json +1 -1
  78. package/dist/react/LogsSection-hAsLaKOC.js +0 -212
  79. package/dist/react/LogsTab-QouH4NPQ.js +0 -88
  80. package/dist/react/RequestsSection-DtwnJOnM.js +0 -209
  81. package/dist/react/TimelineSection-F5ThmTdy.js +0 -158
  82. package/dist/react/TimelineTab-Dvpf-I5C.js +0 -193
  83. package/dist/react/WaterfallChart-Cj73WdfM.js +0 -100
  84. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +0 -8
  85. package/dist/vue/LogsSection-C4NRFOpA.js +0 -227
  86. package/dist/vue/LogsTab-DpEQ7euu.js +0 -122
  87. package/dist/vue/RequestsSection-B0A5SKcM.js +0 -243
  88. package/dist/vue/TimelineSection-D38iHB08.js +0 -186
  89. package/dist/vue/TimelineTab-Db6lKKsD.js +0 -250
  90. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +0 -118
  91. package/dist/vue/index-Bj6pm5g3.js +0 -1235
@@ -0,0 +1,220 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { useState as g, useMemo as F, useEffect as M, useCallback as E, useRef as v } from "react";
3
+ import { formatDuration as w, durationSeverity as T, timeAgo as U, formatTime as W, initSplitPane as _ } from "adonisjs-server-stats/core";
4
+ import { u as z } from "./useApiClient-BVtNCmnL.js";
5
+ import { u as G } from "./index-Cflz9Ebj.js";
6
+ import { u as V } from "./useResizableTable-CNJmACdt.js";
7
+ import { R as H } from "./RelatedLogs-DFDOyUMr.js";
8
+ function J({
9
+ children: o,
10
+ classPrefix: i = "ss-dbg",
11
+ storageKey: u
12
+ }) {
13
+ const h = v(null), d = v(null), m = v(null), c = v(null);
14
+ return M(() => {
15
+ if (h.current && d.current && m.current && c.current)
16
+ return _({
17
+ container: h.current,
18
+ handle: d.current,
19
+ topPane: m.current,
20
+ bottomPane: c.current,
21
+ storageKey: u
22
+ });
23
+ }, [u]), /* @__PURE__ */ t("div", { ref: h, className: `${i}-split-container`, children: [
24
+ /* @__PURE__ */ e("div", { ref: m, className: `${i}-split-top`, children: o[0] }),
25
+ /* @__PURE__ */ e("div", { ref: d, className: `${i}-split-handle` }),
26
+ /* @__PURE__ */ e("div", { ref: c, className: `${i}-split-bottom`, children: o[1] })
27
+ ] });
28
+ }
29
+ const k = {
30
+ request: "#1e3a5f",
31
+ middleware: "rgba(30, 58, 95, 0.7)",
32
+ db: "#6d28d9",
33
+ view: "#0e7490",
34
+ mail: "#059669",
35
+ event: "#b45309",
36
+ custom: "#525252"
37
+ }, K = [
38
+ { label: "Request", color: "#1e3a5f" },
39
+ { label: "Middleware", color: "rgba(30, 58, 95, 0.7)" },
40
+ { label: "Database", color: "#6d28d9" },
41
+ { label: "View", color: "#0e7490" },
42
+ { label: "Mail", color: "#059669" },
43
+ { label: "Event", color: "#b45309" }
44
+ ];
45
+ function le({ options: o }) {
46
+ const { baseUrl: i = "", debugEndpoint: u = "/admin/api/debug", authToken: h } = o || {}, { data: d, isLoading: m, error: c } = G("timeline", o), [b, A] = g(""), [p, y] = g(null), [a, L] = g(null), [q, C] = g(!1), [D, x] = g(null), f = F(() => {
47
+ const s = d?.traces || [];
48
+ if (!b) return s;
49
+ const n = b.toLowerCase();
50
+ return s.filter(
51
+ (r) => r.url.toLowerCase().includes(n) || r.method.toLowerCase().includes(n) || String(r.statusCode).includes(n)
52
+ );
53
+ }, [d, b]), $ = z(i, h);
54
+ M(() => {
55
+ if (p === null) {
56
+ L(null), x(null);
57
+ return;
58
+ }
59
+ let s = !1;
60
+ return C(!0), x(null), $().get(`${u}/traces/${p}`).then((r) => {
61
+ s || (L(r), C(!1));
62
+ }).catch((r) => {
63
+ s || (x(r instanceof Error ? r.message : "Failed to load trace"), C(!1));
64
+ }), () => {
65
+ s = !0;
66
+ };
67
+ }, [p, u, $]);
68
+ const B = E((s) => {
69
+ y((n) => n === s ? null : s);
70
+ }, []), R = E((s) => s >= 500 ? "ss-dbg-status-5xx" : s >= 400 ? "ss-dbg-status-4xx" : s >= 300 ? "ss-dbg-status-3xx" : "ss-dbg-status-2xx", []), I = V([f]);
71
+ if (m && !d)
72
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading traces..." });
73
+ if (c)
74
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-empty", children: [
75
+ "Error: ",
76
+ c.message
77
+ ] });
78
+ if (p !== null) {
79
+ if (q)
80
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading trace detail..." });
81
+ if (D)
82
+ return /* @__PURE__ */ t("div", { children: [
83
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-detail-header", children: /* @__PURE__ */ e(
84
+ "button",
85
+ {
86
+ type: "button",
87
+ className: "ss-dbg-btn-clear",
88
+ onClick: () => y(null),
89
+ children: "← Back"
90
+ }
91
+ ) }),
92
+ /* @__PURE__ */ t("div", { className: "ss-dbg-empty", children: [
93
+ "Error: ",
94
+ D
95
+ ] })
96
+ ] });
97
+ if (!a)
98
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading trace detail..." });
99
+ const s = a.spans || [], n = a.warnings || [], r = a.logs || [], O = r.length > 0, S = /* @__PURE__ */ t("div", { children: [
100
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-legend", children: K.map((l) => /* @__PURE__ */ t("div", { className: "ss-dbg-tl-legend-item", children: [
101
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-legend-dot", style: { background: l.color } }),
102
+ /* @__PURE__ */ e("span", { children: l.label })
103
+ ] }, l.label)) }),
104
+ /* @__PURE__ */ e("div", { style: { padding: "8px 12px", overflow: "auto" }, children: s.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No spans captured for this request" }) : s.map((l) => {
105
+ const N = a.totalDuration || 1, P = l.startOffset / N * 100, j = Math.max(l.duration / N * 100, 0.5);
106
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-tl-row", children: [
107
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-label", title: l.label, children: l.label }),
108
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-track", children: /* @__PURE__ */ e(
109
+ "div",
110
+ {
111
+ className: `ss-dbg-tl-bar ss-dbg-tl-bar-${l.category}`,
112
+ style: {
113
+ left: `${P}%`,
114
+ width: `${j}%`,
115
+ background: k[l.category] || k.custom
116
+ },
117
+ title: `${l.label}: ${w(l.duration)}`
118
+ }
119
+ ) }),
120
+ /* @__PURE__ */ e("span", { className: "ss-dbg-tl-dur", children: w(l.duration) })
121
+ ] }, l.id);
122
+ }) }),
123
+ n.length > 0 && /* @__PURE__ */ t("div", { className: "ss-dbg-tl-warnings", children: [
124
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-warnings-title", children: "Warnings" }),
125
+ n.map((l, N) => /* @__PURE__ */ e("div", { className: "ss-dbg-tl-warning", children: l }, N))
126
+ ] })
127
+ ] });
128
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-tl-detail-wrapper", children: [
129
+ /* @__PURE__ */ t("div", { className: "ss-dbg-tl-detail-header", children: [
130
+ /* @__PURE__ */ e(
131
+ "button",
132
+ {
133
+ type: "button",
134
+ className: "ss-dbg-btn-clear",
135
+ onClick: () => y(null),
136
+ children: "← Back"
137
+ }
138
+ ),
139
+ /* @__PURE__ */ e("span", { className: `ss-dbg-method ss-dbg-method-${a.method.toLowerCase()}`, children: a.method }),
140
+ /* @__PURE__ */ e("span", { className: "ss-dbg-tl-detail-url", children: a.url }),
141
+ /* @__PURE__ */ e("span", { className: `ss-dbg-status ${R(a.statusCode)}`, children: a.statusCode }),
142
+ /* @__PURE__ */ t("span", { className: "ss-dbg-tl-meta", children: [
143
+ w(a.totalDuration),
144
+ " · ",
145
+ a.spanCount,
146
+ " spans"
147
+ ] })
148
+ ] }),
149
+ O ? /* @__PURE__ */ t(J, { classPrefix: "ss-dbg", storageKey: "ss-dbg-timeline-split", children: [
150
+ S,
151
+ /* @__PURE__ */ e(H, { logs: r, classPrefix: "ss-dbg" })
152
+ ] }) : S
153
+ ] });
154
+ }
155
+ return /* @__PURE__ */ t("div", { children: [
156
+ /* @__PURE__ */ t("div", { className: "ss-dbg-search-bar", children: [
157
+ /* @__PURE__ */ e(
158
+ "input",
159
+ {
160
+ type: "text",
161
+ className: "ss-dbg-search",
162
+ placeholder: "Filter traces...",
163
+ value: b,
164
+ onChange: (s) => A(s.target.value)
165
+ }
166
+ ),
167
+ /* @__PURE__ */ t("span", { className: "ss-dbg-summary", children: [
168
+ f.length,
169
+ " traces"
170
+ ] })
171
+ ] }),
172
+ f.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No traces captured. Enable tracing in config." }) : /* @__PURE__ */ t("table", { ref: I, className: "ss-dbg-table", children: [
173
+ /* @__PURE__ */ t("colgroup", { children: [
174
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
175
+ /* @__PURE__ */ e("col", { style: { width: "70px" } }),
176
+ /* @__PURE__ */ e("col", {}),
177
+ /* @__PURE__ */ e("col", { style: { width: "60px" } }),
178
+ /* @__PURE__ */ e("col", { style: { width: "80px" } }),
179
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
180
+ /* @__PURE__ */ e("col", { style: { width: "80px" } })
181
+ ] }),
182
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ t("tr", { children: [
183
+ /* @__PURE__ */ e("th", { children: "#" }),
184
+ /* @__PURE__ */ e("th", { children: "Method" }),
185
+ /* @__PURE__ */ e("th", { children: "URL" }),
186
+ /* @__PURE__ */ e("th", { children: "Status" }),
187
+ /* @__PURE__ */ e("th", { children: "Duration" }),
188
+ /* @__PURE__ */ e("th", { children: "Spans" }),
189
+ /* @__PURE__ */ e("th", { children: "Time" })
190
+ ] }) }),
191
+ /* @__PURE__ */ e("tbody", { children: f.map((s) => /* @__PURE__ */ t(
192
+ "tr",
193
+ {
194
+ className: "ss-dbg-email-row",
195
+ onClick: () => B(s.id),
196
+ children: [
197
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { whiteSpace: "nowrap" }, children: s.id }),
198
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-method ss-dbg-method-${s.method.toLowerCase()}`, children: s.method }) }),
199
+ /* @__PURE__ */ e("td", { title: s.url, children: s.url }),
200
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-status ${R(s.statusCode)}`, children: s.statusCode }) }),
201
+ /* @__PURE__ */ e(
202
+ "td",
203
+ {
204
+ className: `ss-dbg-duration ${T(s.totalDuration) === "very-slow" ? "ss-dbg-very-slow" : T(s.totalDuration) === "slow" ? "ss-dbg-slow" : ""}`,
205
+ children: w(s.totalDuration)
206
+ }
207
+ ),
208
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", style: { textAlign: "center" }, children: s.spanCount }),
209
+ /* @__PURE__ */ e("td", { className: "ss-dbg-event-time", title: W(s.timestamp), children: U(s.timestamp) })
210
+ ]
211
+ },
212
+ s.id
213
+ )) })
214
+ ] })
215
+ ] });
216
+ }
217
+ export {
218
+ le as TimelineTab,
219
+ le as default
220
+ };