1 import type { AbstractPoolWorker
} from
'../abstract-pool-worker'
2 import type { IPoolInternal
} from
'../pool-internal'
3 import { LessRecentlyUsedWorkerChoiceStrategy
} from
'./less-recently-used-worker-choice-strategy'
4 import { RoundRobinWorkerChoiceStrategy
} from
'./round-robin-worker-choice-strategy'
8 } from
'./selection-strategies-types'
9 import { WorkerChoiceStrategies
} from
'./selection-strategies-types'
10 import { WeightedRoundRobinWorkerChoiceStrategy
} from
'./weighted-round-robin-choice-strategy'
13 * Worker selection strategies helpers class.
15 export class SelectionStrategiesUtils
{
17 * Get the worker choice strategy instance.
19 * @param pool The pool instance.
20 * @param workerChoiceStrategy The worker choice strategy.
21 * @returns The worker choice strategy instance.
23 public static getWorkerChoiceStrategy
<
24 Worker
extends AbstractPoolWorker
,
28 pool
: IPoolInternal
<Worker
, Data
, Response
>,
29 workerChoiceStrategy
: WorkerChoiceStrategy
= WorkerChoiceStrategies
.ROUND_ROBIN
30 ): IWorkerChoiceStrategy
<Worker
> {
31 switch (workerChoiceStrategy
) {
32 case WorkerChoiceStrategies
.ROUND_ROBIN
:
33 return new RoundRobinWorkerChoiceStrategy(pool
)
34 case WorkerChoiceStrategies
.LESS_RECENTLY_USED
:
35 return new LessRecentlyUsedWorkerChoiceStrategy(pool
)
36 case WorkerChoiceStrategies
.WEIGHTED_ROUND_ROBIN
:
37 return new WeightedRoundRobinWorkerChoiceStrategy(pool
)
40 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
41 `Worker choice strategy '${workerChoiceStrategy}' not found`