feat: add method to list registered task functions on a worker
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Jul 2023 09:39:59 +0000 (11:39 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 15 Jul 2023 09:39:59 +0000 (11:39 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
README.md
src/worker/abstract-worker.ts
tests/worker/abstract-worker.test.js

index 0d17e08b0fccc99dcdb807aa1de9467b406b9600..d8b3eb63a7e86c9fe5f17a5741a2f372021ce8e1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -275,6 +275,10 @@ This method is available on both worker implementations and returns a boolean.
 
 This method is available on both worker implementations and returns a boolean.
 
+#### `YourWorker.listTaskFunctions()`
+
+This method is available on both worker implementations and returns an array of the task function names.
+
 #### `YourWorker.setDefaultTaskFunction(name)`
 
 `name` (mandatory) The task function name
@@ -284,7 +288,7 @@ This method is available on both worker implementations and returns a boolean.
 ## General guidance
 
 Performance is one of the main target of these worker pool implementations, we want to have a strong focus on this.  
-We already have a benchmarks folder where you can find some comparisons.
+We already have a [benchmarks](./benchmarks/) folder where you can find some comparisons.
 
 ### Internal Node.js thread pool
 
index 3adc56d13ee3d5aa4be402cd38dd179bc05ec594..8a6b2104317a7a229dbca9943497b21e5e26f66f 100644 (file)
@@ -142,11 +142,11 @@ export abstract class AbstractWorker<
           )
         }
         const boundFn = fn.bind(this)
-        this.taskFunctions.set(name, boundFn)
         if (firstEntry) {
           this.taskFunctions.set(DEFAULT_TASK_NAME, boundFn)
           firstEntry = false
         }
+        this.taskFunctions.set(name, boundFn)
       }
       if (firstEntry) {
         throw new Error('taskFunctions parameter object is empty')
@@ -242,7 +242,16 @@ export abstract class AbstractWorker<
   }
 
   /**
-   * Sets the default task function to use when no task function name is specified.
+   * Lists the names of the worker's task functions.
+   *
+   * @returns The names of the worker's task functions.
+   */
+  public listTaskFunctions (): string[] {
+    return Array.from(this.taskFunctions.keys())
+  }
+
+  /**
+   * Sets the default task function to use in the worker.
    *
    * @param name - The name of the task function to use as default task function.
    * @returns Whether the default task function was set or not.
index 944acbece738f49c21977049098aa3008fe694c9..e9da7a874de95d1739be54216ed1a540a3aff9d3 100644 (file)
@@ -218,6 +218,17 @@ describe('Abstract worker test suite', () => {
     expect(worker.taskFunctions.size).toBe(2)
   })
 
+  it('Verify that listTaskFunctions() works', () => {
+    const fn1 = () => {
+      return 1
+    }
+    const fn2 = () => {
+      return 2
+    }
+    const worker = new ClusterWorker({ fn1, fn2 })
+    expect(worker.listTaskFunctions()).toStrictEqual(['default', 'fn1', 'fn2'])
+  })
+
   it('Verify that setDefaultTaskFunction() works', () => {
     const fn1 = () => {
       return 1