diff --git a/ADVANCED_README.md b/ADVANCED_README.md
index 982a1373..65d610ff 100644
--- a/ADVANCED_README.md
+++ b/ADVANCED_README.md
@@ -83,7 +83,7 @@ If the above fails use:
$ npm install git://github.com/Unitech/pm2#master -g
```
-We recommend Node.JS 0.11.13 for handling the cluster_mode (if you add the -i options to enable scaling and reload).
+We recommend Node.JS 0.11.14 for handling the cluster_mode (if you add the -i options to enable scaling and reload).
## Usage
@@ -1058,9 +1058,9 @@ Also make sure you have all dependencies needed. For Ubuntu:
$ sudo apt-get install build-essential
# nvm is a Node.js version manager - https://github.com/creationix/nvm
$ wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh
-$ nvm install v0.11.10
-$ nvm use v0.11.10
-$ nvm alias default v0.11.10
+$ nvm install v0.11.14
+$ nvm use v0.11.14
+$ nvm alias default v0.11.14
```
diff --git a/README.md b/README.md
index 032820f2..95590a9f 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ $ npm install pm2 -g
```
*npm is a builtin CLI when you install Node.js - [Installing Node.js with NVM](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server#how-to-install-using-nvm)*
-
+We recommend Node.js 0.11.14.
## Start an application
diff --git a/constants.js b/constants.js
index a20314ef..a81c526e 100644
--- a/constants.js
+++ b/constants.js
@@ -60,7 +60,7 @@ var default_conf = {
ERRORED_STATUS : 'errored',
ONE_LAUNCH_STATUS : 'one-launch-status',
- KEYMETRICS_ROOT_URL : 'https://root.keymetrics.io',
+ KEYMETRICS_ROOT_URL : 'root.keymetrics.io',
REMOTE_PORT : 41624,
REMOTE_REVERSE_PORT : 43554,
diff --git a/examples/tree.js b/examples/tree.js
new file mode 100644
index 00000000..e1773558
--- /dev/null
+++ b/examples/tree.js
@@ -0,0 +1,14 @@
+
+var spawn = require('child_process').spawn,
+ grep = spawn('top', [], { stdio: 'inherit' });
+
+
+var http = require('http');
+
+
+var normal = require('child_process').fork('examples/child.js', ['normal']);
+
+http.createServer(function(req, res) {
+ res.writeHead(200);
+ res.end('hoy');
+}).listen(8010);
diff --git a/lib/God/Methods.js b/lib/God/Methods.js
index d4842a8f..7b277c5d 100644
--- a/lib/God/Methods.js
+++ b/lib/God/Methods.js
@@ -210,7 +210,7 @@ module.exports = function(God) {
if (!pid) return cb({msg : 'no pid passed or null'});
try {
- process.kill(pid);
+ process.kill(pid, 'SIGINT');
} catch(e) {
console.error('%s pid can not be killed', pid, e);
return cb({type : 'kill', msg : pid + ' can not be killed'});
diff --git a/lib/Interactor/Daemon.js b/lib/Interactor/Daemon.js
index ae454242..62ae34ee 100644
--- a/lib/Interactor/Daemon.js
+++ b/lib/Interactor/Daemon.js
@@ -94,13 +94,12 @@ var Daemon = {
HttpRequest.post({
url : self.opts.ROOT_URL,
- port : 3000,
+ port : self.opts.ROOT_PORT,
data : {
public_id : self.opts.PUBLIC_KEY,
data : ciphered_data
}
}, function(err, km_data) {
-
if (err) return console.error(err);
if (km_data.disabled == true) {
console.error(chalk.cyan('[Keymetrics.io]') + ' Server DISABLED BY ADMINISTRATION contact support contact@keymetrics.io with reference to your public and secret keys)');
@@ -113,21 +112,20 @@ var Daemon = {
if ((Daemon.current_km_data.endpoints.push != km_data.endpoints.push) ||
(Daemon.current_km_data.endpoints.reverse != km_data.endpoints.reverse)) {
- console.log('Url changed');
+ console.log('[Interactor] Urls changed');
+ PushInteractor.changeUrl(km_data.endpoints.push);
+ ReverseInteractor.changeUrl(km_data.endpoints.reverse);
+ Daemon.current_km_data = km_data;
}
-
- PushInteractor.changeUrl(km_data.endpoints.push);
- ReverseInteractor.changeUrl(km_data.endpoints.reverse);
-
- Daemon.current_km_data = km_data;
return false;
});
};
+ // Refresh metadata every 10 minutes
setInterval(function() {
refreshMetadata();
- }, 5000);
+ }, 60000 * 10);
},
validateData : function() {
var opts = {};
@@ -152,7 +150,7 @@ var Daemon = {
}
return opts;
},
- welcome : function(url, cb) {
+ welcome : function(cb) {
var self = this;
var ciphered_data = Daemon.formatMetada();
@@ -164,19 +162,9 @@ var Daemon = {
return process.exit(1);
}
-
- var port = 443;
-
- if (cst.DEBUG) {
- if (process.env.NODE_ENV == 'test')
- port = 3400;
- else
- port = 3000;
- }
-
HttpRequest.post({
- url : url,
- port : port,
+ url : self.opts.ROOT_URL,
+ port : self.opts.ROOT_PORT,
data : {
public_id : this.opts.PUBLIC_KEY,
data : ciphered_data
@@ -212,21 +200,25 @@ var Daemon = {
self.opts.ipm2 = null;
self.current_km_data = null;
- // Expose Interactor methods
self._rpc = self.activateRPC();
// WatchDog.start({
// conf : self.opts
// });
- var root_url = cst.KEYMETRICS_ROOT_URL;
+ if (cst.DEBUG) {
+ self.opts.ROOT_URL = '127.0.0.1';
+ if (process.env.NODE_ENV == 'test')
+ self.opts.ROOT_PORT = 3400;
+ else
+ self.opts.ROOT_PORT = 3000;
+ }
+ else {
+ self.opts.ROOT_URL = cst.KEYMETRICS_ROOT_URL;
+ self.opts.ROOT_PORT = 443;
+ }
- if (cst.DEBUG)
- root_url = 'http://127.0.0.1',
-
- self.opts.ROOT_URL = root_url;
-
- Daemon.welcome(root_url, function(err, km_data) {
+ Daemon.welcome(function(err, km_data) {
if (err) {
process.send({
error : true,
@@ -249,7 +241,7 @@ var Daemon = {
self.opts.ipm2 = self.connectToPM2();
PushInteractor.start({
- url : km_data.endpoints.push,
+ url : km_data.endpoints.push,
conf : self.opts
});
@@ -259,7 +251,7 @@ var Daemon = {
conf : self.opts
});
}
- //Daemon.refreshWorker();
+ Daemon.refreshWorker();
}
});
diff --git a/lib/Interactor/HttpRequest.js b/lib/Interactor/HttpRequest.js
index bbb4c1da..90044c85 100644
--- a/lib/Interactor/HttpRequest.js
+++ b/lib/Interactor/HttpRequest.js
@@ -1,7 +1,6 @@
var http = require('http');
var https = require('https');
-var urlParser = require('url');
var debug = require('debug')('interface:http');
var HttpRequest = module.exports = {};
@@ -10,11 +9,10 @@ HttpRequest.post = function(opts, cb) {
if (!(opts.port && opts.data && opts.url))
return cb({msg : 'missing parameters', port : opts.port, data : opts.data, url : opts.url});
- var uri = urlParser.parse(opts.url);
var port = 0;
var options = {
- hostname : uri.host,
+ hostname : opts.url,
path : '/api/node/verifyPM2',
method : 'POST',
port : opts.port,
@@ -27,7 +25,7 @@ HttpRequest.post = function(opts, cb) {
var client = (opts.port == 443) ? https : http;
var timeout = setTimeout(function() {
- cb({msg : 'Connection timed out to ' + uri, success:false});
+ cb({msg : 'Connection timed out ' + opts.url, success:false});
}, 3000);
var req = client.request(options, function(res){
diff --git a/lib/Interactor/PushInteractor.js b/lib/Interactor/PushInteractor.js
index 791de143..6bcc0117 100644
--- a/lib/Interactor/PushInteractor.js
+++ b/lib/Interactor/PushInteractor.js
@@ -14,6 +14,10 @@ var Cipher = require('./Cipher.js');
var Utility = require('../Utility.js');
var PushInteractor = module.exports = {
+ changeUrl : function(url) {
+ console.log('[PUSH] Changing URL to %s', url);
+ this.udpSocket = punt.connect(Url.parse(url).host);
+ },
start : function(p) {
if (!p.url) throw new Error('missing endpoint url');
if (!p.conf || !p.conf.ipm2) throw new Error('ipm2 is not initialized');
@@ -75,9 +79,6 @@ var PushInteractor = module.exports = {
*/
this.processEvents();
},
- // changeUrl : function(url) {
- // this.udpSocket = punt.connect(Url.parse(url).host);
- // },
/**
* Send bufferized data at regular interval
*/
@@ -162,8 +163,6 @@ var PushInteractor = module.exports = {
this.preparePacket(function() {
var data = {};
- debug(self._packet);
-
if (process.env.NODE_ENV && process.env.NODE_ENV == 'test') {
data = {
public_key : PushInteractor.conf.PUBLIC_KEY,
diff --git a/lib/Interactor/ReverseInteractor.js b/lib/Interactor/ReverseInteractor.js
index 58fb78f2..fa4eaab5 100644
--- a/lib/Interactor/ReverseInteractor.js
+++ b/lib/Interactor/ReverseInteractor.js
@@ -5,11 +5,13 @@ var Url = require('url');
var Cipher = require('./Cipher.js');
var ReverseInteract = module.exports = {
- // changeUrl : function(url) {
- // if (!this.connected) return;
- // this.network = Url.parse(url);
- // // TODO
- // },
+ changeUrl : function(url) {
+ if (!this.connected) return;
+ console.log('[REV] Changing URL to %s', url);
+ this.network = Url.parse(url);
+ this.socket.reconnect();
+ // TODO
+ },
start : function(p) {
if (!p.url) throw new Error('url not declared');
if (!p.conf || !p.conf.ipm2) throw new Error('ipm2 ĩs not initialized');
diff --git a/package.json b/package.json
index eb8644c7..2d85c38e 100644
--- a/package.json
+++ b/package.json
@@ -133,7 +133,7 @@
"nssocket" : "0.5.1",
"pidusage" : "0.1.0",
- "axm" : "0.2.12",
+ "axm" : "0.2.13",
"pm2-axon" : "2.0.5",
"pm2-axon-rpc" : "0.3.5",
"pm2-deploy" : "~0.1.0",