MCPcopy
hub / github.com/Unitech/pm2 / scale

Method scale

modules/pm2-io-agent/src/PM2Interface.js:38–96  ·  view source on GitHub ↗

* Scale up/down a process * @method scale

(opts, cb)

Source from the content-addressed store, hash-verified

36 * @method scale
37 */
38 scale (opts, cb) {
39 const self = this
40 const appName = opts.name
41 let number = opts.number
42
43 function addProcs (proc, value, cb) {
44 (function ex (proc, number) {
45 if (number-- === 0) return cb()
46 log('Scaling up application')
47 self.rpc.duplicateProcessId(proc.pm2_env.pm_id, ex.bind(this, proc, number))
48 })(proc, number)
49 }
50
51 function rmProcs (procs, value, cb) {
52 let i = 0;
53
54 (function ex (procs, number) {
55 if (number++ === 0) return cb()
56 self.rpc.deleteProcessId(procs[i++].pm2_env.pm_id, ex.bind(this, procs, number))
57 })(procs, number)
58 }
59
60 let end = () => {
61 return cb ? cb(null, {success: true}) : log('Successfuly scale')
62 }
63
64 this.getProcessByName(appName, (err, procs) => {
65 if (err) {
66 return cb ? cb(err) : log(err)
67 }
68
69 if (!procs || procs.length === 0) {
70 log('Application %s not found', appName)
71 return cb ? cb(new Error('App not found')) : log('App not found')
72 }
73
74 let procNumber = procs.length
75
76 if (typeof (number) === 'string' && number.indexOf('+') >= 0) {
77 number = parseInt(number, 10)
78 return addProcs(procs[0], number, end)
79 } else if (typeof (number) === 'string' && number.indexOf('-') >= 0) {
80 number = parseInt(number, 10)
81 return rmProcs(procs, number, end)
82 } else {
83 number = parseInt(number, 10)
84 number = number - procNumber
85
86 if (number < 0) {
87 return rmProcs(procs, number, end)
88 } else if (number > 0) {
89 return addProcs(procs[0], number, end)
90 } else {
91 log('Nothing to do')
92 return cb ? cb(new Error('Same process number')) : log('Same process number')
93 }
94 }
95 })

Callers 1

Calls 5

getProcessByNameMethod · 0.95
cbFunction · 0.85
addProcsFunction · 0.85
rmProcsFunction · 0.85
indexOfMethod · 0.80

Tested by

no test coverage detected