feat: add pool runtime setters
[poolifier.git] / src / pools / selection-strategies / selection-strategies-types.ts
1 /**
2 * Enumeration of worker choice strategies.
3 */
4 export 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 */
30 export type WorkerChoiceStrategy = keyof typeof WorkerChoiceStrategies
31
32 /**
33 * Worker choice strategy options.
34 */
35 export 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 *
45 * @internal
46 */
47 export interface RequiredStatistics {
48 /**
49 * Require tasks run time.
50 */
51 runTime: boolean
52 /**
53 * Require tasks average run time.
54 */
55 avgRunTime: boolean
56 /**
57 * Require tasks median run time.
58 */
59 medRunTime: boolean
60 }
61
62 /**
63 * Worker choice strategy interface.
64 */
65 export interface IWorkerChoiceStrategy {
66 /**
67 * Required tasks usage statistics.
68 */
69 readonly requiredStatistics: RequiredStatistics
70 /**
71 * Resets strategy internals (counters, statistics, etc.).
72 */
73 reset: () => boolean
74 /**
75 * Chooses a worker node in the pool and returns its key.
76 */
77 choose: () => number
78 /**
79 * Removes a worker node key from strategy internals.
80 *
81 * @param workerNodeKey - The worker node key.
82 */
83 remove: (workerNodeKey: number) => boolean
84 /**
85 * Sets the worker choice strategy options.
86 *
87 * @param opts - The worker choice strategy options.
88 */
89 setOptions: (opts: WorkerChoiceStrategyOptions) => void
90 }