reflectt-node 0.1.3 → 0.1.4
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/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +1 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/doctor.d.ts +2 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +65 -9
- package/dist/doctor.js.map +1 -1
- package/dist/insight-task-bridge.d.ts +21 -0
- package/dist/insight-task-bridge.d.ts.map +1 -1
- package/dist/insight-task-bridge.js +13 -1
- package/dist/insight-task-bridge.js.map +1 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +7 -8
- package/dist/preflight.js.map +1 -1
- package/dist/request-tracker.d.ts +7 -0
- package/dist/request-tracker.d.ts.map +1 -1
- package/dist/request-tracker.js +65 -5
- package/dist/request-tracker.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/dashboard.js +19 -8
- package/public/intensity-mock.html +413 -0
- package/public/polls-mock.html +610 -0
package/dist/request-tracker.js
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
// Copyright (c) Reflectt AI
|
|
3
3
|
// ── Configuration ──────────────────────────────────────────────────────────
|
|
4
4
|
const MAX_ERRORS = 20;
|
|
5
|
+
/** Rolling window: 5-minute buckets, keep last 1 hour */
|
|
6
|
+
const BUCKET_DURATION_MS = 5 * 60 * 1000;
|
|
7
|
+
const MAX_BUCKETS = 12; // 12 × 5 min = 1 hour
|
|
5
8
|
const TRACKED_GROUPS = [
|
|
6
9
|
{ pattern: /^\/health/, name: 'health' },
|
|
7
10
|
{ pattern: /^\/bootstrap/, name: 'bootstrap' },
|
|
@@ -10,6 +13,19 @@ const TRACKED_GROUPS = [
|
|
|
10
13
|
{ pattern: /^\/openclaw/, name: 'openclaw' },
|
|
11
14
|
{ pattern: /^\/chat/, name: 'chat' },
|
|
12
15
|
{ pattern: /^\/mcp/, name: 'mcp' },
|
|
16
|
+
// Additional groups to reduce "other" noise
|
|
17
|
+
{ pattern: /^\/heartbeat/, name: 'heartbeat' },
|
|
18
|
+
{ pattern: /^\/inbox/, name: 'inbox' },
|
|
19
|
+
{ pattern: /^\/reflections/, name: 'reflections' },
|
|
20
|
+
{ pattern: /^\/insights/, name: 'insights' },
|
|
21
|
+
{ pattern: /^\/hosts/, name: 'hosts' },
|
|
22
|
+
{ pattern: /^\/presence/, name: 'presence' },
|
|
23
|
+
{ pattern: /^\/shared/, name: 'shared' },
|
|
24
|
+
{ pattern: /^\/avatars/, name: 'avatars' },
|
|
25
|
+
{ pattern: /^\/dashboard/, name: 'dashboard' },
|
|
26
|
+
{ pattern: /^\/memory/, name: 'memory' },
|
|
27
|
+
{ pattern: /^\/preflight/, name: 'preflight' },
|
|
28
|
+
{ pattern: /^\/policy/, name: 'policy' },
|
|
13
29
|
];
|
|
14
30
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
15
31
|
const requestCounts = {};
|
|
@@ -18,6 +34,9 @@ const recentErrors = [];
|
|
|
18
34
|
let totalRequests = 0;
|
|
19
35
|
let totalErrors = 0;
|
|
20
36
|
const startedAt = Date.now();
|
|
37
|
+
// Rolling window state
|
|
38
|
+
const rollingBuckets = [];
|
|
39
|
+
let currentBucket = { requests: 0, errors: 0, startedAt: Date.now() };
|
|
21
40
|
// ── Core ───────────────────────────────────────────────────────────────────
|
|
22
41
|
function classifyUrl(url) {
|
|
23
42
|
for (const group of TRACKED_GROUPS) {
|
|
@@ -26,20 +45,35 @@ function classifyUrl(url) {
|
|
|
26
45
|
}
|
|
27
46
|
return 'other';
|
|
28
47
|
}
|
|
48
|
+
/** Rotate rolling buckets if the current one has expired */
|
|
49
|
+
function rotateBuckets(now) {
|
|
50
|
+
if (now - currentBucket.startedAt >= BUCKET_DURATION_MS) {
|
|
51
|
+
rollingBuckets.push(currentBucket);
|
|
52
|
+
if (rollingBuckets.length > MAX_BUCKETS) {
|
|
53
|
+
rollingBuckets.shift();
|
|
54
|
+
}
|
|
55
|
+
currentBucket = { requests: 0, errors: 0, startedAt: now };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
29
58
|
/**
|
|
30
59
|
* Record a request. Call from Fastify onResponse hook.
|
|
31
60
|
*/
|
|
32
61
|
export function trackRequest(method, url, statusCode, userAgent) {
|
|
62
|
+
const now = Date.now();
|
|
33
63
|
totalRequests++;
|
|
34
64
|
const group = classifyUrl(url);
|
|
35
65
|
requestCounts[group] = (requestCounts[group] || 0) + 1;
|
|
66
|
+
// Rolling window
|
|
67
|
+
rotateBuckets(now);
|
|
68
|
+
currentBucket.requests++;
|
|
36
69
|
if (statusCode >= 400) {
|
|
37
70
|
totalErrors++;
|
|
38
71
|
errorCounts[group] = (errorCounts[group] || 0) + 1;
|
|
72
|
+
currentBucket.errors++;
|
|
39
73
|
}
|
|
40
74
|
if (statusCode >= 500) {
|
|
41
75
|
recentErrors.push({
|
|
42
|
-
ts:
|
|
76
|
+
ts: now,
|
|
43
77
|
method,
|
|
44
78
|
url: url.length > 200 ? url.slice(0, 200) + '…' : url,
|
|
45
79
|
status: statusCode,
|
|
@@ -69,6 +103,27 @@ export function trackError(context, error) {
|
|
|
69
103
|
}
|
|
70
104
|
}
|
|
71
105
|
// ── Metrics ────────────────────────────────────────────────────────────────
|
|
106
|
+
/** Compute rolling-window stats from recent buckets */
|
|
107
|
+
function getRollingMetrics() {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
rotateBuckets(now);
|
|
110
|
+
let requests = currentBucket.requests;
|
|
111
|
+
let errors = currentBucket.errors;
|
|
112
|
+
const windowStart = now - (MAX_BUCKETS * BUCKET_DURATION_MS);
|
|
113
|
+
for (const bucket of rollingBuckets) {
|
|
114
|
+
if (bucket.startedAt >= windowStart) {
|
|
115
|
+
requests += bucket.requests;
|
|
116
|
+
errors += bucket.errors;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const errorRate = requests > 0 ? Math.round((errors / requests) * 10000) / 100 : 0;
|
|
120
|
+
return {
|
|
121
|
+
requests,
|
|
122
|
+
errors,
|
|
123
|
+
errorRate,
|
|
124
|
+
windowMinutes: MAX_BUCKETS * (BUCKET_DURATION_MS / 60000),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
72
127
|
export function getRequestMetrics() {
|
|
73
128
|
const uptimeMs = Date.now() - startedAt;
|
|
74
129
|
const uptimeSec = uptimeMs / 1000;
|
|
@@ -76,10 +131,12 @@ export function getRequestMetrics() {
|
|
|
76
131
|
const byGroup = {};
|
|
77
132
|
for (const group of TRACKED_GROUPS) {
|
|
78
133
|
const name = group.name;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
134
|
+
const reqs = requestCounts[name] || 0;
|
|
135
|
+
const errs = errorCounts[name] || 0;
|
|
136
|
+
// Only include groups that have traffic
|
|
137
|
+
if (reqs > 0 || errs > 0) {
|
|
138
|
+
byGroup[name] = { requests: reqs, errors: errs };
|
|
139
|
+
}
|
|
83
140
|
}
|
|
84
141
|
if (requestCounts['other']) {
|
|
85
142
|
byGroup['other'] = {
|
|
@@ -94,6 +151,7 @@ export function getRequestMetrics() {
|
|
|
94
151
|
byGroup,
|
|
95
152
|
recentErrors: [...recentErrors].reverse(), // Most recent first
|
|
96
153
|
rps,
|
|
154
|
+
rolling: getRollingMetrics(),
|
|
97
155
|
};
|
|
98
156
|
}
|
|
99
157
|
/** Reset (for testing) */
|
|
@@ -105,5 +163,7 @@ export function resetRequestMetrics() {
|
|
|
105
163
|
for (const key of Object.keys(errorCounts))
|
|
106
164
|
delete errorCounts[key];
|
|
107
165
|
recentErrors.length = 0;
|
|
166
|
+
rollingBuckets.length = 0;
|
|
167
|
+
currentBucket = { requests: 0, errors: 0, startedAt: Date.now() };
|
|
108
168
|
}
|
|
109
169
|
//# sourceMappingURL=request-tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-tracker.js","sourceRoot":"","sources":["../src/request-tracker.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,4BAA4B;
|
|
1
|
+
{"version":3,"file":"request-tracker.js","sourceRoot":"","sources":["../src/request-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AA6qD9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAA;AA6qD9D,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CA2xU7D"}
|
package/dist/server.js
CHANGED
|
@@ -1895,7 +1895,7 @@ export async function createServer() {
|
|
|
1895
1895
|
inbox: inboxManager.getStats(),
|
|
1896
1896
|
request_counts: (() => {
|
|
1897
1897
|
const m = getRequestMetrics();
|
|
1898
|
-
return { total: m.total, errors: m.errors, rps: m.rps, byGroup: m.byGroup };
|
|
1898
|
+
return { total: m.total, errors: m.errors, rps: m.rps, byGroup: m.byGroup, rolling: m.rolling };
|
|
1899
1899
|
})(),
|
|
1900
1900
|
timestamp: Date.now(),
|
|
1901
1901
|
};
|
|
@@ -1907,6 +1907,7 @@ export async function createServer() {
|
|
|
1907
1907
|
total_errors: m.errors,
|
|
1908
1908
|
total_requests: m.total,
|
|
1909
1909
|
error_rate: m.total > 0 ? Math.round((m.errors / m.total) * 10000) / 100 : 0,
|
|
1910
|
+
rolling: m.rolling,
|
|
1910
1911
|
recent: m.recentErrors.slice(0, 20),
|
|
1911
1912
|
timestamp: Date.now(),
|
|
1912
1913
|
};
|