X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Fselection-strategies-utils.ts;h=4c0fea61ef05a4ebb398a396c580bfe9d0afa084;hb=7e060ceea2e476067edc0a19a02fdfd35df7bb8a;hp=34c425b3541e806b770e1693e0aee6da7217e4f8;hpb=b3432a63039e7cb70c0448da5518690e457cd47e;p=poolifier.git diff --git a/src/pools/selection-strategies/selection-strategies-utils.ts b/src/pools/selection-strategies/selection-strategies-utils.ts index 34c425b3..4c0fea61 100644 --- a/src/pools/selection-strategies/selection-strategies-utils.ts +++ b/src/pools/selection-strategies/selection-strategies-utils.ts @@ -1,5 +1,6 @@ -import type { AbstractPoolWorker } from '../abstract-pool-worker' import type { IPoolInternal } from '../pool-internal' +import type { IPoolWorker } from '../pool-worker' +import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy' import { LessRecentlyUsedWorkerChoiceStrategy } from './less-recently-used-worker-choice-strategy' import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy' import type { @@ -7,39 +8,36 @@ import type { WorkerChoiceStrategy } from './selection-strategies-types' import { WorkerChoiceStrategies } from './selection-strategies-types' -import { WeightedRoundRobinWorkerChoiceStrategy } from './weighted-round-robin-choice-strategy' +import { WeightedRoundRobinWorkerChoiceStrategy } from './weighted-round-robin-worker-choice-strategy' /** - * Worker selection strategies helpers class. + * Gets the worker choice strategy instance. + * + * @param pool - The pool instance. + * @param workerChoiceStrategy - The worker choice strategy. + * @returns The worker choice strategy instance. */ -export class SelectionStrategiesUtils { - /** - * Get the worker choice strategy instance. - * - * @param pool The pool instance. - * @param workerChoiceStrategy The worker choice strategy. - * @returns The worker choice strategy instance. - */ - public static getWorkerChoiceStrategy< - Worker extends AbstractPoolWorker, - Data, - Response - > ( - pool: IPoolInternal, - workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN - ): IWorkerChoiceStrategy { - switch (workerChoiceStrategy) { - case WorkerChoiceStrategies.ROUND_ROBIN: - return new RoundRobinWorkerChoiceStrategy(pool) - case WorkerChoiceStrategies.LESS_RECENTLY_USED: - return new LessRecentlyUsedWorkerChoiceStrategy(pool) - case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN: - return new WeightedRoundRobinWorkerChoiceStrategy(pool) - default: - throw new Error( - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - `Worker choice strategy '${workerChoiceStrategy}' not found` - ) - } +export function getWorkerChoiceStrategy< + Worker extends IPoolWorker, + Data, + Response +> ( + pool: IPoolInternal, + workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN +): IWorkerChoiceStrategy { + switch (workerChoiceStrategy) { + case WorkerChoiceStrategies.ROUND_ROBIN: + return new RoundRobinWorkerChoiceStrategy(pool) + case WorkerChoiceStrategies.LESS_RECENTLY_USED: + return new LessRecentlyUsedWorkerChoiceStrategy(pool) + case WorkerChoiceStrategies.FAIR_SHARE: + return new FairShareWorkerChoiceStrategy(pool) + case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN: + return new WeightedRoundRobinWorkerChoiceStrategy(pool) + default: + throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `Worker choice strategy '${workerChoiceStrategy}' not found` + ) } }