fix: make worker weight default computation more robust
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 21 Dec 2023 10:45:57 +0000 (11:45 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 21 Dec 2023 10:45:57 +0000 (11:45 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/utils.ts

index 3226e7eb3499af2fe2b1b6000962c83e14f10992..f7aab63746e274b328d606fb3659a5353e796132 100644 (file)
@@ -1,5 +1,5 @@
 import * as os from 'node:os'
-import { getRandomValues } from 'node:crypto'
+import { getRandomValues, randomInt } from 'node:crypto'
 import { Worker as ClusterWorker } from 'node:cluster'
 import { Worker as ThreadWorker } from 'node:worker_threads'
 import { cpus } from 'node:os'
@@ -315,8 +315,14 @@ const getDefaultWeights = (
 }
 
 const getDefaultWorkerWeight = (): number => {
+  const cpuSpeed = randomInt(500, 2500)
   let cpusCycleTimeWeight = 0
   for (const cpu of cpus()) {
+    if (cpu.speed == null || cpu.speed === 0) {
+      cpu.speed =
+        cpus().find(cpu => cpu.speed != null && cpu.speed !== 0)?.speed ??
+        cpuSpeed
+    }
     // CPU estimated cycle time
     const numberOfDigits = cpu.speed.toString().length - 1
     const cpuCycleTime = 1 / (cpu.speed / Math.pow(10, numberOfDigits))