adonisjs-server-stats 1.9.0 → 1.10.3

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 (227) hide show
  1. package/README.md +23 -14
  2. package/dist/core/config-utils.d.ts +8 -0
  3. package/dist/core/constants.d.ts +4 -0
  4. package/dist/core/dashboard-data-controller.d.ts +16 -0
  5. package/dist/core/dashboard-data-helpers.d.ts +12 -0
  6. package/dist/core/debug-data-controller.d.ts +4 -0
  7. package/dist/core/define-config-helpers.d.ts +25 -0
  8. package/dist/core/feature-detect-helpers.d.ts +36 -0
  9. package/dist/core/formatters-helpers.d.ts +23 -0
  10. package/dist/core/index.js +596 -509
  11. package/dist/core/log-utils-helpers.d.ts +13 -0
  12. package/dist/core/metrics.d.ts +3 -28
  13. package/dist/core/pagination.d.ts +0 -9
  14. package/dist/core/server-stats-controller.d.ts +6 -0
  15. package/dist/core/split-pane.d.ts +18 -0
  16. package/dist/core/trace-utils.d.ts +5 -0
  17. package/dist/core/transmit-helpers.d.ts +7 -0
  18. package/dist/core/types-dashboard.d.ts +178 -0
  19. package/dist/core/types-diagnostics.d.ts +85 -0
  20. package/dist/core/types.d.ts +11 -443
  21. package/dist/react/{CacheSection-xH75hwXu.js → CacheSection-baMZotSn.js} +2 -2
  22. package/dist/react/CacheTab-2cw_rMzj.js +117 -0
  23. package/dist/react/{ConfigSection-D8BO1Ry9.js → ConfigSection-DGgqjAal.js} +1 -1
  24. package/dist/react/{ConfigTab-CcN-tfjv.js → ConfigTab-H3OnYqmK.js} +1 -1
  25. package/dist/react/CustomPaneTab-B6r7ha0u.js +98 -0
  26. package/dist/react/{EmailsSection-BzlsTdPs.js → EmailsSection-C-UZISG-.js} +2 -2
  27. package/dist/react/EmailsTab-DbK4Eobn.js +139 -0
  28. package/dist/react/{EventsSection-CGQWiIdV.js → EventsSection-C7RQW_LY.js} +2 -2
  29. package/dist/react/EventsTab-CfVr7AiM.js +57 -0
  30. package/dist/react/{FilterBar-DQRXpWrb.js → FilterBar-CQ7bD669.js} +15 -15
  31. package/dist/react/{JobsSection-D7AHQmZi.js → JobsSection-CQHNK_Ls.js} +2 -2
  32. package/dist/react/{JobsTab-B3Lfdqed.js → JobsTab-znzf6jzk.js} +54 -42
  33. package/dist/react/{LogsSection-Cly1dpvS.js → LogsSection-Dmm3rE2B.js} +9 -3
  34. package/dist/react/LogsTab-D8unMV5P.js +108 -0
  35. package/dist/react/{OverviewSection-CkBGFEWq.js → OverviewSection-ABP9ueBo.js} +1 -1
  36. package/dist/react/{QueriesSection-CfCpnNUD.js → QueriesSection-CnmSkznA.js} +2 -2
  37. package/dist/react/{QueriesTab-DbBmAqzO.js → QueriesTab-BQzcxEiW.js} +37 -40
  38. package/dist/react/RelatedLogs-3A8RuGKH.js +52 -0
  39. package/dist/react/RequestsSection-kW79_M7k.js +341 -0
  40. package/dist/react/{RoutesSection-CRqF-cNM.js → RoutesSection-BRhxrtjZ.js} +2 -2
  41. package/dist/react/RoutesTab-CpYH5lUw.js +68 -0
  42. package/dist/react/TimelineTab-DjLR35Ce.js +214 -0
  43. package/dist/react/index-CsImORX6.js +1121 -0
  44. package/dist/react/index.js +1 -1
  45. package/dist/react/react/components/{Dashboard/shared → shared}/FilterBar.d.ts +4 -3
  46. package/dist/react/react/components/shared/RelatedLogs.d.ts +7 -0
  47. package/dist/react/react/hooks/useDashboardData.d.ts +4 -8
  48. package/dist/react/style.css +1 -1
  49. package/dist/src/collectors/app_collector.d.ts +0 -8
  50. package/dist/src/collectors/app_collector.js +45 -52
  51. package/dist/src/collectors/auto_detect.d.ts +0 -23
  52. package/dist/src/collectors/auto_detect.js +33 -55
  53. package/dist/src/collectors/db_pool_collector.d.ts +14 -16
  54. package/dist/src/collectors/db_pool_collector.js +72 -57
  55. package/dist/src/collectors/log_collector.d.ts +0 -47
  56. package/dist/src/collectors/log_collector.js +36 -65
  57. package/dist/src/collectors/queue_collector.d.ts +0 -20
  58. package/dist/src/collectors/queue_collector.js +60 -76
  59. package/dist/src/collectors/redis_collector.d.ts +10 -10
  60. package/dist/src/collectors/redis_collector.js +69 -66
  61. package/dist/src/config/deprecation_migration.d.ts +7 -0
  62. package/dist/src/config/deprecation_migration.js +201 -0
  63. package/dist/src/controller/debug_controller.d.ts +1 -1
  64. package/dist/src/controller/debug_controller.js +87 -81
  65. package/dist/src/dashboard/cache_handlers.d.ts +14 -0
  66. package/dist/src/dashboard/cache_handlers.js +52 -0
  67. package/dist/src/dashboard/chart_aggregator.d.ts +0 -7
  68. package/dist/src/dashboard/chart_aggregator.js +68 -50
  69. package/dist/src/dashboard/coalesce_cache.d.ts +25 -0
  70. package/dist/src/dashboard/coalesce_cache.js +47 -0
  71. package/dist/src/dashboard/dashboard_controller.d.ts +11 -37
  72. package/dist/src/dashboard/dashboard_controller.js +52 -532
  73. package/dist/src/dashboard/dashboard_page_assets.d.ts +17 -0
  74. package/dist/src/dashboard/dashboard_page_assets.js +51 -0
  75. package/dist/src/dashboard/dashboard_store.d.ts +19 -217
  76. package/dist/src/dashboard/dashboard_store.js +115 -1069
  77. package/dist/src/dashboard/dashboard_types.d.ts +83 -0
  78. package/dist/src/dashboard/dashboard_types.js +4 -0
  79. package/dist/src/dashboard/detail_queries.d.ts +19 -0
  80. package/dist/src/dashboard/detail_queries.js +98 -0
  81. package/dist/src/dashboard/email_event_builder.d.ts +8 -0
  82. package/dist/src/dashboard/email_event_builder.js +65 -0
  83. package/dist/src/dashboard/explain_query.d.ts +8 -0
  84. package/dist/src/dashboard/explain_query.js +22 -0
  85. package/dist/src/dashboard/filter_handlers.d.ts +23 -0
  86. package/dist/src/dashboard/filter_handlers.js +56 -0
  87. package/dist/src/dashboard/filtered_queries.d.ts +15 -0
  88. package/dist/src/dashboard/filtered_queries.js +155 -0
  89. package/dist/src/dashboard/flush_manager.d.ts +25 -0
  90. package/dist/src/dashboard/flush_manager.js +107 -0
  91. package/dist/src/dashboard/format_helpers.d.ts +126 -0
  92. package/dist/src/dashboard/format_helpers.js +140 -0
  93. package/dist/src/dashboard/inspector_manager.d.ts +36 -0
  94. package/dist/src/dashboard/inspector_manager.js +102 -0
  95. package/dist/src/dashboard/integrations/config_inspector.js +11 -13
  96. package/dist/src/dashboard/integrations/queue_inspector.d.ts +3 -3
  97. package/dist/src/dashboard/integrations/queue_inspector.js +13 -10
  98. package/dist/src/dashboard/jobs_handlers.d.ts +14 -0
  99. package/dist/src/dashboard/jobs_handlers.js +61 -0
  100. package/dist/src/dashboard/knex_factory.d.ts +18 -0
  101. package/dist/src/dashboard/knex_factory.js +91 -0
  102. package/dist/src/dashboard/migrator.js +30 -153
  103. package/dist/src/dashboard/migrator_tables.d.ts +19 -0
  104. package/dist/src/dashboard/migrator_tables.js +153 -0
  105. package/dist/src/dashboard/overview_queries.d.ts +66 -0
  106. package/dist/src/dashboard/overview_queries.js +155 -0
  107. package/dist/src/dashboard/overview_query_runners.d.ts +25 -0
  108. package/dist/src/dashboard/overview_query_runners.js +84 -0
  109. package/dist/src/dashboard/overview_store_queries.d.ts +40 -0
  110. package/dist/src/dashboard/overview_store_queries.js +69 -0
  111. package/dist/src/dashboard/paginate_helper.d.ts +12 -0
  112. package/dist/src/dashboard/paginate_helper.js +33 -0
  113. package/dist/src/dashboard/query_explain_handler.d.ts +10 -0
  114. package/dist/src/dashboard/query_explain_handler.js +80 -0
  115. package/dist/src/dashboard/read_queries.d.ts +32 -0
  116. package/dist/src/dashboard/read_queries.js +107 -0
  117. package/dist/src/dashboard/saved_filter_queries.d.ts +10 -0
  118. package/dist/src/dashboard/saved_filter_queries.js +24 -0
  119. package/dist/src/dashboard/storage_stats.d.ts +41 -0
  120. package/dist/src/dashboard/storage_stats.js +81 -0
  121. package/dist/src/dashboard/write_queue.d.ts +106 -0
  122. package/dist/src/dashboard/write_queue.js +225 -0
  123. package/dist/src/data/data_access.d.ts +6 -36
  124. package/dist/src/data/data_access.js +43 -188
  125. package/dist/src/data/data_access_helpers.d.ts +130 -0
  126. package/dist/src/data/data_access_helpers.js +212 -0
  127. package/dist/src/debug/debug_store.js +37 -32
  128. package/dist/src/debug/email_collector.d.ts +1 -10
  129. package/dist/src/debug/email_collector.js +78 -81
  130. package/dist/src/debug/event_collector.d.ts +0 -9
  131. package/dist/src/debug/event_collector.js +79 -62
  132. package/dist/src/debug/query_collector.js +23 -19
  133. package/dist/src/debug/route_inspector.d.ts +1 -5
  134. package/dist/src/debug/route_inspector.js +50 -51
  135. package/dist/src/debug/trace_collector.d.ts +10 -2
  136. package/dist/src/debug/trace_collector.js +23 -16
  137. package/dist/src/debug/types.d.ts +5 -1
  138. package/dist/src/define_config.d.ts +0 -65
  139. package/dist/src/define_config.js +93 -333
  140. package/dist/src/edge/client/dashboard.js +2 -2
  141. package/dist/src/edge/client/debug-panel-deferred.js +1 -1
  142. package/dist/src/edge/client/stats-bar.js +1 -1
  143. package/dist/src/edge/client-vue/dashboard.js +5 -5
  144. package/dist/src/edge/client-vue/debug-panel-deferred.js +3 -3
  145. package/dist/src/edge/client-vue/stats-bar.js +3 -3
  146. package/dist/src/edge/plugin.d.ts +0 -16
  147. package/dist/src/edge/plugin.js +57 -64
  148. package/dist/src/engine/request_metrics.d.ts +1 -0
  149. package/dist/src/engine/request_metrics.js +32 -42
  150. package/dist/src/middleware/request_tracking_middleware.d.ts +3 -8
  151. package/dist/src/middleware/request_tracking_middleware.js +65 -91
  152. package/dist/src/provider/auth_middleware_detector.d.ts +16 -0
  153. package/dist/src/provider/auth_middleware_detector.js +97 -0
  154. package/dist/src/provider/boot_helpers.d.ts +20 -0
  155. package/dist/src/provider/boot_helpers.js +91 -0
  156. package/dist/src/provider/boot_initializer.d.ts +28 -0
  157. package/dist/src/provider/boot_initializer.js +35 -0
  158. package/dist/src/provider/dashboard_init.d.ts +30 -0
  159. package/dist/src/provider/dashboard_init.js +138 -0
  160. package/dist/src/provider/dashboard_setup.d.ts +25 -0
  161. package/dist/src/provider/dashboard_setup.js +78 -0
  162. package/dist/src/provider/diagnostics.d.ts +134 -0
  163. package/dist/src/provider/diagnostics.js +127 -0
  164. package/dist/src/provider/email_bridge.d.ts +43 -0
  165. package/dist/src/provider/email_bridge.js +80 -0
  166. package/dist/src/provider/email_helpers.d.ts +13 -0
  167. package/dist/src/provider/email_helpers.js +68 -0
  168. package/dist/src/provider/pino_hook.d.ts +17 -0
  169. package/dist/src/provider/pino_hook.js +35 -0
  170. package/dist/src/provider/provider_helpers_extra.d.ts +47 -0
  171. package/dist/src/provider/provider_helpers_extra.js +177 -0
  172. package/dist/src/provider/server_stats_provider.d.ts +39 -85
  173. package/dist/src/provider/server_stats_provider.js +131 -936
  174. package/dist/src/provider/shutdown_helpers.d.ts +43 -0
  175. package/dist/src/provider/shutdown_helpers.js +70 -0
  176. package/dist/src/provider/toolbar_setup.d.ts +57 -0
  177. package/dist/src/provider/toolbar_setup.js +141 -0
  178. package/dist/src/routes/dashboard_routes.d.ts +14 -0
  179. package/dist/src/routes/dashboard_routes.js +197 -0
  180. package/dist/src/routes/debug_routes.d.ts +14 -0
  181. package/dist/src/routes/debug_routes.js +101 -0
  182. package/dist/src/routes/register_routes.d.ts +0 -78
  183. package/dist/src/routes/register_routes.js +22 -347
  184. package/dist/src/routes/stats_routes.d.ts +5 -0
  185. package/dist/src/routes/stats_routes.js +14 -0
  186. package/dist/src/styles/components.css +177 -0
  187. package/dist/src/styles/dashboard.css +8 -90
  188. package/dist/src/styles/debug-panel.css +10 -31
  189. package/dist/src/types.d.ts +306 -15
  190. package/dist/vue/{CacheSection-Cx-hj09X.js → CacheSection-ITqvpfH5.js} +1 -1
  191. package/dist/vue/{ConfigSection-CMXyryf6.js → ConfigSection-DTn3GslE.js} +1 -1
  192. package/dist/vue/{EmailsSection-DgKl9xGT.js → EmailsSection-DtLJ4XoS.js} +1 -1
  193. package/dist/vue/{EventsSection-BNMCAim1.js → EventsSection-BOYYz0Ty.js} +1 -1
  194. package/dist/vue/{JobsSection-CCMgMlxd.js → JobsSection-BazTxcJL.js} +1 -1
  195. package/dist/vue/{LogsSection-CvOnTxUu.js → LogsSection-D55PjTKX.js} +9 -3
  196. package/dist/vue/{LogsTab-Bg3o0Mm6.js → LogsTab-47zEK7jL.js} +4 -1
  197. package/dist/vue/{OverviewSection-CHgaKtUR.js → OverviewSection-1uBKo-Tu.js} +1 -1
  198. package/dist/vue/{QueriesSection-BnHRD98z.js → QueriesSection-rpoZ4ogd.js} +1 -1
  199. package/dist/vue/RelatedLogs.vue_vue_type_script_setup_true_lang-CB2_TzYW.js +84 -0
  200. package/dist/vue/RequestsSection-x7LvT0MC.js +401 -0
  201. package/dist/vue/{RoutesSection-BrceOcKQ.js → RoutesSection-CCD0zZqQ.js} +1 -1
  202. package/dist/vue/TimelineTab-zj5Z5OdT.js +338 -0
  203. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +4 -0
  204. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +4 -0
  205. package/dist/vue/components/{Dashboard/sections/TimelineSection.vue.d.ts → shared/RelatedLogs.vue.d.ts} +5 -6
  206. package/dist/vue/composables/useDashboardData.d.ts +12 -23
  207. package/dist/vue/index-C8MxnS7Q.js +1232 -0
  208. package/dist/vue/index.js +1 -1
  209. package/dist/vue/style.css +1 -1
  210. package/package.json +1 -1
  211. package/dist/react/CacheTab-DYmsZJJ1.js +0 -123
  212. package/dist/react/CustomPaneTab-D7_o3Ec6.js +0 -104
  213. package/dist/react/EmailsTab-Uh2CQY3o.js +0 -153
  214. package/dist/react/EventsTab-CC6DQzEm.js +0 -63
  215. package/dist/react/LogsTab-BbYK-iyh.js +0 -103
  216. package/dist/react/RequestsSection-Cb5a6MlT.js +0 -209
  217. package/dist/react/RoutesTab-Bwreij3e.js +0 -74
  218. package/dist/react/TimelineSection-B2y06kRE.js +0 -158
  219. package/dist/react/TimelineTab-6hthfdBB.js +0 -193
  220. package/dist/react/WaterfallChart-Cj73WdfM.js +0 -100
  221. package/dist/react/index-CecA4IdQ.js +0 -1075
  222. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +0 -8
  223. package/dist/vue/RequestsSection-B-uSlM0f.js +0 -243
  224. package/dist/vue/TimelineSection-CfvnA2Oo.js +0 -186
  225. package/dist/vue/TimelineTab-Db6lKKsD.js +0 -250
  226. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +0 -118
  227. package/dist/vue/index-oLxS08vN.js +0 -1235
@@ -0,0 +1,341 @@
1
+ import { jsx as t, jsxs as r, Fragment as j } from "react/jsx-runtime";
2
+ import { useMemo as q, useState as f, useEffect as M, useCallback as L, useRef as C } from "react";
3
+ import { normalizeTraceFields as z, durationSeverity as _, timeAgo as W, formatTime as G, initSplitPane as I } from "adonisjs-server-stats/core";
4
+ import { u as U } from "./useApiClient-BVtNCmnL.js";
5
+ import { a as Y, M as D, b as A } from "./index-CsImORX6.js";
6
+ import { R as V } from "./RelatedLogs-3A8RuGKH.js";
7
+ import { D as H } from "./DataTable-YyShr5B-.js";
8
+ import { F as J } from "./FilterBar-CQ7bD669.js";
9
+ import { P as K } from "./Pagination-BkmzUDY8.js";
10
+ const F = {
11
+ request: "#1e3a5f",
12
+ middleware: "rgba(30, 58, 95, 0.7)",
13
+ db: "#6d28d9",
14
+ view: "#0e7490",
15
+ mail: "#059669",
16
+ event: "#b45309",
17
+ custom: "var(--ss-dim)"
18
+ }, Q = {
19
+ request: "Request",
20
+ middleware: "Middleware",
21
+ db: "DB",
22
+ mail: "Mail",
23
+ event: "Event",
24
+ view: "View",
25
+ custom: "Custom"
26
+ };
27
+ function O({
28
+ spans: c,
29
+ totalDuration: i,
30
+ className: m = "",
31
+ warnings: d
32
+ }) {
33
+ const h = c || [], o = q(
34
+ () => [...h].sort((e, n) => e.startOffset - n.startOffset),
35
+ [h]
36
+ ), p = q(() => {
37
+ const e = {};
38
+ for (const n of o)
39
+ e[n.id] = n.parentId ? (e[n.parentId] || 0) + 1 : 0;
40
+ return e;
41
+ }, [o]);
42
+ return h.length === 0 ? /* @__PURE__ */ t("div", { className: "ss-dash-empty", children: "No spans recorded" }) : /* @__PURE__ */ r("div", { className: `ss-dash-tl-waterfall ${m}`, children: [
43
+ /* @__PURE__ */ t("div", { className: "ss-dash-tl-legend", children: Object.entries(Q).map(([e, n]) => /* @__PURE__ */ r("div", { className: "ss-dash-tl-legend-item", children: [
44
+ /* @__PURE__ */ t(
45
+ "span",
46
+ {
47
+ className: "ss-dash-tl-legend-dot",
48
+ style: {
49
+ background: F[e] || F.custom
50
+ }
51
+ }
52
+ ),
53
+ /* @__PURE__ */ t("span", { children: n })
54
+ ] }, e)) }),
55
+ o.map((e) => {
56
+ const n = i > 0 ? e.startOffset / i * 100 : 0, y = i > 0 ? Math.max(e.duration / i * 100, 0.5) : 1, v = p[e.id] || 0, S = e.label.length > 50 ? e.label.slice(0, 50) + "..." : e.label, g = e.category === "db" ? "DB" : e.category, N = e.category === "db" ? "purple" : e.category === "mail" ? "green" : e.category === "event" ? "amber" : e.category === "view" ? "blue" : "muted", u = e.metadata ? Object.entries(e.metadata).filter(([, b]) => b != null).map(([b, x]) => `${b}=${x}`).join(", ") : "", w = u ? `${e.label} (${e.duration.toFixed(2)}ms)
57
+ ${u}` : `${e.label} (${e.duration.toFixed(2)}ms)`;
58
+ return /* @__PURE__ */ r("div", { className: "ss-dash-tl-row", children: [
59
+ /* @__PURE__ */ r(
60
+ "div",
61
+ {
62
+ className: "ss-dash-tl-label",
63
+ title: w,
64
+ style: { paddingLeft: 8 + v * 16 + "px" },
65
+ children: [
66
+ /* @__PURE__ */ t(
67
+ "span",
68
+ {
69
+ className: `ss-dash-badge ss-dash-badge-${N}`,
70
+ style: { fontSize: "9px", marginRight: "4px" },
71
+ children: g
72
+ }
73
+ ),
74
+ S
75
+ ]
76
+ }
77
+ ),
78
+ /* @__PURE__ */ t("div", { className: "ss-dash-tl-track", children: /* @__PURE__ */ t(
79
+ "div",
80
+ {
81
+ className: `ss-dash-tl-bar ss-dash-tl-bar-${e.category || "custom"}`,
82
+ style: {
83
+ left: `${n}%`,
84
+ width: `${y}%`
85
+ },
86
+ title: w
87
+ }
88
+ ) }),
89
+ /* @__PURE__ */ r("span", { className: "ss-dash-tl-dur", children: [
90
+ e.duration.toFixed(2),
91
+ "ms"
92
+ ] })
93
+ ] }, e.id);
94
+ }),
95
+ d && d.length > 0 && /* @__PURE__ */ r("div", { className: "ss-dash-tl-warnings", children: [
96
+ /* @__PURE__ */ r("div", { className: "ss-dash-tl-warnings-title", children: [
97
+ "Warnings (",
98
+ d.length,
99
+ ")"
100
+ ] }),
101
+ d.map((e, n) => /* @__PURE__ */ t("div", { className: "ss-dash-tl-warning", children: e }, n))
102
+ ] })
103
+ ] });
104
+ }
105
+ function X({
106
+ children: c,
107
+ classPrefix: i = "ss-dash",
108
+ storageKey: m
109
+ }) {
110
+ const d = C(null), h = C(null), o = C(null), p = C(null);
111
+ return M(() => {
112
+ if (d.current && h.current && o.current && p.current)
113
+ return I({
114
+ container: d.current,
115
+ handle: h.current,
116
+ topPane: o.current,
117
+ bottomPane: p.current,
118
+ storageKey: m
119
+ });
120
+ }, [m]), /* @__PURE__ */ r("div", { ref: d, className: `${i}-split-container`, children: [
121
+ /* @__PURE__ */ t("div", { ref: o, className: `${i}-split-top`, children: c[0] }),
122
+ /* @__PURE__ */ t("div", { ref: h, className: `${i}-split-handle` }),
123
+ /* @__PURE__ */ t("div", { ref: p, className: `${i}-split-bottom`, children: c[1] })
124
+ ] });
125
+ }
126
+ function oe({ options: c = {} }) {
127
+ const [i, m] = f(1), [d, h] = f(""), [o, p] = f("createdAt"), [e, n] = f("desc"), [y, v] = f(null), [S, g] = f(!1);
128
+ M(() => m(1), [d]);
129
+ const { data: N, meta: u, isLoading: w, error: b } = Y("requests", {
130
+ ...c,
131
+ page: i,
132
+ search: d,
133
+ sort: o,
134
+ sortDir: e
135
+ }), x = U(c.baseUrl || "", c.authToken), P = L(
136
+ (s) => {
137
+ const a = s.id;
138
+ g(!0);
139
+ const l = c.dashboardEndpoint || "/__stats/api";
140
+ x().fetch(`${l}/requests/${a}`).then((k) => {
141
+ const $ = k, R = $.trace;
142
+ if (R) {
143
+ const E = { ...$, ...R, logs: $.logs };
144
+ v(E);
145
+ } else
146
+ v(k);
147
+ g(!1);
148
+ }).catch(() => {
149
+ g(!1);
150
+ });
151
+ },
152
+ [x, c.dashboardEndpoint]
153
+ ), T = L(
154
+ (s) => {
155
+ o === s ? n((a) => a === "asc" ? "desc" : "asc") : (p(s), n("desc"));
156
+ },
157
+ [o]
158
+ ), B = N || [];
159
+ if (y) {
160
+ const s = z(y), a = s.logs.length > 0;
161
+ return /* @__PURE__ */ r("div", { children: [
162
+ /* @__PURE__ */ r("div", { className: "ss-dash-tl-detail-header", children: [
163
+ /* @__PURE__ */ t("button", { type: "button", className: "ss-dash-btn", onClick: () => v(null), children: "← Back to Requests" }),
164
+ /* @__PURE__ */ t(D, { method: s.method }),
165
+ /* @__PURE__ */ t("span", { style: { color: "var(--ss-text)" }, children: s.url }),
166
+ /* @__PURE__ */ t(A, { code: s.statusCode }),
167
+ /* @__PURE__ */ r("span", { className: "ss-dash-tl-meta", children: [
168
+ s.totalDuration.toFixed(1),
169
+ "ms · ",
170
+ s.spanCount,
171
+ " spans"
172
+ ] })
173
+ ] }),
174
+ a ? /* @__PURE__ */ r(X, { classPrefix: "ss-dash", storageKey: "ss-requests-split", children: [
175
+ /* @__PURE__ */ t(
176
+ O,
177
+ {
178
+ spans: s.spans,
179
+ totalDuration: s.totalDuration,
180
+ warnings: s.warnings
181
+ }
182
+ ),
183
+ /* @__PURE__ */ t(V, { logs: s.logs, classPrefix: "ss-dash" })
184
+ ] }) : /* @__PURE__ */ t(
185
+ O,
186
+ {
187
+ spans: s.spans,
188
+ totalDuration: s.totalDuration,
189
+ warnings: s.warnings
190
+ }
191
+ )
192
+ ] });
193
+ }
194
+ return S ? /* @__PURE__ */ r("div", { children: [
195
+ /* @__PURE__ */ t("div", { className: "ss-dash-tl-detail-header", children: /* @__PURE__ */ t("button", { type: "button", className: "ss-dash-btn", onClick: () => g(!1), children: "← Back to Requests" }) }),
196
+ /* @__PURE__ */ t("div", { className: "ss-dash-empty", children: "Loading request detail..." })
197
+ ] }) : /* @__PURE__ */ r("div", { children: [
198
+ /* @__PURE__ */ t(
199
+ J,
200
+ {
201
+ search: d,
202
+ onSearchChange: h,
203
+ placeholder: "Filter requests...",
204
+ summary: `${u?.total ?? 0} requests`
205
+ }
206
+ ),
207
+ b && /* @__PURE__ */ t("div", { className: "ss-dash-empty", children: "Failed to load requests" }),
208
+ w && !N ? /* @__PURE__ */ t("div", { className: "ss-dash-empty", children: "Loading requests..." }) : /* @__PURE__ */ r(j, { children: [
209
+ /* @__PURE__ */ t("div", { className: "ss-dash-table-wrap", children: /* @__PURE__ */ t(
210
+ H,
211
+ {
212
+ columns: [
213
+ {
214
+ key: "id",
215
+ label: "#",
216
+ width: "40px",
217
+ render: (s) => /* @__PURE__ */ t("span", { style: { color: "var(--ss-dim)" }, children: s })
218
+ },
219
+ {
220
+ key: "method",
221
+ label: "Method",
222
+ width: "70px",
223
+ sortable: !0,
224
+ render: (s) => /* @__PURE__ */ t(D, { method: s })
225
+ },
226
+ {
227
+ key: "url",
228
+ label: "URL",
229
+ sortable: !0,
230
+ render: (s) => /* @__PURE__ */ t(
231
+ "span",
232
+ {
233
+ style: {
234
+ color: "var(--ss-text)",
235
+ overflow: "hidden",
236
+ textOverflow: "ellipsis",
237
+ whiteSpace: "nowrap"
238
+ },
239
+ title: s,
240
+ children: s
241
+ }
242
+ )
243
+ },
244
+ {
245
+ key: "statusCode",
246
+ label: "Status",
247
+ width: "60px",
248
+ sortable: !0,
249
+ render: (s, a) => {
250
+ const l = a.status_code || a.statusCode || a.statusCode;
251
+ return /* @__PURE__ */ t(A, { code: l });
252
+ }
253
+ },
254
+ {
255
+ key: "duration",
256
+ label: "Duration",
257
+ width: "80px",
258
+ sortable: !0,
259
+ render: (s, a) => {
260
+ const l = a.total_duration || a.totalDuration || a.duration || 0;
261
+ return /* @__PURE__ */ r(
262
+ "span",
263
+ {
264
+ className: `ss-dash-duration ${_(l) === "very-slow" ? "ss-dash-very-slow" : _(l) === "slow" ? "ss-dash-slow" : ""}`,
265
+ children: [
266
+ l.toFixed(1),
267
+ "ms"
268
+ ]
269
+ }
270
+ );
271
+ }
272
+ },
273
+ {
274
+ key: "spanCount",
275
+ label: "Spans",
276
+ width: "50px",
277
+ render: (s, a) => {
278
+ const l = a.span_count || a.spanCount || 0;
279
+ return /* @__PURE__ */ t("span", { style: { color: "var(--ss-muted)", textAlign: "center" }, children: l });
280
+ }
281
+ },
282
+ {
283
+ key: "warningCount",
284
+ label: "⚠",
285
+ width: "40px",
286
+ render: (s, a) => {
287
+ const l = a.warning_count || a.warningCount || 0;
288
+ return l > 0 ? /* @__PURE__ */ t(
289
+ "span",
290
+ {
291
+ style: {
292
+ color: "var(--ss-amber-fg)",
293
+ textAlign: "center",
294
+ display: "block"
295
+ },
296
+ children: l
297
+ }
298
+ ) : /* @__PURE__ */ t(
299
+ "span",
300
+ {
301
+ style: { color: "var(--ss-dim)", textAlign: "center", display: "block" },
302
+ children: "-"
303
+ }
304
+ );
305
+ }
306
+ },
307
+ {
308
+ key: "createdAt",
309
+ label: "Time",
310
+ width: "80px",
311
+ sortable: !0,
312
+ render: (s, a) => {
313
+ const l = a.createdAt || a.created_at || a.timestamp || "";
314
+ return /* @__PURE__ */ t("span", { className: "ss-dash-event-time", title: G(l), children: W(l) });
315
+ }
316
+ }
317
+ ],
318
+ data: B,
319
+ sort: o,
320
+ sortDir: e,
321
+ onSort: T,
322
+ onRowClick: P,
323
+ emptyMessage: "No requests recorded yet"
324
+ }
325
+ ) }),
326
+ u && /* @__PURE__ */ t(
327
+ K,
328
+ {
329
+ page: u.page,
330
+ lastPage: u.lastPage,
331
+ total: u.total,
332
+ onPageChange: m
333
+ }
334
+ )
335
+ ] })
336
+ ] });
337
+ }
338
+ export {
339
+ oe as RequestsSection,
340
+ oe as default
341
+ };
@@ -1,8 +1,8 @@
1
1
  import { jsxs as m, jsx as r, Fragment as p } from "react/jsx-runtime";
2
2
  import { useState as y } from "react";
3
- import { a as u, M as f } from "./index-CecA4IdQ.js";
3
+ import { a as u, M as f } from "./index-CsImORX6.js";
4
4
  import { D as w } from "./DataTable-YyShr5B-.js";
5
- import { F as b } from "./FilterBar-DQRXpWrb.js";
5
+ import { F as b } from "./FilterBar-CQ7bD669.js";
6
6
  function A({ options: n = {} }) {
7
7
  const [s, i] = y(""), { data: l, isLoading: c, error: h } = u("routes", { ...n, search: s }), a = l, o = Array.isArray(a) ? a : a && Array.isArray(a.routes) ? a.routes : a && Array.isArray(a.data) ? a.data : [], t = {
8
8
  overflow: "hidden",
@@ -0,0 +1,68 @@
1
+ import { jsx as e, jsxs as d } from "react/jsx-runtime";
2
+ import { useState as g, useMemo as p } from "react";
3
+ import { u as b } from "./index-CsImORX6.js";
4
+ import { u as f } from "./useResizableTable-CNJmACdt.js";
5
+ import { F as w } from "./FilterBar-CQ7bD669.js";
6
+ function $({ options: i, currentPath: n }) {
7
+ const { data: o, isLoading: h, error: c } = b("routes", i), [a, m] = g(""), l = p(() => {
8
+ const s = o?.routes || [];
9
+ if (!a) return s;
10
+ const r = a.toLowerCase();
11
+ return s.filter(
12
+ (t) => t.pattern.toLowerCase().includes(r) || t.handler.toLowerCase().includes(r) || t.method.toLowerCase().includes(r) || t.name && t.name.toLowerCase().includes(r)
13
+ );
14
+ }, [o, a]), u = f([l]);
15
+ return h && !o ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading routes..." }) : c ? /* @__PURE__ */ d("div", { className: "ss-dbg-empty", children: [
16
+ "Error: ",
17
+ c.message
18
+ ] }) : /* @__PURE__ */ d("div", { children: [
19
+ /* @__PURE__ */ e(
20
+ w,
21
+ {
22
+ search: a,
23
+ onSearchChange: m,
24
+ placeholder: "Filter routes...",
25
+ summary: `${l.length} routes`
26
+ }
27
+ ),
28
+ l.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No routes found" }) : /* @__PURE__ */ d("table", { ref: u, className: "ss-dbg-table", children: [
29
+ /* @__PURE__ */ d("colgroup", { children: [
30
+ /* @__PURE__ */ e("col", { style: { width: "70px" } }),
31
+ /* @__PURE__ */ e("col", { style: { width: "25%" } }),
32
+ /* @__PURE__ */ e("col", { style: { width: "15%" } }),
33
+ /* @__PURE__ */ e("col", {}),
34
+ /* @__PURE__ */ e("col", { style: { width: "20%" } })
35
+ ] }),
36
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ d("tr", { children: [
37
+ /* @__PURE__ */ e("th", { children: "Method" }),
38
+ /* @__PURE__ */ e("th", { children: "Pattern" }),
39
+ /* @__PURE__ */ e("th", { children: "Name" }),
40
+ /* @__PURE__ */ e("th", { children: "Handler" }),
41
+ /* @__PURE__ */ e("th", { children: "Middleware" })
42
+ ] }) }),
43
+ /* @__PURE__ */ e("tbody", { children: l.map((s, r) => {
44
+ const t = n && (s.pattern === n || new RegExp("^" + s.pattern.replace(/:[^/]+/g, "[^/]+") + "$").test(
45
+ n
46
+ ));
47
+ return /* @__PURE__ */ d(
48
+ "tr",
49
+ {
50
+ className: t ? "ss-dbg-current-route" : "",
51
+ children: [
52
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-method ss-dbg-method-${s.method.toLowerCase()}`, children: s.method }) }),
53
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-text", children: s.pattern }),
54
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", children: s.name || "-" }),
55
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-sql", children: s.handler }),
56
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { fontSize: "10px" }, children: s.middleware.length > 0 ? s.middleware.join(", ") : "-" })
57
+ ]
58
+ },
59
+ `${s.method}-${s.pattern}-${r}`
60
+ );
61
+ }) })
62
+ ] })
63
+ ] });
64
+ }
65
+ export {
66
+ $ as RoutesTab,
67
+ $ as default
68
+ };
@@ -0,0 +1,214 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { useState as g, useMemo as j, 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-CsImORX6.js";
6
+ import { u as V } from "./useResizableTable-CNJmACdt.js";
7
+ import { F as H } from "./FilterBar-CQ7bD669.js";
8
+ import { R as J } from "./RelatedLogs-3A8RuGKH.js";
9
+ function K({
10
+ children: o,
11
+ classPrefix: i = "ss-dbg",
12
+ storageKey: u
13
+ }) {
14
+ const m = v(null), d = v(null), h = v(null), c = v(null);
15
+ return M(() => {
16
+ if (m.current && d.current && h.current && c.current)
17
+ return _({
18
+ container: m.current,
19
+ handle: d.current,
20
+ topPane: h.current,
21
+ bottomPane: c.current,
22
+ storageKey: u
23
+ });
24
+ }, [u]), /* @__PURE__ */ t("div", { ref: m, className: `${i}-split-container`, children: [
25
+ /* @__PURE__ */ e("div", { ref: h, className: `${i}-split-top`, children: o[0] }),
26
+ /* @__PURE__ */ e("div", { ref: d, className: `${i}-split-handle` }),
27
+ /* @__PURE__ */ e("div", { ref: c, className: `${i}-split-bottom`, children: o[1] })
28
+ ] });
29
+ }
30
+ const k = {
31
+ request: "#1e3a5f",
32
+ middleware: "rgba(30, 58, 95, 0.7)",
33
+ db: "#6d28d9",
34
+ view: "#0e7490",
35
+ mail: "#059669",
36
+ event: "#b45309",
37
+ custom: "#525252"
38
+ }, Q = [
39
+ { label: "Request", color: "#1e3a5f" },
40
+ { label: "Middleware", color: "rgba(30, 58, 95, 0.7)" },
41
+ { label: "Database", color: "#6d28d9" },
42
+ { label: "View", color: "#0e7490" },
43
+ { label: "Mail", color: "#059669" },
44
+ { label: "Event", color: "#b45309" }
45
+ ];
46
+ function re({ options: o }) {
47
+ const { baseUrl: i = "", debugEndpoint: u = "/admin/api/debug", authToken: m } = o || {}, { data: d, isLoading: h, error: c } = G("timeline", o), [b, A] = g(""), [p, y] = g(null), [a, L] = g(null), [B, C] = g(!1), [$, x] = g(null), f = j(() => {
48
+ const s = d?.traces || [];
49
+ if (!b) return s;
50
+ const n = b.toLowerCase();
51
+ return s.filter(
52
+ (r) => r.url.toLowerCase().includes(n) || r.method.toLowerCase().includes(n) || String(r.statusCode).includes(n)
53
+ );
54
+ }, [d, b]), D = z(i, m);
55
+ M(() => {
56
+ if (p === null) {
57
+ L(null), x(null);
58
+ return;
59
+ }
60
+ let s = !1;
61
+ return C(!0), x(null), D().get(`${u}/traces/${p}`).then((r) => {
62
+ s || (L(r), C(!1));
63
+ }).catch((r) => {
64
+ s || (x(r instanceof Error ? r.message : "Failed to load trace"), C(!1));
65
+ }), () => {
66
+ s = !0;
67
+ };
68
+ }, [p, u, D]);
69
+ const F = E((s) => {
70
+ y((n) => n === s ? null : s);
71
+ }, []), S = E((s) => s >= 500 ? "ss-dbg-status-5xx" : s >= 400 ? "ss-dbg-status-4xx" : s >= 300 ? "ss-dbg-status-3xx" : "ss-dbg-status-2xx", []), q = V([f]);
72
+ if (h && !d)
73
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading traces..." });
74
+ if (c)
75
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-empty", children: [
76
+ "Error: ",
77
+ c.message
78
+ ] });
79
+ if (p !== null) {
80
+ if (B)
81
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading trace detail..." });
82
+ if ($)
83
+ return /* @__PURE__ */ t("div", { children: [
84
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-detail-header", children: /* @__PURE__ */ e(
85
+ "button",
86
+ {
87
+ type: "button",
88
+ className: "ss-dbg-btn-clear",
89
+ onClick: () => y(null),
90
+ children: "← Back"
91
+ }
92
+ ) }),
93
+ /* @__PURE__ */ t("div", { className: "ss-dbg-empty", children: [
94
+ "Error: ",
95
+ $
96
+ ] })
97
+ ] });
98
+ if (!a)
99
+ return /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading trace detail..." });
100
+ const s = a.spans || [], n = a.warnings || [], r = a.logs || [], I = r.length > 0, R = /* @__PURE__ */ t("div", { children: [
101
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-legend", children: Q.map((l) => /* @__PURE__ */ t("div", { className: "ss-dbg-tl-legend-item", children: [
102
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-legend-dot", style: { background: l.color } }),
103
+ /* @__PURE__ */ e("span", { children: l.label })
104
+ ] }, l.label)) }),
105
+ /* @__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) => {
106
+ const N = a.totalDuration || 1, O = l.startOffset / N * 100, P = Math.max(l.duration / N * 100, 0.5);
107
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-tl-row", children: [
108
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-label", title: l.label, children: l.label }),
109
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-track", children: /* @__PURE__ */ e(
110
+ "div",
111
+ {
112
+ className: `ss-dbg-tl-bar ss-dbg-tl-bar-${l.category}`,
113
+ style: {
114
+ left: `${O}%`,
115
+ width: `${P}%`,
116
+ background: k[l.category] || k.custom
117
+ },
118
+ title: `${l.label}: ${w(l.duration)}`
119
+ }
120
+ ) }),
121
+ /* @__PURE__ */ e("span", { className: "ss-dbg-tl-dur", children: w(l.duration) })
122
+ ] }, l.id);
123
+ }) }),
124
+ n.length > 0 && /* @__PURE__ */ t("div", { className: "ss-dbg-tl-warnings", children: [
125
+ /* @__PURE__ */ e("div", { className: "ss-dbg-tl-warnings-title", children: "Warnings" }),
126
+ n.map((l, N) => /* @__PURE__ */ e("div", { className: "ss-dbg-tl-warning", children: l }, N))
127
+ ] })
128
+ ] });
129
+ return /* @__PURE__ */ t("div", { className: "ss-dbg-tl-detail-wrapper", children: [
130
+ /* @__PURE__ */ t("div", { className: "ss-dbg-tl-detail-header", children: [
131
+ /* @__PURE__ */ e(
132
+ "button",
133
+ {
134
+ type: "button",
135
+ className: "ss-dbg-btn-clear",
136
+ onClick: () => y(null),
137
+ children: "← Back"
138
+ }
139
+ ),
140
+ /* @__PURE__ */ e("span", { className: `ss-dbg-method ss-dbg-method-${a.method.toLowerCase()}`, children: a.method }),
141
+ /* @__PURE__ */ e("span", { className: "ss-dbg-tl-detail-url", children: a.url }),
142
+ /* @__PURE__ */ e("span", { className: `ss-dbg-status ${S(a.statusCode)}`, children: a.statusCode }),
143
+ /* @__PURE__ */ t("span", { className: "ss-dbg-tl-meta", children: [
144
+ w(a.totalDuration),
145
+ " · ",
146
+ a.spanCount,
147
+ " spans"
148
+ ] })
149
+ ] }),
150
+ I ? /* @__PURE__ */ t(K, { classPrefix: "ss-dbg", storageKey: "ss-dbg-timeline-split", children: [
151
+ R,
152
+ /* @__PURE__ */ e(J, { logs: r, classPrefix: "ss-dbg" })
153
+ ] }) : R
154
+ ] });
155
+ }
156
+ return /* @__PURE__ */ t("div", { children: [
157
+ /* @__PURE__ */ e(
158
+ H,
159
+ {
160
+ search: b,
161
+ onSearchChange: A,
162
+ placeholder: "Filter traces...",
163
+ summary: `${f.length} traces`
164
+ }
165
+ ),
166
+ f.length === 0 ? /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "No traces captured. Enable tracing in config." }) : /* @__PURE__ */ t("table", { ref: q, className: "ss-dbg-table", children: [
167
+ /* @__PURE__ */ t("colgroup", { children: [
168
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
169
+ /* @__PURE__ */ e("col", { style: { width: "70px" } }),
170
+ /* @__PURE__ */ e("col", {}),
171
+ /* @__PURE__ */ e("col", { style: { width: "60px" } }),
172
+ /* @__PURE__ */ e("col", { style: { width: "80px" } }),
173
+ /* @__PURE__ */ e("col", { style: { width: "50px" } }),
174
+ /* @__PURE__ */ e("col", { style: { width: "80px" } })
175
+ ] }),
176
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ t("tr", { children: [
177
+ /* @__PURE__ */ e("th", { children: "#" }),
178
+ /* @__PURE__ */ e("th", { children: "Method" }),
179
+ /* @__PURE__ */ e("th", { children: "URL" }),
180
+ /* @__PURE__ */ e("th", { children: "Status" }),
181
+ /* @__PURE__ */ e("th", { children: "Duration" }),
182
+ /* @__PURE__ */ e("th", { children: "Spans" }),
183
+ /* @__PURE__ */ e("th", { children: "Time" })
184
+ ] }) }),
185
+ /* @__PURE__ */ e("tbody", { children: f.map((s) => /* @__PURE__ */ t(
186
+ "tr",
187
+ {
188
+ className: "ss-dbg-email-row",
189
+ onClick: () => F(s.id),
190
+ children: [
191
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-dim", style: { whiteSpace: "nowrap" }, children: s.id }),
192
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-method ss-dbg-method-${s.method.toLowerCase()}`, children: s.method }) }),
193
+ /* @__PURE__ */ e("td", { title: s.url, children: s.url }),
194
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e("span", { className: `ss-dbg-status ${S(s.statusCode)}`, children: s.statusCode }) }),
195
+ /* @__PURE__ */ e(
196
+ "td",
197
+ {
198
+ className: `ss-dbg-duration ${T(s.totalDuration) === "very-slow" ? "ss-dbg-very-slow" : T(s.totalDuration) === "slow" ? "ss-dbg-slow" : ""}`,
199
+ children: w(s.totalDuration)
200
+ }
201
+ ),
202
+ /* @__PURE__ */ e("td", { className: "ss-dbg-c-muted", style: { textAlign: "center" }, children: s.spanCount }),
203
+ /* @__PURE__ */ e("td", { className: "ss-dbg-event-time", title: W(s.timestamp), children: U(s.timestamp) })
204
+ ]
205
+ },
206
+ s.id
207
+ )) })
208
+ ] })
209
+ ] });
210
+ }
211
+ export {
212
+ re as TimelineTab,
213
+ re as default
214
+ };