adonisjs-server-stats 1.5.3 → 1.6.1

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 (519) 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 +28 -1
  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 +116 -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 +33 -0
  244. package/dist/src/collectors/http_collector.d.ts.map +1 -1
  245. package/dist/src/collectors/http_collector.js +25 -6
  246. package/dist/src/collectors/index.d.ts +2 -0
  247. package/dist/src/collectors/index.d.ts.map +1 -1
  248. package/dist/src/collectors/index.js +1 -0
  249. package/dist/src/collectors/log_collector.d.ts +11 -4
  250. package/dist/src/collectors/log_collector.d.ts.map +1 -1
  251. package/dist/src/collectors/log_collector.js +51 -5
  252. package/dist/src/collectors/process_collector.d.ts.map +1 -1
  253. package/dist/src/collectors/process_collector.js +4 -0
  254. package/dist/src/collectors/queue_collector.d.ts.map +1 -1
  255. package/dist/src/collectors/queue_collector.js +55 -1
  256. package/dist/src/collectors/redis_collector.d.ts.map +1 -1
  257. package/dist/src/collectors/redis_collector.js +41 -3
  258. package/dist/src/collectors/system_collector.d.ts.map +1 -1
  259. package/dist/src/collectors/system_collector.js +4 -0
  260. package/dist/src/controller/api_controller.d.ts +101 -0
  261. package/dist/src/controller/api_controller.d.ts.map +1 -0
  262. package/dist/src/controller/api_controller.js +131 -0
  263. package/dist/src/controller/debug_controller.d.ts +14 -10
  264. package/dist/src/controller/debug_controller.d.ts.map +1 -1
  265. package/dist/src/controller/debug_controller.js +96 -102
  266. package/dist/src/core/theme.d.ts +42 -0
  267. package/dist/src/core/theme.d.ts.map +1 -0
  268. package/dist/src/core/theme.js +115 -0
  269. package/dist/src/dashboard/chart_aggregator.d.ts.map +1 -1
  270. package/dist/src/dashboard/dashboard_controller.d.ts +10 -14
  271. package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -1
  272. package/dist/src/dashboard/dashboard_controller.js +132 -250
  273. package/dist/src/dashboard/dashboard_store.d.ts +62 -19
  274. package/dist/src/dashboard/dashboard_store.d.ts.map +1 -1
  275. package/dist/src/dashboard/dashboard_store.js +196 -43
  276. package/dist/src/dashboard/integrations/cache_inspector.d.ts +19 -1
  277. package/dist/src/dashboard/integrations/cache_inspector.d.ts.map +1 -1
  278. package/dist/src/dashboard/integrations/config_inspector.d.ts +1 -1
  279. package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -1
  280. package/dist/src/dashboard/integrations/config_inspector.js +3 -2
  281. package/dist/src/dashboard/integrations/queue_inspector.d.ts +55 -10
  282. package/dist/src/dashboard/integrations/queue_inspector.d.ts.map +1 -1
  283. package/dist/src/dashboard/integrations/queue_inspector.js +70 -24
  284. package/dist/src/dashboard/models/stats_event.d.ts +1 -1
  285. package/dist/src/dashboard/models/stats_event.d.ts.map +1 -1
  286. package/dist/src/dashboard/models/stats_log.d.ts +1 -1
  287. package/dist/src/dashboard/models/stats_log.d.ts.map +1 -1
  288. package/dist/src/dashboard/models/stats_query.d.ts +1 -1
  289. package/dist/src/dashboard/models/stats_query.d.ts.map +1 -1
  290. package/dist/src/dashboard/models/stats_saved_filter.d.ts +1 -1
  291. package/dist/src/dashboard/models/stats_saved_filter.d.ts.map +1 -1
  292. package/dist/src/dashboard/models/stats_trace.d.ts +2 -1
  293. package/dist/src/dashboard/models/stats_trace.d.ts.map +1 -1
  294. package/dist/src/data/data_access.d.ts +103 -0
  295. package/dist/src/data/data_access.d.ts.map +1 -0
  296. package/dist/src/data/data_access.js +305 -0
  297. package/dist/src/data/index.d.ts +3 -0
  298. package/dist/src/data/index.d.ts.map +1 -0
  299. package/dist/src/data/index.js +1 -0
  300. package/dist/src/debug/debug_store.d.ts +20 -1
  301. package/dist/src/debug/debug_store.d.ts.map +1 -1
  302. package/dist/src/debug/debug_store.js +43 -15
  303. package/dist/src/debug/email_collector.d.ts +6 -2
  304. package/dist/src/debug/email_collector.d.ts.map +1 -1
  305. package/dist/src/debug/email_collector.js +3 -0
  306. package/dist/src/debug/event_collector.d.ts +6 -2
  307. package/dist/src/debug/event_collector.d.ts.map +1 -1
  308. package/dist/src/debug/event_collector.js +12 -8
  309. package/dist/src/debug/query_collector.d.ts +6 -2
  310. package/dist/src/debug/query_collector.d.ts.map +1 -1
  311. package/dist/src/debug/query_collector.js +3 -0
  312. package/dist/src/debug/ring_buffer.d.ts +1 -0
  313. package/dist/src/debug/ring_buffer.d.ts.map +1 -1
  314. package/dist/src/debug/ring_buffer.js +5 -2
  315. package/dist/src/debug/route_inspector.d.ts +2 -2
  316. package/dist/src/debug/route_inspector.d.ts.map +1 -1
  317. package/dist/src/debug/route_inspector.js +4 -3
  318. package/dist/src/debug/trace_collector.d.ts +7 -3
  319. package/dist/src/debug/trace_collector.d.ts.map +1 -1
  320. package/dist/src/debug/trace_collector.js +7 -5
  321. package/dist/src/debug/types.d.ts +107 -2
  322. package/dist/src/debug/types.d.ts.map +1 -1
  323. package/dist/src/debug/types.js +1 -1
  324. package/dist/src/define_config.d.ts +49 -5
  325. package/dist/src/define_config.d.ts.map +1 -1
  326. package/dist/src/define_config.js +360 -4
  327. package/dist/src/edge/bootstrap.d.ts +17 -0
  328. package/dist/src/edge/bootstrap.d.ts.map +1 -0
  329. package/dist/src/edge/bootstrap.js +29 -0
  330. package/dist/src/edge/client/dashboard.js +2 -3619
  331. package/dist/src/edge/client/debug-panel-deferred.js +1 -0
  332. package/dist/src/edge/client/debug-panel.js +1 -2140
  333. package/dist/src/edge/client/stats-bar.js +1 -801
  334. package/dist/src/edge/client-vue/dashboard.js +5 -0
  335. package/dist/src/edge/client-vue/debug-panel-deferred.js +4 -0
  336. package/dist/src/edge/client-vue/debug-panel.js +4 -0
  337. package/dist/src/edge/client-vue/stats-bar.js +4 -0
  338. package/dist/src/edge/plugin.d.ts +35 -2
  339. package/dist/src/edge/plugin.d.ts.map +1 -1
  340. package/dist/src/edge/plugin.js +30 -66
  341. package/dist/src/edge/types.d.ts +46 -0
  342. package/dist/src/edge/types.d.ts.map +1 -0
  343. package/dist/src/edge/types.js +4 -0
  344. package/dist/src/edge/views/dashboard.edge +1 -358
  345. package/dist/src/edge/views/debug-panel.edge +2 -154
  346. package/dist/src/edge/views/stats-bar.edge +15 -48
  347. package/dist/src/engine/stats_engine.d.ts +18 -0
  348. package/dist/src/engine/stats_engine.d.ts.map +1 -1
  349. package/dist/src/engine/stats_engine.js +45 -2
  350. package/dist/src/index.d.ts +1 -1
  351. package/dist/src/index.d.ts.map +1 -1
  352. package/dist/src/log_stream/log_stream_provider.d.ts.map +1 -1
  353. package/dist/src/log_stream/log_stream_provider.js +21 -4
  354. package/dist/src/log_stream/log_stream_service.d.ts +8 -1
  355. package/dist/src/log_stream/log_stream_service.d.ts.map +1 -1
  356. package/dist/src/log_stream/log_stream_service.js +27 -3
  357. package/dist/src/middleware/request_tracking_middleware.d.ts +1 -1
  358. package/dist/src/middleware/request_tracking_middleware.d.ts.map +1 -1
  359. package/dist/src/middleware/request_tracking_middleware.js +14 -6
  360. package/dist/src/prometheus/prometheus_collector.d.ts +2 -1
  361. package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
  362. package/dist/src/provider/server_stats_provider.d.ts +98 -0
  363. package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
  364. package/dist/src/provider/server_stats_provider.js +340 -50
  365. package/dist/src/routes/access_middleware.d.ts +2 -1
  366. package/dist/src/routes/access_middleware.d.ts.map +1 -1
  367. package/dist/src/routes/access_middleware.js +7 -1
  368. package/dist/src/routes/index.d.ts +4 -0
  369. package/dist/src/routes/index.d.ts.map +1 -0
  370. package/dist/src/routes/index.js +1 -0
  371. package/dist/src/routes/register_routes.d.ts +103 -0
  372. package/dist/src/routes/register_routes.d.ts.map +1 -0
  373. package/dist/src/routes/register_routes.js +356 -0
  374. package/dist/src/routes/router_types.d.ts +29 -0
  375. package/dist/src/routes/router_types.d.ts.map +1 -0
  376. package/dist/src/routes/router_types.js +1 -0
  377. package/dist/src/stubs/config.stub +12 -32
  378. package/dist/src/styles/components.css +1048 -0
  379. package/dist/src/{edge/client → styles}/dashboard.css +299 -736
  380. package/dist/src/{edge/client → styles}/debug-panel.css +117 -633
  381. package/dist/src/{edge/client → styles}/stats-bar.css +28 -10
  382. package/dist/src/styles/tokens.css +153 -0
  383. package/dist/src/styles/utilities.css +75 -0
  384. package/dist/src/types.d.ts +119 -16
  385. package/dist/src/types.d.ts.map +1 -1
  386. package/dist/src/utils/json_helpers.d.ts +2 -2
  387. package/dist/src/utils/json_helpers.d.ts.map +1 -1
  388. package/dist/src/utils/logger.d.ts +17 -0
  389. package/dist/src/utils/logger.d.ts.map +1 -0
  390. package/dist/src/utils/logger.js +27 -0
  391. package/dist/src/utils/mail_helpers.d.ts +1 -1
  392. package/dist/src/utils/mail_helpers.d.ts.map +1 -1
  393. package/dist/src/utils/mail_helpers.js +1 -1
  394. package/dist/vue/CacheSection-CkrIB4-j.js +149 -0
  395. package/dist/vue/CacheTab-BPisYYiQ.js +104 -0
  396. package/dist/vue/ConfigSection-gulpOiq1.js +576 -0
  397. package/dist/vue/ConfigTab-C8cafGUj.js +361 -0
  398. package/dist/vue/CustomPaneTab-J57ED_bh.js +172 -0
  399. package/dist/vue/EmailsSection-BlKvQDx8.js +206 -0
  400. package/dist/vue/EmailsTab-DhFhoNmU.js +157 -0
  401. package/dist/vue/EventsSection-BdzQvIVJ.js +107 -0
  402. package/dist/vue/EventsTab-DQ4Nd6AK.js +97 -0
  403. package/dist/vue/FilterBar.vue_vue_type_script_setup_true_lang-ClJ37hhT.js +62 -0
  404. package/dist/vue/InternalsSection-BJUXE-5F.js +468 -0
  405. package/dist/vue/InternalsTab-DEMjqtlw.js +471 -0
  406. package/dist/vue/JobsSection-DOzuMrG3.js +187 -0
  407. package/dist/vue/JobsTab-BCvhOARO.js +117 -0
  408. package/dist/vue/JsonViewer.vue_vue_type_script_setup_true_lang-Vsqar1zx.js +67 -0
  409. package/dist/vue/LogsSection-CNN4y92u.js +227 -0
  410. package/dist/vue/LogsTab-CJerb22r.js +122 -0
  411. package/dist/vue/OverviewSection-SITNR_dA.js +849 -0
  412. package/dist/vue/PaginationControls.vue_vue_type_script_setup_true_lang-CuN7g_8Z.js +50 -0
  413. package/dist/vue/QueriesSection-BAebAHkD.js +429 -0
  414. package/dist/vue/QueriesTab-C8_7oprC.js +107 -0
  415. package/dist/vue/RequestsSection-CIR0IX39.js +243 -0
  416. package/dist/vue/RoutesSection-j1U2oa0g.js +106 -0
  417. package/dist/vue/RoutesTab-Dz0MkZuF.js +80 -0
  418. package/dist/vue/TimelineSection-Dw980UPg.js +186 -0
  419. package/dist/vue/TimelineTab-Db6lKKsD.js +250 -0
  420. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +118 -0
  421. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts +18 -0
  422. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts.map +1 -0
  423. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts +5 -0
  424. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts.map +1 -0
  425. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts +3 -0
  426. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts.map +1 -0
  427. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts +5 -0
  428. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts.map +1 -0
  429. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts +5 -0
  430. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts.map +1 -0
  431. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts +3 -0
  432. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts.map +1 -0
  433. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts +5 -0
  434. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts.map +1 -0
  435. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts +3 -0
  436. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts.map +1 -0
  437. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts +5 -0
  438. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts.map +1 -0
  439. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts +45 -0
  440. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts.map +1 -0
  441. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +5 -0
  442. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts.map +1 -0
  443. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts +5 -0
  444. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts.map +1 -0
  445. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts +11 -0
  446. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts.map +1 -0
  447. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts +29 -0
  448. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts.map +1 -0
  449. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts +12 -0
  450. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts.map +1 -0
  451. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts +11 -0
  452. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts.map +1 -0
  453. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts +10 -0
  454. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts.map +1 -0
  455. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts +21 -0
  456. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts.map +1 -0
  457. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts +12 -0
  458. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts.map +1 -0
  459. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts +11 -0
  460. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts.map +1 -0
  461. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts +11 -0
  462. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts.map +1 -0
  463. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts +12 -0
  464. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts.map +1 -0
  465. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts +12 -0
  466. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts.map +1 -0
  467. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts +11 -0
  468. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts.map +1 -0
  469. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts +13 -0
  470. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts.map +1 -0
  471. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts +15 -0
  472. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts.map +1 -0
  473. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts +12 -0
  474. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts.map +1 -0
  475. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts +12 -0
  476. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts.map +1 -0
  477. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +15 -0
  478. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts.map +1 -0
  479. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts +19 -0
  480. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts.map +1 -0
  481. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts +17 -0
  482. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts.map +1 -0
  483. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts +22 -0
  484. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts.map +1 -0
  485. package/dist/vue/components/shared/JsonViewer.vue.d.ts +13 -0
  486. package/dist/vue/components/shared/JsonViewer.vue.d.ts.map +1 -0
  487. package/dist/vue/components/shared/ThemeToggle.vue.d.ts +8 -0
  488. package/dist/vue/components/shared/ThemeToggle.vue.d.ts.map +1 -0
  489. package/dist/vue/composables/useApiClient.d.ts +9 -0
  490. package/dist/vue/composables/useApiClient.d.ts.map +1 -0
  491. package/dist/vue/composables/useDashboardData.d.ts +53 -0
  492. package/dist/vue/composables/useDashboardData.d.ts.map +1 -0
  493. package/dist/vue/composables/useDebugData.d.ts +25 -0
  494. package/dist/vue/composables/useDebugData.d.ts.map +1 -0
  495. package/dist/vue/composables/useFeatures.d.ts +80 -0
  496. package/dist/vue/composables/useFeatures.d.ts.map +1 -0
  497. package/dist/vue/composables/useResizableTable.d.ts +16 -0
  498. package/dist/vue/composables/useResizableTable.d.ts.map +1 -0
  499. package/dist/vue/composables/useServerStats.d.ts +104 -0
  500. package/dist/vue/composables/useServerStats.d.ts.map +1 -0
  501. package/dist/vue/composables/useTheme.d.ts +6 -0
  502. package/dist/vue/composables/useTheme.d.ts.map +1 -0
  503. package/dist/vue/index-COgsk_nv.js +1233 -0
  504. package/dist/vue/index.d.ts +10 -0
  505. package/dist/vue/index.d.ts.map +1 -0
  506. package/dist/vue/index.js +11 -0
  507. package/dist/vue/style.css +1 -0
  508. package/dist/vue/useApiClient-BQQ9CF-q.js +10 -0
  509. package/dist/vue/useResizableTable-BoivAevK.js +17 -0
  510. package/package.json +68 -10
  511. package/dist/src/dashboard/dashboard_routes.d.ts +0 -16
  512. package/dist/src/dashboard/dashboard_routes.d.ts.map +0 -1
  513. package/dist/src/dashboard/dashboard_routes.js +0 -77
  514. package/dist/src/routes/debug_routes.d.ts +0 -14
  515. package/dist/src/routes/debug_routes.d.ts.map +0 -1
  516. package/dist/src/routes/debug_routes.js +0 -42
  517. package/dist/src/routes/stats_routes.d.ts +0 -14
  518. package/dist/src/routes/stats_routes.d.ts.map +0 -1
  519. package/dist/src/routes/stats_routes.js +0 -27
@@ -1,5 +1,22 @@
1
1
  import type { DevToolbarConfig } from '../debug/types.js';
2
2
  import type { QueryRecord, EventRecord, EmailRecord, TraceRecord } from '../debug/types.js';
3
+ import type { Knex } from 'knex';
4
+ interface EventEmitter {
5
+ on(event: string, handler: (...args: unknown[]) => void): void;
6
+ off(event: string, handler: (...args: unknown[]) => void): void;
7
+ }
8
+ export interface RequestInput {
9
+ method: string;
10
+ url: string;
11
+ statusCode: number;
12
+ duration: number;
13
+ spanCount?: number;
14
+ warningCount?: number;
15
+ }
16
+ export interface PersistRequestInput extends RequestInput {
17
+ queries: QueryRecord[];
18
+ trace: TraceRecord | null;
19
+ }
3
20
  export interface RequestFilters {
4
21
  method?: string;
5
22
  url?: string;
@@ -8,6 +25,8 @@ export interface RequestFilters {
8
25
  statusMax?: number;
9
26
  durationMin?: number;
10
27
  durationMax?: number;
28
+ /** General text search across method and url */
29
+ search?: string;
11
30
  }
12
31
  export interface QueryFilters {
13
32
  method?: string;
@@ -16,11 +35,17 @@ export interface QueryFilters {
16
35
  durationMin?: number;
17
36
  durationMax?: number;
18
37
  requestId?: number;
38
+ /** General text search across sql_text, model, and connection */
39
+ search?: string;
19
40
  }
20
41
  export interface EventFilters {
21
42
  eventName?: string;
43
+ /** General text search across event_name */
44
+ search?: string;
22
45
  }
23
46
  export interface EmailFilters {
47
+ /** General text search across from_addr, to_addr, and subject */
48
+ search?: string;
24
49
  from?: string;
25
50
  to?: string;
26
51
  subject?: string;
@@ -43,6 +68,8 @@ export interface TraceFilters {
43
68
  url?: string;
44
69
  statusMin?: number;
45
70
  statusMax?: number;
71
+ /** General text search across method and url */
72
+ search?: string;
46
73
  }
47
74
  export interface PaginatedResult<T> {
48
75
  data: T[];
@@ -66,23 +93,38 @@ export declare class DashboardStore {
66
93
  private retentionTimer;
67
94
  private chartAggregator;
68
95
  private handlers;
96
+ private dbFilePath;
97
+ private lastCleanupAt;
69
98
  constructor(config: DevToolbarConfig);
70
99
  /**
71
100
  * Initialize the SQLite connection, run migrations and retention
72
101
  * cleanup, start chart aggregation, and wire event listeners.
73
102
  */
74
- start(_lucidDb: any, emitter: any, appRoot: string): Promise<void>;
103
+ start(_lucidDb: unknown, emitter: EventEmitter | null, appRoot: string): Promise<void>;
75
104
  /** Shut down timers, event listeners, and database connection. */
76
105
  stop(): Promise<void>;
77
106
  /** Get the raw Knex database connection (for DashboardController). */
78
- getDb(): any;
107
+ getDb(): Knex | null;
79
108
  /** Whether the store is initialized and ready. */
80
109
  isReady(): boolean;
110
+ /** Get SQLite storage statistics for the diagnostics endpoint. */
111
+ getStorageStats(): Promise<{
112
+ ready: boolean;
113
+ dbPath: string;
114
+ fileSizeMb: number;
115
+ walSizeMb: number;
116
+ retentionDays: number;
117
+ tables: Array<{
118
+ name: string;
119
+ rowCount: number;
120
+ }>;
121
+ lastCleanupAt: number | null;
122
+ }>;
81
123
  /**
82
124
  * Record a completed request. Returns the inserted row ID, or null
83
125
  * if the request was self-excluded or an error occurred.
84
126
  */
85
- recordRequest(method: string, url: string, statusCode: number, duration: number, spanCount?: number, warningCount?: number): Promise<number | null>;
127
+ recordRequest(input: RequestInput): Promise<number | null>;
86
128
  /** Batch-insert queries for a request. Filters out server_stats connection queries. */
87
129
  recordQueries(requestId: number, queries: QueryRecord[]): Promise<void>;
88
130
  /** Batch-insert events for a request. */
@@ -97,20 +139,20 @@ export declare class DashboardStore {
97
139
  * Convenience: persist a full request with associated queries and trace.
98
140
  * Calls recordRequest, recordQueries, and recordTrace in sequence.
99
141
  */
100
- persistRequest(method: string, url: string, statusCode: number, duration: number, queries: QueryRecord[], trace: TraceRecord | null): Promise<number | null>;
142
+ persistRequest(input: PersistRequestInput): Promise<number | null>;
101
143
  /** Paginated request history with optional filters. */
102
- getRequests(page?: number, perPage?: number, filters?: RequestFilters): Promise<PaginatedResult<any>>;
144
+ getRequests(page?: number, perPage?: number, filters?: RequestFilters): Promise<PaginatedResult<Record<string, unknown>>>;
103
145
  /** Paginated query history with optional filters. */
104
- getQueries(page?: number, perPage?: number, filters?: QueryFilters): Promise<PaginatedResult<any>>;
146
+ getQueries(page?: number, perPage?: number, filters?: QueryFilters): Promise<PaginatedResult<Record<string, unknown>>>;
105
147
  /**
106
148
  * Grouped query patterns: aggregated by sql_normalized
107
149
  * with count, avg/min/max/total duration.
108
150
  */
109
- getQueriesGrouped(limit?: number, sort?: string): Promise<any[]>;
151
+ getQueriesGrouped(limit?: number, sort?: string, search?: string): Promise<Record<string, unknown>[]>;
110
152
  /** Paginated event history with optional filters. */
111
- getEvents(page?: number, perPage?: number, filters?: EventFilters): Promise<PaginatedResult<any>>;
153
+ getEvents(page?: number, perPage?: number, filters?: EventFilters): Promise<PaginatedResult<Record<string, unknown>>>;
112
154
  /** Paginated email history with optional filters. */
113
- getEmails(page?: number, perPage?: number, filters?: EmailFilters, excludeBody?: boolean): Promise<PaginatedResult<any>>;
155
+ getEmails(page?: number, perPage?: number, filters?: EmailFilters, excludeBody?: boolean): Promise<PaginatedResult<Record<string, unknown>>>;
114
156
  /** Get email HTML body for preview (falls back to text_body). */
115
157
  getEmailHtml(id: number): Promise<string | null>;
116
158
  /**
@@ -119,25 +161,25 @@ export declare class DashboardStore {
119
161
  * Structured filters query into the JSON `data` column using
120
162
  * SQLite's `json_extract()`.
121
163
  */
122
- getLogs(page?: number, perPage?: number, filters?: LogFilters): Promise<PaginatedResult<any>>;
164
+ getLogs(page?: number, perPage?: number, filters?: LogFilters): Promise<PaginatedResult<Record<string, unknown>>>;
123
165
  /** Paginated trace history with optional filters. */
124
- getTraces(page?: number, perPage?: number, filters?: TraceFilters): Promise<PaginatedResult<any>>;
166
+ getTraces(page?: number, perPage?: number, filters?: TraceFilters): Promise<PaginatedResult<Record<string, unknown>>>;
125
167
  /** Single trace with full span data. */
126
- getTraceDetail(id: number): Promise<any | null>;
168
+ getTraceDetail(id: number): Promise<Record<string, unknown> | null>;
127
169
  /** Single request with associated queries, events, and trace. */
128
- getRequestDetail(id: number): Promise<any | null>;
170
+ getRequestDetail(id: number): Promise<Record<string, unknown> | null>;
129
171
  /**
130
172
  * Aggregated overview metrics for the dashboard cards.
131
173
  *
132
174
  * @param range — '1h' | '6h' | '24h' | '7d'
133
175
  */
134
- getOverviewMetrics(range?: string): Promise<any>;
176
+ getOverviewMetrics(range?: string): Promise<Record<string, unknown> | null>;
135
177
  /**
136
178
  * Time-series chart data from server_stats_metrics.
137
179
  *
138
180
  * @param range — '1h' | '6h' | '24h' | '7d'
139
181
  */
140
- getChartData(range?: string): Promise<any[]>;
182
+ getChartData(range?: string): Promise<Record<string, unknown>[]>;
141
183
  /**
142
184
  * Widget data for the dashboard overview.
143
185
  *
@@ -172,9 +214,9 @@ export declare class DashboardStore {
172
214
  }[];
173
215
  }>;
174
216
  /** Get sparkline data points from pre-aggregated metrics. */
175
- getSparklineData(range: string): Promise<any[]>;
176
- getSavedFilters(section?: string): Promise<any[]>;
177
- createSavedFilter(name: string, section: string, filterConfig: Record<string, any>): Promise<any>;
217
+ getSparklineData(range: string): Promise<Record<string, unknown>[]>;
218
+ getSavedFilters(section?: string): Promise<Record<string, unknown>[]>;
219
+ createSavedFilter(name: string, section: string, filterConfig: Record<string, unknown>): Promise<Record<string, unknown> | null>;
178
220
  deleteSavedFilter(id: number): Promise<boolean>;
179
221
  /**
180
222
  * Run EXPLAIN on a stored query using the app's default database connection.
@@ -183,7 +225,7 @@ export declare class DashboardStore {
183
225
  * @param queryId — ID from server_stats_queries
184
226
  * @param appDb — The application's Lucid database manager
185
227
  */
186
- runExplain(queryId: number, appDb: any): Promise<any>;
228
+ runExplain(queryId: number, appDb: unknown): Promise<Record<string, unknown> | null>;
187
229
  /** Generic paginated query with filter callback. */
188
230
  private paginate;
189
231
  /**
@@ -191,4 +233,5 @@ export declare class DashboardStore {
191
233
  */
192
234
  private wireEventListeners;
193
235
  }
236
+ export {};
194
237
  //# sourceMappingURL=dashboard_store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard_store.d.ts","sourceRoot":"","sources":["../../../src/dashboard/dashboard_store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard_store.d.ts","sourceRoot":"","sources":["../../../src/dashboard/dashboard_store.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
- import { mkdir } from 'node:fs/promises';
1
+ import { mkdir, stat as fsStat } from 'node:fs/promises';
2
2
  import { dirname } from 'node:path';
3
3
  import { safeParseJson, safeParseJsonArray } from '../utils/json_helpers.js';
4
+ import { log } from '../utils/logger.js';
4
5
  import { extractAddresses } from '../utils/mail_helpers.js';
5
6
  import { round } from '../utils/math_helpers.js';
6
7
  import { rangeToCutoff, rangeToMinutes, roundBucket } from '../utils/time_helpers.js';
7
8
  import { ChartAggregator } from './chart_aggregator.js';
8
9
  import { autoMigrate, runRetentionCleanup } from './migrator.js';
9
10
  // ---------------------------------------------------------------------------
11
+ // Warn-once tracking for write-path and overview catch blocks
12
+ // ---------------------------------------------------------------------------
13
+ const warnedWritePaths = new Set();
14
+ let overviewWidgetWarned = false;
15
+ // ---------------------------------------------------------------------------
10
16
  // DashboardStore
11
17
  // ---------------------------------------------------------------------------
12
18
  /**
@@ -24,6 +30,8 @@ export class DashboardStore {
24
30
  retentionTimer = null;
25
31
  chartAggregator = null;
26
32
  handlers = [];
33
+ dbFilePath = '';
34
+ lastCleanupAt = null;
27
35
  constructor(config) {
28
36
  this.config = config;
29
37
  this.dashboardPath = config.dashboardPath;
@@ -37,7 +45,8 @@ export class DashboardStore {
37
45
  */
38
46
  async start(_lucidDb, emitter, appRoot) {
39
47
  this.emitter = emitter;
40
- const dbFilePath = appRoot + '/' + this.config.dbPath;
48
+ this.dbFilePath = appRoot + '/' + this.config.dbPath;
49
+ const dbFilePath = this.dbFilePath;
41
50
  await mkdir(dirname(dbFilePath), { recursive: true });
42
51
  // Create a standalone Knex connection to SQLite — bypasses Lucid's
43
52
  // connection manager entirely so we never pollute the app's pool.
@@ -52,13 +61,17 @@ export class DashboardStore {
52
61
  await this.db.raw('PRAGMA foreign_keys=ON');
53
62
  await autoMigrate(this.db);
54
63
  await runRetentionCleanup(this.db, this.config.retentionDays);
64
+ this.lastCleanupAt = Date.now();
55
65
  // Hourly retention cleanup
56
66
  this.retentionTimer = setInterval(async () => {
57
67
  try {
58
- await runRetentionCleanup(this.db, this.config.retentionDays);
68
+ if (this.db) {
69
+ await runRetentionCleanup(this.db, this.config.retentionDays);
70
+ this.lastCleanupAt = Date.now();
71
+ }
59
72
  }
60
- catch {
61
- // Silently ignore
73
+ catch (err) {
74
+ log.warn('dashboard: retention cleanup failed — ' + err?.message);
62
75
  }
63
76
  }, 60 * 60 * 1000);
64
77
  // Start chart aggregation (every 60s)
@@ -86,8 +99,8 @@ export class DashboardStore {
86
99
  try {
87
100
  await this.db.destroy();
88
101
  }
89
- catch {
90
- // Ignore
102
+ catch (err) {
103
+ log.warn('dashboard: error closing SQLite — ' + err?.message);
91
104
  }
92
105
  }
93
106
  this.db = null;
@@ -100,6 +113,65 @@ export class DashboardStore {
100
113
  isReady() {
101
114
  return this.db !== null;
102
115
  }
116
+ /** Get SQLite storage statistics for the diagnostics endpoint. */
117
+ async getStorageStats() {
118
+ if (!this.db) {
119
+ return {
120
+ ready: false,
121
+ dbPath: this.config.dbPath,
122
+ fileSizeMb: 0,
123
+ walSizeMb: 0,
124
+ retentionDays: this.config.retentionDays,
125
+ tables: [],
126
+ lastCleanupAt: null,
127
+ };
128
+ }
129
+ let fileSizeMb = 0;
130
+ let walSizeMb = 0;
131
+ try {
132
+ const s = await fsStat(this.dbFilePath);
133
+ fileSizeMb = Math.round((s.size / (1024 * 1024)) * 100) / 100;
134
+ }
135
+ catch {
136
+ // File may not exist yet
137
+ }
138
+ try {
139
+ const ws = await fsStat(this.dbFilePath + '-wal');
140
+ walSizeMb = Math.round((ws.size / (1024 * 1024)) * 100) / 100;
141
+ }
142
+ catch {
143
+ // WAL file may not exist
144
+ }
145
+ const tableNames = [
146
+ 'server_stats_requests',
147
+ 'server_stats_queries',
148
+ 'server_stats_events',
149
+ 'server_stats_emails',
150
+ 'server_stats_logs',
151
+ 'server_stats_traces',
152
+ 'server_stats_metrics',
153
+ 'server_stats_saved_filters',
154
+ ];
155
+ const tables = [];
156
+ for (const name of tableNames) {
157
+ try {
158
+ const [row] = await this.db(name).count('* as count');
159
+ tables.push({ name, rowCount: Number(row.count) });
160
+ }
161
+ catch {
162
+ tables.push({ name, rowCount: 0 });
163
+ }
164
+ }
165
+ return {
166
+ ready: true,
167
+ dbPath: this.config.dbPath,
168
+ fileSizeMb,
169
+ walSizeMb,
170
+ retentionDays: this.config.retentionDays,
171
+ tables,
172
+ lastCleanupAt: this.lastCleanupAt,
173
+ };
174
+ }
103
175
  // =========================================================================
104
176
  // Write methods — persist data from collectors
105
177
  // =========================================================================
@@ -107,23 +179,28 @@ export class DashboardStore {
107
179
  * Record a completed request. Returns the inserted row ID, or null
108
180
  * if the request was self-excluded or an error occurred.
109
181
  */
110
- async recordRequest(method, url, statusCode, duration, spanCount = 0, warningCount = 0) {
182
+ async recordRequest(input) {
111
183
  if (!this.db)
112
184
  return null;
113
- if (url.startsWith(this.dashboardPath))
185
+ if (input.url.startsWith(this.dashboardPath))
114
186
  return null;
115
187
  try {
116
188
  const [id] = await this.db('server_stats_requests').insert({
117
- method,
118
- url,
119
- status_code: statusCode,
120
- duration: round(duration),
121
- span_count: spanCount,
122
- warning_count: warningCount,
189
+ method: input.method,
190
+ url: input.url,
191
+ status_code: input.statusCode,
192
+ duration: round(input.duration),
193
+ span_count: input.spanCount ?? 0,
194
+ warning_count: input.warningCount ?? 0,
123
195
  });
124
196
  return id;
125
197
  }
126
- catch {
198
+ catch (err) {
199
+ const method_ = 'recordRequest';
200
+ if (!warnedWritePaths.has(method_)) {
201
+ warnedWritePaths.add(method_);
202
+ log.warn(`dashboard: ${method_} failed — ${err?.message}`);
203
+ }
127
204
  return null;
128
205
  }
129
206
  }
@@ -151,8 +228,12 @@ export class DashboardStore {
151
228
  await this.db('server_stats_queries').insert(rows.slice(i, i + 50));
152
229
  }
153
230
  }
154
- catch {
155
- // Silently ignore
231
+ catch (err) {
232
+ const method = 'recordQueries';
233
+ if (!warnedWritePaths.has(method)) {
234
+ warnedWritePaths.add(method);
235
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
236
+ }
156
237
  }
157
238
  }
158
239
  /** Batch-insert events for a request. */
@@ -169,8 +250,12 @@ export class DashboardStore {
169
250
  await this.db('server_stats_events').insert(rows.slice(i, i + 50));
170
251
  }
171
252
  }
172
- catch {
173
- // Silently ignore
253
+ catch (err) {
254
+ const method = 'recordEvents';
255
+ if (!warnedWritePaths.has(method)) {
256
+ warnedWritePaths.add(method);
257
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
258
+ }
174
259
  }
175
260
  }
176
261
  /** Record a single email. */
@@ -192,8 +277,12 @@ export class DashboardStore {
192
277
  attachment_count: record.attachmentCount,
193
278
  });
194
279
  }
195
- catch {
196
- // Silently ignore
280
+ catch (err) {
281
+ const method = 'recordEmail';
282
+ if (!warnedWritePaths.has(method)) {
283
+ warnedWritePaths.add(method);
284
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
285
+ }
197
286
  }
198
287
  }
199
288
  /** Record a single log entry (from LogStreamService). */
@@ -205,12 +294,18 @@ export class DashboardStore {
205
294
  await this.db('server_stats_logs').insert({
206
295
  level: levelName,
207
296
  message: String(entry.msg || entry.message || ''),
208
- request_id: entry.requestId ? String(entry.requestId) : null,
297
+ request_id: entry.request_id || entry.requestId || entry['x-request-id']
298
+ ? String(entry.request_id || entry.requestId || entry['x-request-id'])
299
+ : null,
209
300
  data: JSON.stringify(entry),
210
301
  });
211
302
  }
212
- catch {
213
- // Silently ignore
303
+ catch (err) {
304
+ const method = 'recordLog';
305
+ if (!warnedWritePaths.has(method)) {
306
+ warnedWritePaths.add(method);
307
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
308
+ }
214
309
  }
215
310
  }
216
311
  /** Record a trace for a request. */
@@ -229,21 +324,32 @@ export class DashboardStore {
229
324
  warnings: trace.warnings.length > 0 ? JSON.stringify(trace.warnings) : null,
230
325
  });
231
326
  }
232
- catch {
233
- // Silently ignore
327
+ catch (err) {
328
+ const method = 'recordTrace';
329
+ if (!warnedWritePaths.has(method)) {
330
+ warnedWritePaths.add(method);
331
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
332
+ }
234
333
  }
235
334
  }
236
335
  /**
237
336
  * Convenience: persist a full request with associated queries and trace.
238
337
  * Calls recordRequest, recordQueries, and recordTrace in sequence.
239
338
  */
240
- async persistRequest(method, url, statusCode, duration, queries, trace) {
241
- const requestId = await this.recordRequest(method, url, statusCode, duration, trace?.spanCount ?? 0, trace?.warnings?.length ?? 0);
339
+ async persistRequest(input) {
340
+ const requestId = await this.recordRequest({
341
+ method: input.method,
342
+ url: input.url,
343
+ statusCode: input.statusCode,
344
+ duration: input.duration,
345
+ spanCount: input.trace?.spanCount ?? 0,
346
+ warningCount: input.trace?.warnings?.length ?? 0,
347
+ });
242
348
  if (requestId === null)
243
349
  return null;
244
- await this.recordQueries(requestId, queries);
245
- if (trace) {
246
- await this.recordTrace(requestId, trace);
350
+ await this.recordQueries(requestId, input.queries);
351
+ if (input.trace) {
352
+ await this.recordTrace(requestId, input.trace);
247
353
  }
248
354
  return requestId;
249
355
  }
@@ -267,6 +373,12 @@ export class DashboardStore {
267
373
  query.where('duration', '>=', filters.durationMin);
268
374
  if (filters?.durationMax)
269
375
  query.where('duration', '<=', filters.durationMax);
376
+ if (filters?.search) {
377
+ const term = `%${filters.search}%`;
378
+ query.where((qb) => {
379
+ qb.where('url', 'like', term).orWhere('method', 'like', term);
380
+ });
381
+ }
270
382
  });
271
383
  }
272
384
  /** Paginated query history with optional filters. */
@@ -284,13 +396,21 @@ export class DashboardStore {
284
396
  query.where('duration', '<=', filters.durationMax);
285
397
  if (filters?.requestId)
286
398
  query.where('request_id', filters.requestId);
399
+ if (filters?.search) {
400
+ const term = `%${filters.search}%`;
401
+ query.where((qb) => {
402
+ qb.where('sql_text', 'like', term)
403
+ .orWhere('model', 'like', term)
404
+ .orWhere('connection', 'like', term);
405
+ });
406
+ }
287
407
  });
288
408
  }
289
409
  /**
290
410
  * Grouped query patterns: aggregated by sql_normalized
291
411
  * with count, avg/min/max/total duration.
292
412
  */
293
- async getQueriesGrouped(limit = 200, sort = 'total_duration') {
413
+ async getQueriesGrouped(limit = 200, sort = 'total_duration', search) {
294
414
  if (!this.db)
295
415
  return [];
296
416
  const validSorts = {
@@ -299,22 +419,38 @@ export class DashboardStore {
299
419
  total_duration: 'total_duration',
300
420
  };
301
421
  const orderCol = validSorts[sort] || 'total_duration';
302
- return this.db('server_stats_queries')
422
+ const query = this.db('server_stats_queries')
303
423
  .select('sql_normalized', this.db.raw('COUNT(*) as count'), this.db.raw('ROUND(AVG(duration), 2) as avg_duration'), this.db.raw('ROUND(MIN(duration), 2) as min_duration'), this.db.raw('ROUND(MAX(duration), 2) as max_duration'), this.db.raw('ROUND(SUM(duration), 2) as total_duration'))
304
424
  .groupBy('sql_normalized')
305
425
  .orderBy(orderCol, 'desc')
306
426
  .limit(limit);
427
+ if (search) {
428
+ query.where('sql_normalized', 'like', `%${search}%`);
429
+ }
430
+ return query;
307
431
  }
308
432
  /** Paginated event history with optional filters. */
309
433
  async getEvents(page = 1, perPage = 50, filters) {
310
434
  return this.paginate('server_stats_events', page, perPage, (query) => {
311
435
  if (filters?.eventName)
312
436
  query.where('event_name', 'like', `%${filters.eventName}%`);
437
+ if (filters?.search) {
438
+ query.where('event_name', 'like', `%${filters.search}%`);
439
+ }
313
440
  });
314
441
  }
315
442
  /** Paginated email history with optional filters. */
316
443
  async getEmails(page = 1, perPage = 50, filters, excludeBody = false) {
317
444
  return this.paginate('server_stats_emails', page, perPage, (query) => {
445
+ if (filters?.search) {
446
+ const term = `%${filters.search}%`;
447
+ query.where((sub) => {
448
+ sub
449
+ .where('from_addr', 'like', term)
450
+ .orWhere('to_addr', 'like', term)
451
+ .orWhere('subject', 'like', term);
452
+ });
453
+ }
318
454
  if (filters?.from)
319
455
  query.where('from_addr', 'like', `%${filters.from}%`);
320
456
  if (filters?.to)
@@ -386,6 +522,12 @@ export class DashboardStore {
386
522
  query.where('status_code', '>=', filters.statusMin);
387
523
  if (filters?.statusMax)
388
524
  query.where('status_code', '<=', filters.statusMax);
525
+ if (filters?.search) {
526
+ const term = `%${filters.search}%`;
527
+ query.where((qb) => {
528
+ qb.where('url', 'like', term).orWhere('method', 'like', term);
529
+ });
530
+ }
389
531
  });
390
532
  }
391
533
  /** Single trace with full span data. */
@@ -613,12 +755,13 @@ export class DashboardStore {
613
755
  const emailActivity = { sent: 0, queued: 0, failed: 0 };
614
756
  for (const row of emailStatusRaw || []) {
615
757
  const status = row.status;
758
+ const count = row.count;
616
759
  if (status === 'sent')
617
- emailActivity.sent = row.count;
760
+ emailActivity.sent = count;
618
761
  else if (status === 'queued')
619
- emailActivity.queued = row.count;
762
+ emailActivity.queued = count;
620
763
  else if (status === 'failed')
621
- emailActivity.failed = row.count;
764
+ emailActivity.failed = count;
622
765
  }
623
766
  // Map log level breakdown
624
767
  const logLevelBreakdown = { error: 0, warn: 0, info: 0, debug: 0 };
@@ -643,7 +786,11 @@ export class DashboardStore {
643
786
  }));
644
787
  return { topEvents, emailActivity, logLevelBreakdown, statusDistribution, slowestQueries };
645
788
  }
646
- catch {
789
+ catch (err) {
790
+ if (!overviewWidgetWarned) {
791
+ overviewWidgetWarned = true;
792
+ log.warn('dashboard: getOverviewWidgets query failed — ' + err?.message);
793
+ }
647
794
  return empty;
648
795
  }
649
796
  }
@@ -724,7 +871,8 @@ export class DashboardStore {
724
871
  const countQuery = this.db(table);
725
872
  if (applyFilters)
726
873
  applyFilters(countQuery);
727
- const [{ count: total }] = await countQuery.count('* as count');
874
+ const [{ count: totalRaw }] = await countQuery.count('* as count');
875
+ const total = Number(totalRaw);
728
876
  // Fetch page
729
877
  const offset = (page - 1) * perPage;
730
878
  const dataQuery = this.db(table).orderBy('created_at', 'desc').limit(perPage).offset(offset);
@@ -746,7 +894,8 @@ export class DashboardStore {
746
894
  if (!this.emitter || typeof this.emitter.on !== 'function')
747
895
  return;
748
896
  const buildAndPersistEmail = (data, status) => {
749
- const msg = data?.message || data;
897
+ const d = data;
898
+ const msg = (d?.message || d);
750
899
  const record = {
751
900
  id: 0,
752
901
  from: extractAddresses(msg?.from) || 'unknown',
@@ -756,10 +905,14 @@ export class DashboardStore {
756
905
  subject: msg?.subject || '(no subject)',
757
906
  html: msg?.html || null,
758
907
  text: msg?.text || null,
759
- mailer: data?.mailerName || data?.mailer || 'unknown',
908
+ mailer: d?.mailerName || d?.mailer || 'unknown',
760
909
  status,
761
- messageId: data?.response?.messageId || data?.messageId || null,
762
- attachmentCount: Array.isArray(msg?.attachments) ? msg.attachments.length : 0,
910
+ messageId: d?.response?.messageId ||
911
+ d?.messageId ||
912
+ null,
913
+ attachmentCount: Array.isArray(msg?.attachments)
914
+ ? msg.attachments.length
915
+ : 0,
763
916
  timestamp: Date.now(),
764
917
  };
765
918
  this.recordEmail(record);