mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Closes #2377 - Migrate config from > GA
- Closes #2377 - Added testing framework for server side tests - Fixed jshint - Added config migration - Added framework for server initialization
This commit is contained in:
parent
caaca434ca
commit
2b9802030c
11 changed files with 169 additions and 18 deletions
17
package.json
17
package.json
|
@ -11,11 +11,13 @@
|
|||
"dashboarding"
|
||||
],
|
||||
"private": false,
|
||||
"version": "4.0.0-beta3",
|
||||
"version": "4.0.0-rc1-snapshot",
|
||||
"main": "src/server/app.js",
|
||||
"homepage": "http://www.elasticsearch.org/overview/kibana/",
|
||||
"bugs": "https://github.com/elasticsearch/kibana/issues",
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/elasticsearch/kibana/issues"
|
||||
},
|
||||
"license": "Apache 2.0",
|
||||
"author": "Rashid Khan <rashid.khan@elasticsearch.com>",
|
||||
"contributors": [
|
||||
"Spencer Alger <spencer.alger@elasticsearch.com>",
|
||||
|
@ -35,12 +37,14 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"ansicolors": "^0.3.2",
|
||||
"bluebird": "~2.0.7",
|
||||
"body-parser": "~1.10.1",
|
||||
"bunyan": "^1.2.3",
|
||||
"commander": "^2.6.0",
|
||||
"compression": "^1.3.0",
|
||||
"cookie-parser": "~1.3.3",
|
||||
"debug": "~2.1.1",
|
||||
"elasticsearch": "^3.1.1",
|
||||
"express": "~4.10.6",
|
||||
"glob": "^4.3.2",
|
||||
"http-proxy": "^1.8.1",
|
||||
|
@ -49,10 +53,10 @@
|
|||
"less-middleware": "1.0.x",
|
||||
"lodash": "^2.4.1",
|
||||
"morgan": "~1.5.1",
|
||||
"semver": "^4.2.0",
|
||||
"serve-favicon": "~2.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bluebird": "~2.0.7",
|
||||
"connect": "~2.19.5",
|
||||
"event-stream": "~3.1.5",
|
||||
"expect.js": "~0.3.1",
|
||||
|
@ -72,6 +76,7 @@
|
|||
"grunt-run": "^0.2.3",
|
||||
"grunt-s3": "~0.2.0-alpha.3",
|
||||
"grunt-saucelabs": "~8.3.2",
|
||||
"grunt-simple-mocha": "^0.4.0",
|
||||
"html-entities": "^1.1.1",
|
||||
"http-proxy": "~1.8.1",
|
||||
"husky": "~0.6.0",
|
||||
|
@ -91,9 +96,5 @@
|
|||
"rjs-build-analysis": "0.0.3",
|
||||
"simple-git": "^0.11.0",
|
||||
"tar": "^1.0.1"
|
||||
},
|
||||
"license": "Apache 2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/elasticsearch/kibana/issues"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,13 @@ try {
|
|||
public_folder = path.resolve(__dirname, '..', '..', 'kibana');
|
||||
}
|
||||
|
||||
var packagePath = path.resolve(__dirname, '..', 'package.json');
|
||||
try {
|
||||
fs.statSync(packagePath);
|
||||
} catch (err) {
|
||||
packagePath = path.resolve(__dirname, '..', '..', '..', 'package.json');
|
||||
}
|
||||
|
||||
var config = module.exports = {
|
||||
port : kibana.port || 5601,
|
||||
host : kibana.host || '0.0.0.0',
|
||||
|
@ -25,7 +32,8 @@ var config = module.exports = {
|
|||
public_folder : public_folder,
|
||||
external_plugins_folder : process.env.PLUGINS_FOLDER || null,
|
||||
bundled_plugins_folder : path.resolve(public_folder, 'plugins'),
|
||||
kibana : kibana
|
||||
kibana : kibana,
|
||||
package : require(packagePath)
|
||||
};
|
||||
|
||||
config.plugins = listPlugins(config);
|
||||
|
|
|
@ -6,6 +6,8 @@ var app = require('./app');
|
|||
var http = require('http');
|
||||
var config = require('./config');
|
||||
var logger = require('./lib/logger');
|
||||
var Promise = require('bluebird');
|
||||
var initialization = require('./lib/serverInitialization');
|
||||
|
||||
|
||||
/**
|
||||
|
@ -50,13 +52,18 @@ function onListening() {
|
|||
logger.info('Listening on %s:%d', address.address, address.port);
|
||||
}
|
||||
|
||||
function start() {
|
||||
var port = parseInt(process.env.PORT, 10) || config.port || 3000;
|
||||
var host = process.env.HOST || config.host || '127.0.0.1';
|
||||
var listen = Promise.promisify(server.listen.bind(server));
|
||||
app.set('port', port);
|
||||
return listen(port, host);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
server: server,
|
||||
start: function (cb) {
|
||||
var port = parseInt(process.env.PORT, 10) || config.port || 3000;
|
||||
var host = process.env.HOST || config.host || '127.0.0.1';
|
||||
app.set('port', port);
|
||||
server.listen(port, host, cb);
|
||||
return initialization().then(start).nodeify(cb);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
30
src/server/lib/isUpgradeable.js
Normal file
30
src/server/lib/isUpgradeable.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
var config = require('../config');
|
||||
var semver = require('semver');
|
||||
var rcVersionRegex = /(\d+\.\d+\.\d+)\-rc(\d+)/i;
|
||||
|
||||
module.exports = function (doc) {
|
||||
if (/beta|snapshot/i.test(doc._id)) return false;
|
||||
if (doc._id === config.package.version) return false;
|
||||
|
||||
var packageVersion, packageRcRelease, version, rcRelease;
|
||||
packageRcRelease = rcRelease = Infinity;
|
||||
var matches = doc._id.match(rcVersionRegex);
|
||||
var packageMatches = config.package.version.match(rcVersionRegex);
|
||||
|
||||
if (matches) {
|
||||
version = matches[1];
|
||||
rcRelease = parseInt(matches[2], 10);
|
||||
} else {
|
||||
version = doc._id;
|
||||
}
|
||||
|
||||
if (packageMatches) {
|
||||
packageVersion = packageMatches[1];
|
||||
packageRcRelease = parseInt(packageMatches[2], 10);
|
||||
} else {
|
||||
packageVersion = config.package.version;
|
||||
}
|
||||
|
||||
if (semver.gte(version, packageVersion) && rcRelease >= packageRcRelease) return false;
|
||||
return true;
|
||||
};
|
29
src/server/lib/migrateConfig.js
Normal file
29
src/server/lib/migrateConfig.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
var config = require('../config');
|
||||
var elasticsearch = require('elasticsearch');
|
||||
var upgrade = require('./upgradeConfig');
|
||||
var client = new elasticsearch.Client({
|
||||
host: config.elasticsearch
|
||||
});
|
||||
|
||||
module.exports = function () {
|
||||
var options = {
|
||||
index: '.kibana',
|
||||
type: 'config',
|
||||
body: {
|
||||
size: 1000,
|
||||
sort: [ { buildNum: { order: 'desc' } } ],
|
||||
query: {
|
||||
filtered: {
|
||||
filter: {
|
||||
bool: {
|
||||
must_not: [ { query: { match: { _id: '@@version' } } } ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return client.search(options).then(upgrade);
|
||||
};
|
||||
|
10
src/server/lib/serverInitialization.js
Normal file
10
src/server/lib/serverInitialization.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
var Promise = require('bluebird');
|
||||
var migrateConfig = require('./migrateConfig');
|
||||
|
||||
module.exports = function () {
|
||||
var tasks = [
|
||||
migrateConfig()
|
||||
];
|
||||
|
||||
return Promise.all(tasks);
|
||||
};
|
28
src/server/lib/upgradeConfig.js
Normal file
28
src/server/lib/upgradeConfig.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
var Promise = require('bluebird');
|
||||
var isUpgradeable = require('./isUpgradeable');
|
||||
var config = require('../config');
|
||||
var _ = require('lodash');
|
||||
var elasticsearch = require('elasticsearch');
|
||||
var client = new elasticsearch.Client({
|
||||
host: config.elasticsearch
|
||||
});
|
||||
|
||||
module.exports = function (response) {
|
||||
var newConfig = {};
|
||||
// Check to see if there are any doc. If not then we can assume
|
||||
// nothing needs to be done
|
||||
if (response.hits.hits.length === 0) return Promise.resolve(null);
|
||||
|
||||
// Look for upgradeable configs. If none of them are upgradeable
|
||||
// then resolve with null.
|
||||
var body = _.find(response.hits.hits, isUpgradeable);
|
||||
if (body) return Promise.resolve(null);
|
||||
|
||||
return client.create({
|
||||
index: '.kibana',
|
||||
type: 'config',
|
||||
id: config.package.version,
|
||||
body: body
|
||||
});
|
||||
|
||||
};
|
|
@ -7,6 +7,7 @@ module.exports = function (grunt) {
|
|||
'Gruntfile.js',
|
||||
'<%= root %>/tasks/**/*.js',
|
||||
'<%= src %>/kibana/*.js',
|
||||
'<%= src %>/server/*.js',
|
||||
'<%= src %>/kibana/{components,directives,factories,filters,plugins,registry,services,utils}/**/*.js',
|
||||
'<%= unitTestDir %>/**/*.js'
|
||||
]
|
||||
|
|
8
tasks/config/simplemocha.js
Normal file
8
tasks/config/simplemocha.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
module.exports = {
|
||||
options: {
|
||||
timeout: 2000,
|
||||
ignoreLeaks: false,
|
||||
reporter: 'dot'
|
||||
},
|
||||
all: { src: ['<%= root %>/test/server/unit/**/*.js']}
|
||||
};
|
|
@ -1,6 +1,6 @@
|
|||
var _ = require('lodash');
|
||||
module.exports = function (grunt) {
|
||||
function getTestTask() {
|
||||
function addTestTask(tasks) {
|
||||
var testTask = 'mocha:unit';
|
||||
|
||||
if (grunt.option('use-sauce') || process.env.TRAVIS) {
|
||||
|
@ -13,6 +13,8 @@ module.exports = function (grunt) {
|
|||
}
|
||||
}
|
||||
|
||||
tasks.push('simplemocha:all', testTask);
|
||||
|
||||
return testTask;
|
||||
}
|
||||
|
||||
|
@ -26,17 +28,17 @@ module.exports = function (grunt) {
|
|||
'jshint',
|
||||
'maybe_start_kibana',
|
||||
'jade',
|
||||
'less',
|
||||
getTestTask()
|
||||
'less'
|
||||
];
|
||||
addTestTask(tasks);
|
||||
grunt.task.run(tasks);
|
||||
});
|
||||
|
||||
grunt.registerTask('quick-test', function () {
|
||||
var tasks = [
|
||||
'maybe_start_kibana',
|
||||
getTestTask()
|
||||
'maybe_start_kibana'
|
||||
];
|
||||
addTestTask(tasks);
|
||||
grunt.task.run(tasks);
|
||||
});
|
||||
|
||||
|
|
27
test/server/unit/lib/isUpgradeable.js
Normal file
27
test/server/unit/lib/isUpgradeable.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
var isUpgradeable = require('../../../../src/server/lib/isUpgradeable');
|
||||
var expect = require('expect.js');
|
||||
var util = require('util');
|
||||
var package = require('../../../../package.json');
|
||||
|
||||
describe('lib/isUpgradeable', function () {
|
||||
|
||||
function upgradeDoc(_id, version, bool) {
|
||||
it(util.format('should return %s for %s <= %s', bool, _id, version), function () {
|
||||
var doc = { _id: _id };
|
||||
package.version = version;
|
||||
expect(isUpgradeable(doc)).to.be(bool);
|
||||
});
|
||||
}
|
||||
|
||||
upgradeDoc('1.0.0-beta1', package.version, false);
|
||||
upgradeDoc(package.version, package.version, false);
|
||||
upgradeDoc('4.0.0-RC1', '4.0.0-RC2', true);
|
||||
upgradeDoc('4.0.0-rc2', '4.0.0-rc1', false);
|
||||
upgradeDoc('4.0.0-rc2', '4.0.0', true);
|
||||
upgradeDoc('4.0.0-rc2', '4.0.2', true);
|
||||
upgradeDoc('4.0.1', '4.1.0-rc', true);
|
||||
upgradeDoc('4.0.0-rc1', '4.0.0', true);
|
||||
upgradeDoc('4.0.0-rc1-snapshot', '4.0.0', false);
|
||||
upgradeDoc('4.1.0-rc1-snapshot', '4.1.0-rc1', false);
|
||||
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue