build(deps-dev): apply updates
[poolifier.git] / src / pools / selection-strategies / abstract-worker-choice-strategy.ts
index ff1d4b0847e3bd53be4c06bd3d252523f3ff545e..f4273dcd9d17bc3e20f56795f0891a0dbf4b2d56 100644 (file)
@@ -1,20 +1,19 @@
 import type { IPool } from '../pool.js'
-import {
-  DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
-  buildWorkerChoiceStrategyOptions
-} from '../utils.js'
+import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../utils.js'
 import type { IWorker } from '../worker.js'
 import type {
   IWorkerChoiceStrategy,
-  MeasurementStatisticsRequirements,
   StrategyPolicy,
   TaskStatisticsRequirements,
-  WorkerChoiceStrategyOptions
+  WorkerChoiceStrategyOptions,
 } from './selection-strategies-types.js'
+import {
+  buildWorkerChoiceStrategyOptions,
+  toggleMedianMeasurementStatisticsRequirements,
+} from './selection-strategies-utils.js'
 
 /**
  * Worker choice strategy abstract base class.
- *
  * @typeParam Worker - Type of worker which manages the strategy.
  * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
  * @typeParam Response - Type of execution response. This can only be structured-cloneable data.
@@ -37,19 +36,18 @@ export abstract class AbstractWorkerChoiceStrategy<
   /** @inheritDoc */
   public readonly strategyPolicy: StrategyPolicy = {
     dynamicWorkerUsage: false,
-    dynamicWorkerReady: true
+    dynamicWorkerReady: true,
   }
 
   /** @inheritDoc */
   public readonly taskStatisticsRequirements: TaskStatisticsRequirements = {
     runTime: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
     waitTime: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
-    elu: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS
+    elu: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
   }
 
   /**
    * Constructs a worker choice strategy bound to the pool.
-   *
    * @param pool - The pool instance.
    * @param opts - The worker choice strategy options.
    */
@@ -64,37 +62,23 @@ export abstract class AbstractWorkerChoiceStrategy<
   protected setTaskStatisticsRequirements (
     opts: WorkerChoiceStrategyOptions | undefined
   ): void {
-    this.toggleMedianMeasurementStatisticsRequirements(
+    toggleMedianMeasurementStatisticsRequirements(
       this.taskStatisticsRequirements.runTime,
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       opts!.runTime!.median
     )
-    this.toggleMedianMeasurementStatisticsRequirements(
+    toggleMedianMeasurementStatisticsRequirements(
       this.taskStatisticsRequirements.waitTime,
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       opts!.waitTime!.median
     )
-    this.toggleMedianMeasurementStatisticsRequirements(
+    toggleMedianMeasurementStatisticsRequirements(
       this.taskStatisticsRequirements.elu,
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       opts!.elu!.median
     )
   }
 
-  private toggleMedianMeasurementStatisticsRequirements (
-    measurementStatisticsRequirements: MeasurementStatisticsRequirements,
-    toggleMedian: boolean
-  ): void {
-    if (measurementStatisticsRequirements.average && toggleMedian) {
-      measurementStatisticsRequirements.average = false
-      measurementStatisticsRequirements.median = toggleMedian
-    }
-    if (measurementStatisticsRequirements.median && !toggleMedian) {
-      measurementStatisticsRequirements.average = true
-      measurementStatisticsRequirements.median = toggleMedian
-    }
-  }
-
   protected resetWorkerNodeKeyProperties (): void {
     this.nextWorkerNodeKey = 0
     this.previousWorkerNodeKey = 0
@@ -123,7 +107,6 @@ export abstract class AbstractWorkerChoiceStrategy<
 
   /**
    * Whether the worker node is ready or not.
-   *
    * @param workerNodeKey - The worker node key.
    * @returns Whether the worker node is ready or not.
    */
@@ -147,8 +130,7 @@ export abstract class AbstractWorkerChoiceStrategy<
   /**
    * Gets the worker node task runtime.
    * If the task statistics require the average runtime, the average runtime is returned.
-   * If the task statistics require the median runtime , the median runtime is returned.
-   *
+   * If the task statistics require the median runtime, the median runtime is returned.
    * @param workerNodeKey - The worker node key.
    * @returns The worker node task runtime.
    */
@@ -162,7 +144,6 @@ export abstract class AbstractWorkerChoiceStrategy<
    * Gets the worker node task wait time.
    * If the task statistics require the average wait time, the average wait time is returned.
    * If the task statistics require the median wait time, the median wait time is returned.
-   *
    * @param workerNodeKey - The worker node key.
    * @returns The worker node task wait time.
    */
@@ -176,7 +157,6 @@ export abstract class AbstractWorkerChoiceStrategy<
    * Gets the worker node task ELU.
    * If the task statistics require the average ELU, the average ELU is returned.
    * If the task statistics require the median ELU, the median ELU is returned.
-   *
    * @param workerNodeKey - The worker node key.
    * @returns The worker node task ELU.
    */
@@ -188,7 +168,6 @@ export abstract class AbstractWorkerChoiceStrategy<
 
   /**
    * Sets safely the previous worker node key.
-   *
    * @param workerNodeKey - The worker node key.
    */
   protected setPreviousWorkerNodeKey (workerNodeKey: number | undefined): void {