refactor: methods namespace cleanup
[poolifier.git] / src / pools / abstract-pool.ts
index e396744603eed1011518cbb3f62b59bb3cedd305..f32aab0dc838409e2514bf0377c4ba9276180579 100644 (file)
@@ -415,22 +415,8 @@ export abstract class AbstractPool<
    *
    * @param workerNodeKey - The worker node key.
    */
-  protected beforeTaskExecutionHook (
-    workerNodeKey: number,
-    task: Task<Data>
-  ): void {
-    const workerTasksUsage = this.workerNodes[workerNodeKey].tasksUsage
-    ++workerTasksUsage.running
-    if (this.workerChoiceStrategyContext.getRequiredStatistics().waitTime) {
-      const waitTime = performance.now() - (task.submissionTimestamp ?? 0)
-      workerTasksUsage.waitTime += waitTime
-      if (
-        this.workerChoiceStrategyContext.getRequiredStatistics().medWaitTime
-      ) {
-        workerTasksUsage.waitTimeHistory.push(waitTime)
-        workerTasksUsage.medWaitTime = median(workerTasksUsage.waitTimeHistory)
-      }
-    }
+  protected beforeTaskExecutionHook (workerNodeKey: number): void {
+    ++this.workerNodes[workerNodeKey].tasksUsage.running
   }
 
   /**
@@ -444,13 +430,21 @@ export abstract class AbstractPool<
     worker: Worker,
     message: MessageValue<Response>
   ): void {
-    const workerNodeKey = this.getWorkerNodeKey(worker)
-    const workerTasksUsage = this.workerNodes[workerNodeKey].tasksUsage
+    const workerTasksUsage =
+      this.workerNodes[this.getWorkerNodeKey(worker)].tasksUsage
     --workerTasksUsage.running
     ++workerTasksUsage.run
     if (message.error != null) {
       ++workerTasksUsage.error
     }
+    this.updateRunTimeTasksUsage(workerTasksUsage, message)
+    this.updateWaitTimeTasksUsage(workerTasksUsage, message)
+  }
+
+  private updateRunTimeTasksUsage (
+    workerTasksUsage: TasksUsage,
+    message: MessageValue<Response>
+  ): void {
     if (this.workerChoiceStrategyContext.getRequiredStatistics().runTime) {
       workerTasksUsage.runTime += message.runTime ?? 0
       if (
@@ -468,13 +462,28 @@ export abstract class AbstractPool<
         workerTasksUsage.medRunTime = median(workerTasksUsage.runTimeHistory)
       }
     }
-    if (
-      this.workerChoiceStrategyContext.getRequiredStatistics().waitTime &&
-      this.workerChoiceStrategyContext.getRequiredStatistics().avgWaitTime &&
-      workerTasksUsage.run !== 0
-    ) {
-      workerTasksUsage.avgWaitTime =
-        workerTasksUsage.waitTime / workerTasksUsage.run
+  }
+
+  private updateWaitTimeTasksUsage (
+    workerTasksUsage: TasksUsage,
+    message: MessageValue<Response>
+  ): void {
+    if (this.workerChoiceStrategyContext.getRequiredStatistics().waitTime) {
+      workerTasksUsage.waitTime += message.waitTime ?? 0
+      if (
+        this.workerChoiceStrategyContext.getRequiredStatistics().avgWaitTime &&
+        workerTasksUsage.run !== 0
+      ) {
+        workerTasksUsage.avgWaitTime =
+          workerTasksUsage.waitTime / workerTasksUsage.run
+      }
+      if (
+        this.workerChoiceStrategyContext.getRequiredStatistics().medWaitTime &&
+        message.waitTime != null
+      ) {
+        workerTasksUsage.waitTimeHistory.push(message.waitTime)
+        workerTasksUsage.medWaitTime = median(workerTasksUsage.waitTimeHistory)
+      }
     }
   }
 
@@ -682,7 +691,7 @@ export abstract class AbstractPool<
   }
 
   private executeTask (workerNodeKey: number, task: Task<Data>): void {
-    this.beforeTaskExecutionHook(workerNodeKey, task)
+    this.beforeTaskExecutionHook(workerNodeKey)
     this.sendToWorker(this.workerNodes[workerNodeKey].worker, task)
   }