adonisjs-server-stats 1.6.2 → 1.6.11

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 (88) hide show
  1. package/README.md +1 -0
  2. package/dist/core/api-client.d.ts.map +1 -1
  3. package/dist/core/dashboard-api.d.ts +2 -1
  4. package/dist/core/dashboard-api.d.ts.map +1 -1
  5. package/dist/core/dashboard-data-controller.d.ts +2 -0
  6. package/dist/core/dashboard-data-controller.d.ts.map +1 -1
  7. package/dist/core/debug-data-controller.d.ts +1 -0
  8. package/dist/core/debug-data-controller.d.ts.map +1 -1
  9. package/dist/core/history-buffer.d.ts.map +1 -1
  10. package/dist/core/index.js +404 -361
  11. package/dist/core/server-stats-controller.d.ts +1 -0
  12. package/dist/core/server-stats-controller.d.ts.map +1 -1
  13. package/dist/core/sparkline.d.ts.map +1 -1
  14. package/dist/react/core/api-client.d.ts.map +1 -1
  15. package/dist/react/core/dashboard-api.d.ts +2 -1
  16. package/dist/react/core/dashboard-api.d.ts.map +1 -1
  17. package/dist/react/core/dashboard-data-controller.d.ts +2 -0
  18. package/dist/react/core/dashboard-data-controller.d.ts.map +1 -1
  19. package/dist/react/core/debug-data-controller.d.ts +1 -0
  20. package/dist/react/core/debug-data-controller.d.ts.map +1 -1
  21. package/dist/react/core/history-buffer.d.ts.map +1 -1
  22. package/dist/react/core/server-stats-controller.d.ts +1 -0
  23. package/dist/react/core/server-stats-controller.d.ts.map +1 -1
  24. package/dist/react/core/sparkline.d.ts.map +1 -1
  25. package/dist/src/collectors/app_collector.d.ts.map +1 -1
  26. package/dist/src/collectors/db_pool_collector.d.ts.map +1 -1
  27. package/dist/src/collectors/redis_collector.d.ts.map +1 -1
  28. package/dist/src/controller/debug_controller.d.ts +3 -1
  29. package/dist/src/controller/debug_controller.d.ts.map +1 -1
  30. package/dist/src/controller/debug_controller.js +25 -20
  31. package/dist/src/dashboard/chart_aggregator.js +42 -41
  32. package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -1
  33. package/dist/src/dashboard/dashboard_controller.js +7 -5
  34. package/dist/src/dashboard/dashboard_store.d.ts +61 -19
  35. package/dist/src/dashboard/dashboard_store.d.ts.map +1 -1
  36. package/dist/src/dashboard/dashboard_store.js +677 -474
  37. package/dist/src/dashboard/integrations/config_inspector.d.ts +4 -0
  38. package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -1
  39. package/dist/src/dashboard/integrations/config_inspector.js +16 -2
  40. package/dist/src/dashboard/migrator.d.ts.map +1 -1
  41. package/dist/src/dashboard/migrator.js +30 -4
  42. package/dist/src/data/data_access.d.ts.map +1 -1
  43. package/dist/src/data/data_access.js +40 -7
  44. package/dist/src/debug/debug_store.d.ts.map +1 -1
  45. package/dist/src/debug/debug_store.js +17 -7
  46. package/dist/src/debug/email_collector.d.ts +2 -0
  47. package/dist/src/debug/email_collector.d.ts.map +1 -1
  48. package/dist/src/debug/email_collector.js +17 -13
  49. package/dist/src/debug/event_collector.d.ts +7 -1
  50. package/dist/src/debug/event_collector.d.ts.map +1 -1
  51. package/dist/src/debug/event_collector.js +46 -17
  52. package/dist/src/debug/query_collector.d.ts +12 -0
  53. package/dist/src/debug/query_collector.d.ts.map +1 -1
  54. package/dist/src/debug/query_collector.js +35 -5
  55. package/dist/src/debug/ring_buffer.d.ts +14 -0
  56. package/dist/src/debug/ring_buffer.d.ts.map +1 -1
  57. package/dist/src/debug/ring_buffer.js +48 -2
  58. package/dist/src/debug/trace_collector.d.ts +1 -0
  59. package/dist/src/debug/trace_collector.d.ts.map +1 -1
  60. package/dist/src/debug/trace_collector.js +4 -1
  61. package/dist/src/define_config.d.ts.map +1 -1
  62. package/dist/src/define_config.js +5 -1
  63. package/dist/src/edge/client/dashboard.js +2 -2
  64. package/dist/src/edge/client/debug-panel-deferred.js +1 -1
  65. package/dist/src/edge/client/debug-panel.js +1 -1
  66. package/dist/src/edge/client/stats-bar.js +1 -1
  67. package/dist/src/edge/client-vue/dashboard.js +5 -5
  68. package/dist/src/edge/client-vue/debug-panel-deferred.js +2 -2
  69. package/dist/src/edge/client-vue/debug-panel.js +2 -2
  70. package/dist/src/edge/client-vue/stats-bar.js +3 -3
  71. package/dist/src/engine/request_metrics.d.ts.map +1 -1
  72. package/dist/src/engine/request_metrics.js +33 -3
  73. package/dist/src/log_stream/log_stream_provider.js +1 -1
  74. package/dist/src/log_stream/log_stream_service.d.ts +1 -0
  75. package/dist/src/log_stream/log_stream_service.d.ts.map +1 -1
  76. package/dist/src/log_stream/log_stream_service.js +13 -3
  77. package/dist/src/prometheus/prometheus_collector.d.ts +14 -3
  78. package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
  79. package/dist/src/prometheus/prometheus_collector.js +209 -198
  80. package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
  81. package/dist/src/provider/server_stats_provider.js +17 -31
  82. package/dist/src/stubs/config.stub +3 -0
  83. package/dist/src/types.d.ts +12 -0
  84. package/dist/src/types.d.ts.map +1 -1
  85. package/dist/src/utils/logger.d.ts +7 -5
  86. package/dist/src/utils/logger.d.ts.map +1 -1
  87. package/dist/src/utils/logger.js +27 -5
  88. package/package.json +6 -2
@@ -5,7 +5,7 @@ import { StatsEngine } from '../engine/stats_engine.js';
5
5
  import { LogStreamService } from '../log_stream/log_stream_service.js';
6
6
  import { setShouldShow, setTraceCollector, setDashboardPath, setExcludedPrefixes, setOnRequestComplete, } from '../middleware/request_tracking_middleware.js';
7
7
  import { registerAllRoutes } from '../routes/register_routes.js';
8
- import { log, dim, bold } from '../utils/logger.js';
8
+ import { log, dim, bold, setVerbose } from '../utils/logger.js';
9
9
  export default class ServerStatsProvider {
10
10
  app;
11
11
  intervalId = null;
@@ -52,6 +52,9 @@ export default class ServerStatsProvider {
52
52
  log.warn('no config found — is config/server_stats.ts set up?');
53
53
  return;
54
54
  }
55
+ // Re-apply verbose setting from resolved config so the logger
56
+ // respects it even if defineConfig() ran in a separate context.
57
+ setVerbose(config.verbose);
55
58
  log.info('booting...');
56
59
  // Wire up the per-request shouldShow callback
57
60
  if (config.shouldShow) {
@@ -403,7 +406,7 @@ export default class ServerStatsProvider {
403
406
  const stats = await this.engine.collect();
404
407
  if (transmit && config.channelName) {
405
408
  ;
406
- transmit.broadcast(config.channelName, JSON.parse(JSON.stringify(stats)));
409
+ transmit.broadcast(config.channelName, stats);
407
410
  }
408
411
  if (prometheusCollector) {
409
412
  ;
@@ -614,43 +617,23 @@ export default class ServerStatsProvider {
614
617
  const debugStore = this.debugStore;
615
618
  const dashStore = this.dashboardStore;
616
619
  let lastQueryId = 0;
617
- let lastEventId = 0;
618
- let warnedPersistOnce = false;
619
620
  setOnRequestComplete(({ method, url, statusCode, duration, trace }) => {
620
621
  if (!dashStore.isReady())
621
622
  return;
622
- // Gather new queries since last request
623
- const allQueries = debugStore.queries.getQueries();
624
- const newQueries = allQueries.filter((q) => q.id > lastQueryId);
625
- if (allQueries.length > 0) {
626
- lastQueryId = allQueries[allQueries.length - 1].id;
623
+ // O(K) collection of new queries since last seen ID — avoids
624
+ // copying the entire 500-item ring buffer on every request.
625
+ const newQueries = debugStore.queries.getQueriesSince(lastQueryId);
626
+ if (newQueries.length > 0) {
627
+ lastQueryId = newQueries[newQueries.length - 1].id;
627
628
  }
628
- // Gather new events since last request
629
- const allEvents = debugStore.events.getEvents();
630
- const newEvents = allEvents.filter((e) => e.id > lastEventId);
631
- if (allEvents.length > 0) {
632
- lastEventId = allEvents[allEvents.length - 1].id;
633
- }
634
- // Persist asynchronously (fire-and-forget)
635
- dashStore
636
- .persistRequest({
629
+ // Queue for batch persistence (flushed every 500ms)
630
+ dashStore.persistRequest({
637
631
  method,
638
632
  url,
639
633
  statusCode,
640
634
  duration,
641
635
  queries: newQueries,
642
636
  trace: trace ?? null,
643
- })
644
- .then((requestId) => {
645
- if (requestId !== null && newEvents.length > 0) {
646
- return dashStore.recordEvents(requestId, newEvents);
647
- }
648
- })
649
- .catch((err) => {
650
- if (!warnedPersistOnce) {
651
- warnedPersistOnce = true;
652
- log.warn('failed to persist request data — ' + (err?.message || 'unknown error'));
653
- }
654
637
  });
655
638
  });
656
639
  // ── Transmit streaming for real-time dashboard updates ────────
@@ -667,6 +650,9 @@ export default class ServerStatsProvider {
667
650
  if (!this.transmitChannels.includes(dashChannel)) {
668
651
  this.transmitChannels.push(dashChannel);
669
652
  }
653
+ // Broadcast overview metrics every 30s (not 5s) to reduce SQLite
654
+ // pool pressure. Each broadcast runs 5+ sequential queries on the
655
+ // single-connection pool, blocking all dashboard API reads.
670
656
  this.dashboardBroadcastTimer = setInterval(async () => {
671
657
  try {
672
658
  if (!dashStore.isReady())
@@ -684,7 +670,7 @@ export default class ServerStatsProvider {
684
670
  catch {
685
671
  // Silently ignore
686
672
  }
687
- }, 5_000);
673
+ }, 30_000);
688
674
  }
689
675
  }
690
676
  /** Return diagnostics state for the Internals endpoint. */
@@ -699,7 +685,7 @@ export default class ServerStatsProvider {
699
685
  },
700
686
  dashboardBroadcast: {
701
687
  active: this.dashboardBroadcastTimer !== null,
702
- intervalMs: 5000,
688
+ intervalMs: 30_000,
703
689
  },
704
690
  debugBroadcast: {
705
691
  active: this.debugBroadcastTimer !== null,
@@ -16,4 +16,7 @@ export default defineConfig({
16
16
 
17
17
  // Enable the full-page dashboard at /__stats
18
18
  // dashboard: true,
19
+
20
+ // Log detailed initialization steps (SQLite, migrations, routes, etc.)
21
+ // verbose: true,
19
22
  })
@@ -510,6 +510,16 @@ export interface ServerStatsConfig {
510
510
  dashboard?: boolean | DashboardConfig;
511
511
  /** Advanced options. */
512
512
  advanced?: AdvancedConfig;
513
+ /**
514
+ * Enable verbose logging during initialization.
515
+ *
516
+ * When `true`, the package logs detailed info messages about each
517
+ * boot step (SQLite init, migrations, route registration, etc.).
518
+ * When `false` (the default), only warnings are logged.
519
+ *
520
+ * @default false
521
+ */
522
+ verbose?: boolean;
513
523
  }
514
524
  /**
515
525
  * Fully resolved configuration with all defaults applied.
@@ -537,5 +547,7 @@ export interface ResolvedServerStatsConfig {
537
547
  devToolbar?: DevToolbarOptions;
538
548
  /** Optional access-control callback. */
539
549
  shouldShow?: (ctx: import('@adonisjs/core/http').HttpContext) => boolean;
550
+ /** Whether verbose informational logging is enabled. Always present after `defineConfig()`. */
551
+ verbose: boolean;
540
552
  }
541
553
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAMnD;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAG1B,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAA;IAEnB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IAEd,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAA;IAEnB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAA;IAEpB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;;;;;;;;;OAWG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IAIjB;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;;;;OAQG;IACH,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;OAUG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB,iDAAiD;IACjD,qBAAqB,EAAE,MAAM,CAAA;IAI7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAA;IAElB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAA;IAElB,iEAAiE;IACjE,aAAa,EAAE,MAAM,CAAA;IAErB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IAIjB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAA;IAEhB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAA;IAEzB,sDAAsD;IACtD,qBAAqB,EAAE,MAAM,CAAA;IAE7B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAA;IAEtB;;;;;;;;;;OAUG;IACH,YAAY,EAAE,MAAM,CAAA;IAIpB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAA;IAEnB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAA;IAEpB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAA;IAEpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAA;IAEnB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IAIxB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAA;IAEvB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAA;IAEvB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAA;IAExB,iDAAiD;IACjD,mBAAmB,EAAE,MAAM,CAAA;IAE3B,gDAAgD;IAChD,kBAAkB,EAAE,MAAM,CAAA;IAE1B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAA;IAIpB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IAEnB,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAA;IAEvB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAA;IAIrB,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAA;IAEvB,0DAA0D;IAC1D,iBAAiB,EAAE,MAAM,CAAA;IAEzB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAA;IAExB,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAMD;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAA;IAEpB,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAA;IAEtB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAA;IAErB,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IAEnB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAEnC;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;;;;;;;;;;;;;;OAgBG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE7B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC5B;AAMD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAE/B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAEzB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;IAEvC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAE/C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAE9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,qBAAqB,EAAE,WAAW,KAAK,OAAO,CAAA;IAMxE,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC9B,kDAAkD;IAClD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,qBAAqB,EAAE,WAAW,KAAK,OAAO,CAAA;IACvE,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAA;IACjC,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAA;IAElB,6DAA6D;IAC7D,SAAS,EAAE,UAAU,GAAG,MAAM,CAAA;IAE9B,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAA;IAEnB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAA;IAExB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAAA;IAEtC,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAA;IAEnB,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAE/C,0CAA0C;IAC1C,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAE9B,wCAAwC;IACxC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,qBAAqB,EAAE,WAAW,KAAK,OAAO,CAAA;CACzE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,18 @@ export declare const dim: (s: string) => string;
2
2
  export declare const bold: (s: string) => string;
3
3
  export declare const green: (s: string) => string;
4
4
  export declare const yellow: (s: string) => string;
5
+ /** Enable or disable verbose informational logging. */
6
+ export declare function setVerbose(enabled: boolean): void;
5
7
  export declare const log: {
6
- /** Tagged info message. */
8
+ /** Tagged info message. Only logs when verbose mode is enabled. */
7
9
  info(message: string): void;
8
- /** Tagged warning (yellow). */
10
+ /** Tagged warning (yellow). Always logs regardless of verbose setting. */
9
11
  warn(message: string): void;
10
- /** Tagged info with a blank line before. */
12
+ /** Tagged info with a blank line before. Only logs when verbose mode is enabled. */
11
13
  section(message: string): void;
12
- /** Bulleted list under a section heading. */
14
+ /** Bulleted list under a section heading. Only logs when verbose mode is enabled. */
13
15
  list(heading: string, items: string[]): void;
14
- /** Multi-line block (for code examples, hints, etc). */
16
+ /** Multi-line block (for code examples, hints, etc). Only logs when verbose mode is enabled. */
15
17
  block(heading: string, lines: string[]): void;
16
18
  };
17
19
  //# sourceMappingURL=logger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAyB,CAAA;AACtD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAyB,CAAA;AACvD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAA0B,CAAA;AACzD,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAA0B,CAAA;AAE1D,eAAO,MAAM,GAAG;IACd,2BAA2B;kBACb,MAAM;IAIpB,+BAA+B;kBACjB,MAAM;IAIpB,4CAA4C;qBAC3B,MAAM;IAIvB,6CAA6C;kBAC/B,MAAM,SAAS,MAAM,EAAE;IAMrC,wDAAwD;mBACzC,MAAM,SAAS,MAAM,EAAE;CAGvC,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAyB,CAAA;AACtD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAyB,CAAA;AACvD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAA0B,CAAA;AACzD,eAAO,MAAM,MAAM,GAAI,GAAG,MAAM,WAA0B,CAAA;AAa1D,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QAE1C;AAED,eAAO,MAAM,GAAG;IACd,mEAAmE;kBACrD,MAAM;IAKpB,0EAA0E;kBAC5D,MAAM;IAIpB,oFAAoF;qBACnE,MAAM;IAKvB,qFAAqF;kBACvE,MAAM,SAAS,MAAM,EAAE;IAOrC,gGAAgG;mBACjF,MAAM,SAAS,MAAM,EAAE;CAIvC,CAAA"}
@@ -3,25 +3,47 @@ export const dim = (s) => `\x1b[2m${s}\x1b[0m`;
3
3
  export const bold = (s) => `\x1b[1m${s}\x1b[0m`;
4
4
  export const green = (s) => `\x1b[32m${s}\x1b[0m`;
5
5
  export const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
6
+ /**
7
+ * Whether verbose (informational) log output is enabled.
8
+ *
9
+ * When `false` (the default), `log.info`, `log.section`, `log.list`, and
10
+ * `log.block` are no-ops. `log.warn` always logs regardless of this flag.
11
+ *
12
+ * Call {@link setVerbose} to change this at runtime (typically once during
13
+ * provider boot, based on the user's `verbose` config option).
14
+ */
15
+ let verbose = false;
16
+ /** Enable or disable verbose informational logging. */
17
+ export function setVerbose(enabled) {
18
+ verbose = enabled;
19
+ }
6
20
  export const log = {
7
- /** Tagged info message. */
21
+ /** Tagged info message. Only logs when verbose mode is enabled. */
8
22
  info(message) {
23
+ if (!verbose)
24
+ return;
9
25
  console.log(`${TAG} ${message}`);
10
26
  },
11
- /** Tagged warning (yellow). */
27
+ /** Tagged warning (yellow). Always logs regardless of verbose setting. */
12
28
  warn(message) {
13
29
  console.warn(`${TAG} ${yellow(message)}`);
14
30
  },
15
- /** Tagged info with a blank line before. */
31
+ /** Tagged info with a blank line before. Only logs when verbose mode is enabled. */
16
32
  section(message) {
33
+ if (!verbose)
34
+ return;
17
35
  console.log(`\n${TAG} ${message}`);
18
36
  },
19
- /** Bulleted list under a section heading. */
37
+ /** Bulleted list under a section heading. Only logs when verbose mode is enabled. */
20
38
  list(heading, items) {
39
+ if (!verbose)
40
+ return;
21
41
  console.log(`\n${TAG} ${heading}\n` + items.map((item) => ` ${dim('→')} ${bold(item)}`).join('\n'));
22
42
  },
23
- /** Multi-line block (for code examples, hints, etc). */
43
+ /** Multi-line block (for code examples, hints, etc). Only logs when verbose mode is enabled. */
24
44
  block(heading, lines) {
45
+ if (!verbose)
46
+ return;
25
47
  console.log(`\n${TAG} ${heading}\n` + lines.map((l) => ` ${l}`).join('\n'));
26
48
  },
27
49
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adonisjs-server-stats",
3
- "version": "1.6.2",
3
+ "version": "1.6.11",
4
4
  "description": "Real-time server monitoring for AdonisJS v6 applications",
5
5
  "keywords": [
6
6
  "adonisjs",
@@ -119,6 +119,7 @@
119
119
  "lint:fix": "oxlint --fix src/ configure.ts vite.config.*.ts vite-plugins/ --ignore-pattern 'src/edge/client/**' --ignore-pattern 'src/edge/client-vue/**'",
120
120
  "format": "oxfmt src/ configure.ts vite.config.*.ts vite-plugins/",
121
121
  "format:check": "oxfmt --check src/ configure.ts vite.config.*.ts vite-plugins/",
122
+ "test": "node --import tsx bin/test.ts",
122
123
  "typecheck": "tsc --noEmit"
123
124
  },
124
125
  "devDependencies": {
@@ -126,6 +127,8 @@
126
127
  "@adonisjs/lucid": "^21.0.0",
127
128
  "@adonisjs/redis": "^9.0.0",
128
129
  "@adonisjs/transmit": "^1.0.0",
130
+ "@japa/assert": "^4.2.0",
131
+ "@japa/runner": "^5.3.0",
129
132
  "@julr/adonisjs-prometheus": "^1.4.0",
130
133
  "@preact/preset-vite": "^2.9.0",
131
134
  "@types/better-sqlite3": "^7.0.0",
@@ -142,6 +145,7 @@
142
145
  "preact": "^10.25.0",
143
146
  "react": "^19.2.4",
144
147
  "react-dom": "^19.2.4",
148
+ "tsx": "^4.21.0",
145
149
  "typescript": "^5.9.0",
146
150
  "vite": "^7.3.1",
147
151
  "vite-plugin-dts": "^4.5.4",
@@ -155,9 +159,9 @@
155
159
  "@adonisjs/transmit-client": "^1.0.0",
156
160
  "@julr/adonisjs-prometheus": "^1.4.0",
157
161
  "better-sqlite3": "^7.0.0 || ^11.0.0",
158
- "knex": "^3.0.0",
159
162
  "bullmq": "^5.0.0",
160
163
  "edge.js": "^6.0.0",
164
+ "knex": "^3.0.0",
161
165
  "react": "^18.0.0 || ^19.0.0",
162
166
  "react-dom": "^18.0.0 || ^19.0.0",
163
167
  "vue": "^3.3.0"