39 lines
1.1 KiB
TypeScript
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();
|
|
}
|