release: restore v2.1.19 baseline for v2.1.24
CI / verify (push) Has been cancelled

Restore the v2.1.19 application baseline and retain only the focused import preflight summary with duplicate, unavailable, destination, job, and size-limit visibility.
This commit is contained in:
Sucukdeluxe
2026-08-17 04:25:22 +02:00
parent 9a213a7395
commit d7c9f287e4
87 changed files with 2185 additions and 16125 deletions
+33 -46
View File
@@ -16,30 +16,22 @@ function createCollectors(deps) {
const { loadConfig, loadHistory, getAllLogPaths, support, stats, appInfo, systemInfo, agentInfo } = deps;
function _secrets() {
return support.collectSecretValues(loadConfig());
}
function _currentHistory() {
if (typeof loadHistory === 'function') {
const history = loadHistory();
if (!Array.isArray(history)) throw new Error('History reader returned invalid data');
return history;
}
const cfg = loadConfig();
return Array.isArray(cfg && cfg.history) ? cfg.history : [];
}
function _historyContext() {
const secrets = _secrets();
return { history: _currentHistory(), secrets };
try { return support.collectSecretValues(loadConfig()); } catch { return []; }
}
function _deepRedact(value, secrets) {
return support.valueScrub(value, secrets || _secrets());
}
function redactResponse(value) {
return _deepRedact(value);
const s = secrets || _secrets();
const walk = (v) => {
if (typeof v === 'string') return support.redactLogText(v, s);
if (Array.isArray(v)) return v.map(walk);
if (v && typeof v === 'object') {
const o = {};
for (const k of Object.keys(v)) o[k] = walk(v[k]);
return o;
}
return v;
};
try { return walk(value); } catch { return value; }
}
function _resolveLogPath(name, backup) {
@@ -87,10 +79,10 @@ function createCollectors(deps) {
readableNames.add(path.basename(fp));
try {
const st = fs.statSync(fp);
variants.push({ id: backup === 0 ? name : `${name}:${backup}`, backup, fileName: path.basename(fp), sizeBytes: st.size, mtime: st.mtime.toISOString() });
variants.push({ backup, sizeBytes: st.size, mtime: st.mtime.toISOString() });
} catch {}
}
files.push({ id: name, name, fileName: path.basename(base), readable: true, present: variants.length > 0, variants });
files.push({ name, path: base, readable: true, present: variants.length > 0, variants });
}
let siblings = [];
try {
@@ -103,16 +95,16 @@ function createCollectors(deps) {
return { name: f, readable: false, sizeBytes: size, mtime };
});
} catch {}
return { files, otherLogs: siblings };
return { dir, files, otherLogs: siblings };
}
function readLog(args) {
const a = args || {};
const name = a.name;
const p = _resolveLogPath(name, a.backup);
if (!p) return { ok: false, error: 'unknown or non-readable log identifier' };
if (!p) return { ok: false, error: `unknown or non-readable log: ${name}` };
const tailKb = Math.min(Math.max(Number(a.tailKb) || 256, 1), 1024);
const raw = support.collectFile(p, name, tailKb * 1024, { includePath: false });
const raw = support.collectFile(p, name, tailKb * 1024);
let content = support.redactLogText(raw, _secrets());
let matchedLines;
if (a.grep && typeof a.grep === 'string' && a.grep.length <= 200) {
@@ -128,7 +120,7 @@ function createCollectors(deps) {
}
let sizeBytes = null;
try { sizeBytes = fs.statSync(p).size; } catch {}
return { id: name, name, fileName: path.basename(p), sizeBytes, returnedBytes: Buffer.byteLength(content), tailKb, matchedLines, content };
return { name, path: p, sizeBytes, returnedBytes: Buffer.byteLength(content), tailKb, matchedLines, content };
}
function getAppEvents(args) {
@@ -145,9 +137,10 @@ function createCollectors(deps) {
return { events: out.slice(-limit), truncated: out.length > limit };
}
function _historyErrors(history, opts, secrets) {
function _historyErrors(history, opts) {
const o = opts || {};
const sinceMs = Number.isFinite(o.sinceMs) ? o.sinceMs : null;
const secrets = _secrets();
const errors = [];
const byCategory = {};
for (const batch of (Array.isArray(history) ? history : [])) {
@@ -176,19 +169,15 @@ function createCollectors(deps) {
return { errors, byCategory };
}
function _listErrors(args, history, secrets) {
function listErrors(args) {
const a = args || {};
const { errors, byCategory } = _historyErrors(history, a, secrets);
const cfg = loadConfig();
const { errors, byCategory } = _historyErrors(cfg.history, a);
const limit = Math.min(Math.max(Number(a.limit) || 100, 1), 1000);
const window = Number.isFinite(a.sinceMs) ? `since ${new Date(a.sinceMs).toISOString()}` : 'all history';
return { window, total: errors.length, byCategory, errors: errors.slice(-limit) };
}
function listErrors(args) {
const { history, secrets } = _historyContext();
return _listErrors(args, history, secrets);
}
function getQueueState(args) {
const a = args || {};
const cfg = loadConfig();
@@ -218,11 +207,15 @@ function createCollectors(deps) {
return result;
}
function _getHistory(args, history, secrets) {
function getHistory(args) {
const a = args || {};
const history = typeof loadHistory === 'function'
? (loadHistory() || [])
: (Array.isArray(loadConfig().history) ? loadConfig().history : []);
const limit = Math.min(Math.max(Number(a.limit) || 20, 1), 200);
const perHoster = stats.summarizePerHoster([...history]);
const perHoster = stats.summarizePerHoster(history);
const recent = [...history].slice(-limit).reverse();
const secrets = _secrets();
const batches = recent.map(b => {
const out = { timestamp: b.timestamp || null, fileCount: Array.isArray(b.files) ? b.files.length : 0 };
if (a.includeFiles) {
@@ -241,11 +234,6 @@ function createCollectors(deps) {
return { totalBatches: history.length, returned: batches.length, perHoster, batches };
}
function getHistory(args) {
const { history, secrets } = _historyContext();
return _getHistory(args, history, secrets);
}
function getRotationState() {
const cfg = loadConfig();
return { rotationCursors: _deepRedact(cfg.rotationCursors || {}) };
@@ -265,10 +253,9 @@ function createCollectors(deps) {
const a = args || {};
const errorLimit = Math.min(Math.max(Number(a.errorLimit) || 20, 1), 200);
const errArgs = Number.isFinite(a.errorSinceMs) ? { sinceMs: a.errorSinceMs, limit: errorLimit } : { limit: errorLimit };
const { history: currentHistory, secrets } = _historyContext();
const errors = _listErrors(errArgs, currentHistory, secrets);
const errors = listErrors(errArgs);
const queue = getQueueState({ includeJobs: false });
const history = _getHistory({ limit: 5 }, currentHistory, secrets);
const history = getHistory({ limit: 5 });
const warnings = [];
if (queue.source === 'persisted' && queue.stale) warnings.push('queue state is from the persisted snapshot (may lag live state; UploadManager not introspected in this build).');
if (errors.total > 0) warnings.push(`${errors.total} non-success result(s) in the error window.`);
@@ -287,7 +274,7 @@ function createCollectors(deps) {
return {
getSystemInfo, getConfigRedacted, listLogs, readLog, getAppEvents,
listErrors, getQueueState, getHistory, getRotationState, getHealth, serverHealth,
redactResponse, READABLE_LOGS
READABLE_LOGS
};
}