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.
- package/README.md +351 -171
- package/dist/configure.d.ts.map +1 -1
- package/dist/core/api-client.d.ts +73 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/config-utils.d.ts +109 -0
- package/dist/core/config-utils.d.ts.map +1 -0
- package/dist/core/constants.d.ts +11 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/dashboard-api.d.ts +65 -0
- package/dist/core/dashboard-api.d.ts.map +1 -0
- package/dist/core/dashboard-data-controller.d.ts +157 -0
- package/dist/core/dashboard-data-controller.d.ts.map +1 -0
- package/dist/core/debug-data-controller.d.ts +89 -0
- package/dist/core/debug-data-controller.d.ts.map +1 -0
- package/dist/core/feature-detect.d.ts +67 -0
- package/dist/core/feature-detect.d.ts.map +1 -0
- package/dist/core/formatters.d.ts +189 -0
- package/dist/core/formatters.d.ts.map +1 -0
- package/dist/core/history-buffer.d.ts +23 -0
- package/dist/core/history-buffer.d.ts.map +1 -0
- package/dist/core/icons.d.ts +36 -0
- package/dist/core/icons.d.ts.map +1 -0
- package/dist/core/index.d.ts +39 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +1961 -0
- package/dist/core/internals-utils.d.ts +71 -0
- package/dist/core/internals-utils.d.ts.map +1 -0
- package/dist/core/job-utils.d.ts +45 -0
- package/dist/core/job-utils.d.ts.map +1 -0
- package/dist/core/log-utils.d.ts +34 -0
- package/dist/core/log-utils.d.ts.map +1 -0
- package/dist/core/metrics.d.ts +41 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/pagination.d.ts +128 -0
- package/dist/core/pagination.d.ts.map +1 -0
- package/dist/core/query-utils.d.ts +35 -0
- package/dist/core/query-utils.d.ts.map +1 -0
- package/dist/core/resizable-columns.d.ts +18 -0
- package/dist/core/resizable-columns.d.ts.map +1 -0
- package/dist/core/routes.d.ts +12 -0
- package/dist/core/routes.d.ts.map +1 -0
- package/dist/core/server-stats-controller.d.ts +106 -0
- package/dist/core/server-stats-controller.d.ts.map +1 -0
- package/dist/core/sparkline.d.ts +80 -0
- package/dist/core/sparkline.d.ts.map +1 -0
- package/dist/core/theme.d.ts +42 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/trace-utils.d.ts +62 -0
- package/dist/core/trace-utils.d.ts.map +1 -0
- package/dist/core/transmit-adapter.d.ts +59 -0
- package/dist/core/transmit-adapter.d.ts.map +1 -0
- package/dist/core/types.d.ts +619 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/react/CacheSection-DGxMDlWK.js +146 -0
- package/dist/react/CacheTab-CnVW5PLs.js +123 -0
- package/dist/react/ConfigContent-CnsEI4j3.js +397 -0
- package/dist/react/ConfigSection-DPcrfqXY.js +11 -0
- package/dist/react/ConfigTab-BSWq_o2p.js +15 -0
- package/dist/react/CustomPaneTab-xjkYwTvH.js +104 -0
- package/dist/react/DataTable-YyShr5B-.js +55 -0
- package/dist/react/EmailsSection-CSyTg1aX.js +262 -0
- package/dist/react/EmailsTab-Dh2YSa_f.js +131 -0
- package/dist/react/EventsSection-C1pbJDfW.js +86 -0
- package/dist/react/EventsTab-eCh02cdd.js +63 -0
- package/dist/react/FilterBar-DQRXpWrb.js +50 -0
- package/dist/react/InternalsContent-DBzsI0CG.js +346 -0
- package/dist/react/InternalsSection-t7ihcWO-.js +32 -0
- package/dist/react/InternalsTab-Oij0A2fN.js +30 -0
- package/dist/react/JobsSection-CLAin5vU.js +187 -0
- package/dist/react/JobsTab-Dl5nrj2z.js +141 -0
- package/dist/react/LogsSection-C1p81fXO.js +212 -0
- package/dist/react/LogsTab-D-kR7PjX.js +88 -0
- package/dist/react/OverviewSection-nm3xdACz.js +539 -0
- package/dist/react/Pagination-BkmzUDY8.js +64 -0
- package/dist/react/QueriesSection-DB12HMfQ.js +461 -0
- package/dist/react/QueriesTab-fyBB1u_Y.js +90 -0
- package/dist/react/RequestsSection-DTqB81ac.js +209 -0
- package/dist/react/RoutesSection-DJWa4NPV.js +74 -0
- package/dist/react/RoutesTab-D3l8TOpu.js +74 -0
- package/dist/react/TimelineSection-C4d-jRX1.js +158 -0
- package/dist/react/TimelineTab-C5TFaSmQ.js +193 -0
- package/dist/react/WaterfallChart-Cj73WdfM.js +100 -0
- package/dist/react/core/api-client.d.ts +73 -0
- package/dist/react/core/api-client.d.ts.map +1 -0
- package/dist/react/core/config-utils.d.ts +109 -0
- package/dist/react/core/config-utils.d.ts.map +1 -0
- package/dist/react/core/constants.d.ts +11 -0
- package/dist/react/core/constants.d.ts.map +1 -0
- package/dist/react/core/dashboard-api.d.ts +65 -0
- package/dist/react/core/dashboard-api.d.ts.map +1 -0
- package/dist/react/core/dashboard-data-controller.d.ts +157 -0
- package/dist/react/core/dashboard-data-controller.d.ts.map +1 -0
- package/dist/react/core/debug-data-controller.d.ts +89 -0
- package/dist/react/core/debug-data-controller.d.ts.map +1 -0
- package/dist/react/core/feature-detect.d.ts +67 -0
- package/dist/react/core/feature-detect.d.ts.map +1 -0
- package/dist/react/core/formatters.d.ts +189 -0
- package/dist/react/core/formatters.d.ts.map +1 -0
- package/dist/react/core/history-buffer.d.ts +23 -0
- package/dist/react/core/history-buffer.d.ts.map +1 -0
- package/dist/react/core/icons.d.ts +36 -0
- package/dist/react/core/icons.d.ts.map +1 -0
- package/dist/react/core/index.d.ts +39 -0
- package/dist/react/core/index.d.ts.map +1 -0
- package/dist/react/core/internals-utils.d.ts +71 -0
- package/dist/react/core/internals-utils.d.ts.map +1 -0
- package/dist/react/core/job-utils.d.ts +45 -0
- package/dist/react/core/job-utils.d.ts.map +1 -0
- package/dist/react/core/log-utils.d.ts +34 -0
- package/dist/react/core/log-utils.d.ts.map +1 -0
- package/dist/react/core/metrics.d.ts +41 -0
- package/dist/react/core/metrics.d.ts.map +1 -0
- package/dist/react/core/pagination.d.ts +128 -0
- package/dist/react/core/pagination.d.ts.map +1 -0
- package/dist/react/core/query-utils.d.ts +35 -0
- package/dist/react/core/query-utils.d.ts.map +1 -0
- package/dist/react/core/resizable-columns.d.ts +18 -0
- package/dist/react/core/resizable-columns.d.ts.map +1 -0
- package/dist/react/core/routes.d.ts +12 -0
- package/dist/react/core/routes.d.ts.map +1 -0
- package/dist/react/core/server-stats-controller.d.ts +106 -0
- package/dist/react/core/server-stats-controller.d.ts.map +1 -0
- package/dist/react/core/sparkline.d.ts +80 -0
- package/dist/react/core/sparkline.d.ts.map +1 -0
- package/dist/react/core/theme.d.ts +42 -0
- package/dist/react/core/theme.d.ts.map +1 -0
- package/dist/react/core/trace-utils.d.ts +62 -0
- package/dist/react/core/trace-utils.d.ts.map +1 -0
- package/dist/react/core/transmit-adapter.d.ts +59 -0
- package/dist/react/core/transmit-adapter.d.ts.map +1 -0
- package/dist/react/core/types.d.ts +619 -0
- package/dist/react/core/types.d.ts.map +1 -0
- package/dist/react/index-UdTfSvtO.js +1074 -0
- package/dist/react/index.js +18 -0
- package/dist/react/react/components/Dashboard/DashboardPage.d.ts +17 -0
- package/dist/react/react/components/Dashboard/DashboardPage.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts +14 -0
- package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts +7 -0
- package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +9 -0
- package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/shared/DataTable.d.ts +27 -0
- package/dist/react/react/components/Dashboard/shared/DataTable.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts +17 -0
- package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/shared/Pagination.d.ts +13 -0
- package/dist/react/react/components/Dashboard/shared/Pagination.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts +12 -0
- package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts.map +1 -0
- package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts +16 -0
- package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/DebugPanel.d.ts +16 -0
- package/dist/react/react/components/DebugPanel/DebugPanel.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts +8 -0
- package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts +8 -0
- package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts +14 -0
- package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts +7 -0
- package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts +7 -0
- package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts +12 -0
- package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts +9 -0
- package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts +7 -0
- package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts +7 -0
- package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts +8 -0
- package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts.map +1 -0
- package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts +7 -0
- package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts.map +1 -0
- package/dist/react/react/components/StatsBar/MetricCard.d.ts +21 -0
- package/dist/react/react/components/StatsBar/MetricCard.d.ts.map +1 -0
- package/dist/react/react/components/StatsBar/Sparkline.d.ts +15 -0
- package/dist/react/react/components/StatsBar/Sparkline.d.ts.map +1 -0
- package/dist/react/react/components/StatsBar/StatsBar.d.ts +22 -0
- package/dist/react/react/components/StatsBar/StatsBar.d.ts.map +1 -0
- package/dist/react/react/components/shared/Badge.d.ts +32 -0
- package/dist/react/react/components/shared/Badge.d.ts.map +1 -0
- package/dist/react/react/components/shared/ConfigContent.d.ts +13 -0
- package/dist/react/react/components/shared/ConfigContent.d.ts.map +1 -0
- package/dist/react/react/components/shared/InternalsContent.d.ts +10 -0
- package/dist/react/react/components/shared/InternalsContent.d.ts.map +1 -0
- package/dist/react/react/components/shared/JsonViewer.d.ts +12 -0
- package/dist/react/react/components/shared/JsonViewer.d.ts.map +1 -0
- package/dist/react/react/components/shared/ThemeToggle.d.ts +13 -0
- package/dist/react/react/components/shared/ThemeToggle.d.ts.map +1 -0
- package/dist/react/react/components/shared/Tooltip.d.ts +16 -0
- package/dist/react/react/components/shared/Tooltip.d.ts.map +1 -0
- package/dist/react/react/hooks/useApiClient.d.ts +10 -0
- package/dist/react/react/hooks/useApiClient.d.ts.map +1 -0
- package/dist/react/react/hooks/useDashboardApiBase.d.ts +19 -0
- package/dist/react/react/hooks/useDashboardApiBase.d.ts.map +1 -0
- package/dist/react/react/hooks/useDashboardData.d.ts +27 -0
- package/dist/react/react/hooks/useDashboardData.d.ts.map +1 -0
- package/dist/react/react/hooks/useDebugData.d.ts +17 -0
- package/dist/react/react/hooks/useDebugData.d.ts.map +1 -0
- package/dist/react/react/hooks/useFeatures.d.ts +13 -0
- package/dist/react/react/hooks/useFeatures.d.ts.map +1 -0
- package/dist/react/react/hooks/useResizableTable.d.ts +13 -0
- package/dist/react/react/hooks/useResizableTable.d.ts.map +1 -0
- package/dist/react/react/hooks/useServerStats.d.ts +21 -0
- package/dist/react/react/hooks/useServerStats.d.ts.map +1 -0
- package/dist/react/react/hooks/useTheme.d.ts +12 -0
- package/dist/react/react/hooks/useTheme.d.ts.map +1 -0
- package/dist/react/react/index.d.ts +14 -0
- package/dist/react/react/index.d.ts.map +1 -0
- package/dist/react/style.css +1 -0
- package/dist/react/useApiClient-BVtNCmnL.js +9 -0
- package/dist/react/useDashboardApiBase-Bi36pJ2L.js +14 -0
- package/dist/react/useResizableTable-CNJmACdt.js +13 -0
- package/dist/src/collectors/app_collector.d.ts.map +1 -1
- package/dist/src/collectors/app_collector.js +30 -2
- package/dist/src/collectors/auto_detect.d.ts +31 -0
- package/dist/src/collectors/auto_detect.d.ts.map +1 -0
- package/dist/src/collectors/auto_detect.js +120 -0
- package/dist/src/collectors/collector.d.ts +17 -0
- package/dist/src/collectors/collector.d.ts.map +1 -1
- package/dist/src/collectors/db_pool_collector.d.ts.map +1 -1
- package/dist/src/collectors/db_pool_collector.js +35 -1
- package/dist/src/collectors/http_collector.d.ts +4 -3
- package/dist/src/collectors/http_collector.d.ts.map +1 -1
- package/dist/src/collectors/http_collector.js +28 -11
- package/dist/src/collectors/index.d.ts +2 -0
- package/dist/src/collectors/index.d.ts.map +1 -1
- package/dist/src/collectors/index.js +1 -0
- package/dist/src/collectors/log_collector.d.ts +11 -4
- package/dist/src/collectors/log_collector.d.ts.map +1 -1
- package/dist/src/collectors/log_collector.js +51 -5
- package/dist/src/collectors/process_collector.d.ts.map +1 -1
- package/dist/src/collectors/process_collector.js +4 -0
- package/dist/src/collectors/queue_collector.d.ts.map +1 -1
- package/dist/src/collectors/queue_collector.js +55 -1
- package/dist/src/collectors/redis_collector.d.ts.map +1 -1
- package/dist/src/collectors/redis_collector.js +42 -3
- package/dist/src/collectors/system_collector.d.ts.map +1 -1
- package/dist/src/collectors/system_collector.js +4 -0
- package/dist/src/controller/api_controller.d.ts +101 -0
- package/dist/src/controller/api_controller.d.ts.map +1 -0
- package/dist/src/controller/api_controller.js +131 -0
- package/dist/src/controller/debug_controller.d.ts +19 -10
- package/dist/src/controller/debug_controller.d.ts.map +1 -1
- package/dist/src/controller/debug_controller.js +118 -101
- package/dist/src/core/theme.d.ts +42 -0
- package/dist/src/core/theme.d.ts.map +1 -0
- package/dist/src/core/theme.js +115 -0
- package/dist/src/dashboard/chart_aggregator.d.ts.map +1 -1
- package/dist/src/dashboard/chart_aggregator.js +3 -2
- package/dist/src/dashboard/dashboard_controller.d.ts +10 -14
- package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -1
- package/dist/src/dashboard/dashboard_controller.js +132 -250
- package/dist/src/dashboard/dashboard_store.d.ts +62 -19
- package/dist/src/dashboard/dashboard_store.d.ts.map +1 -1
- package/dist/src/dashboard/dashboard_store.js +242 -53
- package/dist/src/dashboard/integrations/cache_inspector.d.ts +19 -1
- package/dist/src/dashboard/integrations/cache_inspector.d.ts.map +1 -1
- package/dist/src/dashboard/integrations/config_inspector.d.ts +1 -1
- package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -1
- package/dist/src/dashboard/integrations/config_inspector.js +3 -2
- package/dist/src/dashboard/integrations/queue_inspector.d.ts +55 -10
- package/dist/src/dashboard/integrations/queue_inspector.d.ts.map +1 -1
- package/dist/src/dashboard/integrations/queue_inspector.js +70 -24
- package/dist/src/dashboard/migrator.d.ts +5 -0
- package/dist/src/dashboard/migrator.d.ts.map +1 -1
- package/dist/src/dashboard/migrator.js +44 -9
- package/dist/src/dashboard/models/stats_event.d.ts +1 -1
- package/dist/src/dashboard/models/stats_event.d.ts.map +1 -1
- package/dist/src/dashboard/models/stats_log.d.ts +1 -1
- package/dist/src/dashboard/models/stats_log.d.ts.map +1 -1
- package/dist/src/dashboard/models/stats_query.d.ts +1 -1
- package/dist/src/dashboard/models/stats_query.d.ts.map +1 -1
- package/dist/src/dashboard/models/stats_saved_filter.d.ts +1 -1
- package/dist/src/dashboard/models/stats_saved_filter.d.ts.map +1 -1
- package/dist/src/dashboard/models/stats_trace.d.ts +2 -1
- package/dist/src/dashboard/models/stats_trace.d.ts.map +1 -1
- package/dist/src/data/data_access.d.ts +105 -0
- package/dist/src/data/data_access.d.ts.map +1 -0
- package/dist/src/data/data_access.js +310 -0
- package/dist/src/data/index.d.ts +3 -0
- package/dist/src/data/index.d.ts.map +1 -0
- package/dist/src/data/index.js +1 -0
- package/dist/src/debug/debug_store.d.ts +20 -1
- package/dist/src/debug/debug_store.d.ts.map +1 -1
- package/dist/src/debug/debug_store.js +43 -15
- package/dist/src/debug/email_collector.d.ts +6 -2
- package/dist/src/debug/email_collector.d.ts.map +1 -1
- package/dist/src/debug/email_collector.js +3 -0
- package/dist/src/debug/event_collector.d.ts +6 -2
- package/dist/src/debug/event_collector.d.ts.map +1 -1
- package/dist/src/debug/event_collector.js +12 -8
- package/dist/src/debug/query_collector.d.ts +6 -2
- package/dist/src/debug/query_collector.d.ts.map +1 -1
- package/dist/src/debug/query_collector.js +3 -0
- package/dist/src/debug/ring_buffer.d.ts +1 -0
- package/dist/src/debug/ring_buffer.d.ts.map +1 -1
- package/dist/src/debug/ring_buffer.js +5 -2
- package/dist/src/debug/route_inspector.d.ts +2 -2
- package/dist/src/debug/route_inspector.d.ts.map +1 -1
- package/dist/src/debug/route_inspector.js +4 -3
- package/dist/src/debug/trace_collector.d.ts +7 -3
- package/dist/src/debug/trace_collector.d.ts.map +1 -1
- package/dist/src/debug/trace_collector.js +7 -5
- package/dist/src/debug/types.d.ts +107 -2
- package/dist/src/debug/types.d.ts.map +1 -1
- package/dist/src/debug/types.js +1 -1
- package/dist/src/define_config.d.ts +49 -5
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +361 -4
- package/dist/src/edge/bootstrap.d.ts +17 -0
- package/dist/src/edge/bootstrap.d.ts.map +1 -0
- package/dist/src/edge/bootstrap.js +29 -0
- package/dist/src/edge/client/dashboard.js +2 -3619
- package/dist/src/edge/client/debug-panel-deferred.js +1 -0
- package/dist/src/edge/client/debug-panel.js +1 -2140
- package/dist/src/edge/client/stats-bar.js +1 -801
- package/dist/src/edge/client-vue/dashboard.js +5 -0
- package/dist/src/edge/client-vue/debug-panel-deferred.js +4 -0
- package/dist/src/edge/client-vue/debug-panel.js +4 -0
- package/dist/src/edge/client-vue/stats-bar.js +4 -0
- package/dist/src/edge/plugin.d.ts +35 -2
- package/dist/src/edge/plugin.d.ts.map +1 -1
- package/dist/src/edge/plugin.js +30 -66
- package/dist/src/edge/types.d.ts +46 -0
- package/dist/src/edge/types.d.ts.map +1 -0
- package/dist/src/edge/types.js +4 -0
- package/dist/src/edge/views/dashboard.edge +1 -358
- package/dist/src/edge/views/debug-panel.edge +2 -154
- package/dist/src/edge/views/stats-bar.edge +15 -48
- package/dist/src/engine/stats_engine.d.ts +18 -0
- package/dist/src/engine/stats_engine.d.ts.map +1 -1
- package/dist/src/engine/stats_engine.js +45 -2
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/log_stream/log_stream_provider.d.ts.map +1 -1
- package/dist/src/log_stream/log_stream_provider.js +21 -4
- package/dist/src/log_stream/log_stream_service.d.ts +8 -1
- package/dist/src/log_stream/log_stream_service.d.ts.map +1 -1
- package/dist/src/log_stream/log_stream_service.js +27 -3
- package/dist/src/middleware/request_tracking_middleware.d.ts +1 -1
- package/dist/src/middleware/request_tracking_middleware.d.ts.map +1 -1
- package/dist/src/middleware/request_tracking_middleware.js +21 -6
- package/dist/src/prometheus/prometheus_collector.d.ts +2 -1
- package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
- package/dist/src/provider/server_stats_provider.d.ts +100 -0
- package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
- package/dist/src/provider/server_stats_provider.js +460 -104
- package/dist/src/routes/access_middleware.d.ts +2 -1
- package/dist/src/routes/access_middleware.d.ts.map +1 -1
- package/dist/src/routes/access_middleware.js +7 -1
- package/dist/src/routes/index.d.ts +4 -0
- package/dist/src/routes/index.d.ts.map +1 -0
- package/dist/src/routes/index.js +1 -0
- package/dist/src/routes/register_routes.d.ts +103 -0
- package/dist/src/routes/register_routes.d.ts.map +1 -0
- package/dist/src/routes/register_routes.js +356 -0
- package/dist/src/routes/router_types.d.ts +29 -0
- package/dist/src/routes/router_types.d.ts.map +1 -0
- package/dist/src/routes/router_types.js +1 -0
- package/dist/src/stubs/config.stub +12 -32
- package/dist/src/styles/components.css +1048 -0
- package/dist/src/{edge/client → styles}/dashboard.css +299 -736
- package/dist/src/{edge/client → styles}/debug-panel.css +117 -633
- package/dist/src/{edge/client → styles}/stats-bar.css +28 -10
- package/dist/src/styles/tokens.css +153 -0
- package/dist/src/styles/utilities.css +75 -0
- package/dist/src/types.d.ts +119 -16
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/app_import.d.ts +23 -0
- package/dist/src/utils/app_import.d.ts.map +1 -0
- package/dist/src/utils/app_import.js +44 -0
- package/dist/src/utils/json_helpers.d.ts +2 -2
- package/dist/src/utils/json_helpers.d.ts.map +1 -1
- package/dist/src/utils/logger.d.ts +17 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +27 -0
- package/dist/src/utils/mail_helpers.d.ts +1 -1
- package/dist/src/utils/mail_helpers.d.ts.map +1 -1
- package/dist/src/utils/mail_helpers.js +1 -1
- package/dist/vue/CacheSection-C788Yfai.js +149 -0
- package/dist/vue/CacheTab-BPisYYiQ.js +104 -0
- package/dist/vue/ConfigSection-CRzYxqW2.js +576 -0
- package/dist/vue/ConfigTab-C8cafGUj.js +361 -0
- package/dist/vue/CustomPaneTab-BJxT5Dp7.js +172 -0
- package/dist/vue/EmailsSection-C8JFMtW7.js +206 -0
- package/dist/vue/EmailsTab-DhFhoNmU.js +157 -0
- package/dist/vue/EventsSection-C4wXUgxG.js +107 -0
- package/dist/vue/EventsTab-DQ4Nd6AK.js +97 -0
- package/dist/vue/FilterBar.vue_vue_type_script_setup_true_lang-ClJ37hhT.js +62 -0
- package/dist/vue/InternalsSection-BJUXE-5F.js +468 -0
- package/dist/vue/InternalsTab-DEMjqtlw.js +471 -0
- package/dist/vue/JobsSection-CsKWTjgN.js +187 -0
- package/dist/vue/JobsTab-BCvhOARO.js +117 -0
- package/dist/vue/JsonViewer.vue_vue_type_script_setup_true_lang-Vsqar1zx.js +67 -0
- package/dist/vue/LogsSection-BFVjSZ24.js +227 -0
- package/dist/vue/LogsTab-DpEQ7euu.js +122 -0
- package/dist/vue/OverviewSection-CbMdAido.js +849 -0
- package/dist/vue/PaginationControls.vue_vue_type_script_setup_true_lang-CuN7g_8Z.js +50 -0
- package/dist/vue/QueriesSection-BPiv7u3r.js +429 -0
- package/dist/vue/QueriesTab-C8_7oprC.js +107 -0
- package/dist/vue/RequestsSection-LtImH4rD.js +243 -0
- package/dist/vue/RoutesSection-CrxOxmzx.js +106 -0
- package/dist/vue/RoutesTab-Dz0MkZuF.js +80 -0
- package/dist/vue/TimelineSection-DLxMW2J_.js +186 -0
- package/dist/vue/TimelineTab-Db6lKKsD.js +250 -0
- package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +118 -0
- package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts +18 -0
- package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts +3 -0
- package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts +3 -0
- package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts +3 -0
- package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts +45 -0
- package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts +5 -0
- package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts +11 -0
- package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts +29 -0
- package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts +12 -0
- package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts +11 -0
- package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts.map +1 -0
- package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts +10 -0
- package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts +21 -0
- package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts +12 -0
- package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts +11 -0
- package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts +11 -0
- package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts +12 -0
- package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts +12 -0
- package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts +11 -0
- package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts +13 -0
- package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts +15 -0
- package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts +12 -0
- package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts +12 -0
- package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts.map +1 -0
- package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +15 -0
- package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts.map +1 -0
- package/dist/vue/components/StatsBar/MetricCard.vue.d.ts +19 -0
- package/dist/vue/components/StatsBar/MetricCard.vue.d.ts.map +1 -0
- package/dist/vue/components/StatsBar/Sparkline.vue.d.ts +17 -0
- package/dist/vue/components/StatsBar/Sparkline.vue.d.ts.map +1 -0
- package/dist/vue/components/StatsBar/StatsBar.vue.d.ts +22 -0
- package/dist/vue/components/StatsBar/StatsBar.vue.d.ts.map +1 -0
- package/dist/vue/components/shared/JsonViewer.vue.d.ts +13 -0
- package/dist/vue/components/shared/JsonViewer.vue.d.ts.map +1 -0
- package/dist/vue/components/shared/ThemeToggle.vue.d.ts +8 -0
- package/dist/vue/components/shared/ThemeToggle.vue.d.ts.map +1 -0
- package/dist/vue/composables/useApiClient.d.ts +9 -0
- package/dist/vue/composables/useApiClient.d.ts.map +1 -0
- package/dist/vue/composables/useDashboardData.d.ts +53 -0
- package/dist/vue/composables/useDashboardData.d.ts.map +1 -0
- package/dist/vue/composables/useDebugData.d.ts +25 -0
- package/dist/vue/composables/useDebugData.d.ts.map +1 -0
- package/dist/vue/composables/useFeatures.d.ts +80 -0
- package/dist/vue/composables/useFeatures.d.ts.map +1 -0
- package/dist/vue/composables/useResizableTable.d.ts +16 -0
- package/dist/vue/composables/useResizableTable.d.ts.map +1 -0
- package/dist/vue/composables/useServerStats.d.ts +104 -0
- package/dist/vue/composables/useServerStats.d.ts.map +1 -0
- package/dist/vue/composables/useTheme.d.ts +6 -0
- package/dist/vue/composables/useTheme.d.ts.map +1 -0
- package/dist/vue/index-qCQpBftQ.js +1233 -0
- package/dist/vue/index.d.ts +10 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +11 -0
- package/dist/vue/style.css +1 -0
- package/dist/vue/useApiClient-BQQ9CF-q.js +10 -0
- package/dist/vue/useResizableTable-BoivAevK.js +17 -0
- package/package.json +72 -10
- package/dist/src/dashboard/dashboard_routes.d.ts +0 -16
- package/dist/src/dashboard/dashboard_routes.d.ts.map +0 -1
- package/dist/src/dashboard/dashboard_routes.js +0 -77
- package/dist/src/routes/debug_routes.d.ts +0 -14
- package/dist/src/routes/debug_routes.d.ts.map +0 -1
- package/dist/src/routes/debug_routes.js +0 -42
- package/dist/src/routes/stats_routes.d.ts +0 -14
- package/dist/src/routes/stats_routes.d.ts.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
await
|
|
54
|
-
await
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
+
catch (err) {
|
|
107
|
+
log.warn('dashboard: retention cleanup failed — ' + err?.message);
|
|
62
108
|
}
|
|
63
|
-
}
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
241
|
-
const requestId = await this.recordRequest(
|
|
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
|
-
|
|
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 =
|
|
796
|
+
emailActivity.sent = count;
|
|
618
797
|
else if (status === 'queued')
|
|
619
|
-
emailActivity.queued =
|
|
798
|
+
emailActivity.queued = count;
|
|
620
799
|
else if (status === 'failed')
|
|
621
|
-
emailActivity.failed =
|
|
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:
|
|
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
|
|
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:
|
|
944
|
+
mailer: d?.mailerName || d?.mailer || 'unknown',
|
|
760
945
|
status,
|
|
761
|
-
messageId:
|
|
762
|
-
|
|
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:
|
|
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,
|
|
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,
|
|
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,
|
|
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(
|
|
142
|
-
const value =
|
|
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
|
}
|