docs: fix GH project version
[poolifier.git] / src / pools / worker.ts
CommitLineData
f06e48d8 1import type { CircularArray } from '../circular-array'
29ee7e9a 2import type { Queue } from '../queue'
f06e48d8 3
bdaf31cd
JB
4/**
5 * Callback invoked if the worker has received a message.
6 */
50e66724
JB
7export type MessageHandler<Worker extends IWorker> = (
8 this: Worker,
9 m: unknown
10) => void
bdaf31cd
JB
11
12/**
13 * Callback invoked if the worker raised an error.
14 */
50e66724
JB
15export type ErrorHandler<Worker extends IWorker> = (
16 this: Worker,
17 e: Error
18) => void
bdaf31cd
JB
19
20/**
21 * Callback invoked when the worker has started successfully.
22 */
50e66724 23export type OnlineHandler<Worker extends IWorker> = (this: Worker) => void
bdaf31cd
JB
24
25/**
26 * Callback invoked when the worker exits successfully.
27 */
50e66724
JB
28export type ExitHandler<Worker extends IWorker> = (
29 this: Worker,
30 code: number
31) => void
bdaf31cd
JB
32
33/**
02706357 34 * Message object that is passed as a task between main worker and worker.
c319c66b
JB
35 *
36 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
37 * @internal
bdaf31cd 38 */
f06e48d8 39export 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
JB
48 /**
49 * Submission timestamp.
50 */
51 readonly submissionTimestamp?: number
0274ce2d 52 /**
70a4f5ea 53 * Message UUID.
0274ce2d 54 */
02706357 55 readonly id?: string
f06e48d8
JB
56}
57
58/**
59 * Worker tasks usage statistics.
f9b4bbf8
JB
60 *
61 * @internal
f06e48d8
JB
62 */
63export interface TasksUsage {
02706357
JB
64 /**
65 * Number of tasks executed.
66 */
1ab50fe5 67 ran: number
02706357
JB
68 /**
69 * Number of tasks running.
70 */
f06e48d8 71 running: number
02706357
JB
72 /**
73 * Tasks runtime.
74 */
f06e48d8 75 runTime: number
02706357
JB
76 /**
77 * Tasks runtime history.
78 */
f06e48d8 79 runTimeHistory: CircularArray<number>
02706357
JB
80 /**
81 * Average tasks runtime.
82 */
f06e48d8 83 avgRunTime: number
02706357
JB
84 /**
85 * Median tasks runtime.
86 */
f06e48d8 87 medRunTime: number
0567595a
JB
88 /**
89 * Tasks wait time.
90 */
91 waitTime: number
92 /**
93 * Tasks wait time history.
94 */
95 waitTimeHistory: CircularArray<number>
96 /**
97 * Average tasks wait time.
98 */
99 avgWaitTime: number
100 /**
101 * Median tasks wait time.
102 */
103 medWaitTime: number
02706357
JB
104 /**
105 * Number of tasks errored.
106 */
f06e48d8
JB
107 error: number
108}
109
110/**
111 * Worker interface.
112 */
113export interface IWorker {
bdaf31cd 114 /**
78cea37e 115 * Register an event listener.
bdaf31cd 116 *
38e795c1 117 * @param event - The event.
48ef9107 118 * @param handler - The event handler.
bdaf31cd 119 */
78cea37e
JB
120 on: ((event: 'message', handler: MessageHandler<this>) => void) &
121 ((event: 'error', handler: ErrorHandler<this>) => void) &
122 ((event: 'online', handler: OnlineHandler<this>) => void) &
123 ((event: 'exit', handler: ExitHandler<this>) => void)
bdaf31cd 124 /**
7d6b5ad2 125 * Register a listener to the exit event that will only be performed once.
bdaf31cd 126 *
38e795c1
JB
127 * @param event - `'exit'`.
128 * @param handler - The exit handler.
bdaf31cd 129 */
78cea37e 130 once: (event: 'exit', handler: ExitHandler<this>) => void
bdaf31cd 131}
f06e48d8
JB
132
133/**
134 * Worker node interface.
c319c66b
JB
135 *
136 * @typeParam Worker - Type of worker.
137 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
138 * @internal
f06e48d8
JB
139 */
140export interface WorkerNode<Worker extends IWorker, Data = unknown> {
c319c66b
JB
141 /**
142 * Worker node worker.
143 */
02706357 144 readonly worker: Worker
c319c66b
JB
145 /**
146 * Worker node tasks usage statistics.
147 */
f06e48d8 148 tasksUsage: TasksUsage
c319c66b
JB
149 /**
150 * Worker node tasks queue.
151 */
29ee7e9a 152 readonly tasksQueue: Queue<Task<Data>>
f06e48d8 153}