@grouparoo/core
Version:
The Grouparoo Core
125 lines (116 loc) • 3.26 kB
text/typescript
import { Initializer, route, task, api, log } from "actionhero";
import { getCoreVersion } from "../modules/pluginDetails";
import { Reset } from "../modules/reset";
const grouparooVersionKey = "grouparoo:version";
let taskRecheckInterval: NodeJS.Timeout;
export class ResqueInitializer extends Initializer {
constructor() {
super();
this.name = `@grouparoo/resque`;
this.loadPriority = 1000;
this.startPriority = 100;
}
async initialize() {
route.registerRoute(
"get",
"/v:apiVersion/resque/redisInfo",
"resque:redisInfo"
);
route.registerRoute(
"get",
"/v:apiVersion/resque/resqueDetails",
"resque:resqueDetails"
);
route.registerRoute("get", "/v:apiVersion/resque/queued", "resque:queued");
route.registerRoute(
"get",
"/v:apiVersion/resque/loadWorkerQueues",
"resque:loadWorkerQueues"
);
route.registerRoute(
"get",
"/v:apiVersion/resque/resqueFailedCount",
"resque:resqueFailedCount"
);
route.registerRoute(
"get",
"/v:apiVersion/resque/resqueFailed",
"resque:resqueFailed"
);
route.registerRoute(
"get",
"/v:apiVersion/resque/delayedjobs",
"resque:delayedjobs"
);
route.registerRoute("get", "/v:apiVersion/resque/locks", "resque:locks");
route.registerRoute(
"post",
"/v:apiVersion/resque/removeFailed",
"resque:removeFailed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/retryAndRemoveFailed",
"resque:retryAndRemoveFailed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/removeAllFailed",
"resque:removeAllFailed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/retryAndRemoveAllFailed",
"resque:retryAndRemoveAllFailed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/forceCleanWorker",
"resque:forceCleanWorker"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/delQueue",
"resque:delQueue"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/delDelayed",
"resque:delDelayed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/runDelayed",
"resque:runDelayed"
);
route.registerRoute(
"post",
"/v:apiVersion/resque/delLock",
"resque:delLock"
);
}
async start() {
const delay = 1000 * 60 * 60 * 1; // 1 hour
taskRecheckInterval = setInterval(this.recheckPeriodicTasks, delay);
const client = api.redis.clients.client;
const currentVersion = getCoreVersion();
const previousVersion = await client.get(grouparooVersionKey);
if (currentVersion !== previousVersion) await Reset.clearRedis();
await client.set(grouparooVersionKey, currentVersion);
}
async stop() {
clearInterval(taskRecheckInterval);
}
async recheckPeriodicTasks() {
if (api?.resque?.scheduler?.leader) {
const taskNames = await task.enqueueAllRecurrentTasks();
log(
`Ensuring periodic tasks are enqueued. ${
taskNames.length > 0
? `Added missing: ${taskNames.join(", ")}.`
: "None missing."
}`
);
}
}
}