Server IP : 85.214.239.14 / Your IP : 18.117.225.254 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/2/root/proc/3/task/3/root/lib/node_modules/pm2/node_modules/@pm2/agent/src/ |
Upload File : |
'use strict' const log = require('debug')('interactor:pm2:interface') const path = require('path') const async = require('async') const fs = require('fs') const cst = require('../constants') module.exports = class PM2Interface { constructor (rpc) { log('PM2Interface instantiate') this.rpc = rpc } getProcessByName (name, cb) { var foundProc = [] this.rpc.getMonitorData({}, (err, list) => { if (err) { log('Error retrieving process list: ' + err) return cb(err) } list.forEach((proc) => { if (proc.pm2_env.name === name || proc.pm2_env.pm_exec_path === path.resolve(name.toString())) { foundProc.push(proc) } }) return cb(null, foundProc) }) } /** * Scale up/down a process * @method scale */ scale (opts, cb) { const self = this const appName = opts.name let number = opts.number function addProcs (proc, value, cb) { (function ex (proc, number) { if (number-- === 0) return cb() log('Scaling up application') self.rpc.duplicateProcessId(proc.pm2_env.pm_id, ex.bind(this, proc, number)) })(proc, number) } function rmProcs (procs, value, cb) { let i = 0; (function ex (procs, number) { if (number++ === 0) return cb() self.rpc.deleteProcessId(procs[i++].pm2_env.pm_id, ex.bind(this, procs, number)) })(procs, number) } let end = () => { return cb ? cb(null, {success: true}) : log('Successfuly scale') } this.getProcessByName(appName, (err, procs) => { if (err) { return cb ? cb(err) : log(err) } if (!procs || procs.length === 0) { log('Application %s not found', appName) return cb ? cb(new Error('App not found')) : log('App not found') } let procNumber = procs.length if (typeof (number) === 'string' && number.indexOf('+') >= 0) { number = parseInt(number, 10) return addProcs(procs[0], number, end) } else if (typeof (number) === 'string' && number.indexOf('-') >= 0) { number = parseInt(number, 10) return rmProcs(procs, number, end) } else { number = parseInt(number, 10) number = number - procNumber if (number < 0) { return rmProcs(procs, number, end) } else if (number > 0) { return addProcs(procs[0], number, end) } else { log('Nothing to do') return cb ? cb(new Error('Same process number')) : log('Same process number') } } }) } /** * Dump current processes managed by pm2 into DUMP_FILE_PATH file * @method dump * @param {} cb * @return */ dump (cb) { var envArr = [] this.rpc.getMonitorData({}, (err, list) => { if (err) { return typeof cb === 'function' ? cb(err) : false } /** * Description * @method end * @param {} err * @return */ const end = () => { // Overwrite dump file, delete if broken and exit try { fs.writeFileSync(cst.DUMP_FILE_PATH, JSON.stringify(envArr, '', 2)) } catch (e) { log('Dump error', e.stack || e) return cb(e) } return (cb) ? cb(null, {success: true}) : true } async.each(list, (app, done) => { delete app.pm2_env.instances delete app.pm2_env.pm_id if (!app.pm2_env.pmx_module) { envArr.push(app.pm2_env) } done() }, end) }) } _callWithProcessId (fn, params, cb) { if (params.id === undefined) { this.getProcessByName(params.name, (err, processes) => { if (err) return cb(err) // in case we don't find the process ourselves // we believe pm2 will find it if (processes.length === 0) { return fn(Object.assign({ id: params.name }, params), cb) } async.eachOf(processes, (process, _key, localCb) => { params.id = process.pm_id fn(params, localCb) }, cb) }) } else { fn(params, cb) } } restart (params, cb) { this._callWithProcessId(this.rpc.restartProcessId, params, cb) } reload (params, cb) { this._callWithProcessId(this.rpc.reloadProcessId, params, cb) } reset (params, cb) { this._callWithProcessId( (newParams, cb) => this.rpc.resetMetaProcessId(newParams.id, cb), params, cb ) } ping (params, cb) { this._callWithProcessId(this.rpc.ping, params, cb) } }