adonisjs-server-stats 1.5.4 → 1.6.2

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 (527) hide show
  1. package/README.md +351 -171
  2. package/dist/configure.d.ts.map +1 -1
  3. package/dist/core/api-client.d.ts +73 -0
  4. package/dist/core/api-client.d.ts.map +1 -0
  5. package/dist/core/config-utils.d.ts +109 -0
  6. package/dist/core/config-utils.d.ts.map +1 -0
  7. package/dist/core/constants.d.ts +11 -0
  8. package/dist/core/constants.d.ts.map +1 -0
  9. package/dist/core/dashboard-api.d.ts +65 -0
  10. package/dist/core/dashboard-api.d.ts.map +1 -0
  11. package/dist/core/dashboard-data-controller.d.ts +157 -0
  12. package/dist/core/dashboard-data-controller.d.ts.map +1 -0
  13. package/dist/core/debug-data-controller.d.ts +89 -0
  14. package/dist/core/debug-data-controller.d.ts.map +1 -0
  15. package/dist/core/feature-detect.d.ts +67 -0
  16. package/dist/core/feature-detect.d.ts.map +1 -0
  17. package/dist/core/formatters.d.ts +189 -0
  18. package/dist/core/formatters.d.ts.map +1 -0
  19. package/dist/core/history-buffer.d.ts +23 -0
  20. package/dist/core/history-buffer.d.ts.map +1 -0
  21. package/dist/core/icons.d.ts +36 -0
  22. package/dist/core/icons.d.ts.map +1 -0
  23. package/dist/core/index.d.ts +39 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +1961 -0
  26. package/dist/core/internals-utils.d.ts +71 -0
  27. package/dist/core/internals-utils.d.ts.map +1 -0
  28. package/dist/core/job-utils.d.ts +45 -0
  29. package/dist/core/job-utils.d.ts.map +1 -0
  30. package/dist/core/log-utils.d.ts +34 -0
  31. package/dist/core/log-utils.d.ts.map +1 -0
  32. package/dist/core/metrics.d.ts +41 -0
  33. package/dist/core/metrics.d.ts.map +1 -0
  34. package/dist/core/pagination.d.ts +128 -0
  35. package/dist/core/pagination.d.ts.map +1 -0
  36. package/dist/core/query-utils.d.ts +35 -0
  37. package/dist/core/query-utils.d.ts.map +1 -0
  38. package/dist/core/resizable-columns.d.ts +18 -0
  39. package/dist/core/resizable-columns.d.ts.map +1 -0
  40. package/dist/core/routes.d.ts +12 -0
  41. package/dist/core/routes.d.ts.map +1 -0
  42. package/dist/core/server-stats-controller.d.ts +106 -0
  43. package/dist/core/server-stats-controller.d.ts.map +1 -0
  44. package/dist/core/sparkline.d.ts +80 -0
  45. package/dist/core/sparkline.d.ts.map +1 -0
  46. package/dist/core/theme.d.ts +42 -0
  47. package/dist/core/theme.d.ts.map +1 -0
  48. package/dist/core/trace-utils.d.ts +62 -0
  49. package/dist/core/trace-utils.d.ts.map +1 -0
  50. package/dist/core/transmit-adapter.d.ts +59 -0
  51. package/dist/core/transmit-adapter.d.ts.map +1 -0
  52. package/dist/core/types.d.ts +619 -0
  53. package/dist/core/types.d.ts.map +1 -0
  54. package/dist/react/CacheSection-DGxMDlWK.js +146 -0
  55. package/dist/react/CacheTab-CnVW5PLs.js +123 -0
  56. package/dist/react/ConfigContent-CnsEI4j3.js +397 -0
  57. package/dist/react/ConfigSection-DPcrfqXY.js +11 -0
  58. package/dist/react/ConfigTab-BSWq_o2p.js +15 -0
  59. package/dist/react/CustomPaneTab-xjkYwTvH.js +104 -0
  60. package/dist/react/DataTable-YyShr5B-.js +55 -0
  61. package/dist/react/EmailsSection-CSyTg1aX.js +262 -0
  62. package/dist/react/EmailsTab-Dh2YSa_f.js +131 -0
  63. package/dist/react/EventsSection-C1pbJDfW.js +86 -0
  64. package/dist/react/EventsTab-eCh02cdd.js +63 -0
  65. package/dist/react/FilterBar-DQRXpWrb.js +50 -0
  66. package/dist/react/InternalsContent-DBzsI0CG.js +346 -0
  67. package/dist/react/InternalsSection-t7ihcWO-.js +32 -0
  68. package/dist/react/InternalsTab-Oij0A2fN.js +30 -0
  69. package/dist/react/JobsSection-CLAin5vU.js +187 -0
  70. package/dist/react/JobsTab-Dl5nrj2z.js +141 -0
  71. package/dist/react/LogsSection-C1p81fXO.js +212 -0
  72. package/dist/react/LogsTab-D-kR7PjX.js +88 -0
  73. package/dist/react/OverviewSection-nm3xdACz.js +539 -0
  74. package/dist/react/Pagination-BkmzUDY8.js +64 -0
  75. package/dist/react/QueriesSection-DB12HMfQ.js +461 -0
  76. package/dist/react/QueriesTab-fyBB1u_Y.js +90 -0
  77. package/dist/react/RequestsSection-DTqB81ac.js +209 -0
  78. package/dist/react/RoutesSection-DJWa4NPV.js +74 -0
  79. package/dist/react/RoutesTab-D3l8TOpu.js +74 -0
  80. package/dist/react/TimelineSection-C4d-jRX1.js +158 -0
  81. package/dist/react/TimelineTab-C5TFaSmQ.js +193 -0
  82. package/dist/react/WaterfallChart-Cj73WdfM.js +100 -0
  83. package/dist/react/core/api-client.d.ts +73 -0
  84. package/dist/react/core/api-client.d.ts.map +1 -0
  85. package/dist/react/core/config-utils.d.ts +109 -0
  86. package/dist/react/core/config-utils.d.ts.map +1 -0
  87. package/dist/react/core/constants.d.ts +11 -0
  88. package/dist/react/core/constants.d.ts.map +1 -0
  89. package/dist/react/core/dashboard-api.d.ts +65 -0
  90. package/dist/react/core/dashboard-api.d.ts.map +1 -0
  91. package/dist/react/core/dashboard-data-controller.d.ts +157 -0
  92. package/dist/react/core/dashboard-data-controller.d.ts.map +1 -0
  93. package/dist/react/core/debug-data-controller.d.ts +89 -0
  94. package/dist/react/core/debug-data-controller.d.ts.map +1 -0
  95. package/dist/react/core/feature-detect.d.ts +67 -0
  96. package/dist/react/core/feature-detect.d.ts.map +1 -0
  97. package/dist/react/core/formatters.d.ts +189 -0
  98. package/dist/react/core/formatters.d.ts.map +1 -0
  99. package/dist/react/core/history-buffer.d.ts +23 -0
  100. package/dist/react/core/history-buffer.d.ts.map +1 -0
  101. package/dist/react/core/icons.d.ts +36 -0
  102. package/dist/react/core/icons.d.ts.map +1 -0
  103. package/dist/react/core/index.d.ts +39 -0
  104. package/dist/react/core/index.d.ts.map +1 -0
  105. package/dist/react/core/internals-utils.d.ts +71 -0
  106. package/dist/react/core/internals-utils.d.ts.map +1 -0
  107. package/dist/react/core/job-utils.d.ts +45 -0
  108. package/dist/react/core/job-utils.d.ts.map +1 -0
  109. package/dist/react/core/log-utils.d.ts +34 -0
  110. package/dist/react/core/log-utils.d.ts.map +1 -0
  111. package/dist/react/core/metrics.d.ts +41 -0
  112. package/dist/react/core/metrics.d.ts.map +1 -0
  113. package/dist/react/core/pagination.d.ts +128 -0
  114. package/dist/react/core/pagination.d.ts.map +1 -0
  115. package/dist/react/core/query-utils.d.ts +35 -0
  116. package/dist/react/core/query-utils.d.ts.map +1 -0
  117. package/dist/react/core/resizable-columns.d.ts +18 -0
  118. package/dist/react/core/resizable-columns.d.ts.map +1 -0
  119. package/dist/react/core/routes.d.ts +12 -0
  120. package/dist/react/core/routes.d.ts.map +1 -0
  121. package/dist/react/core/server-stats-controller.d.ts +106 -0
  122. package/dist/react/core/server-stats-controller.d.ts.map +1 -0
  123. package/dist/react/core/sparkline.d.ts +80 -0
  124. package/dist/react/core/sparkline.d.ts.map +1 -0
  125. package/dist/react/core/theme.d.ts +42 -0
  126. package/dist/react/core/theme.d.ts.map +1 -0
  127. package/dist/react/core/trace-utils.d.ts +62 -0
  128. package/dist/react/core/trace-utils.d.ts.map +1 -0
  129. package/dist/react/core/transmit-adapter.d.ts +59 -0
  130. package/dist/react/core/transmit-adapter.d.ts.map +1 -0
  131. package/dist/react/core/types.d.ts +619 -0
  132. package/dist/react/core/types.d.ts.map +1 -0
  133. package/dist/react/index-UdTfSvtO.js +1074 -0
  134. package/dist/react/index.js +18 -0
  135. package/dist/react/react/components/Dashboard/DashboardPage.d.ts +17 -0
  136. package/dist/react/react/components/Dashboard/DashboardPage.d.ts.map +1 -0
  137. package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts +7 -0
  138. package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts.map +1 -0
  139. package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts +7 -0
  140. package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts.map +1 -0
  141. package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts +7 -0
  142. package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts.map +1 -0
  143. package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts +7 -0
  144. package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts.map +1 -0
  145. package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts +14 -0
  146. package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts.map +1 -0
  147. package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts +7 -0
  148. package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts.map +1 -0
  149. package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts +7 -0
  150. package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts.map +1 -0
  151. package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts +7 -0
  152. package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts.map +1 -0
  153. package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts +7 -0
  154. package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts.map +1 -0
  155. package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts +7 -0
  156. package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts.map +1 -0
  157. package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts +7 -0
  158. package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts.map +1 -0
  159. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +9 -0
  160. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts.map +1 -0
  161. package/dist/react/react/components/Dashboard/shared/DataTable.d.ts +27 -0
  162. package/dist/react/react/components/Dashboard/shared/DataTable.d.ts.map +1 -0
  163. package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts +17 -0
  164. package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts.map +1 -0
  165. package/dist/react/react/components/Dashboard/shared/Pagination.d.ts +13 -0
  166. package/dist/react/react/components/Dashboard/shared/Pagination.d.ts.map +1 -0
  167. package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts +12 -0
  168. package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts.map +1 -0
  169. package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts +16 -0
  170. package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts.map +1 -0
  171. package/dist/react/react/components/DebugPanel/DebugPanel.d.ts +16 -0
  172. package/dist/react/react/components/DebugPanel/DebugPanel.d.ts.map +1 -0
  173. package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts +8 -0
  174. package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts.map +1 -0
  175. package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts +8 -0
  176. package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts.map +1 -0
  177. package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts +14 -0
  178. package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts.map +1 -0
  179. package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts +7 -0
  180. package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts.map +1 -0
  181. package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts +7 -0
  182. package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts.map +1 -0
  183. package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts +12 -0
  184. package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts.map +1 -0
  185. package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts +9 -0
  186. package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts.map +1 -0
  187. package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts +7 -0
  188. package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts.map +1 -0
  189. package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts +7 -0
  190. package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts.map +1 -0
  191. package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts +8 -0
  192. package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts.map +1 -0
  193. package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts +7 -0
  194. package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts.map +1 -0
  195. package/dist/react/react/components/StatsBar/MetricCard.d.ts +21 -0
  196. package/dist/react/react/components/StatsBar/MetricCard.d.ts.map +1 -0
  197. package/dist/react/react/components/StatsBar/Sparkline.d.ts +15 -0
  198. package/dist/react/react/components/StatsBar/Sparkline.d.ts.map +1 -0
  199. package/dist/react/react/components/StatsBar/StatsBar.d.ts +22 -0
  200. package/dist/react/react/components/StatsBar/StatsBar.d.ts.map +1 -0
  201. package/dist/react/react/components/shared/Badge.d.ts +32 -0
  202. package/dist/react/react/components/shared/Badge.d.ts.map +1 -0
  203. package/dist/react/react/components/shared/ConfigContent.d.ts +13 -0
  204. package/dist/react/react/components/shared/ConfigContent.d.ts.map +1 -0
  205. package/dist/react/react/components/shared/InternalsContent.d.ts +10 -0
  206. package/dist/react/react/components/shared/InternalsContent.d.ts.map +1 -0
  207. package/dist/react/react/components/shared/JsonViewer.d.ts +12 -0
  208. package/dist/react/react/components/shared/JsonViewer.d.ts.map +1 -0
  209. package/dist/react/react/components/shared/ThemeToggle.d.ts +13 -0
  210. package/dist/react/react/components/shared/ThemeToggle.d.ts.map +1 -0
  211. package/dist/react/react/components/shared/Tooltip.d.ts +16 -0
  212. package/dist/react/react/components/shared/Tooltip.d.ts.map +1 -0
  213. package/dist/react/react/hooks/useApiClient.d.ts +10 -0
  214. package/dist/react/react/hooks/useApiClient.d.ts.map +1 -0
  215. package/dist/react/react/hooks/useDashboardApiBase.d.ts +19 -0
  216. package/dist/react/react/hooks/useDashboardApiBase.d.ts.map +1 -0
  217. package/dist/react/react/hooks/useDashboardData.d.ts +27 -0
  218. package/dist/react/react/hooks/useDashboardData.d.ts.map +1 -0
  219. package/dist/react/react/hooks/useDebugData.d.ts +17 -0
  220. package/dist/react/react/hooks/useDebugData.d.ts.map +1 -0
  221. package/dist/react/react/hooks/useFeatures.d.ts +13 -0
  222. package/dist/react/react/hooks/useFeatures.d.ts.map +1 -0
  223. package/dist/react/react/hooks/useResizableTable.d.ts +13 -0
  224. package/dist/react/react/hooks/useResizableTable.d.ts.map +1 -0
  225. package/dist/react/react/hooks/useServerStats.d.ts +21 -0
  226. package/dist/react/react/hooks/useServerStats.d.ts.map +1 -0
  227. package/dist/react/react/hooks/useTheme.d.ts +12 -0
  228. package/dist/react/react/hooks/useTheme.d.ts.map +1 -0
  229. package/dist/react/react/index.d.ts +14 -0
  230. package/dist/react/react/index.d.ts.map +1 -0
  231. package/dist/react/style.css +1 -0
  232. package/dist/react/useApiClient-BVtNCmnL.js +9 -0
  233. package/dist/react/useDashboardApiBase-Bi36pJ2L.js +14 -0
  234. package/dist/react/useResizableTable-CNJmACdt.js +13 -0
  235. package/dist/src/collectors/app_collector.d.ts.map +1 -1
  236. package/dist/src/collectors/app_collector.js +30 -2
  237. package/dist/src/collectors/auto_detect.d.ts +31 -0
  238. package/dist/src/collectors/auto_detect.d.ts.map +1 -0
  239. package/dist/src/collectors/auto_detect.js +120 -0
  240. package/dist/src/collectors/collector.d.ts +17 -0
  241. package/dist/src/collectors/collector.d.ts.map +1 -1
  242. package/dist/src/collectors/db_pool_collector.d.ts.map +1 -1
  243. package/dist/src/collectors/db_pool_collector.js +35 -1
  244. package/dist/src/collectors/http_collector.d.ts +4 -3
  245. package/dist/src/collectors/http_collector.d.ts.map +1 -1
  246. package/dist/src/collectors/http_collector.js +28 -11
  247. package/dist/src/collectors/index.d.ts +2 -0
  248. package/dist/src/collectors/index.d.ts.map +1 -1
  249. package/dist/src/collectors/index.js +1 -0
  250. package/dist/src/collectors/log_collector.d.ts +11 -4
  251. package/dist/src/collectors/log_collector.d.ts.map +1 -1
  252. package/dist/src/collectors/log_collector.js +51 -5
  253. package/dist/src/collectors/process_collector.d.ts.map +1 -1
  254. package/dist/src/collectors/process_collector.js +4 -0
  255. package/dist/src/collectors/queue_collector.d.ts.map +1 -1
  256. package/dist/src/collectors/queue_collector.js +55 -1
  257. package/dist/src/collectors/redis_collector.d.ts.map +1 -1
  258. package/dist/src/collectors/redis_collector.js +42 -3
  259. package/dist/src/collectors/system_collector.d.ts.map +1 -1
  260. package/dist/src/collectors/system_collector.js +4 -0
  261. package/dist/src/controller/api_controller.d.ts +101 -0
  262. package/dist/src/controller/api_controller.d.ts.map +1 -0
  263. package/dist/src/controller/api_controller.js +131 -0
  264. package/dist/src/controller/debug_controller.d.ts +19 -10
  265. package/dist/src/controller/debug_controller.d.ts.map +1 -1
  266. package/dist/src/controller/debug_controller.js +118 -101
  267. package/dist/src/core/theme.d.ts +42 -0
  268. package/dist/src/core/theme.d.ts.map +1 -0
  269. package/dist/src/core/theme.js +115 -0
  270. package/dist/src/dashboard/chart_aggregator.d.ts.map +1 -1
  271. package/dist/src/dashboard/chart_aggregator.js +3 -2
  272. package/dist/src/dashboard/dashboard_controller.d.ts +10 -14
  273. package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -1
  274. package/dist/src/dashboard/dashboard_controller.js +132 -250
  275. package/dist/src/dashboard/dashboard_store.d.ts +62 -19
  276. package/dist/src/dashboard/dashboard_store.d.ts.map +1 -1
  277. package/dist/src/dashboard/dashboard_store.js +242 -53
  278. package/dist/src/dashboard/integrations/cache_inspector.d.ts +19 -1
  279. package/dist/src/dashboard/integrations/cache_inspector.d.ts.map +1 -1
  280. package/dist/src/dashboard/integrations/config_inspector.d.ts +1 -1
  281. package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -1
  282. package/dist/src/dashboard/integrations/config_inspector.js +3 -2
  283. package/dist/src/dashboard/integrations/queue_inspector.d.ts +55 -10
  284. package/dist/src/dashboard/integrations/queue_inspector.d.ts.map +1 -1
  285. package/dist/src/dashboard/integrations/queue_inspector.js +70 -24
  286. package/dist/src/dashboard/migrator.d.ts +5 -0
  287. package/dist/src/dashboard/migrator.d.ts.map +1 -1
  288. package/dist/src/dashboard/migrator.js +44 -9
  289. package/dist/src/dashboard/models/stats_event.d.ts +1 -1
  290. package/dist/src/dashboard/models/stats_event.d.ts.map +1 -1
  291. package/dist/src/dashboard/models/stats_log.d.ts +1 -1
  292. package/dist/src/dashboard/models/stats_log.d.ts.map +1 -1
  293. package/dist/src/dashboard/models/stats_query.d.ts +1 -1
  294. package/dist/src/dashboard/models/stats_query.d.ts.map +1 -1
  295. package/dist/src/dashboard/models/stats_saved_filter.d.ts +1 -1
  296. package/dist/src/dashboard/models/stats_saved_filter.d.ts.map +1 -1
  297. package/dist/src/dashboard/models/stats_trace.d.ts +2 -1
  298. package/dist/src/dashboard/models/stats_trace.d.ts.map +1 -1
  299. package/dist/src/data/data_access.d.ts +105 -0
  300. package/dist/src/data/data_access.d.ts.map +1 -0
  301. package/dist/src/data/data_access.js +310 -0
  302. package/dist/src/data/index.d.ts +3 -0
  303. package/dist/src/data/index.d.ts.map +1 -0
  304. package/dist/src/data/index.js +1 -0
  305. package/dist/src/debug/debug_store.d.ts +20 -1
  306. package/dist/src/debug/debug_store.d.ts.map +1 -1
  307. package/dist/src/debug/debug_store.js +43 -15
  308. package/dist/src/debug/email_collector.d.ts +6 -2
  309. package/dist/src/debug/email_collector.d.ts.map +1 -1
  310. package/dist/src/debug/email_collector.js +3 -0
  311. package/dist/src/debug/event_collector.d.ts +6 -2
  312. package/dist/src/debug/event_collector.d.ts.map +1 -1
  313. package/dist/src/debug/event_collector.js +12 -8
  314. package/dist/src/debug/query_collector.d.ts +6 -2
  315. package/dist/src/debug/query_collector.d.ts.map +1 -1
  316. package/dist/src/debug/query_collector.js +3 -0
  317. package/dist/src/debug/ring_buffer.d.ts +1 -0
  318. package/dist/src/debug/ring_buffer.d.ts.map +1 -1
  319. package/dist/src/debug/ring_buffer.js +5 -2
  320. package/dist/src/debug/route_inspector.d.ts +2 -2
  321. package/dist/src/debug/route_inspector.d.ts.map +1 -1
  322. package/dist/src/debug/route_inspector.js +4 -3
  323. package/dist/src/debug/trace_collector.d.ts +7 -3
  324. package/dist/src/debug/trace_collector.d.ts.map +1 -1
  325. package/dist/src/debug/trace_collector.js +7 -5
  326. package/dist/src/debug/types.d.ts +107 -2
  327. package/dist/src/debug/types.d.ts.map +1 -1
  328. package/dist/src/debug/types.js +1 -1
  329. package/dist/src/define_config.d.ts +49 -5
  330. package/dist/src/define_config.d.ts.map +1 -1
  331. package/dist/src/define_config.js +361 -4
  332. package/dist/src/edge/bootstrap.d.ts +17 -0
  333. package/dist/src/edge/bootstrap.d.ts.map +1 -0
  334. package/dist/src/edge/bootstrap.js +29 -0
  335. package/dist/src/edge/client/dashboard.js +2 -3619
  336. package/dist/src/edge/client/debug-panel-deferred.js +1 -0
  337. package/dist/src/edge/client/debug-panel.js +1 -2140
  338. package/dist/src/edge/client/stats-bar.js +1 -801
  339. package/dist/src/edge/client-vue/dashboard.js +5 -0
  340. package/dist/src/edge/client-vue/debug-panel-deferred.js +4 -0
  341. package/dist/src/edge/client-vue/debug-panel.js +4 -0
  342. package/dist/src/edge/client-vue/stats-bar.js +4 -0
  343. package/dist/src/edge/plugin.d.ts +35 -2
  344. package/dist/src/edge/plugin.d.ts.map +1 -1
  345. package/dist/src/edge/plugin.js +30 -66
  346. package/dist/src/edge/types.d.ts +46 -0
  347. package/dist/src/edge/types.d.ts.map +1 -0
  348. package/dist/src/edge/types.js +4 -0
  349. package/dist/src/edge/views/dashboard.edge +1 -358
  350. package/dist/src/edge/views/debug-panel.edge +2 -154
  351. package/dist/src/edge/views/stats-bar.edge +15 -48
  352. package/dist/src/engine/stats_engine.d.ts +18 -0
  353. package/dist/src/engine/stats_engine.d.ts.map +1 -1
  354. package/dist/src/engine/stats_engine.js +45 -2
  355. package/dist/src/index.d.ts +1 -1
  356. package/dist/src/index.d.ts.map +1 -1
  357. package/dist/src/log_stream/log_stream_provider.d.ts.map +1 -1
  358. package/dist/src/log_stream/log_stream_provider.js +21 -4
  359. package/dist/src/log_stream/log_stream_service.d.ts +8 -1
  360. package/dist/src/log_stream/log_stream_service.d.ts.map +1 -1
  361. package/dist/src/log_stream/log_stream_service.js +27 -3
  362. package/dist/src/middleware/request_tracking_middleware.d.ts +1 -1
  363. package/dist/src/middleware/request_tracking_middleware.d.ts.map +1 -1
  364. package/dist/src/middleware/request_tracking_middleware.js +21 -6
  365. package/dist/src/prometheus/prometheus_collector.d.ts +2 -1
  366. package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
  367. package/dist/src/provider/server_stats_provider.d.ts +100 -0
  368. package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
  369. package/dist/src/provider/server_stats_provider.js +460 -104
  370. package/dist/src/routes/access_middleware.d.ts +2 -1
  371. package/dist/src/routes/access_middleware.d.ts.map +1 -1
  372. package/dist/src/routes/access_middleware.js +7 -1
  373. package/dist/src/routes/index.d.ts +4 -0
  374. package/dist/src/routes/index.d.ts.map +1 -0
  375. package/dist/src/routes/index.js +1 -0
  376. package/dist/src/routes/register_routes.d.ts +103 -0
  377. package/dist/src/routes/register_routes.d.ts.map +1 -0
  378. package/dist/src/routes/register_routes.js +356 -0
  379. package/dist/src/routes/router_types.d.ts +29 -0
  380. package/dist/src/routes/router_types.d.ts.map +1 -0
  381. package/dist/src/routes/router_types.js +1 -0
  382. package/dist/src/stubs/config.stub +12 -32
  383. package/dist/src/styles/components.css +1048 -0
  384. package/dist/src/{edge/client → styles}/dashboard.css +299 -736
  385. package/dist/src/{edge/client → styles}/debug-panel.css +117 -633
  386. package/dist/src/{edge/client → styles}/stats-bar.css +28 -10
  387. package/dist/src/styles/tokens.css +153 -0
  388. package/dist/src/styles/utilities.css +75 -0
  389. package/dist/src/types.d.ts +119 -16
  390. package/dist/src/types.d.ts.map +1 -1
  391. package/dist/src/utils/app_import.d.ts +23 -0
  392. package/dist/src/utils/app_import.d.ts.map +1 -0
  393. package/dist/src/utils/app_import.js +44 -0
  394. package/dist/src/utils/json_helpers.d.ts +2 -2
  395. package/dist/src/utils/json_helpers.d.ts.map +1 -1
  396. package/dist/src/utils/logger.d.ts +17 -0
  397. package/dist/src/utils/logger.d.ts.map +1 -0
  398. package/dist/src/utils/logger.js +27 -0
  399. package/dist/src/utils/mail_helpers.d.ts +1 -1
  400. package/dist/src/utils/mail_helpers.d.ts.map +1 -1
  401. package/dist/src/utils/mail_helpers.js +1 -1
  402. package/dist/vue/CacheSection-C788Yfai.js +149 -0
  403. package/dist/vue/CacheTab-BPisYYiQ.js +104 -0
  404. package/dist/vue/ConfigSection-CRzYxqW2.js +576 -0
  405. package/dist/vue/ConfigTab-C8cafGUj.js +361 -0
  406. package/dist/vue/CustomPaneTab-BJxT5Dp7.js +172 -0
  407. package/dist/vue/EmailsSection-C8JFMtW7.js +206 -0
  408. package/dist/vue/EmailsTab-DhFhoNmU.js +157 -0
  409. package/dist/vue/EventsSection-C4wXUgxG.js +107 -0
  410. package/dist/vue/EventsTab-DQ4Nd6AK.js +97 -0
  411. package/dist/vue/FilterBar.vue_vue_type_script_setup_true_lang-ClJ37hhT.js +62 -0
  412. package/dist/vue/InternalsSection-BJUXE-5F.js +468 -0
  413. package/dist/vue/InternalsTab-DEMjqtlw.js +471 -0
  414. package/dist/vue/JobsSection-CsKWTjgN.js +187 -0
  415. package/dist/vue/JobsTab-BCvhOARO.js +117 -0
  416. package/dist/vue/JsonViewer.vue_vue_type_script_setup_true_lang-Vsqar1zx.js +67 -0
  417. package/dist/vue/LogsSection-BFVjSZ24.js +227 -0
  418. package/dist/vue/LogsTab-DpEQ7euu.js +122 -0
  419. package/dist/vue/OverviewSection-CbMdAido.js +849 -0
  420. package/dist/vue/PaginationControls.vue_vue_type_script_setup_true_lang-CuN7g_8Z.js +50 -0
  421. package/dist/vue/QueriesSection-BPiv7u3r.js +429 -0
  422. package/dist/vue/QueriesTab-C8_7oprC.js +107 -0
  423. package/dist/vue/RequestsSection-LtImH4rD.js +243 -0
  424. package/dist/vue/RoutesSection-CrxOxmzx.js +106 -0
  425. package/dist/vue/RoutesTab-Dz0MkZuF.js +80 -0
  426. package/dist/vue/TimelineSection-DLxMW2J_.js +186 -0
  427. package/dist/vue/TimelineTab-Db6lKKsD.js +250 -0
  428. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +118 -0
  429. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts +18 -0
  430. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts.map +1 -0
  431. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts +5 -0
  432. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts.map +1 -0
  433. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts +3 -0
  434. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts.map +1 -0
  435. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts +5 -0
  436. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts.map +1 -0
  437. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts +5 -0
  438. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts.map +1 -0
  439. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts +3 -0
  440. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts.map +1 -0
  441. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts +5 -0
  442. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts.map +1 -0
  443. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts +3 -0
  444. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts.map +1 -0
  445. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts +5 -0
  446. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts.map +1 -0
  447. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts +45 -0
  448. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts.map +1 -0
  449. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +5 -0
  450. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts.map +1 -0
  451. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts +5 -0
  452. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts.map +1 -0
  453. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts +11 -0
  454. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts.map +1 -0
  455. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts +29 -0
  456. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts.map +1 -0
  457. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts +12 -0
  458. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts.map +1 -0
  459. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts +11 -0
  460. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts.map +1 -0
  461. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts +10 -0
  462. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts.map +1 -0
  463. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts +21 -0
  464. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts.map +1 -0
  465. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts +12 -0
  466. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts.map +1 -0
  467. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts +11 -0
  468. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts.map +1 -0
  469. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts +11 -0
  470. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts.map +1 -0
  471. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts +12 -0
  472. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts.map +1 -0
  473. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts +12 -0
  474. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts.map +1 -0
  475. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts +11 -0
  476. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts.map +1 -0
  477. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts +13 -0
  478. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts.map +1 -0
  479. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts +15 -0
  480. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts.map +1 -0
  481. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts +12 -0
  482. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts.map +1 -0
  483. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts +12 -0
  484. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts.map +1 -0
  485. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +15 -0
  486. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts.map +1 -0
  487. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts +19 -0
  488. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts.map +1 -0
  489. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts +17 -0
  490. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts.map +1 -0
  491. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts +22 -0
  492. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts.map +1 -0
  493. package/dist/vue/components/shared/JsonViewer.vue.d.ts +13 -0
  494. package/dist/vue/components/shared/JsonViewer.vue.d.ts.map +1 -0
  495. package/dist/vue/components/shared/ThemeToggle.vue.d.ts +8 -0
  496. package/dist/vue/components/shared/ThemeToggle.vue.d.ts.map +1 -0
  497. package/dist/vue/composables/useApiClient.d.ts +9 -0
  498. package/dist/vue/composables/useApiClient.d.ts.map +1 -0
  499. package/dist/vue/composables/useDashboardData.d.ts +53 -0
  500. package/dist/vue/composables/useDashboardData.d.ts.map +1 -0
  501. package/dist/vue/composables/useDebugData.d.ts +25 -0
  502. package/dist/vue/composables/useDebugData.d.ts.map +1 -0
  503. package/dist/vue/composables/useFeatures.d.ts +80 -0
  504. package/dist/vue/composables/useFeatures.d.ts.map +1 -0
  505. package/dist/vue/composables/useResizableTable.d.ts +16 -0
  506. package/dist/vue/composables/useResizableTable.d.ts.map +1 -0
  507. package/dist/vue/composables/useServerStats.d.ts +104 -0
  508. package/dist/vue/composables/useServerStats.d.ts.map +1 -0
  509. package/dist/vue/composables/useTheme.d.ts +6 -0
  510. package/dist/vue/composables/useTheme.d.ts.map +1 -0
  511. package/dist/vue/index-qCQpBftQ.js +1233 -0
  512. package/dist/vue/index.d.ts +10 -0
  513. package/dist/vue/index.d.ts.map +1 -0
  514. package/dist/vue/index.js +11 -0
  515. package/dist/vue/style.css +1 -0
  516. package/dist/vue/useApiClient-BQQ9CF-q.js +10 -0
  517. package/dist/vue/useResizableTable-BoivAevK.js +17 -0
  518. package/package.json +72 -10
  519. package/dist/src/dashboard/dashboard_routes.d.ts +0 -16
  520. package/dist/src/dashboard/dashboard_routes.d.ts.map +0 -1
  521. package/dist/src/dashboard/dashboard_routes.js +0 -77
  522. package/dist/src/routes/debug_routes.d.ts +0 -14
  523. package/dist/src/routes/debug_routes.d.ts.map +0 -1
  524. package/dist/src/routes/debug_routes.js +0 -42
  525. package/dist/src/routes/stats_routes.d.ts +0 -14
  526. package/dist/src/routes/stats_routes.d.ts.map +0 -1
  527. package/dist/src/routes/stats_routes.js +0 -27
@@ -7,376 +7,19 @@
7
7
  <style>{{{ css }}}</style>
8
8
  </head>
9
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">&#x263D;</button>
24
- <a href="/" class="ss-dash-back-link" title="Back to app">&larr; 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">&larr; 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">&larr; 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 ────────────────────────────────────────────── --}}
10
+ <div id="ss-dash"></div>
365
11
  <script type="application/json" id="ss-dash-config">{{{ JSON.stringify(dashConfig) }}}</script>
366
12
 
367
- {{-- ── Transmit client (enables real-time updates if installed) ── --}}
368
13
  @if(transmitClient)
369
14
  <script>
370
15
  try {
371
16
  {{{ transmitClient }}}
372
- console.log('[server-stats] Transmit client initialized, window.Transmit =', typeof window.Transmit);
373
17
  } catch(e) {
374
18
  console.warn('[server-stats] Transmit client failed to load:', e.message || e);
375
19
  }
376
20
  </script>
377
21
  @end
378
22
 
379
- {{-- ── Dashboard JS ───────────────────────────────────────────── --}}
380
23
  <script>{{{ js }}}</script>
381
24
  </body>
382
25
  </html>
@@ -1,154 +1,2 @@
1
- <div id="ss-dbg-panel" class="ss-dbg-panel" data-logs-endpoint="{{ logsEndpoint }}" data-tracing="{{ showTracing ? '1' : '0' }}" data-debug-endpoint="{{ debugEndpoint }}"@if(dashboardPath) data-dashboard-path="{{ dashboardPath }}"@end>
2
- <div class="ss-dbg-tabs">
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>
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>
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">&#9728;</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
33
- <button type="button" class="ss-dbg-close" id="ss-dbg-close" title="Close debug panel">&times;</button>
34
- </div>
35
- </div>
36
- <div class="ss-dbg-content">
37
- @if(showTracing)
38
- <div id="ss-dbg-pane-timeline" class="ss-dbg-pane ss-dbg-active">
39
- <div id="ss-dbg-timeline-list">
40
- <div class="ss-dbg-search-bar">
41
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-timeline" placeholder="Filter by URL or method..." />
42
- <span id="ss-dbg-timeline-summary" class="ss-dbg-summary"></span>
43
- </div>
44
- <div id="ss-dbg-timeline-body"><div class="ss-dbg-empty">Loading traces...</div></div>
45
- </div>
46
- <div id="ss-dbg-timeline-detail" style="display:none">
47
- <div class="ss-dbg-tl-detail-header">
48
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-tl-back">&larr; Back</button>
49
- <span id="ss-dbg-tl-detail-title" class="ss-dbg-summary"></span>
50
- </div>
51
- <div id="ss-dbg-tl-waterfall"></div>
52
- </div>
53
- </div>
54
- @end
55
- <div id="ss-dbg-pane-queries" class="ss-dbg-pane{{ showTracing ? '' : ' ss-dbg-active' }}">
56
- <div class="ss-dbg-search-bar">
57
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-queries" placeholder="Filter queries by SQL, model, or method..." />
58
- <span id="ss-dbg-queries-summary" class="ss-dbg-summary"></span>
59
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-queries-clear">Clear</button>
60
- </div>
61
- <div id="ss-dbg-queries-body"><div class="ss-dbg-empty">Loading queries...</div></div>
62
- </div>
63
- <div id="ss-dbg-pane-events" class="ss-dbg-pane">
64
- <div class="ss-dbg-search-bar">
65
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-events" placeholder="Filter events by name..." />
66
- <span id="ss-dbg-events-summary" class="ss-dbg-summary"></span>
67
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-events-clear">Clear</button>
68
- </div>
69
- <div id="ss-dbg-events-body"><div class="ss-dbg-empty">Loading events...</div></div>
70
- </div>
71
- <div id="ss-dbg-pane-routes" class="ss-dbg-pane">
72
- <div class="ss-dbg-search-bar">
73
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-routes" placeholder="Filter routes by path, name, or handler..." />
74
- <span id="ss-dbg-routes-summary" class="ss-dbg-summary"></span>
75
- </div>
76
- <div id="ss-dbg-routes-body"><div class="ss-dbg-empty">Loading routes...</div></div>
77
- </div>
78
- <div id="ss-dbg-pane-logs" class="ss-dbg-pane">
79
- <div class="ss-dbg-log-filters">
80
- <button type="button" class="ss-dbg-log-filter ss-dbg-active" data-ss-dbg-level="all">All</button>
81
- <button type="button" class="ss-dbg-log-filter" data-ss-dbg-level="error">Error</button>
82
- <button type="button" class="ss-dbg-log-filter" data-ss-dbg-level="warn">Warn</button>
83
- <button type="button" class="ss-dbg-log-filter" data-ss-dbg-level="info">Info</button>
84
- <button type="button" class="ss-dbg-log-filter" data-ss-dbg-level="debug">Debug</button>
85
- <input type="text" class="ss-dbg-search ss-dbg-reqid-input" id="ss-dbg-log-reqid" placeholder="Filter by request ID..." />
86
- <button type="button" class="ss-dbg-btn-clear ss-dbg-reqid-clear" id="ss-dbg-log-reqid-clear" style="display:none">Clear</button>
87
- </div>
88
- <div id="ss-dbg-logs-body"><div class="ss-dbg-empty">Loading logs...</div></div>
89
- </div>
90
- <div id="ss-dbg-pane-emails" class="ss-dbg-pane" style="position:relative">
91
- <div class="ss-dbg-search-bar">
92
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-emails" placeholder="Filter emails by from, to, subject, or mailer..." />
93
- <span id="ss-dbg-emails-summary" class="ss-dbg-summary"></span>
94
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-emails-clear">Clear</button>
95
- </div>
96
- <div id="ss-dbg-emails-body"><div class="ss-dbg-empty">Loading emails...</div></div>
97
- <div id="ss-dbg-email-preview" class="ss-dbg-email-preview" style="display:none">
98
- <div class="ss-dbg-email-preview-header">
99
- <div id="ss-dbg-email-preview-meta" class="ss-dbg-email-preview-meta"></div>
100
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-email-preview-close">Close</button>
101
- </div>
102
- <iframe id="ss-dbg-email-iframe" class="ss-dbg-email-iframe" sandbox="allow-same-origin" src="about:blank"></iframe>
103
- </div>
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
136
- @each(pane in customPanes)
137
- <div id="ss-dbg-pane-{{ pane.id }}" class="ss-dbg-pane">
138
- @if(pane.search || pane.clearable)
139
- <div class="ss-dbg-search-bar">
140
- @if(pane.search)
141
- <input type="text" class="ss-dbg-search" id="ss-dbg-search-{{ pane.id }}" placeholder="{{ pane.search.placeholder || 'Filter...' }}" />
142
- @end
143
- <span id="ss-dbg-{{ pane.id }}-summary" class="ss-dbg-summary"></span>
144
- @if(pane.clearable)
145
- <button type="button" class="ss-dbg-btn-clear" id="ss-dbg-{{ pane.id }}-clear">Clear</button>
146
- @end
147
- </div>
148
- @end
149
- <div id="ss-dbg-{{ pane.id }}-body"><div class="ss-dbg-empty">Loading {{ pane.label }}...</div></div>
150
- </div>
151
- @end
152
- </div>
153
- </div>
154
- <script type="application/json" id="ss-dbg-custom-panes-config">{{{ JSON.stringify(customPanes) }}}</script>
1
+ <div id="ss-dbg-panel"></div>
2
+ <script type="application/json" id="ss-dbg-config">{{{ JSON.stringify(debugConfig) }}}</script>
@@ -2,55 +2,22 @@
2
2
  {{{ css }}}
3
3
  </style>
4
4
 
5
- <div id="ss-bar" class="ss-bar" data-endpoint="{{ endpoint }}" data-interval="{{ intervalMs }}">
6
- <div class="ss-bar-left">
7
- @if(showDebug)
8
- <button type="button" id="ss-dbg-wrench" class="ss-dbg-btn" title="Open debug panel">🔍 Open debug panel</button>
9
- @end
10
- <div id="ss-dot" class="ss-dot"></div>
11
- </div>
12
- <div id="ss-bar-scroll" class="ss-bar-scroll">
13
- @each((group, gi) in groups)
14
- <div class="ss-group">
15
- @each(badge in group)
16
- <div id="ss-b-{{ badge.id }}" class="ss-badge{{ badge.href ? ' ss-badge-link' : '' }}">
17
- <span class="ss-label">{{ badge.label }}</span>
18
- <span class="ss-value ss-green">...</span>
19
- </div>
20
- @end
21
- </div>
22
- @if(gi < groups.length - 1)
23
- <div class="ss-group-sep"></div>
24
- @end
25
- @end
26
- </div>
27
- </div>
28
-
29
- <button type="button" id="ss-toggle" class="ss-toggle ss-visible">
30
- <span id="ss-toggle-summary" class="ss-toggle-summary" style="display:none">
31
- <span data-ts="cpu" class="ss-value ss-green">...</span>
32
- <span data-ts="mem" class="ss-value ss-green">...</span>
33
- <span data-ts="redis" class="ss-value ss-green">...</span>
34
- </span>
35
- <span class="ss-toggle-label" style="color:#737373">hide stats</span>
36
- <span class="ss-toggle-arrow">▼</span>
37
- </button>
38
-
39
- <script type="module">
40
- {{{ js }}}
41
- </script>
5
+ <div id="ss-bar"></div>
6
+ <script type="application/json" id="ss-bar-config">{{{ JSON.stringify(barConfig) }}}</script>
42
7
 
43
8
  @if(showDebug)
44
9
  <style>{{{ debugCss }}}</style>
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
55
- <script type="module">{{{ debugJs }}}</script>
10
+ <script type="text/plain" data-ss-deferred="debug-panel">{{{ debugDeferredJs }}}</script>
56
11
  @end
12
+
13
+ @if(transmitClient)
14
+ <script>
15
+ try {
16
+ if (typeof window.Transmit === 'undefined') {
17
+ {{{ transmitClient }}}
18
+ }
19
+ } catch(e) { /* Transmit client failed to load */ }
20
+ </script>
21
+ @end
22
+
23
+ <script>{{{ js }}}</script>