feat: handle repository download and remove using a job queue

This commit is contained in:
tdurieux
2021-09-08 15:00:15 +02:00
parent d82f882ba8
commit 9838891567
8 changed files with 1121 additions and 52 deletions

50
src/queue.ts Normal file
View File

@@ -0,0 +1,50 @@
import * as Queue from "bull";
import config from "../config";
import { getRepository } from "./database/database";
import Repository from "./Repository";
export const removeQueue = new Queue<Repository>("repository removal", {
redis: {
host: config.REDIS_HOSTNAME,
port: config.REDIS_PORT,
},
});
removeQueue.on("completed", async (job) => {
await job.remove();
});
export const downloadQueue = new Queue<Repository>("repository download", {
redis: {
host: config.REDIS_HOSTNAME,
port: config.REDIS_PORT,
},
});
downloadQueue.on("completed", async (job) => {
await job.remove();
});
removeQueue.process(5, async (job) => {
console.log(`${job.data.repoId} is going to be removed`);
try {
const repo = await getRepository(job.data.repoId);
await repo.remove();
} catch (error) {
console.log("error", error);
} finally {
console.log(`${job.data.repoId} is removed`);
}
});
downloadQueue.process(2, async (job) => {
console.log(`${job.data.repoId} is going to be downloaded`);
try {
const repo = await getRepository(job.data.repoId);
job.progress("get_repo");
await repo.remove();
job.progress("get_remove");
await repo.anonymize();
} catch (error) {
console.log("error", error);
} finally {
console.log(`${job.data.repoId} is downloaded`);
}
});