X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils.ts;h=f7aab63746e274b328d606fb3659a5353e796132;hb=refs%2Ftags%2Fv3.1.8;hp=20493767db87d80689a6cb067df3e22f72b759ce;hpb=ab3bb4a4fd6b09465fb97ec4f412e57448f94306;p=poolifier.git diff --git a/src/utils.ts b/src/utils.ts index 20493767..f7aab637 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -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' @@ -291,12 +291,12 @@ export const buildInternalWorkerChoiceStrategyOptions = ( opts?: InternalWorkerChoiceStrategyOptions ): InternalWorkerChoiceStrategyOptions => { opts = clone(opts ?? {}) - if (opts.weights == null) { + if (opts?.weights == null) { opts.weights = getDefaultWeights(poolMaxSize) } return { ...getDefaultInternalWorkerChoiceStrategyOptions( - poolMaxSize + Object.keys(opts?.weights ?? {}).length + poolMaxSize + Object.keys(opts.weights).length ), ...opts } @@ -304,8 +304,9 @@ export const buildInternalWorkerChoiceStrategyOptions = ( const getDefaultWeights = ( poolMaxSize: number, - defaultWorkerWeight: number = getDefaultWorkerWeight() + defaultWorkerWeight?: number ): Record => { + defaultWorkerWeight = defaultWorkerWeight ?? getDefaultWorkerWeight() const weights: Record = {} for (let workerNodeKey = 0; workerNodeKey < poolMaxSize; workerNodeKey++) { weights[workerNodeKey] = defaultWorkerWeight @@ -314,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))