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
@@ -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,35 +45,76 @@ 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.
44
- const knexModule = await import('knex');
53
+ //
54
+ // Must use appImport — bare import('knex') resolves to this package's
55
+ // devDep copy when symlinked (file: dependency), which may have
56
+ // different native bindings or conflict with the app's copies.
57
+ log.info('dashboard: loading knex...');
58
+ const { appImportWithPath } = await import('../utils/app_import.js');
59
+ let knexModule;
60
+ let knexPath;
61
+ try {
62
+ const result = await appImportWithPath('knex');
63
+ knexModule = result.module;
64
+ knexPath = result.resolvedPath;
65
+ }
66
+ catch (err) {
67
+ throw new Error(`Could not load knex: ${err?.message}. ` +
68
+ 'Install it with: npm install knex better-sqlite3');
69
+ }
70
+ let sqlite3Path;
71
+ try {
72
+ const result = await appImportWithPath('better-sqlite3');
73
+ sqlite3Path = result.resolvedPath;
74
+ }
75
+ catch (err) {
76
+ throw new Error(`Could not load better-sqlite3: ${err?.message}. ` +
77
+ 'Install it with: npm install better-sqlite3');
78
+ }
79
+ log.info(`dashboard: knex resolved from ${knexPath}`);
80
+ log.info(`dashboard: better-sqlite3 resolved from ${sqlite3Path}`);
45
81
  const knexFactory = knexModule.default ?? knexModule;
46
- this.db = knexFactory({
82
+ log.info(`dashboard: opening SQLite database at ${dbFilePath}`);
83
+ const db = knexFactory({
47
84
  client: 'better-sqlite3',
48
85
  connection: { filename: dbFilePath },
49
86
  useNullAsDefault: true,
50
87
  });
51
- await this.db.raw('PRAGMA journal_mode=WAL');
52
- await this.db.raw('PRAGMA foreign_keys=ON');
53
- await autoMigrate(this.db);
54
- await runRetentionCleanup(this.db, this.config.retentionDays);
55
- // Hourly retention cleanup
56
- this.retentionTimer = setInterval(async () => {
88
+ this.db = db;
89
+ log.info('dashboard: setting PRAGMA...');
90
+ await db.raw('PRAGMA journal_mode=WAL');
91
+ await db.raw('PRAGMA foreign_keys=ON');
92
+ log.info('dashboard: PRAGMA set');
93
+ log.info('dashboard: running migrations...');
94
+ await autoMigrate(db);
95
+ log.info('dashboard: migrations complete');
96
+ // Defer retention cleanup — not critical during startup.
97
+ // Run first cleanup after 30s, then hourly.
98
+ const runCleanup = async () => {
57
99
  try {
58
- await runRetentionCleanup(this.db, this.config.retentionDays);
100
+ if (this.db) {
101
+ await runRetentionCleanup(this.db, this.config.retentionDays);
102
+ this.lastCleanupAt = Date.now();
103
+ log.info('dashboard: retention cleanup complete');
104
+ }
59
105
  }
60
- catch {
61
- // Silently ignore
106
+ catch (err) {
107
+ log.warn('dashboard: retention cleanup failed — ' + err?.message);
62
108
  }
63
- }, 60 * 60 * 1000);
109
+ };
110
+ setTimeout(() => runCleanup(), 30_000);
111
+ this.retentionTimer = setInterval(() => runCleanup(), 60 * 60 * 1000);
64
112
  // Start chart aggregation (every 60s)
65
- this.chartAggregator = new ChartAggregator(this.db);
113
+ this.chartAggregator = new ChartAggregator(db);
66
114
  this.chartAggregator.start();
67
115
  // Wire email event listeners
68
116
  this.wireEventListeners();
117
+ log.info('dashboard: store initialized');
69
118
  }
70
119
  /** Shut down timers, event listeners, and database connection. */
71
120
  async stop() {
@@ -86,8 +135,8 @@ export class DashboardStore {
86
135
  try {
87
136
  await this.db.destroy();
88
137
  }
89
- catch {
90
- // Ignore
138
+ catch (err) {
139
+ log.warn('dashboard: error closing SQLite — ' + err?.message);
91
140
  }
92
141
  }
93
142
  this.db = null;
@@ -100,6 +149,65 @@ export class DashboardStore {
100
149
  isReady() {
101
150
  return this.db !== null;
102
151
  }
152
+ /** Get SQLite storage statistics for the diagnostics endpoint. */
153
+ async getStorageStats() {
154
+ if (!this.db) {
155
+ return {
156
+ ready: false,
157
+ dbPath: this.config.dbPath,
158
+ fileSizeMb: 0,
159
+ walSizeMb: 0,
160
+ retentionDays: this.config.retentionDays,
161
+ tables: [],
162
+ lastCleanupAt: null,
163
+ };
164
+ }
165
+ let fileSizeMb = 0;
166
+ let walSizeMb = 0;
167
+ try {
168
+ const s = await fsStat(this.dbFilePath);
169
+ fileSizeMb = Math.round((s.size / (1024 * 1024)) * 100) / 100;
170
+ }
171
+ catch {
172
+ // File may not exist yet
173
+ }
174
+ try {
175
+ const ws = await fsStat(this.dbFilePath + '-wal');
176
+ walSizeMb = Math.round((ws.size / (1024 * 1024)) * 100) / 100;
177
+ }
178
+ catch {
179
+ // WAL file may not exist
180
+ }
181
+ const tableNames = [
182
+ 'server_stats_requests',
183
+ 'server_stats_queries',
184
+ 'server_stats_events',
185
+ 'server_stats_emails',
186
+ 'server_stats_logs',
187
+ 'server_stats_traces',
188
+ 'server_stats_metrics',
189
+ 'server_stats_saved_filters',
190
+ ];
191
+ const tables = [];
192
+ for (const name of tableNames) {
193
+ try {
194
+ const [row] = await this.db(name).count('* as count');
195
+ tables.push({ name, rowCount: Number(row.count) });
196
+ }
197
+ catch {
198
+ tables.push({ name, rowCount: 0 });
199
+ }
200
+ }
201
+ return {
202
+ ready: true,
203
+ dbPath: this.config.dbPath,
204
+ fileSizeMb,
205
+ walSizeMb,
206
+ retentionDays: this.config.retentionDays,
207
+ tables,
208
+ lastCleanupAt: this.lastCleanupAt,
209
+ };
210
+ }
103
211
  // =========================================================================
104
212
  // Write methods — persist data from collectors
105
213
  // =========================================================================
@@ -107,23 +215,28 @@ export class DashboardStore {
107
215
  * Record a completed request. Returns the inserted row ID, or null
108
216
  * if the request was self-excluded or an error occurred.
109
217
  */
110
- async recordRequest(method, url, statusCode, duration, spanCount = 0, warningCount = 0) {
218
+ async recordRequest(input) {
111
219
  if (!this.db)
112
220
  return null;
113
- if (url.startsWith(this.dashboardPath))
221
+ if (input.url.startsWith(this.dashboardPath))
114
222
  return null;
115
223
  try {
116
224
  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,
225
+ method: input.method,
226
+ url: input.url,
227
+ status_code: input.statusCode,
228
+ duration: round(input.duration),
229
+ span_count: input.spanCount ?? 0,
230
+ warning_count: input.warningCount ?? 0,
123
231
  });
124
232
  return id;
125
233
  }
126
- catch {
234
+ catch (err) {
235
+ const method_ = 'recordRequest';
236
+ if (!warnedWritePaths.has(method_)) {
237
+ warnedWritePaths.add(method_);
238
+ log.warn(`dashboard: ${method_} failed — ${err?.message}`);
239
+ }
127
240
  return null;
128
241
  }
129
242
  }
@@ -151,8 +264,12 @@ export class DashboardStore {
151
264
  await this.db('server_stats_queries').insert(rows.slice(i, i + 50));
152
265
  }
153
266
  }
154
- catch {
155
- // Silently ignore
267
+ catch (err) {
268
+ const method = 'recordQueries';
269
+ if (!warnedWritePaths.has(method)) {
270
+ warnedWritePaths.add(method);
271
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
272
+ }
156
273
  }
157
274
  }
158
275
  /** Batch-insert events for a request. */
@@ -169,8 +286,12 @@ export class DashboardStore {
169
286
  await this.db('server_stats_events').insert(rows.slice(i, i + 50));
170
287
  }
171
288
  }
172
- catch {
173
- // Silently ignore
289
+ catch (err) {
290
+ const method = 'recordEvents';
291
+ if (!warnedWritePaths.has(method)) {
292
+ warnedWritePaths.add(method);
293
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
294
+ }
174
295
  }
175
296
  }
176
297
  /** Record a single email. */
@@ -192,8 +313,12 @@ export class DashboardStore {
192
313
  attachment_count: record.attachmentCount,
193
314
  });
194
315
  }
195
- catch {
196
- // Silently ignore
316
+ catch (err) {
317
+ const method = 'recordEmail';
318
+ if (!warnedWritePaths.has(method)) {
319
+ warnedWritePaths.add(method);
320
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
321
+ }
197
322
  }
198
323
  }
199
324
  /** Record a single log entry (from LogStreamService). */
@@ -205,12 +330,18 @@ export class DashboardStore {
205
330
  await this.db('server_stats_logs').insert({
206
331
  level: levelName,
207
332
  message: String(entry.msg || entry.message || ''),
208
- request_id: entry.requestId ? String(entry.requestId) : null,
333
+ request_id: entry.request_id || entry.requestId || entry['x-request-id']
334
+ ? String(entry.request_id || entry.requestId || entry['x-request-id'])
335
+ : null,
209
336
  data: JSON.stringify(entry),
210
337
  });
211
338
  }
212
- catch {
213
- // Silently ignore
339
+ catch (err) {
340
+ const method = 'recordLog';
341
+ if (!warnedWritePaths.has(method)) {
342
+ warnedWritePaths.add(method);
343
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
344
+ }
214
345
  }
215
346
  }
216
347
  /** Record a trace for a request. */
@@ -229,21 +360,32 @@ export class DashboardStore {
229
360
  warnings: trace.warnings.length > 0 ? JSON.stringify(trace.warnings) : null,
230
361
  });
231
362
  }
232
- catch {
233
- // Silently ignore
363
+ catch (err) {
364
+ const method = 'recordTrace';
365
+ if (!warnedWritePaths.has(method)) {
366
+ warnedWritePaths.add(method);
367
+ log.warn(`dashboard: ${method} failed — ${err?.message}`);
368
+ }
234
369
  }
235
370
  }
236
371
  /**
237
372
  * Convenience: persist a full request with associated queries and trace.
238
373
  * Calls recordRequest, recordQueries, and recordTrace in sequence.
239
374
  */
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);
375
+ async persistRequest(input) {
376
+ const requestId = await this.recordRequest({
377
+ method: input.method,
378
+ url: input.url,
379
+ statusCode: input.statusCode,
380
+ duration: input.duration,
381
+ spanCount: input.trace?.spanCount ?? 0,
382
+ warningCount: input.trace?.warnings?.length ?? 0,
383
+ });
242
384
  if (requestId === null)
243
385
  return null;
244
- await this.recordQueries(requestId, queries);
245
- if (trace) {
246
- await this.recordTrace(requestId, trace);
386
+ await this.recordQueries(requestId, input.queries);
387
+ if (input.trace) {
388
+ await this.recordTrace(requestId, input.trace);
247
389
  }
248
390
  return requestId;
249
391
  }
@@ -267,6 +409,12 @@ export class DashboardStore {
267
409
  query.where('duration', '>=', filters.durationMin);
268
410
  if (filters?.durationMax)
269
411
  query.where('duration', '<=', filters.durationMax);
412
+ if (filters?.search) {
413
+ const term = `%${filters.search}%`;
414
+ query.where((qb) => {
415
+ qb.where('url', 'like', term).orWhere('method', 'like', term);
416
+ });
417
+ }
270
418
  });
271
419
  }
272
420
  /** Paginated query history with optional filters. */
@@ -284,13 +432,21 @@ export class DashboardStore {
284
432
  query.where('duration', '<=', filters.durationMax);
285
433
  if (filters?.requestId)
286
434
  query.where('request_id', filters.requestId);
435
+ if (filters?.search) {
436
+ const term = `%${filters.search}%`;
437
+ query.where((qb) => {
438
+ qb.where('sql_text', 'like', term)
439
+ .orWhere('model', 'like', term)
440
+ .orWhere('connection', 'like', term);
441
+ });
442
+ }
287
443
  });
288
444
  }
289
445
  /**
290
446
  * Grouped query patterns: aggregated by sql_normalized
291
447
  * with count, avg/min/max/total duration.
292
448
  */
293
- async getQueriesGrouped(limit = 200, sort = 'total_duration') {
449
+ async getQueriesGrouped(limit = 200, sort = 'total_duration', search) {
294
450
  if (!this.db)
295
451
  return [];
296
452
  const validSorts = {
@@ -299,22 +455,38 @@ export class DashboardStore {
299
455
  total_duration: 'total_duration',
300
456
  };
301
457
  const orderCol = validSorts[sort] || 'total_duration';
302
- return this.db('server_stats_queries')
458
+ const query = this.db('server_stats_queries')
303
459
  .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
460
  .groupBy('sql_normalized')
305
461
  .orderBy(orderCol, 'desc')
306
462
  .limit(limit);
463
+ if (search) {
464
+ query.where('sql_normalized', 'like', `%${search}%`);
465
+ }
466
+ return query;
307
467
  }
308
468
  /** Paginated event history with optional filters. */
309
469
  async getEvents(page = 1, perPage = 50, filters) {
310
470
  return this.paginate('server_stats_events', page, perPage, (query) => {
311
471
  if (filters?.eventName)
312
472
  query.where('event_name', 'like', `%${filters.eventName}%`);
473
+ if (filters?.search) {
474
+ query.where('event_name', 'like', `%${filters.search}%`);
475
+ }
313
476
  });
314
477
  }
315
478
  /** Paginated email history with optional filters. */
316
479
  async getEmails(page = 1, perPage = 50, filters, excludeBody = false) {
317
480
  return this.paginate('server_stats_emails', page, perPage, (query) => {
481
+ if (filters?.search) {
482
+ const term = `%${filters.search}%`;
483
+ query.where((sub) => {
484
+ sub
485
+ .where('from_addr', 'like', term)
486
+ .orWhere('to_addr', 'like', term)
487
+ .orWhere('subject', 'like', term);
488
+ });
489
+ }
318
490
  if (filters?.from)
319
491
  query.where('from_addr', 'like', `%${filters.from}%`);
320
492
  if (filters?.to)
@@ -386,6 +558,12 @@ export class DashboardStore {
386
558
  query.where('status_code', '>=', filters.statusMin);
387
559
  if (filters?.statusMax)
388
560
  query.where('status_code', '<=', filters.statusMax);
561
+ if (filters?.search) {
562
+ const term = `%${filters.search}%`;
563
+ query.where((qb) => {
564
+ qb.where('url', 'like', term).orWhere('method', 'like', term);
565
+ });
566
+ }
389
567
  });
390
568
  }
391
569
  /** Single trace with full span data. */
@@ -613,12 +791,13 @@ export class DashboardStore {
613
791
  const emailActivity = { sent: 0, queued: 0, failed: 0 };
614
792
  for (const row of emailStatusRaw || []) {
615
793
  const status = row.status;
794
+ const count = row.count;
616
795
  if (status === 'sent')
617
- emailActivity.sent = row.count;
796
+ emailActivity.sent = count;
618
797
  else if (status === 'queued')
619
- emailActivity.queued = row.count;
798
+ emailActivity.queued = count;
620
799
  else if (status === 'failed')
621
- emailActivity.failed = row.count;
800
+ emailActivity.failed = count;
622
801
  }
623
802
  // Map log level breakdown
624
803
  const logLevelBreakdown = { error: 0, warn: 0, info: 0, debug: 0 };
@@ -643,7 +822,11 @@ export class DashboardStore {
643
822
  }));
644
823
  return { topEvents, emailActivity, logLevelBreakdown, statusDistribution, slowestQueries };
645
824
  }
646
- catch {
825
+ catch (err) {
826
+ if (!overviewWidgetWarned) {
827
+ overviewWidgetWarned = true;
828
+ log.warn('dashboard: getOverviewWidgets query failed — ' + err?.message);
829
+ }
647
830
  return empty;
648
831
  }
649
832
  }
@@ -724,7 +907,8 @@ export class DashboardStore {
724
907
  const countQuery = this.db(table);
725
908
  if (applyFilters)
726
909
  applyFilters(countQuery);
727
- const [{ count: total }] = await countQuery.count('* as count');
910
+ const [{ count: totalRaw }] = await countQuery.count('* as count');
911
+ const total = Number(totalRaw);
728
912
  // Fetch page
729
913
  const offset = (page - 1) * perPage;
730
914
  const dataQuery = this.db(table).orderBy('created_at', 'desc').limit(perPage).offset(offset);
@@ -746,7 +930,8 @@ export class DashboardStore {
746
930
  if (!this.emitter || typeof this.emitter.on !== 'function')
747
931
  return;
748
932
  const buildAndPersistEmail = (data, status) => {
749
- const msg = data?.message || data;
933
+ const d = data;
934
+ const msg = (d?.message || d);
750
935
  const record = {
751
936
  id: 0,
752
937
  from: extractAddresses(msg?.from) || 'unknown',
@@ -756,10 +941,14 @@ export class DashboardStore {
756
941
  subject: msg?.subject || '(no subject)',
757
942
  html: msg?.html || null,
758
943
  text: msg?.text || null,
759
- mailer: data?.mailerName || data?.mailer || 'unknown',
944
+ mailer: d?.mailerName || d?.mailer || 'unknown',
760
945
  status,
761
- messageId: data?.response?.messageId || data?.messageId || null,
762
- attachmentCount: Array.isArray(msg?.attachments) ? msg.attachments.length : 0,
946
+ messageId: d?.response?.messageId ||
947
+ d?.messageId ||
948
+ null,
949
+ attachmentCount: Array.isArray(msg?.attachments)
950
+ ? msg.attachments.length
951
+ : 0,
763
952
  timestamp: Date.now(),
764
953
  };
765
954
  this.recordEmail(record);
@@ -1,4 +1,21 @@
1
1
  import type { ApplicationService } from '@adonisjs/core/types';
2
+ /** Minimal interface for the Redis client methods used by CacheInspector. */
3
+ interface RedisClient {
4
+ ping(): Promise<string>;
5
+ info(section: string): Promise<string>;
6
+ dbsize(): Promise<number>;
7
+ scan(cursor: string, ...args: (string | number)[]): Promise<[string, string[]]>;
8
+ type(key: string): Promise<string>;
9
+ ttl(key: string): Promise<number>;
10
+ get(key: string): Promise<string | null>;
11
+ del(key: string): Promise<number>;
12
+ lrange(key: string, start: number, stop: number): Promise<string[]>;
13
+ smembers(key: string): Promise<string[]>;
14
+ zrange(key: string, start: number, stop: number, ...args: string[]): Promise<string[]>;
15
+ hgetall(key: string): Promise<Record<string, string>>;
16
+ xrange(key: string, start: string, end: string, ...args: (string | number)[]): Promise<unknown[]>;
17
+ call(...args: (string | number)[]): Promise<unknown>;
18
+ }
2
19
  export interface CacheStats {
3
20
  /** Whether the Redis connection is alive. */
4
21
  connected: boolean;
@@ -52,7 +69,7 @@ export interface CacheKeyDetail {
52
69
  */
53
70
  export declare class CacheInspector {
54
71
  private redis;
55
- constructor(redis: any);
72
+ constructor(redis: RedisClient);
56
73
  /**
57
74
  * Detect whether `@adonisjs/cache` or `@adonisjs/redis` is available
58
75
  * in the application container.
@@ -85,4 +102,5 @@ export declare class CacheInspector {
85
102
  */
86
103
  private getValueByType;
87
104
  }
105
+ export {};
88
106
  //# sourceMappingURL=cache_inspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache_inspector.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/integrations/cache_inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAM9D,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAA;IAElB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IAEZ,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IAEd,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAA;IAEf,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAA;IAEvB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAA;IAEvB,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAA;IAExB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAA;IAEX,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IAEZ,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,IAAI,EAAE,aAAa,EAAE,CAAA;IAErB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAA;IAEX,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IAEb,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IAEZ,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAA;IAEX,mEAAmE;IACnE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAMD;;;;;;GAMG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,GAAG;IAE9B;;;OAGG;WACU,WAAW,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IASnE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAoDrC;;;;;;OAMG;IACG,QAAQ,CAAC,OAAO,SAAM,EAAE,MAAM,SAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBrF;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqBzD;;;;OAIG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa9C;;OAEG;YACW,cAAc;CAkC7B"}
1
+ {"version":3,"file":"cache_inspector.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/integrations/cache_inspector.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export interface RedactedValue {
6
6
  }
7
7
  export interface SanitizedConfig {
8
8
  /** App configuration from `app.config.all()` with secrets redacted. */
9
- config: Record<string, any>;
9
+ config: Record<string, unknown>;
10
10
  }
11
11
  export interface SanitizedEnvVars {
12
12
  /** Environment variables from `process.env` with secrets redacted. */
@@ -1 +1 @@
1
- {"version":3,"file":"config_inspector.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/integrations/config_inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAM9D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,IAAI,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAA;CAC5C;AA4DD;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAE3C;;OAEG;IACH,SAAS,IAAI,eAAe;IAS5B;;OAEG;IACH,UAAU,IAAI,gBAAgB;CAmB/B"}
1
+ {"version":3,"file":"config_inspector.d.ts","sourceRoot":"","sources":["../../../../src/dashboard/integrations/config_inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAM9D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,IAAI,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAA;CAC5C;AA4DD;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAE3C;;OAEG;IACH,SAAS,IAAI,eAAe;IAY5B;;OAEG;IACH,UAAU,IAAI,gBAAgB;CAmB/B"}
@@ -137,9 +137,10 @@ function sanitizeObject(obj, seen = new WeakSet()) {
137
137
  if (Array.isArray(obj)) {
138
138
  return obj.map((item) => sanitizeObject(item, seen));
139
139
  }
140
+ const record = obj;
140
141
  const result = {};
141
- for (const key of Object.keys(obj)) {
142
- const value = obj[key];
142
+ for (const key of Object.keys(record)) {
143
+ const value = record[key];
143
144
  if (typeof value === 'string' && (isSensitiveKey(key) || isSensitiveValue(value))) {
144
145
  result[key] = redact(value);
145
146
  }