Merge branch 'master' of github.com:poolifier/poolifier
[poolifier.git] / src / pools / selection-strategies / selection-strategies-types.ts
... / ...
CommitLineData
1/**
2 * Enumeration of worker choice strategies.
3 */
4export const WorkerChoiceStrategies = Object.freeze({
5 /**
6 * Round robin worker selection strategy.
7 */
8 ROUND_ROBIN: 'ROUND_ROBIN',
9 /**
10 * Less used worker selection strategy.
11 */
12 LESS_USED: 'LESS_USED',
13 /**
14 * Less busy worker selection strategy.
15 */
16 LESS_BUSY: 'LESS_BUSY',
17 /**
18 * Fair share worker selection strategy.
19 */
20 FAIR_SHARE: 'FAIR_SHARE',
21 /**
22 * Weighted round robin worker selection strategy.
23 */
24 WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN'
25} as const)
26
27/**
28 * Worker choice strategy.
29 */
30export type WorkerChoiceStrategy = keyof typeof WorkerChoiceStrategies
31
32/**
33 * Worker choice strategy options.
34 */
35export interface WorkerChoiceStrategyOptions {
36 /**
37 * Use tasks median run time instead of average run time.
38 */
39 medRunTime?: boolean
40}
41
42/**
43 * Pool worker tasks usage statistics requirements.
44 */
45export interface RequiredStatistics {
46 /**
47 * Require tasks run time.
48 */
49 runTime: boolean
50 /**
51 * Require tasks average run time.
52 */
53 avgRunTime: boolean
54 /**
55 * Require tasks median run time.
56 */
57 medRunTime: boolean
58}
59
60/**
61 * Worker choice strategy interface.
62 */
63export interface IWorkerChoiceStrategy {
64 /**
65 * Required tasks usage statistics.
66 */
67 readonly requiredStatistics: RequiredStatistics
68 /**
69 * Resets strategy internals (counters, statistics, etc.).
70 */
71 reset: () => boolean
72 /**
73 * Chooses a worker node in the pool and returns its key.
74 */
75 choose: () => number
76 /**
77 * Removes a worker node key from strategy internals.
78 *
79 * @param workerNodeKey - The worker node key.
80 */
81 remove: (workerNodeKey: number) => boolean
82}