HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /volume1/@appstore/Spreadsheet/server/common/thread-worker/pool.js
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThreadWorkerPool",{enumerable:true,get:function(){return s}});const e=require("@synology-office/task-queue");const t=r(require("os"));function r(e){return e&&e.__esModule?e:{default:e}}class s{constructor(r=Object.create(null)){this.timeout=r.timeout;this.workers=new Set;this.idleWorkers=[];this.taskMap=new Map;this.queue=new e.TaskQueue({concurrency:r.maxWorkerCount??t.default.cpus().length});this.queueHandler=this.handleWorkerTask.bind(this)}getWorkerCount(){return this.workers.size}getIdleWorkerCount(){return this.idleWorkers.length}getBusyWorkerCount(){return this.taskMap.size}addWorker(e){this.workers.add(e);this.idleWorkers.push(e);e.on("exit",(()=>{this.removeWorker(e)}))}removeWorker(e){this.workers.delete(e);const t=this.idleWorkers;const r=t.indexOf(e);if(r>=0){t.splice(r,1)}const s=this.taskMap;const o=s.get(e);if(o){s.delete(e);o.terminate()}}reserveIdleWorker(){if(!this.idleWorkers.length){this.addWorker(this.createWorker())}return this.idleWorkers.pop()}returnIdleWorker(e){this.idleWorkers.push(e)}handleWorkerTask({request:e,config:t}){const r=this.reserveIdleWorker();const s=this.createWorkerTask(r,{timeout:this.timeout,...t});this.taskMap.set(r,s);return s.execute(e).then((e=>{this.returnIdleWorker(r);return e}))}execute(e,t=Object.create(null)){return this.queue.enqueue(this.queueHandler,{arg:{request:e,config:t}})}async stat(){const e={workerCount:this.getWorkerCount(),idleWorkerCount:this.getIdleWorkerCount(),busyWorkerCount:this.getBusyWorkerCount(),waitingCount:this.queue.stat().waiting};return{...e,tasks:await Promise.all(Array.from(this.taskMap.values()).map((e=>e.stat())))}}}