build(deps-dev): apply updates
[poolifier.git] / README.md
index 3ebb9b7cca227268674759371678851afec438e6..c5aff97f6f3247a41bfbcb978ce5be54f8ec77ae 100644 (file)
--- a/README.md
+++ b/README.md
@@ -5,22 +5,22 @@
 <h2 align="center">Node Thread Pool and Cluster Pool :arrow_double_up: :on:</h2>
 
 <p align="center">
+  <a href="https://github.com/poolifier/poolifier/graphs/commit-activity">
+    <img alt="GitHub commit activity (master)" src="https://img.shields.io/github/commit-activity/m/poolifier/poolifier/master"></a>
   <a href="https://www.npmjs.com/package/poolifier">
     <img alt="Weekly Downloads" src="https://img.shields.io/npm/dw/poolifier"></a>
   <a href="https://github.com/poolifier/poolifier/actions/workflows/ci.yml">
     <img alt="Actions Status" src="https://github.com/poolifier/poolifier/actions/workflows/ci.yml/badge.svg"></a>
-  <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
-    <img alt="Quality Gate Status" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=alert_status"></a>
   <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
     <img alt="Code Coverage" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=coverage"></a>
+  <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
+    <img alt="Quality Gate Status" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=alert_status"></a>
   <a href="https://standardjs.com">
     <img alt="Javascript Standard Style Guide" src="https://img.shields.io/badge/code_style-standard-brightgreen.svg"></a>
   <a href="https://gitter.im/poolifier/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge">
     <img alt="Gitter chat" src="https://badges.gitter.im/poolifier/community.svg"></a>
   <a href="https://opencollective.com/poolifier">
     <img alt="Open Collective" src="https://opencollective.com/poolifier/tiers/badge.svg"></a>
-  <a href="https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot">
-    <img alt="Dependabot" src="https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot"></a>
   <a href="http://makeapullrequest.com">
     <img alt="PR Welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square"></a>
   <a href="https://img.shields.io/static/v1?label=dependencies&message=no%20dependencies&color=brightgreen">
@@ -122,6 +122,7 @@ const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
   onlineHandler: () => console.info('worker is online')
 })
 
+pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
 pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // or a dynamic worker-threads pool
@@ -131,6 +132,7 @@ const pool = new DynamicThreadPool(Math.floor(availableParallelism() / 2), avail
 })
 
 pool.emitter.on(PoolEvents.full, () => console.info('Pool is full'))
+pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
 pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // the execute method signature is the same for both implementations,
@@ -229,31 +231,56 @@ An object with these properties:
 ### `pool.execute(data, name)`
 
 `data` (optional) An object that you want to pass to your worker implementation  
-`name` (optional) A string with the task function name that you want to execute on the worker. Default: `'default'`  
-This method is available on both pool implementations and returns a promise.
+`name` (optional) A string with the task function name that you want to execute on the worker. Default: `'default'`
+
+This method is available on both pool implementations and returns a promise with the task function execution response.
 
 ### `pool.destroy()`
 
-Destroy method is available on both pool implementations.  
-This method will call the terminate method on each worker.
+This method is available on both pool implementations and will call the terminate method on each worker.
 
 ### `class YourWorker extends ThreadWorker/ClusterWorker`
 
-`taskFunctions` (mandatory) The task function or task functions object that you want to execute on the worker  
+`taskFunctions` (mandatory) The task function or task functions object `{ name_1: fn_1, ..., name_n: fn_n }` that you want to execute on the worker  
 `opts` (optional) An object with these properties:
 
-- `maxInactiveTime` (optional) - Max time to wait tasks to work on in milliseconds, after this period the new worker will die.  
-  The last active time of your worker unit will be updated when a task is submitted to a worker or when a worker terminate a task.  
+- `maxInactiveTime` (optional) - Maximum waiting time in milliseconds for tasks on newly created workers. After this time newly created workers will die.  
+  The last active time of your worker will be updated when it terminates a task.  
   If `killBehavior` is set to `KillBehaviors.HARD` this value represents also the timeout for the tasks that you submit to the pool, when this timeout expires your tasks is interrupted before completion and removed. The worker is killed if is not part of the minimum size of the pool.  
   If `killBehavior` is set to `KillBehaviors.SOFT` your tasks have no timeout and your workers will not be terminated until your task is completed.  
   Default: `60000`
 
-- `killBehavior` (optional) - Dictates if your async unit (worker/process) will be deleted in case that a task is active on it.  
+- `killBehavior` (optional) - Dictates if your worker will be deleted in case a task is active on it.  
   **KillBehaviors.SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker **won't** be deleted.  
   **KillBehaviors.HARD**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker will be deleted.  
   This option only apply to the newly created workers.  
   Default: `KillBehaviors.SOFT`
 
+#### `YourWorker.hasTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.addTaskFunction(name, fn)`
+
+`name` (mandatory) The task function name  
+`fn` (mandatory) The task function
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.removeTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.setDefaultTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+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.