← back to Dw Activation Debug TK11314
scripts/build-repair-report.js
24 lines
#!/usr/bin/env node
'use strict';
const fs = require('node:fs');
const path = require('node:path');
const { buildRepairReport } = require('../lib/readiness-repairs.js');
const args = process.argv.slice(2);
const value = name => args[args.indexOf(name) + 1];
for (const required of ['--audit', '--since', '--until', '--output']) {
if (!args.includes(required) || !value(required)) throw new Error(`Required: ${required}`);
}
const since = value('--since'), until = value('--until');
if (!Number.isFinite(Date.parse(since)) || !Number.isFinite(Date.parse(until)) || since >= until)
throw new Error('Invalid explicit scan interval');
const rows = fs.readFileSync(value('--audit'), 'utf8').split('\n').filter(Boolean).map(line => JSON.parse(line))
.filter(row => row.ts >= since && row.ts < until);
if (!rows.length) throw new Error('No decisions found in the requested interval');
const report = buildRepairReport(rows, { complete: false });
report.source_audit = path.resolve(value('--audit'));
report.observation_interval = { since, until };
fs.mkdirSync(path.dirname(value('--output')), { recursive: true });
fs.writeFileSync(value('--output'), JSON.stringify(report, null, 2) + '\n');
console.log(JSON.stringify({ products: report.products_observed, attention: report.products_needing_attention,
counts: report.counts, output: value('--output') }));