2
0
Эх сурвалжийг харах

refactor: Use enums for job and module statuses

Owen Diffey 2 жил өмнө
parent
commit
c8337c95c4

+ 15 - 6
backend/src/BaseModule.ts

@@ -1,6 +1,15 @@
 import LogBook, { Log } from "./LogBook";
 import ModuleManager from "./ModuleManager";
-import { ModuleStatus } from "./types/Modules";
+
+export enum ModuleStatus {
+	LOADED = "LOADED",
+	STARTING = "STARTING",
+	STARTED = "STARTED",
+	STOPPED = "STOPPED",
+	STOPPING = "STOPPING",
+	ERROR = "ERROR",
+	DISABLED = "DISABLED"
+}
 
 export default abstract class BaseModule {
 	protected moduleManager: ModuleManager;
@@ -20,7 +29,7 @@ export default abstract class BaseModule {
 		this.moduleManager = ModuleManager.getPrimaryInstance();
 		this.logBook = LogBook.getPrimaryInstance();
 		this.name = name;
-		this.status = "LOADED";
+		this.status = ModuleStatus.LOADED;
 		this.log(`Module (${this.name}) loaded`);
 	}
 
@@ -56,7 +65,7 @@ export default abstract class BaseModule {
 	 */
 	public async startup() {
 		this.log(`Module (${this.name}) starting`);
-		this.setStatus("STARTING");
+		this.setStatus(ModuleStatus.STARTING);
 	}
 
 	/**
@@ -64,7 +73,7 @@ export default abstract class BaseModule {
 	 */
 	protected async started() {
 		this.log(`Module (${this.name}) started`);
-		this.setStatus("STARTED");
+		this.setStatus(ModuleStatus.STARTED);
 	}
 
 	/**
@@ -72,7 +81,7 @@ export default abstract class BaseModule {
 	 */
 	public async shutdown() {
 		this.log(`Module (${this.name}) stopping`);
-		this.setStatus("STOPPING");
+		this.setStatus(ModuleStatus.STOPPING);
 		await this.stopped();
 	}
 
@@ -81,7 +90,7 @@ export default abstract class BaseModule {
 	 */
 	protected async stopped() {
 		this.log(`Module (${this.name}) stopped`);
-		this.setStatus("STOPPED");
+		this.setStatus(ModuleStatus.STOPPED);
 	}
 
 	/**

+ 11 - 5
backend/src/Job.ts

@@ -4,9 +4,15 @@ import JobStatistics from "./JobStatistics";
 import LogBook, { Log } from "./LogBook";
 import ModuleManager from "./ModuleManager";
 import { JobOptions } from "./types/JobOptions";
-import { JobStatus } from "./types/JobStatus";
 import { Modules } from "./types/Modules";
 
+export enum JobStatus {
+	QUEUED = "QUEUED",
+	ACTIVE = "ACTIVE",
+	PAUSED = "PAUSED",
+	COMPLETED = "COMPLETED"
+};
+
 export default class Job {
 	protected name: string;
 
@@ -96,7 +102,7 @@ export default class Job {
 				return v.toString(16);
 			}
 		);
-		this.status = "QUEUED";
+		this.setStatus(JobStatus.QUEUED);
 		this.startedAt = Date.now();
 	}
 
@@ -141,7 +147,7 @@ export default class Job {
 	 *
 	 * @param status - Job status
 	 */
-	public setStatus(status: JobStatus) {
+	protected setStatus(status: JobStatus) {
 		this.status = status;
 	}
 
@@ -160,7 +166,7 @@ export default class Job {
 	 * @returns Promise
 	 */
 	public async execute() {
-		this.setStatus("ACTIVE");
+		this.setStatus(JobStatus.ACTIVE);
 		return (
 			this.jobFunction
 				.apply(this.module, [this.context, this.payload])
@@ -192,7 +198,7 @@ export default class Job {
 						"averageTime",
 						Date.now() - this.startedAt
 					);
-					this.setStatus("COMPLETED");
+					this.setStatus(JobStatus.COMPLETED);
 				})
 		);
 	}

+ 3 - 4
backend/src/JobQueue.ts

@@ -1,7 +1,6 @@
-import BaseModule from "./BaseModule";
-import Job from "./Job";
+import BaseModule, { ModuleStatus } from "./BaseModule";
+import Job, { JobStatus } from "./Job";
 import { JobOptions } from "./types/JobOptions";
-import { JobStatus } from "./types/JobStatus";
 import { Jobs, Modules } from "./types/Modules";
 
 export default class JobQueue {
@@ -137,7 +136,7 @@ export default class JobQueue {
 
 			// If the module of the job is not started, we can't run the job, so go to the next job in the queue
 			// eslint-disable-next-line no-continue
-			if (job.getModule().getStatus() !== "STARTED") continue;
+			if (job.getModule().getStatus() !== ModuleStatus.STARTED) continue;
 
 			// Remove the job from the queue and add it to the active jobs array
 			this.queue.splice(this.queue.indexOf(job), 1);

+ 8 - 5
backend/src/ModuleManager.ts

@@ -1,5 +1,6 @@
+import { ModuleStatus } from "./BaseModule";
 import JobQueue from "./JobQueue";
-import { Modules, ModuleStatus, ModuleClass } from "./types/Modules";
+import { Modules, ModuleClass } from "./types/Modules";
 
 export default class ModuleManager {
 	static primaryInstance = new this();
@@ -69,7 +70,7 @@ export default class ModuleManager {
 		await Promise.all(
 			Object.values(this.modules).map(async module => {
 				await module.startup().catch(async err => {
-					module.setStatus("ERROR");
+					module.setStatus(ModuleStatus.ERROR);
 					throw err;
 				});
 			})
@@ -88,9 +89,11 @@ export default class ModuleManager {
 			await Promise.all(
 				Object.values(this.modules).map(async module => {
 					if (
-						module.getStatus() === "STARTED" ||
-						module.getStatus() === "STARTING" ||
-						module.getStatus() === "ERROR"
+						[
+							ModuleStatus.STARTED,
+							ModuleStatus.STARTING,
+							ModuleStatus.ERROR
+						].includes(module.getStatus())
 					)
 						await module.shutdown();
 				})

+ 0 - 1
backend/src/types/JobStatus.ts

@@ -1 +0,0 @@
-export type JobStatus = "QUEUED" | "ACTIVE" | "PAUSED" | "COMPLETED";

+ 0 - 9
backend/src/types/Modules.ts

@@ -22,15 +22,6 @@ export type Modules = {
 	stations: StationModule & typeof BaseModule;
 };
 
-export type ModuleStatus =
-	| "LOADED"
-	| "STARTING"
-	| "STARTED"
-	| "STOPPED"
-	| "STOPPING"
-	| "ERROR"
-	| "DISABLED";
-
 export type Methods<T> = {
 	[P in keyof T as T[P] extends (...args: any) => Awaited<any>
 		? P