Benchmarks: fix workload function
[poolifier.git] / benchmarks / versus-external-pools / functions / function-to-bench.js
index 2f75d143330a07adb22ff9b7bcbc8a9862ca1d55..89e9e2acae8c9d4fc09125fdde58090a50a1f4f7 100644 (file)
@@ -1,35 +1,47 @@
-const fs = require('fs')
-const {
-  WorkerFunctions,
-  executeWorkerFunction
-  // eslint-disable-next-line n/no-unpublished-require
-} = require('../../benchmarks-utils')
-
-const TaskTypes = {
-  CPU_INTENSIVE: 'CPU_INTENSIVE',
-  IO_INTENSIVE: 'IO_INTENSIVE'
-}
-
-module.exports = function (data) {
+/**
+ * The worker function to execute during pools benchmarks.
+ * NOTE: This function requires to be self-contained, thread-safe and re-entrant.
+ *
+ * @param {*} data The worker data.
+ * @returns {*} The result.
+ */
+function functionToBench (data) {
+  const fs = require('fs')
+  const TaskTypes = {
+    CPU_INTENSIVE: 'CPU_INTENSIVE',
+    IO_INTENSIVE: 'IO_INTENSIVE'
+  }
   data = data || {}
   data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE
   data.taskSize = data.taskSize || 5000
-  const benchmarksFilePath = '/tmp/poolifier-benchmarks'
+  const baseDirectory = '/tmp/poolifier-benchmarks'
   switch (data.taskType) {
     case TaskTypes.CPU_INTENSIVE:
       // CPU intensive task
-      data.function = data.function || WorkerFunctions.jsonIntegerSerialization
-      executeWorkerFunction(data)
+      for (let i = 0; i < data.taskSize; i++) {
+        const o = {
+          a: i
+        }
+        JSON.stringify(o)
+      }
       return { ok: 1 }
     case TaskTypes.IO_INTENSIVE:
       // IO intensive task
+      if (fs.existsSync(baseDirectory) === false) {
+        fs.mkdirSync(baseDirectory, { recursive: true })
+      }
       for (let i = 0; i < data.taskSize; i++) {
-        fs.writeFileSync(benchmarksFilePath, i.toString(), 'utf8')
-        fs.readFileSync(benchmarksFilePath, 'utf8')
-        fs.unlinkSync(benchmarksFilePath)
+        const filePath = `${baseDirectory}/${i}`
+        fs.writeFileSync(filePath, i.toString(), {
+          encoding: 'utf8',
+          flag: 'a'
+        })
+        fs.readFileSync(filePath, 'utf8')
       }
       return { ok: 1 }
     default:
       throw new Error(`Unknown task type: ${data.taskType}`)
   }
 }
+
+module.exports = functionToBench