api.restartApp = function (appname, callback) { var app = api.getAppInfo(appname) if (!app) { return abort(ERRORS.NOT_FOUND, callback, { appname: appname }) } Satan.executeRemote('getMonitorData', {}, function (err, list) { if (err) return callback(err) var runningProcs = findInList(appname, list) if (!runningProcs) { return abort(ERRORS.NOT_RUNNING, callback, { appname: appname }) } else { async.map(runningProcs, restart, function (err) { if (err) return callback(err) var l = runningProcs.length callback( null, appname.yellow + ' restarted.' + (l > 1 ? (' (' + l + ' instances)').grey : '') ) }) } }) }
api.stopApp = function (appname, callback) { var app = api.getAppInfo(appname) if (!app) { return abort(ERRORS.NOT_FOUND, callback, { appname: appname }) } Satan.executeRemote('getMonitorData', {}, function (err, list) { if (err) return callback(err) var runningProcs = findInList(appname, list) if (!runningProcs) { callback(null, appname.yellow + ' is not running.') } else { async.map(runningProcs, function (proc, done) { Satan.executeRemote('stopProcessId', proc.pm_id, function (err) { if (err) return done(err) Satan.executeRemote('deleteProcessId', proc.pm_id, done) }) }, function (err) { if (err) return callback(err) var l = runningProcs.length callback( null, appname.yellow + ' stopped.' + (l > 1 ? (' (' + l + ' instances)').grey : '') ) }) } }) }
fs.exists(app.script, function (exists) { if (!exists) { return abort(ERRORS.NO_SCRIPT, callback, { appname: appname, script: app.script }) } debug('checking if app is already running...') Satan.executeRemote('findByFullPath', app.script, function (err, procs) { if (err) return callback(err) if (procs) { if (procs[0].pm2_env.status == pm2cst.STOPPED_STATUS || procs[0].pm2_env.status == pm2cst.STOPPING_STATUS || procs[0].pm2_env.status == pm2cst.ERRORED_STATUS) { return pm2._restart(procs[0].pm2_env.name, callback) } else { return callback(null, appname.yellow + ' already running.') } } else { var conf = prepareConfig(app) if (conf instanceof Error) { return callback(conf) } debug('attempting to start app...') Satan.executeRemote('prepare', conf, function (err) { if (err) return callback(err) callback(null, appname.yellow + ' running on ' + (app.port || 'unknown port')) }) } }) })
api.restartAllApps = function (callback) { Satan.executeRemote('getMonitorData', {}, function (err, list) { if (err) return callback(err) var runningProcs = [] list.forEach(function (proc) { if (proc.pm2_env.name in globalConfig.apps) { runningProcs.push(proc) } }) async.map(runningProcs, restart, function (err, msgs) { callback(err, msgs.map(function (msg) { return 'instance of ' + msg })) }) }) }
api.listApps = function (callback) { var appList = Object.keys(globalConfig.apps) if (!appList.length) { return process.nextTick(function () { callback(null, []) }) } Satan.executeRemote('getMonitorData', {}, function (err, list) { if (err) return callback(err) callback(null, appList.map(function (appname) { var app = api.getAppInfo(appname) app.instances = findInList(appname, list) app.broken = isBroken(app) return formatter.format(app) })) }) }
function restart (app, callback) { Satan.executeRemote('restartProcessId', { id: app.pm_id }, function (err) { if (err) return callback(err) callback(null, app.pm2_env.name.yellow + ' restarted') }) }
Satan.executeRemote('stopProcessId', proc.pm_id, function (err) { if (err) return done(err) Satan.executeRemote('deleteProcessId', proc.pm_id, done) })
async.map(runningProcs, function (proc, done) { Satan.executeRemote('stopProcessId', proc.pm_id, function (err) { if (err) return done(err) Satan.executeRemote('deleteProcessId', proc.pm_id, done) }) }, function (err) {