From b4c53deb176ead60961f990b9f8db9c8793cb7d8 Mon Sep 17 00:00:00 2001 From: vmarchaud Date: Fri, 3 Feb 2017 15:53:51 +0100 Subject: [PATCH 1/3] (operate) allow using regex to match process name #2564 --- lib/API.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/API.js b/lib/API.js index bd590d27..91794fec 100644 --- a/lib/API.js +++ b/lib/API.js @@ -1309,6 +1309,30 @@ API.prototype._operate = function(action_name, process_name, envs, cb) { return processIds(ids, cb); }); } + // operate using regex + else if (isNaN(process_name) && process_name[0] === '/' && process_name[process_name.length - 1] === '/') { + var regex = new RegExp(process_name); + + that.Client.executeRemote('getMonitorData', {}, function(err, list) { + if (err) { + Common.printError('Error retrieving process list: ' + err); + return cb(err); + } + var found_proc = []; + list.forEach(function(proc) { + if (regex.test(proc.pm2_env.name)) { + found_proc.push(proc.pm_id); + } + }); + + if (found_proc.length === 0) { + Common.printError(conf.PREFIX_MSG_WARNING + 'No process found'); + return cb ? cb(new Error('process name not found')) : that.exitCli(conf.ERROR_EXIT); + } + + return processIds(found_proc, cb); + }); + } else if (isNaN(process_name)) { /** * We can not stop or delete a module but we can restart it From e4586e8fcff3d0189bcb3cafe093a050b8fceca7 Mon Sep 17 00:00:00 2001 From: vmarchaud Date: Fri, 3 Feb 2017 16:05:41 +0100 Subject: [PATCH 2/3] (tests) add test for operate with regex #2564 + changelog --- CHANGELOG.md | 1 + lib/API.js | 4 ++-- test/bash/operate-regex.sh | 27 +++++++++++++++++++++++++++ test/pm2_behavior_tests.sh | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 test/bash/operate-regex.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 97be1fb3..05e61048 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - #2663 allow to directly output json when logging (via log_type for JSON and --log-type via CLI) - #2675 fix path when installing language module like typescript - #2674 increase restart timeout for systemd startup +- #2564 allow to operate process (restart/reload/stop/delete) with regex ## 2.3.0 diff --git a/lib/API.js b/lib/API.js index 91794fec..6a927ef3 100644 --- a/lib/API.js +++ b/lib/API.js @@ -1311,7 +1311,7 @@ API.prototype._operate = function(action_name, process_name, envs, cb) { } // operate using regex else if (isNaN(process_name) && process_name[0] === '/' && process_name[process_name.length - 1] === '/') { - var regex = new RegExp(process_name); + var regex = new RegExp(process_name.replace(/\//g, '')); that.Client.executeRemote('getMonitorData', {}, function(err, list) { if (err) { @@ -1324,7 +1324,7 @@ API.prototype._operate = function(action_name, process_name, envs, cb) { found_proc.push(proc.pm_id); } }); - + if (found_proc.length === 0) { Common.printError(conf.PREFIX_MSG_WARNING + 'No process found'); return cb ? cb(new Error('process name not found')) : that.exitCli(conf.ERROR_EXIT); diff --git a/test/bash/operate-regex.sh b/test/bash/operate-regex.sh new file mode 100644 index 00000000..86e59fa8 --- /dev/null +++ b/test/bash/operate-regex.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +SRC=$(cd $(dirname "$0"); pwd) +source "${SRC}/include.sh" + +cd $file_path + +$pm2 start echo.js --name "echo-3" +$pm2 start echo.js --name "echo-1" +$pm2 start echo.js --name "echo-2" + +sleep 0.5 + +should 'should have started 3 apps' 'online' 3 + +$pm2 stop /echo-[1,2]/ + +should 'should have stopped 2 apps' 'stopped' 2 +should 'only one app should still be online' 'online' 1 + +$pm2 stop /echo-3/ +should 'should have stopped 1 apps' 'online' 0 + +$pm2 restart /echo-[1,2]/ + +should 'should have restarted 2 apps' 'online' 2 + diff --git a/test/pm2_behavior_tests.sh b/test/pm2_behavior_tests.sh index 9a59e530..418bf3bf 100644 --- a/test/pm2_behavior_tests.sh +++ b/test/pm2_behavior_tests.sh @@ -121,6 +121,8 @@ bash ./test/bash/log-null.sh spec "Logging path set to null" bash ./test/bash/log-json.sh spec "Logging directly to file in json" +bash ./test/bash/operate-regex.sh +spec "Operate process that match regex" # Issues related bash ./test/bash/issues/2337.sh From c3f3e1aaf9a1b5460ea281a71a5cf3832e5476c8 Mon Sep 17 00:00:00 2001 From: vmarchaud Date: Fri, 3 Feb 2017 16:19:28 +0100 Subject: [PATCH 3/3] (deps) remove better-assert --- package.json | 3 +-- test/programmatic/cluster.mocha.js | 1 - test/programmatic/env_switching.js | 1 - test/programmatic/logs.js | 1 - test/programmatic/max_memory_limit.js | 1 - test/programmatic/misc_commands.js | 1 - test/programmatic/programmatic.js | 1 - test/programmatic/send_data_process.mocha.js | 1 - test/programmatic/signals.js | 1 - test/programmatic/watcher.js | 3 +-- 10 files changed, 2 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 47096522..adfc1474 100644 --- a/package.json +++ b/package.json @@ -177,8 +177,7 @@ }, "devDependencies": { "mocha": "^3", - "should": "^11", - "better-assert": "^1.0.0" + "should": "^11" }, "optionalDependencies": { "gkt": "https://tgz.pm2.io/gkt-1.0.0.tgz" diff --git a/test/programmatic/cluster.mocha.js b/test/programmatic/cluster.mocha.js index af855d87..6d6e6cdb 100644 --- a/test/programmatic/cluster.mocha.js +++ b/test/programmatic/cluster.mocha.js @@ -3,7 +3,6 @@ process.env.NODE_ENV = 'test'; var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); var Plan = require('../helpers/plan.js'); diff --git a/test/programmatic/env_switching.js b/test/programmatic/env_switching.js index ebb3164c..0f0c4309 100644 --- a/test/programmatic/env_switching.js +++ b/test/programmatic/env_switching.js @@ -5,7 +5,6 @@ var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); // Change to current folder diff --git a/test/programmatic/logs.js b/test/programmatic/logs.js index 7a66e86b..3859045e 100644 --- a/test/programmatic/logs.js +++ b/test/programmatic/logs.js @@ -5,7 +5,6 @@ process.env.NODE_ENV = 'test'; var PM2 = require('../..'); var should = require('should'); var fs = require('fs'); -var assert = require('better-assert'); var path = require('path'); describe('Max memory restart programmatic', function() { diff --git a/test/programmatic/max_memory_limit.js b/test/programmatic/max_memory_limit.js index 6564ac9f..efaf2a12 100644 --- a/test/programmatic/max_memory_limit.js +++ b/test/programmatic/max_memory_limit.js @@ -4,7 +4,6 @@ process.env.PM2_WORKER_INTERVAL = 1000; var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); // Change to current folder diff --git a/test/programmatic/misc_commands.js b/test/programmatic/misc_commands.js index 5fef9edd..b82c07f8 100644 --- a/test/programmatic/misc_commands.js +++ b/test/programmatic/misc_commands.js @@ -2,7 +2,6 @@ var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); describe('Misc commands', function() { diff --git a/test/programmatic/programmatic.js b/test/programmatic/programmatic.js index 74dbe57b..bf16fffc 100644 --- a/test/programmatic/programmatic.js +++ b/test/programmatic/programmatic.js @@ -6,7 +6,6 @@ //process.env.NODE_ENV ='test'; var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); describe('PM2 programmatic calls', function() { diff --git a/test/programmatic/send_data_process.mocha.js b/test/programmatic/send_data_process.mocha.js index 4fc092d5..378de0ee 100644 --- a/test/programmatic/send_data_process.mocha.js +++ b/test/programmatic/send_data_process.mocha.js @@ -6,7 +6,6 @@ var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); describe('PM2 programmatic calls', function() { diff --git a/test/programmatic/signals.js b/test/programmatic/signals.js index 558164f9..6c62c6ea 100644 --- a/test/programmatic/signals.js +++ b/test/programmatic/signals.js @@ -1,7 +1,6 @@ var PM2 = require('../..'); var should = require('should'); -var assert = require('better-assert'); var path = require('path'); describe('Signal kill (+delayed)', function() { diff --git a/test/programmatic/watcher.js b/test/programmatic/watcher.js index 0d97b01d..34cecc8e 100644 --- a/test/programmatic/watcher.js +++ b/test/programmatic/watcher.js @@ -1,5 +1,4 @@ -var should = require('should') -var assert = require('better-assert'); +var should = require('should'); var p = require('path'); var fs = require('fs') var EventEmitter = require('events').EventEmitter