diff --git a/package.json b/package.json index b676e97e0b82..439ddd5e2acf 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "grunt-jscs": "^1.8.0", "grunt-karma": "^0.12.0", "grunt-replace": "^0.7.9", - "grunt-run": "^0.3.0", + "grunt-run": "spalger/grunt-run#master", "grunt-s3": "^0.2.0-alpha.3", "grunt-simple-mocha": "^0.4.0", "html-entities": "^1.1.1", diff --git a/src/cli/serve/serve.js b/src/cli/serve/serve.js index 1ec1934146ca..283b1193c723 100644 --- a/src/cli/serve/serve.js +++ b/src/cli/serve/serve.js @@ -84,6 +84,13 @@ module.exports = function (program) { set('plugins.paths', [].concat(opts.pluginPath || [])); - return new KbnServer(_.merge(settings, this.getUnknownOptions())); + let server = new KbnServer(_.merge(settings, this.getUnknownOptions())); + + server.ready().catch(function (err) { + console.error(err.stack); + process.exit(1); + }); + + return server; }); }; diff --git a/src/optimize/index.js b/src/optimize/index.js index 0b8927457faf..871960895224 100644 --- a/src/optimize/index.js +++ b/src/optimize/index.js @@ -77,6 +77,8 @@ module.exports = function (kbnServer, server, config) { plugins: kbnServer.plugins }); + server.on('close', _.bindKey(optmzr.disable || _.noop, optmzr)); + kbnServer.mixin(require('./browserTests')) .then(function () { diff --git a/src/server/KbnServer.js b/src/server/KbnServer.js index ba2965f66eb5..3ee78ef27228 100644 --- a/src/server/KbnServer.js +++ b/src/server/KbnServer.js @@ -60,6 +60,16 @@ module.exports = class KbnServer extends EventEmitter { .each(function (fn) { return fn.call(self, self, self.server, self.config); }) + .catch(function (err) { + self.server.log('fatal', err); + self.emit('error', err); + + return self.close() + .then(function () { + // retrow once server is closed + throw err; + }); + }) .return(undefined); } @@ -74,34 +84,24 @@ module.exports = class KbnServer extends EventEmitter { */ listen() { let self = this; - let server = self.server; - let start = _.ary(promify(server.start, server), 0); return self.ready() .then(function () { - return self.mixin(start, require('./pid')); + return self.mixin( + function () { + return fromNode(_.bindKey(self.server, 'start')); + }, + require('./pid') + ); }) - .then( - function () { - server.log(['listening', 'info'], 'Server running at ' + server.info.uri); - self.emit('listening'); - return server; - }, - function (err) { - server.log('fatal', err); - self.emit('error', err); - } - ); + .then(function () { + self.server.log(['listening', 'info'], 'Server running at ' + self.server.info.uri); + self.emit('listening'); + return self.server; + }); } close() { - let self = this; - - return fromNode(function (cb) { - self.server.stop(cb); - }) - .then(function () { - return _.get(self, 'optimizer.disable', _.noop)(); - }); + return fromNode(_.bindKey(this.server, 'stop')); } };