report errors from any mixin, and close the server when any occur

This commit is contained in:
spalger 2015-07-29 15:20:36 -07:00
parent bbef901bf9
commit bce10f8079
4 changed files with 33 additions and 24 deletions

View file

@ -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",

View file

@ -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;
});
};

View file

@ -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 () {

View file

@ -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'));
}
};