Use generic for worker data type.
authorJérôme Benoit <jerome.benoit@sap.com>
Tue, 26 Jan 2021 19:11:06 +0000 (20:11 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Tue, 26 Jan 2021 19:11:06 +0000 (20:11 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/start.ts
src/utils/Statistics.ts
src/worker/WorkerDynamicPool.ts
src/worker/WorkerFactory.ts
src/worker/WorkerSet.ts
src/worker/WorkerStaticPool.ts

index 04dd28140811d09d114ce59aa1c87a00a7d467d7..265b1fb0a17548bd02c99bb221d1d9041a46f86e 100644 (file)
@@ -8,7 +8,7 @@ class Bootstrap {
   static async start() {
     try {
       let numStationsTotal = 0;
-      const workerImplementation: Wrk = WorkerFactory.getWorkerImpl('./dist/charging-station/StationWorker.js', Configuration.getWorkerProcess(), {
+      const workerImplementation: Wrk = WorkerFactory.getWorkerImpl<StationWorkerData>('./dist/charging-station/StationWorker.js', Configuration.getWorkerProcess(), {
         poolMaxSize: Configuration.getWorkerPoolMaxSize(),
         poolMinSize: Configuration.getWorkerPoolMinSize(),
         elementsPerWorker: Configuration.getChargingStationsPerWorker()
index 05a2255142b8c89d0b9a9986509d31fdf90a0e5b..2aa99b0d4c9f317c78d14a052c65da80f4cbac4c 100644 (file)
@@ -14,7 +14,7 @@ export default class Statistics {
 
   public constructor(objName: string) {
     this.objId = objName;
-    this.commandsStatistics = { id: this.objId ? this.objId : ' Object id not specified', commandsStatisticsData: {} };
+    this.commandsStatistics = { id: this.objId ? this.objId : 'Object id not specified', commandsStatisticsData: {} };
   }
 
   public addMessage(command: RequestCommand | IncomingRequestCommand, messageType: MessageType): void {
index 570e5d1bcb2bded02486202787a876d32f251d88..4410aa3a6a7f5e58e81767770aa8902d613c43c4 100644 (file)
@@ -5,7 +5,7 @@ import Utils from '../utils/Utils';
 import { WorkerData } from '../types/Worker';
 import Wrk from './Wrk';
 
-export default class WorkerDynamicPool extends Wrk {
+export default class WorkerDynamicPool<T> extends Wrk {
   private pool: DynamicPool;
 
   /**
@@ -39,7 +39,7 @@ export default class WorkerDynamicPool extends Wrk {
    * @return {Promise<void>}
    * @public
    */
-  public async addElement(elementData: WorkerData): Promise<void> {
+  public async addElement(elementData: T): Promise<void> {
     await this.pool.execute(elementData);
     // Start worker sequentially to optimize memory at startup
     await Utils.sleep(Constants.START_WORKER_DELAY);
index 24145627c18405c157c3903c8dd773808627795e..d71e4227841d5072778c2a7a8a71d256e12ae1e3 100644 (file)
@@ -7,7 +7,7 @@ import WorkerStaticPool from './WorkerStaticPool';
 import Wrk from './Wrk';
 
 export default class WorkerFactory {
-  public static getWorkerImpl(workerScript: string, workerProcessType: WorkerProcessType, options?: WorkerOptions): Wrk {
+  public static getWorkerImpl<T>(workerScript: string, workerProcessType: WorkerProcessType, options?: WorkerOptions): Wrk {
     if (Utils.isUndefined(options)) {
       options = {} as WorkerOptions;
     }
@@ -16,12 +16,12 @@ export default class WorkerFactory {
         if (Utils.isUndefined(options.elementsPerWorker)) {
           options.elementsPerWorker = 1;
         }
-        return new WorkerSet(workerScript, options.elementsPerWorker);
+        return new WorkerSet<T>(workerScript, options.elementsPerWorker);
       case WorkerProcessType.STATIC_POOL:
         if (Utils.isUndefined(options.poolMaxSize)) {
           options.elementsPerWorker = 16;
         }
-        return new WorkerStaticPool(workerScript, options.poolMaxSize);
+        return new WorkerStaticPool<T>(workerScript, options.poolMaxSize);
       case WorkerProcessType.DYNAMIC_POOL:
         if (Utils.isUndefined(options.poolMinSize)) {
           options.elementsPerWorker = 4;
@@ -29,7 +29,7 @@ export default class WorkerFactory {
         if (Utils.isUndefined(options.poolMaxSize)) {
           options.elementsPerWorker = 16;
         }
-        return new WorkerDynamicPool(workerScript, options.poolMinSize, options.poolMaxSize);
+        return new WorkerDynamicPool<T>(workerScript, options.poolMinSize, options.poolMaxSize);
       default:
         return null;
     }
index 0c59c09108089d059184bcaac99e6ffc104c3341..0fd54fb219bf1f0c99a2013e6b4e21a0c4e82d68 100644 (file)
@@ -1,11 +1,11 @@
-import { WorkerData, WorkerEvents, WorkerSetElement } from '../types/Worker';
+import { WorkerEvents, WorkerSetElement } from '../types/Worker';
 
 import Constants from '../utils/Constants';
 import Utils from '../utils/Utils';
 import { Worker } from 'worker_threads';
 import Wrk from './Wrk';
 
-export default class WorkerSet extends Wrk {
+export default class WorkerSet<T> extends Wrk {
   public maxElementsPerWorker: number;
   private workers: Set<WorkerSetElement>;
 
@@ -30,7 +30,7 @@ export default class WorkerSet extends Wrk {
    * @return {Promise<void>}
    * @public
    */
-  public async addElement(elementData: WorkerData): Promise<void> {
+  public async addElement(elementData: T): Promise<void> {
     if (!this.workers) {
       throw Error('Cannot add a WorkerSet element: workers\' set does not exist');
     }
index 9c2bc41d4adac0d905a4603e3adfd9c57187a646..c6625d8b609ac55d171e5b7959498242289d90d0 100644 (file)
@@ -5,7 +5,7 @@ import Utils from '../utils/Utils';
 import { WorkerData } from '../types/Worker';
 import Wrk from './Wrk';
 
-export default class WorkerStaticPool extends Wrk {
+export default class WorkerStaticPool<T> extends Wrk {
   private pool: StaticPool;
 
   /**
@@ -39,7 +39,7 @@ export default class WorkerStaticPool extends Wrk {
    * @return {Promise<void>}
    * @public
    */
-  public async addElement(elementData: WorkerData): Promise<void> {
+  public async addElement(elementData: T): Promise<void> {
     await this.pool.execute(elementData);
     // Start worker sequentially to optimize memory at startup
     await Utils.sleep(Constants.START_WORKER_DELAY);