Commit | Line | Data |
---|---|---|
f06e48d8 | 1 | import type { CircularArray } from '../circular-array' |
29ee7e9a | 2 | import type { Queue } from '../queue' |
f06e48d8 | 3 | |
bdaf31cd JB |
4 | /** |
5 | * Callback invoked if the worker has received a message. | |
6 | */ | |
50e66724 JB |
7 | export type MessageHandler<Worker extends IWorker> = ( |
8 | this: Worker, | |
e102732c | 9 | message: unknown |
50e66724 | 10 | ) => void |
bdaf31cd JB |
11 | |
12 | /** | |
13 | * Callback invoked if the worker raised an error. | |
14 | */ | |
50e66724 JB |
15 | export type ErrorHandler<Worker extends IWorker> = ( |
16 | this: Worker, | |
e102732c | 17 | error: Error |
50e66724 | 18 | ) => void |
bdaf31cd JB |
19 | |
20 | /** | |
21 | * Callback invoked when the worker has started successfully. | |
22 | */ | |
50e66724 | 23 | export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void |
bdaf31cd JB |
24 | |
25 | /** | |
26 | * Callback invoked when the worker exits successfully. | |
27 | */ | |
50e66724 JB |
28 | export type ExitHandler<Worker extends IWorker> = ( |
29 | this: Worker, | |
e102732c | 30 | exitCode: number |
50e66724 | 31 | ) => void |
bdaf31cd JB |
32 | |
33 | /** | |
02706357 | 34 | * Message object that is passed as a task between main worker and worker. |
c319c66b | 35 | * |
e102732c | 36 | * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data. |
c319c66b | 37 | * @internal |
bdaf31cd | 38 | */ |
f06e48d8 | 39 | export interface Task<Data = unknown> { |
a86b6df1 JB |
40 | /** |
41 | * Task name. | |
42 | */ | |
43 | readonly name?: string | |
0274ce2d | 44 | /** |
d29bce7c | 45 | * Task input data that will be passed to the worker. |
0274ce2d | 46 | */ |
02706357 | 47 | readonly data?: Data |
0567595a | 48 | /** |
b6b32453 | 49 | * Timestamp. |
0567595a | 50 | */ |
b6b32453 | 51 | readonly timestamp?: number |
0274ce2d | 52 | /** |
70a4f5ea | 53 | * Message UUID. |
0274ce2d | 54 | */ |
02706357 | 55 | readonly id?: string |
f06e48d8 JB |
56 | } |
57 | ||
58 | /** | |
cd4d348a | 59 | * Measurement statistics. |
f9b4bbf8 JB |
60 | * |
61 | * @internal | |
f06e48d8 | 62 | */ |
cd4d348a | 63 | export interface MeasurementStatistics { |
02706357 | 64 | /** |
932fc8be | 65 | * Measurement aggregate. |
02706357 | 66 | */ |
932fc8be | 67 | aggregate: number |
f7510105 JB |
68 | /** |
69 | * Measurement minimum. | |
70 | */ | |
71 | minimum: number | |
72 | /** | |
73 | * Measurement maximum. | |
74 | */ | |
75 | maximum: number | |
02706357 | 76 | /** |
cd4d348a | 77 | * Measurement average. |
02706357 | 78 | */ |
a4e07f72 | 79 | average: number |
02706357 | 80 | /** |
cd4d348a | 81 | * Measurement median. |
02706357 | 82 | */ |
a4e07f72 | 83 | median: number |
02706357 | 84 | /** |
cd4d348a | 85 | * Measurement history. |
02706357 | 86 | */ |
eb7bf744 | 87 | readonly history: CircularArray<number> |
a4e07f72 JB |
88 | } |
89 | ||
5df69fab JB |
90 | /** |
91 | * Event loop utilization measurement statistics. | |
92 | * | |
93 | * @internal | |
94 | */ | |
95 | export interface EventLoopUtilizationMeasurementStatistics { | |
eb7bf744 JB |
96 | readonly idle: MeasurementStatistics |
97 | readonly active: MeasurementStatistics | |
f7510105 | 98 | utilization?: number |
5df69fab JB |
99 | } |
100 | ||
a4e07f72 JB |
101 | /** |
102 | * Task statistics. | |
103 | * | |
104 | * @internal | |
105 | */ | |
a4e07f72 | 106 | export interface TaskStatistics { |
02706357 | 107 | /** |
9a0613e9 | 108 | * Number of executed tasks. |
02706357 | 109 | */ |
a4e07f72 | 110 | executed: number |
02706357 | 111 | /** |
9a0613e9 | 112 | * Number of executing tasks. |
02706357 | 113 | */ |
a4e07f72 | 114 | executing: number |
0567595a | 115 | /** |
9a0613e9 | 116 | * Number of queued tasks. |
0567595a | 117 | */ |
8604aaab | 118 | readonly queued: number |
df593701 JB |
119 | /** |
120 | * Maximum number of queued tasks. | |
121 | */ | |
122 | readonly maxQueued: number | |
0567595a | 123 | /** |
9a0613e9 | 124 | * Number of failed tasks. |
0567595a | 125 | */ |
a4e07f72 JB |
126 | failed: number |
127 | } | |
128 | ||
f59e1027 JB |
129 | /** |
130 | * Worker information. | |
131 | * | |
132 | * @internal | |
133 | */ | |
134 | export interface WorkerInfo { | |
135 | /** | |
83fa0a36 | 136 | * Worker id. |
f59e1027 | 137 | */ |
eb7bf744 | 138 | readonly id: number | undefined |
8a1260a3 JB |
139 | /** |
140 | * Dynamic flag. | |
141 | */ | |
142 | dynamic: boolean | |
f59e1027 JB |
143 | /** |
144 | * Started flag. | |
145 | */ | |
146 | started: boolean | |
920278a2 JB |
147 | /** |
148 | * Shared buffer. | |
149 | */ | |
150 | readonly sharedBuffer?: Int32Array | |
f59e1027 JB |
151 | } |
152 | ||
a4e07f72 JB |
153 | /** |
154 | * Worker usage statistics. | |
155 | * | |
156 | * @internal | |
157 | */ | |
158 | export interface WorkerUsage { | |
0567595a | 159 | /** |
a4e07f72 | 160 | * Tasks statistics. |
0567595a | 161 | */ |
eb7bf744 | 162 | readonly tasks: TaskStatistics |
0567595a | 163 | /** |
a4e07f72 | 164 | * Tasks runtime statistics. |
0567595a | 165 | */ |
eb7bf744 | 166 | readonly runTime: MeasurementStatistics |
02706357 | 167 | /** |
a4e07f72 | 168 | * Tasks wait time statistics. |
02706357 | 169 | */ |
eb7bf744 | 170 | readonly waitTime: MeasurementStatistics |
62c15a68 | 171 | /** |
5df69fab | 172 | * Tasks event loop utilization statistics. |
62c15a68 | 173 | */ |
eb7bf744 | 174 | readonly elu: EventLoopUtilizationMeasurementStatistics |
f06e48d8 JB |
175 | } |
176 | ||
177 | /** | |
178 | * Worker interface. | |
179 | */ | |
180 | export interface IWorker { | |
f59e1027 | 181 | /** |
83fa0a36 | 182 | * Worker id. |
f59e1027 | 183 | */ |
aecc6e48 JB |
184 | readonly id?: number |
185 | readonly threadId?: number | |
bdaf31cd | 186 | /** |
64383951 | 187 | * Registers an event listener. |
bdaf31cd | 188 | * |
38e795c1 | 189 | * @param event - The event. |
48ef9107 | 190 | * @param handler - The event handler. |
bdaf31cd | 191 | */ |
78cea37e JB |
192 | on: ((event: 'message', handler: MessageHandler<this>) => void) & |
193 | ((event: 'error', handler: ErrorHandler<this>) => void) & | |
194 | ((event: 'online', handler: OnlineHandler<this>) => void) & | |
195 | ((event: 'exit', handler: ExitHandler<this>) => void) | |
bdaf31cd | 196 | /** |
64383951 | 197 | * Registers a listener to the exit event that will only be performed once. |
bdaf31cd | 198 | * |
38e795c1 JB |
199 | * @param event - `'exit'`. |
200 | * @param handler - The exit handler. | |
bdaf31cd | 201 | */ |
78cea37e | 202 | once: (event: 'exit', handler: ExitHandler<this>) => void |
bdaf31cd | 203 | } |
f06e48d8 JB |
204 | |
205 | /** | |
206 | * Worker node interface. | |
c319c66b JB |
207 | * |
208 | * @typeParam Worker - Type of worker. | |
e102732c | 209 | * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data. |
c319c66b | 210 | * @internal |
f06e48d8 JB |
211 | */ |
212 | export interface WorkerNode<Worker extends IWorker, Data = unknown> { | |
c319c66b JB |
213 | /** |
214 | * Worker node worker. | |
215 | */ | |
02706357 | 216 | readonly worker: Worker |
f59e1027 JB |
217 | /** |
218 | * Worker node worker info. | |
219 | */ | |
eb7bf744 | 220 | readonly info: WorkerInfo |
c319c66b | 221 | /** |
a4e07f72 | 222 | * Worker node worker usage statistics. |
c319c66b | 223 | */ |
f59e1027 | 224 | usage: WorkerUsage |
c319c66b JB |
225 | /** |
226 | * Worker node tasks queue. | |
227 | */ | |
29ee7e9a | 228 | readonly tasksQueue: Queue<Task<Data>> |
f06e48d8 | 229 | } |