1 import { CircularArray
} from
'../circular-array'
2 import { Queue
} from
'../queue'
16 * @typeParam Worker - Type of worker.
17 * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
19 export class WorkerNode
<Worker
extends IWorker
, Data
= unknown
>
20 implements IWorkerNode
<Worker
, Data
> {
21 public readonly worker
: Worker
22 public readonly info
: WorkerInfo
23 public usage
: WorkerUsage
24 private readonly tasksQueue
: Queue
<Task
<Data
>>
27 * Constructs a new worker node.
29 * @param worker - The worker.
30 * @param workerType - The worker type.
32 constructor (worker
: Worker
, workerType
: WorkerType
) {
34 this.info
= this.initWorkerInfo(worker
, workerType
)
35 this.usage
= this.initWorkerUsage()
36 this.tasksQueue
= new Queue
<Task
<Data
>>()
40 public tasksQueueSize (): number {
41 return this.tasksQueue
.size
45 * Worker node tasks queue maximum size.
47 * @returns The tasks queue maximum size.
49 private tasksQueueMaxSize (): number {
50 return this.tasksQueue
.maxSize
54 public enqueueTask (task
: Task
<Data
>): number {
55 return this.tasksQueue
.enqueue(task
)
59 public dequeueTask (): Task
<Data
> | undefined {
60 return this.tasksQueue
.dequeue()
64 public clearTasksQueue (): void {
65 this.tasksQueue
.clear()
68 public resetUsage (): void {
69 this.usage
= this.initWorkerUsage()
72 private initWorkerInfo (worker
: Worker
, workerType
: WorkerType
): WorkerInfo
{
74 id
: this.getWorkerId(worker
, workerType
),
81 private initWorkerUsage (): WorkerUsage
{
82 const getTasksQueueSize
= (): number => {
83 return this.tasksQueueSize()
85 const getTasksQueueMaxSize
= (): number => {
86 return this.tasksQueueMaxSize()
92 get
queued (): number {
93 return getTasksQueueSize()
95 get
maxQueued (): number {
96 return getTasksQueueMaxSize()
101 history
: new CircularArray()
104 history
: new CircularArray()
108 history
: new CircularArray()
111 history
: new CircularArray()
118 * Gets the worker id.
120 * @param worker - The worker.
121 * @param workerType - The worker type.
122 * @returns The worker id.
124 private getWorkerId (
126 workerType
: WorkerType
127 ): number | undefined {
128 if (workerType
=== WorkerTypes
.thread
) {
129 return worker
.threadId
130 } else if (workerType
=== WorkerTypes
.cluster
) {