Commit | Line | Data |
---|---|---|
f06e48d8 JB |
1 | import type { CircularArray } from '../circular-array' |
2 | ||
bdaf31cd JB |
3 | /** |
4 | * Callback invoked if the worker has received a message. | |
5 | */ | |
50e66724 JB |
6 | export type MessageHandler<Worker extends IWorker> = ( |
7 | this: Worker, | |
8 | m: unknown | |
9 | ) => void | |
bdaf31cd JB |
10 | |
11 | /** | |
12 | * Callback invoked if the worker raised an error. | |
13 | */ | |
50e66724 JB |
14 | export type ErrorHandler<Worker extends IWorker> = ( |
15 | this: Worker, | |
16 | e: Error | |
17 | ) => void | |
bdaf31cd JB |
18 | |
19 | /** | |
20 | * Callback invoked when the worker has started successfully. | |
21 | */ | |
50e66724 | 22 | export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void |
bdaf31cd JB |
23 | |
24 | /** | |
25 | * Callback invoked when the worker exits successfully. | |
26 | */ | |
50e66724 JB |
27 | export type ExitHandler<Worker extends IWorker> = ( |
28 | this: Worker, | |
29 | code: number | |
30 | ) => void | |
bdaf31cd JB |
31 | |
32 | /** | |
f06e48d8 | 33 | * Worker task interface. |
bdaf31cd | 34 | */ |
f06e48d8 | 35 | export interface Task<Data = unknown> { |
0274ce2d JB |
36 | /** |
37 | * Worker task data. | |
38 | */ | |
f06e48d8 | 39 | data: Data |
0274ce2d JB |
40 | /** |
41 | * Task UUID. | |
42 | */ | |
f06e48d8 JB |
43 | id: string |
44 | } | |
45 | ||
46 | /** | |
47 | * Worker tasks usage statistics. | |
48 | */ | |
49 | export interface TasksUsage { | |
50 | run: number | |
51 | running: number | |
52 | runTime: number | |
53 | runTimeHistory: CircularArray<number> | |
54 | avgRunTime: number | |
55 | medRunTime: number | |
56 | error: number | |
57 | } | |
58 | ||
59 | /** | |
60 | * Worker interface. | |
61 | */ | |
62 | export interface IWorker { | |
bdaf31cd | 63 | /** |
78cea37e | 64 | * Register an event listener. |
bdaf31cd | 65 | * |
38e795c1 JB |
66 | * @param event - The event. |
67 | * @param handler - The event listener. | |
bdaf31cd | 68 | */ |
78cea37e JB |
69 | on: ((event: 'message', handler: MessageHandler<this>) => void) & |
70 | ((event: 'error', handler: ErrorHandler<this>) => void) & | |
71 | ((event: 'online', handler: OnlineHandler<this>) => void) & | |
72 | ((event: 'exit', handler: ExitHandler<this>) => void) | |
bdaf31cd JB |
73 | /** |
74 | * Register a listener to the exit event that will only performed once. | |
75 | * | |
38e795c1 JB |
76 | * @param event - `'exit'`. |
77 | * @param handler - The exit handler. | |
bdaf31cd | 78 | */ |
78cea37e | 79 | once: (event: 'exit', handler: ExitHandler<this>) => void |
bdaf31cd | 80 | } |
f06e48d8 JB |
81 | |
82 | /** | |
83 | * Worker node interface. | |
84 | */ | |
85 | export interface WorkerNode<Worker extends IWorker, Data = unknown> { | |
86 | worker: Worker | |
87 | tasksUsage: TasksUsage | |
88 | tasksQueue: Array<Task<Data>> | |
89 | } |