+ /** @inheritDoc */
+ public get info (): PoolInfo {
+ return {
+ type: this.type,
+ worker: this.worker,
+ minSize: this.minSize,
+ maxSize: this.maxSize,
+ workerNodes: this.workerNodes.length,
+ idleWorkerNodes: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ workerNode.usage.tasks.executing === 0
+ ? accumulator + 1
+ : accumulator,
+ 0
+ ),
+ busyWorkerNodes: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ workerNode.usage.tasks.executing > 0 ? accumulator + 1 : accumulator,
+ 0
+ ),
+ executedTasks: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ accumulator + workerNode.usage.tasks.executed,
+ 0
+ ),
+ executingTasks: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ accumulator + workerNode.usage.tasks.executing,
+ 0
+ ),
+ queuedTasks: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ accumulator + workerNode.usage.tasks.queued,
+ 0
+ ),
+ maxQueuedTasks: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ accumulator + workerNode.usage.tasks.maxQueued,
+ 0
+ ),
+ failedTasks: this.workerNodes.reduce(
+ (accumulator, workerNode) =>
+ accumulator + workerNode.usage.tasks.failed,
+ 0
+ )
+ }
+ }
+
+ /**
+ * Pool type.
+ *
+ * If it is `'dynamic'`, it provides the `max` property.
+ */
+ protected abstract get type (): PoolType
+
+ /**
+ * Gets the worker type.
+ */
+ protected abstract get worker (): WorkerType
+
+ /**
+ * Pool minimum size.
+ */
+ protected abstract get minSize (): number
+
+ /**
+ * Pool maximum size.
+ */
+ protected abstract get maxSize (): number
+
+ /**
+ * Get the worker given its id.
+ *
+ * @param workerId - The worker id.
+ * @returns The worker if found in the pool worker nodes, `undefined` otherwise.
+ */
+ private getWorkerById (workerId: number): Worker | undefined {
+ return this.workerNodes.find(workerNode => workerNode.info.id === workerId)
+ ?.worker
+ }
+
+ /**
+ * Gets the given worker its worker node key.
+ *
+ * @param worker - The worker.
+ * @returns The worker node key if found in the pool worker nodes, `-1` otherwise.
+ */
+ private getWorkerNodeKey (worker: Worker): number {
+ return this.workerNodes.findIndex(
+ workerNode => workerNode.worker === worker
+ )
+ }
+
+ /** @inheritDoc */