42 lines
1.9 KiB
TypeScript
42 lines
1.9 KiB
TypeScript
import { json } from '@sveltejs/kit';
|
|
import { previewDrift } from '$lib/server/fleet/drift.js';
|
|
|
|
// GET returns the current drift plan for the whole fleet without touching disk.
|
|
export async function GET() {
|
|
const plan = await previewDrift();
|
|
const entries = plan.files.map(file => ({ ...file, size: file.afterSize ?? file.beforeSize ?? 0, sha256: file.afterSha256 ?? file.beforeSha256 ?? '' }));
|
|
const byServer = new Map<
|
|
string,
|
|
Array<{ relPath: string; size: number; sha256: string; kind: string; driftKind: string }>
|
|
>();
|
|
for (const e of entries) {
|
|
const arr = byServer.get(e.server) ?? [];
|
|
arr.push({
|
|
relPath: e.relPath,
|
|
size: e.size,
|
|
sha256: e.sha256,
|
|
kind: e.kind,
|
|
driftKind: e.driftKind
|
|
});
|
|
byServer.set(e.server, arr);
|
|
}
|
|
return json({
|
|
totalDrift: entries.length, scannedAt: plan.scannedAt,
|
|
servers: [...byServer.entries()].map(([server, files]) => ({ server, files }))
|
|
});
|
|
}
|
|
|
|
// Legacy previews remain readable. Watchdog owns all new reconciliation requests.
|
|
export async function POST({ request }: { request: Request }) {
|
|
const body = await request.json().catch(() => null);
|
|
if (!body || (body.servers !== undefined && (!Array.isArray(body.servers) || !body.servers.every((server: unknown) => typeof server === 'string')))) {
|
|
return json({ ok: false, error: 'Provide the server IDs to review.' }, { status: 400 });
|
|
}
|
|
try {
|
|
if (body.dryRun === true) return json({ ok: true, plan: await previewDrift(body.servers) });
|
|
return json({ ok: false, error: 'Drift reconciliation has moved to Watchdog. Scan there to queue a rebuild and campaign.', watchdogUrl: '/watchdog' }, { status: 410 });
|
|
} catch (error) {
|
|
return json({ ok: false, error: (error as Error).message }, { status: 400 });
|
|
}
|
|
}
|