Merge branch 'master' into elu-strategy
[poolifier.git] / src / worker / abstract-worker.ts
index 7805514a7b3b083385b96ac4d26218840b625b31..a84bb0691fc588d3a8e51b0fe1696d7c85bb7dc9 100644 (file)
@@ -146,7 +146,9 @@ export abstract class AbstractWorker<
    *
    * @param message - Message received.
    */
-  protected messageListener (message: MessageValue<Data, MainWorker>): void {
+  protected messageListener (
+    message: MessageValue<Data, Data, MainWorker>
+  ): void {
     if (message.id != null && message.data != null) {
       // Task message received
       const fn = this.getTaskFunction(message.name)
@@ -185,7 +187,9 @@ export abstract class AbstractWorker<
    *
    * @param message - The response message.
    */
-  protected abstract sendToMainWorker (message: MessageValue<Response>): void
+  protected abstract sendToMainWorker (
+    message: MessageValue<Response, Data>
+  ): void
 
   /**
    * Checks if the worker should be terminated, because its living too long.
@@ -220,7 +224,7 @@ export abstract class AbstractWorker<
     message: MessageValue<Data>
   ): void {
     try {
-      let taskPerformance = this.beginTaskPerformance(message)
+      let taskPerformance = this.beginTaskPerformance()
       const res = fn(message.data)
       taskPerformance = this.endTaskPerformance(taskPerformance)
       this.sendToMainWorker({
@@ -231,8 +235,10 @@ export abstract class AbstractWorker<
     } catch (e) {
       const err = this.handleError(e as Error)
       this.sendToMainWorker({
-        error: err,
-        errorData: message.data,
+        taskError: {
+          message: err,
+          data: message.data
+        },
         id: message.id
       })
     } finally {
@@ -250,7 +256,7 @@ export abstract class AbstractWorker<
     fn: WorkerAsyncFunction<Data, Response>,
     message: MessageValue<Data>
   ): void {
-    let taskPerformance = this.beginTaskPerformance(message)
+    let taskPerformance = this.beginTaskPerformance()
     fn(message.data)
       .then(res => {
         taskPerformance = this.endTaskPerformance(taskPerformance)
@@ -264,8 +270,10 @@ export abstract class AbstractWorker<
       .catch(e => {
         const err = this.handleError(e as Error)
         this.sendToMainWorker({
-          error: err,
-          errorData: message.data,
+          taskError: {
+            message: err,
+            data: message.data
+          },
           id: message.id
         })
       })
@@ -289,13 +297,9 @@ export abstract class AbstractWorker<
     return fn
   }
 
-  private beginTaskPerformance (message: MessageValue<Data>): TaskPerformance {
-    const timestamp = performance.now()
+  private beginTaskPerformance (): TaskPerformance {
     return {
-      timestamp,
-      ...(this.statistics.waitTime && {
-        waitTime: timestamp - (message.timestamp ?? timestamp)
-      }),
+      timestamp: performance.now(),
       ...(this.statistics.elu && { elu: performance.eventLoopUtilization() })
     }
   }