1 import type { AbstractPoolWorker
} from
'../abstract-pool-worker'
2 import type { IPoolInternal
} from
'../pool-internal'
3 import { FairShareWorkerChoiceStrategy
} from
'./fair-share-worker-choice-strategy'
4 import { LessRecentlyUsedWorkerChoiceStrategy
} from
'./less-recently-used-worker-choice-strategy'
5 import { RoundRobinWorkerChoiceStrategy
} from
'./round-robin-worker-choice-strategy'
9 } from
'./selection-strategies-types'
10 import { WorkerChoiceStrategies
} from
'./selection-strategies-types'
11 import { WeightedRoundRobinWorkerChoiceStrategy
} from
'./weighted-round-robin-worker-choice-strategy'
14 * Worker selection strategies helpers class.
16 export class SelectionStrategiesUtils
{
18 * Gets the worker choice strategy instance.
20 * @param pool The pool instance.
21 * @param workerChoiceStrategy The worker choice strategy.
22 * @returns The worker choice strategy instance.
24 public static getWorkerChoiceStrategy
<
25 Worker
extends AbstractPoolWorker
,
29 pool
: IPoolInternal
<Worker
, Data
, Response
>,
30 workerChoiceStrategy
: WorkerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
31 ): IWorkerChoiceStrategy
<Worker
> {
32 switch (workerChoiceStrategy
) {
33 case WorkerChoiceStrategies
.ROUND_ROBIN
:
34 return new RoundRobinWorkerChoiceStrategy(pool
)
35 case WorkerChoiceStrategies
.LESS_RECENTLY_USED
:
36 return new LessRecentlyUsedWorkerChoiceStrategy(pool
)
37 case WorkerChoiceStrategies
.FAIR_SHARE
:
38 return new FairShareWorkerChoiceStrategy(pool
)
39 case WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
:
40 return new WeightedRoundRobinWorkerChoiceStrategy(pool
)
43 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
44 `Worker choice strategy '${workerChoiceStrategy}' not found`