adonisjs-server-stats 1.6.11 → 1.6.12
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/dist/core/index.js +4 -4
- package/dist/core/trace-utils.d.ts +1 -1
- package/dist/react/core/trace-utils.d.ts +1 -1
- package/dist/src/collectors/http_collector.d.ts.map +1 -1
- package/dist/src/collectors/http_collector.js +3 -0
- package/dist/src/collectors/log_collector.d.ts.map +1 -1
- package/dist/src/collectors/log_collector.js +4 -0
- package/dist/src/dashboard/migrator.d.ts.map +1 -1
- package/dist/src/dashboard/migrator.js +7 -10
- package/dist/src/data/data_access.d.ts.map +1 -1
- package/dist/src/debug/event_collector.js +1 -1
- package/dist/src/debug/ring_buffer.js +1 -1
- package/dist/src/edge/client/dashboard.js +1 -1
- package/dist/src/edge/client/stats-bar.js +1 -1
- package/dist/src/edge/client-vue/dashboard.js +1 -1
- package/dist/src/edge/client-vue/stats-bar.js +1 -1
- package/dist/src/engine/stats_engine.d.ts.map +1 -1
- package/dist/src/engine/stats_engine.js +12 -2
- package/dist/src/prometheus/prometheus_collector.d.ts +1 -1
- package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/core/index.js
CHANGED
|
@@ -232,7 +232,7 @@ function W(e) {
|
|
|
232
232
|
}
|
|
233
233
|
function Ue(e, t) {
|
|
234
234
|
if (e.length < 2) return null;
|
|
235
|
-
const r = q(t), n = W(e), i = n.max - n.min || 1, s = r.width - r.padding * 2, o = r.height - r.padding * 2, l = r.padding, a = e.length, h =
|
|
235
|
+
const r = q(t), n = W(e), i = n.max - n.min || 1, s = r.width - r.padding * 2, o = r.height - r.padding * 2, l = r.padding, a = e.length, h = Array.from({ length: a });
|
|
236
236
|
for (let u = 0; u < a; u++) {
|
|
237
237
|
const E = l + u / (a - 1) * s, O = l + o - (e[u] - n.min) / i * o;
|
|
238
238
|
h[u] = `${E.toFixed(1)},${O.toFixed(1)}`;
|
|
@@ -836,7 +836,7 @@ function de(e = oe) {
|
|
|
836
836
|
let n = !1;
|
|
837
837
|
function i(s) {
|
|
838
838
|
if (s.count === 0) return [];
|
|
839
|
-
const o =
|
|
839
|
+
const o = Array.from({ length: s.count }), l = s.count < e ? 0 : s.head;
|
|
840
840
|
for (let a = 0; a < s.count; a++)
|
|
841
841
|
o[a] = s.data[(l + a) % e];
|
|
842
842
|
return o;
|
|
@@ -849,7 +849,7 @@ function de(e = oe) {
|
|
|
849
849
|
if (!l) continue;
|
|
850
850
|
const a = o.extract(s);
|
|
851
851
|
if (typeof a != "number") continue;
|
|
852
|
-
t[l] || (t[l] = { data:
|
|
852
|
+
t[l] || (t[l] = { data: Array.from({ length: e }), head: 0, count: 0 });
|
|
853
853
|
const h = t[l];
|
|
854
854
|
h.data[h.head] = a, h.head = (h.head + 1) % e, h.count < e && h.count++;
|
|
855
855
|
}
|
|
@@ -1743,7 +1743,7 @@ function ye(e) {
|
|
|
1743
1743
|
return Array.isArray(e) ? e : [];
|
|
1744
1744
|
}
|
|
1745
1745
|
function C(e, t, r, n = 0) {
|
|
1746
|
-
return e[t]
|
|
1746
|
+
return e[t] ?? e[r] ?? n;
|
|
1747
1747
|
}
|
|
1748
1748
|
function vt(e) {
|
|
1749
1749
|
return {
|
|
@@ -48,7 +48,7 @@ export declare function parseTraceWarnings(raw: unknown): string[];
|
|
|
48
48
|
/**
|
|
49
49
|
* Resolve a numeric field that may appear under a snake_case or camelCase key.
|
|
50
50
|
*
|
|
51
|
-
* Returns the first
|
|
51
|
+
* Returns the first non-nullish value found, or the provided fallback (default `0`).
|
|
52
52
|
*/
|
|
53
53
|
export declare function resolveTraceField(trace: Record<string, unknown>, snakeKey: string, camelKey: string, fallback?: number): number;
|
|
54
54
|
/**
|
|
@@ -48,7 +48,7 @@ export declare function parseTraceWarnings(raw: unknown): string[];
|
|
|
48
48
|
/**
|
|
49
49
|
* Resolve a numeric field that may appear under a snake_case or camelCase key.
|
|
50
50
|
*
|
|
51
|
-
* Returns the first
|
|
51
|
+
* Returns the first non-nullish value found, or the provided fallback (default `0`).
|
|
52
52
|
*/
|
|
53
53
|
export declare function resolveTraceField(trace: Record<string, unknown>, snakeKey: string, camelKey: string, fallback?: number): number;
|
|
54
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http_collector.d.ts","sourceRoot":"","sources":["../../../src/collectors/http_collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"http_collector.d.ts","sourceRoot":"","sources":["../../../src/collectors/http_collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,eAAe,CAyC1E"}
|
|
@@ -38,6 +38,9 @@ export function getRequestMetrics() {
|
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
40
|
export function httpCollector(opts) {
|
|
41
|
+
if (sharedInstance) {
|
|
42
|
+
console.warn('[server-stats] httpCollector() called again — replacing previous RequestMetrics instance');
|
|
43
|
+
}
|
|
41
44
|
const metrics = new RequestMetrics(opts);
|
|
42
45
|
sharedInstance = metrics;
|
|
43
46
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log_collector.d.ts","sourceRoot":"","sources":["../../../src/collectors/log_collector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"log_collector.d.ts","sourceRoot":"","sources":["../../../src/collectors/log_collector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,eAAe,CA0ExE"}
|
|
@@ -41,6 +41,10 @@ export function getLogStreamService() {
|
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
43
|
export function logCollector(opts) {
|
|
44
|
+
if (sharedLogStream) {
|
|
45
|
+
console.warn('[server-stats] logCollector() called again — stopping previous LogStreamService instance');
|
|
46
|
+
sharedLogStream.stop();
|
|
47
|
+
}
|
|
44
48
|
const service = new LogStreamService(opts?.logPath);
|
|
45
49
|
sharedLogStream = service;
|
|
46
50
|
let warnedMissingFile = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/dashboard/migrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAahC;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../../src/dashboard/migrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAahC;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CxF"}
|
|
@@ -173,18 +173,15 @@ export async function runRetentionCleanup(db, retentionDays) {
|
|
|
173
173
|
// Batch deletes to avoid blocking the event loop for large tables.
|
|
174
174
|
// Each batch deletes up to 1000 rows, yielding between batches.
|
|
175
175
|
const batchDelete = async (table) => {
|
|
176
|
-
let
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
deleted = result ?? 0;
|
|
180
|
-
// SQLite returns the number of changes via better-sqlite3's .run().changes
|
|
181
|
-
// but through Knex.raw() the exact shape varies — loop until no matches
|
|
176
|
+
let hasMore = true;
|
|
177
|
+
while (hasMore) {
|
|
178
|
+
await db.raw(`DELETE FROM ${table} WHERE rowid IN (SELECT rowid FROM ${table} WHERE created_at < ${cutoff} LIMIT 1000)`);
|
|
182
179
|
const remaining = await db.raw(`SELECT COUNT(*) as cnt FROM ${table} WHERE created_at < ${cutoff} LIMIT 1`);
|
|
183
180
|
const cnt = remaining?.[0]?.cnt ?? 0;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
181
|
+
hasMore = cnt > 0;
|
|
182
|
+
if (hasMore)
|
|
183
|
+
await yieldToEventLoop();
|
|
184
|
+
}
|
|
188
185
|
};
|
|
189
186
|
// Cascade deletes queries, events, traces via FK ON DELETE CASCADE
|
|
190
187
|
await batchDelete('server_stats_requests');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_access.d.ts","sourceRoot":"","sources":["../../../src/data/data_access.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"data_access.d.ts","sourceRoot":"","sources":["../../../src/data/data_access.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAM3F,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEjC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AA6ED;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,OAAO,CAAC,CAAQ;gBAGtB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,EACrE,OAAO,CAAC,EAAE,MAAM;IAQlB,+DAA+D;IAC/D,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,wEAAwE;IACxE,OAAO,KAAK,cAAc,GAEzB;IAMK,UAAU,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAsB/E,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAQrF,SAAS,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAsB9E;;;;;OAKG;IACG,SAAS,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAqCjE;;;;;OAKG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYrF;;;;;OAKG;IACG,SAAS,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAsCjE;;;;OAIG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAazF;;;;;OAKG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC;IA8BxD;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAyB/D;;;;;OAKG;YACW,WAAW;CAoC1B"}
|
|
@@ -92,7 +92,7 @@ export class EventCollector {
|
|
|
92
92
|
seen.add(value);
|
|
93
93
|
if (Array.isArray(value)) {
|
|
94
94
|
const take = Math.min(value.length, 20);
|
|
95
|
-
const arr =
|
|
95
|
+
const arr = Array.from({ length: take });
|
|
96
96
|
for (let i = 0; i < take; i++) {
|
|
97
97
|
arr[i] = this.limitDepth(value[i], maxDepth - 1, seen);
|
|
98
98
|
}
|
|
@@ -42,7 +42,7 @@ export class RingBuffer {
|
|
|
42
42
|
if (this.count === 0)
|
|
43
43
|
return [];
|
|
44
44
|
const take = Math.min(n, this.count);
|
|
45
|
-
const result =
|
|
45
|
+
const result = Array.from({ length: take });
|
|
46
46
|
// Walk backwards from the most recently inserted item
|
|
47
47
|
for (let i = 0; i < take; i++) {
|
|
48
48
|
const idx = (this.head - 1 - i + this.capacity) % this.capacity;
|