plc-replica/write-compacted.ts

39 lines
1.1 KiB
TypeScript

import { ensureDir, exists, expandGlob, move } from "jsr:@std/fs@1";
await ensureDir("./data/plc/compacted");
export async function createCompactedIndex() {
if (await exists("./data/plc/compacting"))
throw new Error("compaction already running!");
const date = new Date(await Deno.readTextFile("./data/latest-date"));
await move("./data/plc/live", "./data/plc/compacting");
await ensureDir("./data/plc/live");
const inputFiles = await Array.fromAsync(
expandGlob("./data/plc/compacting/*")
);
const process = new Deno.Command("zstd", {
args: inputFiles.map((it) => `./data/plc/compacting/${it.name}`),
cwd: Deno.cwd(),
stdout: "piped",
stdin: "null",
stderr: "piped",
}).spawn();
await process.status;
// TODO: run zstd *
const compactedDir =
"./data/plc/compacted/" +
date.toISOString().split("T")[0].replaceAll("-", "");
await move("./data/plc/compacting", compactedDir);
await Promise.all(
inputFiles.map((it) => Deno.remove(`${compactedDir}/${it.name}`))
);
}
if (import.meta.main) {
await createCompactedIndex();
}