Add upload library management and ops diagnostics
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { appendFile, mkdir, readFile } from 'node:fs/promises';
|
||||
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
||||
import { dirname } from 'node:path';
|
||||
import { statfs } from 'node:fs/promises';
|
||||
|
||||
@@ -43,7 +43,12 @@ export function createRequestMonitor({ snapshotFile = null, diskPaths = [], adap
|
||||
const value = await sample(); snapshots.push(value);
|
||||
while (snapshots.length && now() - snapshots[0].at > 24 * 3600_000) snapshots.shift();
|
||||
if (snapshotFile) {
|
||||
try { await mkdir(dirname(snapshotFile), { recursive: true }); await appendFile(snapshotFile, JSON.stringify(value) + '\n'); }
|
||||
try {
|
||||
await mkdir(dirname(snapshotFile), { recursive: true });
|
||||
const prior = (await readFile(snapshotFile, 'utf8').catch(() => '')).split('\n').filter(Boolean).map(line => { try { return JSON.parse(line); } catch { return null; } }).filter(x => x?.at >= now() - 24 * 3600_000);
|
||||
const unique = new Map([...prior, value].map(item => [item.at, item]));
|
||||
await writeFile(snapshotFile, [...unique.values()].sort((a,b)=>a.at-b.at).map(item => JSON.stringify(item)).join('\n') + '\n');
|
||||
}
|
||||
catch (error) { console.warn('[monitor] snapshot write failed:', error.message); }
|
||||
}
|
||||
return value;
|
||||
@@ -54,7 +59,8 @@ export function createRequestMonitor({ snapshotFile = null, diskPaths = [], adap
|
||||
if (snapshotFile) {
|
||||
try {
|
||||
const persisted = (await readFile(snapshotFile, 'utf8')).split('\n').filter(Boolean).map(line => { try { return JSON.parse(line); } catch { return null; } }).filter(x => x?.at >= cutoff);
|
||||
return [...persisted, ...out].slice(-1440);
|
||||
const unique = new Map([...persisted, ...out].map(item => [item.at, item]));
|
||||
return [...unique.values()].sort((a,b)=>a.at-b.at).slice(-1440);
|
||||
} catch { /* no file yet */ }
|
||||
}
|
||||
return out.slice(-1440);
|
||||
@@ -67,10 +73,11 @@ export function createRequestMonitor({ snapshotFile = null, diskPaths = [], adap
|
||||
try { await next(); status = c.res.status; }
|
||||
finally {
|
||||
inflight--;
|
||||
const key = routeKey(c.req.path);
|
||||
let key = routeKey(c.req.path);
|
||||
if (!routes.has(key) && routes.size >= 300) key = 'other';
|
||||
let row = routes.get(key);
|
||||
if (!row) { row = { latencies: [], requests: 0, errors: 0 }; routes.set(key, row); }
|
||||
row.requests++; if (status >= 500) row.errors++;
|
||||
row.requests++; if (status >= 400) row.errors++;
|
||||
row.latencies.push(Math.max(0, now() - started)); if (row.latencies.length > 1000) row.latencies.shift();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user