* Scale up/down a process * @method scale
(opts, cb)
| 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 | }) |
no test coverage detected