Add fair sharing worker choice strategy
[poolifier.git] / src / pools / selection-strategies / selection-strategies-utils.ts
CommitLineData
bdaf31cd
JB
1import type { AbstractPoolWorker } from '../abstract-pool-worker'
2import type { IPoolInternal } from '../pool-internal'
23ff945a 3import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy'
bdaf31cd
JB
4import { LessRecentlyUsedWorkerChoiceStrategy } from './less-recently-used-worker-choice-strategy'
5import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy'
6import type {
7 IWorkerChoiceStrategy,
8 WorkerChoiceStrategy
9} from './selection-strategies-types'
10import { WorkerChoiceStrategies } from './selection-strategies-types'
b3432a63 11import { WeightedRoundRobinWorkerChoiceStrategy } from './weighted-round-robin-choice-strategy'
bdaf31cd
JB
12
13/**
14 * Worker selection strategies helpers class.
15 */
16export class SelectionStrategiesUtils {
17 /**
18 * Get the worker choice strategy instance.
19 *
20 * @param pool The pool instance.
21 * @param workerChoiceStrategy The worker choice strategy.
22 * @returns The worker choice strategy instance.
23 */
24 public static getWorkerChoiceStrategy<
25 Worker extends AbstractPoolWorker,
26 Data,
27 Response
28 > (
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)
23ff945a
JB
37 case WorkerChoiceStrategies.FAIR_SHARE:
38 return new FairShareWorkerChoiceStrategy(pool)
b3432a63
JB
39 case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN:
40 return new WeightedRoundRobinWorkerChoiceStrategy(pool)
bdaf31cd
JB
41 default:
42 throw new Error(
43 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
44 `Worker choice strategy '${workerChoiceStrategy}' not found`
45 )
46 }
47 }
48}