Skip to content

Commit b35b925

Browse files
author
zhaoxuebin
committed
add cluster info
1 parent 404a244 commit b35b925

File tree

12 files changed

+224
-88
lines changed

12 files changed

+224
-88
lines changed

es.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const EventEmitter = require('events').EventEmitter;
2-
const request = require('./util/request.js');
3-
const config = require('./util/globalConfig.js');
2+
const requestBuilder = require('./util/request.js');
3+
const configManager = require('./util/globalConfig.js');
4+
const Cluster = require('./src/cluster/cluster.js');
45
const Entity = require('./src/entity.js');
56
const Condition = require('./src/esCondition.js');
67
const Aggs = require('./src/esAggs.js');
@@ -17,7 +18,9 @@ function Connection(opts) {
1718
const self = this;
1819
const entities = new Map();
1920
const BASE_URL = `http://${opts.domain}:${opts.port}/`;
20-
21+
const config = configManager();
22+
Cluster.call(this, BASE_URL, config);
23+
const request = requestBuilder(config);
2124
let testConnection = async () => {
2225
let body = await request({
2326
'url': BASE_URL,
@@ -30,14 +33,18 @@ function Connection(opts) {
3033
await testConnection();
3134
};
3235

36+
3337
this.register = (name, opts, mappings, settings) => {
38+
if (!config.has('BASE_URL')) {
39+
throw new Error("make sure instance has already connected");
40+
}
3441
if (!opts.index) {
3542
throw new Error("index could not be blank");
3643
}
3744
if (!opts.type) {
3845
throw new Error('type could not be blank');
3946
}
40-
entities.set(name, new Entity(name, opts, mappings, settings));
47+
entities.set(name, new Entity(name, opts, mappings, settings, config));
4148
return entities.get(name);
4249
};
4350

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "elasticsearch-orm",
3-
"version": "1.0.20",
3+
"version": "1.0.21",
44
"description": "This is a orm for elasticSearch",
55
"main": "es.js",
66
"scripts": {

src/cluster/cluster.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const requestBuiler = require('../../util/request.js');
2+
module.exports = function(BASE_URL, config) {
3+
const self = this;
4+
const request = requestBuiler(config);
5+
this.health = async () => {
6+
const url = `${BASE_URL}_cluster/health`;
7+
let result = await request({
8+
url,
9+
'method': 'GET'
10+
});
11+
return result;
12+
};
13+
14+
this.stats = async () => {
15+
const url = `${BASE_URL}_cluster/stats`;
16+
let result = await request({
17+
url,
18+
'method': 'GET'
19+
});
20+
return result;
21+
};
22+
23+
this.state = async () => {
24+
const url = `${BASE_URL}_cluster/state`;
25+
let result = await request({
26+
url,
27+
'method': 'GET'
28+
});
29+
return result;
30+
};
31+
32+
this.indices = async () => {
33+
const url = `${BASE_URL}_cat/indices?format=json`;
34+
const result = await request({
35+
url,
36+
'method': 'GET'
37+
});
38+
return result;
39+
}
40+
};

src/entity.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
const request = require('../util/request.js');
2-
const config = require('../util/globalConfig.js');
1+
const requestBuilder = require('../util/request.js');
32
const UrlBuilder = require('./uri-builder/urlBuilder.js');
43
const Condition = require('./esCondition.js'),
54
Query = require('./esQuery.js'),
65
Aggs = require('./esAggs.js');
7-
module.exports = function(name, opts, mappings = {}, settings) {
6+
module.exports = function(name, opts, mappings = {}, settings, config) {
87
const self = this;
8+
const request = requestBuilder(config);
99
//Condition.call(this);
1010
const DOMAIN = config.get('domain'),
1111
PORT = config.get('port'),
1212
BASE_URL = config.get('BASE_URL'),
1313
INDEX = opts.index,
1414
TYPE = opts.type;
15-
const urlBuilder = new UrlBuilder(BASE_URL, INDEX, TYPE);
15+
const urlBuilder = new UrlBuilder(BASE_URL, INDEX, TYPE, config);
1616
let exists, dbMappings;
1717
let shardsCount;
1818
this.sortList = [];
1919
this.aggsList = [];
2020
this.sourceList = undefined;
2121
Object.keys(new Condition()).forEach((key) => {
2222
self[key] = (...args) => {
23-
let query = new Query(BASE_URL, INDEX, TYPE);
23+
let query = new Query(BASE_URL, INDEX, TYPE, config);
2424
query[key].apply(query, args);
2525
return query;
2626
};
@@ -180,15 +180,15 @@ module.exports = function(name, opts, mappings = {}, settings) {
180180
if (isNaN(from)) {
181181
throw new Error('from parameter is invalid');
182182
}
183-
let query = new Query(BASE_URL, INDEX, TYPE);
183+
let query = new Query(BASE_URL, INDEX, TYPE, config);
184184
query.from(from);
185185
return query;
186186
};
187187
this.size = (size) => {
188188
if (isNaN(size)) {
189189
throw new Error('from parameter is invalid');
190190
}
191-
let query = new Query(BASE_URL, INDEX, TYPE);
191+
let query = new Query(BASE_URL, INDEX, TYPE, config);
192192
query.size(size);
193193
return query;
194194
};
@@ -239,7 +239,7 @@ module.exports = function(name, opts, mappings = {}, settings) {
239239
};
240240

241241
this.sort = (...args) => {
242-
let query = new Query(BASE_URL, INDEX, TYPE);
242+
let query = new Query(BASE_URL, INDEX, TYPE, config);
243243
query.sort.apply(query, args);
244244
return query;
245245
// if (args.length === 1 && typeof args[0] === 'object') {
@@ -279,7 +279,7 @@ module.exports = function(name, opts, mappings = {}, settings) {
279279
this.checkIndexExists = checkIndexExists;
280280

281281
this.source = (sources) => {
282-
let query = new Query(BASE_URL, INDEX, TYPE);
282+
let query = new Query(BASE_URL, INDEX, TYPE, config);
283283
query.source(sources);
284284
return query;
285285
};
@@ -288,7 +288,7 @@ module.exports = function(name, opts, mappings = {}, settings) {
288288
if (!aggs instanceof Aggs) {
289289
throw new Error('arguments type error');
290290
}
291-
let query = new Query(BASE_URL, INDEX, TYPE);
291+
let query = new Query(BASE_URL, INDEX, TYPE, config);
292292
query.aggs(aggs);
293293
return query;
294294
};
@@ -407,7 +407,7 @@ module.exports = function(name, opts, mappings = {}, settings) {
407407
}
408408

409409
this.query = async (options = {}) => {
410-
let query = new Query(BASE_URL, INDEX, TYPE);
410+
let query = new Query(BASE_URL, INDEX, TYPE, config);
411411
let ret = await query.query(options);
412412
return ret;
413413
};

src/esQuery.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
const request = require('../util/request.js');
1+
const requestBuilder = require('../util/request.js');
22
const Condition = require('./esCondition.js'),
33
Aggs = require('./esAggs.js');
44
const UrlBuilder = require('./uri-builder/urlBuilder.js');
5-
module.exports = function(BASE_URL, INDEX, TYPE) {
6-
const urlBuilder = new UrlBuilder(BASE_URL, INDEX, TYPE);
5+
module.exports = function(BASE_URL, INDEX, TYPE, config) {
6+
const urlBuilder = new UrlBuilder(BASE_URL, INDEX, TYPE, config);
7+
const request = requestBuilder(config);
78
Condition.call(this);
89
this.sortList = [];
910
this.aggsList = [];

src/uri-builder/urlBuilder.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
const config = require('../../util/globalConfig.js');
2-
module.exports = function(BASE, INDEX, TYPE) {
1+
module.exports = function(BASE, INDEX, TYPE, config) {
32

43
const getJoinFlag = (mappings) => {
54
return Object.keys(mappings).some((key) => {

test/cluster/cluster.js

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
const orm = require('../../es.js');
2+
const expect = require('chai').expect;
3+
const config = require('../config.json');
4+
let instance;
5+
const getInstance = () => {
6+
return new Promise((resolve, reject) => {
7+
if (!instance) {
8+
instance = orm({
9+
'domain': config.host,
10+
'port': config.port
11+
});
12+
instance.on("connected", () => {
13+
resolve(instance);
14+
});
15+
instance.on('error', (e) => {
16+
reject(e);
17+
});
18+
} else {
19+
resolve(instance);
20+
}
21+
});
22+
}
23+
24+
25+
describe('集群相关信息的测试脚本', function() {
26+
it('集群健康信息', function(done) {
27+
(async () => {
28+
const instance = await getInstance();
29+
const health = await instance.health();
30+
return health;
31+
})().then((ret) => {
32+
["cluster_name", "status", "timed_out", "number_of_nodes", "number_of_data_nodes", "active_primary_shards", "active_shards", "relocating_shards", "initializing_shards", "unassigned_shards", "delayed_unassigned_shards", "number_of_pending_tasks", "number_of_in_flight_fetch", "task_max_waiting_in_queue_millis", "active_shards_percent_as_number"].forEach((key) => {
33+
expect(ret).to.have.property(key);
34+
})
35+
done();
36+
}).catch((e) => {
37+
done(e);
38+
})
39+
});
40+
it('集群的统计状态', function(done) {
41+
(async () => {
42+
const instance = await getInstance();
43+
const stats = await instance.stats();
44+
return stats;
45+
})().then((ret) => {
46+
['nodes', '_nodes', 'status', 'indices'].forEach((key) => {
47+
expect(ret).to.have.property(key);
48+
});
49+
done();
50+
}).catch((e) => {
51+
done(e);
52+
})
53+
});
54+
it('集群的状态', function(done) {
55+
(async () => {
56+
const instance = await getInstance();
57+
const state = await instance.state();
58+
return state;
59+
})().then((ret) => {
60+
['nodes', 'metadata', 'master_node', 'routing_table'].forEach((key) => {
61+
expect(ret).to.have.property(key);
62+
});
63+
done();
64+
}).catch((e) => {
65+
done(e);
66+
})
67+
});
68+
it('集群的索引列表', function(done) {
69+
(async () => {
70+
const instance = await getInstance();
71+
const indices = await instance.indices();
72+
return indices;
73+
})().then((ret) => {
74+
for (let i = 0; i < ret.length; i++) {
75+
expect(ret[i]).to.have.property('status');
76+
expect(ret[i]).to.have.property('health');
77+
}
78+
done();
79+
}).catch((e) => {
80+
done(e);
81+
})
82+
});
83+
});

test/entity/query.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ const getEntity = () => {
1010
});
1111
instance.on('connected', () => {
1212
let testType = instance.register('testType', {
13-
'index': 'mocha_test',
14-
'type': 'mocha_test'
13+
'index': 'test',
14+
'type': 'test_type'
1515
}, {
1616
'home': {
1717
'type': "geo_point"

test/es.test.js

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ describe('连接相关测试', function() {
3434
});
3535
instance.on('connected', () => {
3636
let testType = instance.register('testType', {
37-
'index': 'mocha_test',
38-
'type': 'mocha_test'
37+
'index': 'test',
38+
'type': 'test_type2'
3939
}, {
4040
'age': {
4141
'type': 'integer'
@@ -50,7 +50,7 @@ describe('连接相关测试', function() {
5050
'type': 'date'
5151
}
5252
});
53-
(async() => {
53+
(async () => {
5454
await testType.sync();
5555
})().then(() => {
5656
done();
@@ -65,21 +65,22 @@ describe('连接相关测试', function() {
6565
'domain': config.host,
6666
'port': config.port
6767
});
68-
let testType = instance.register('testType', {
69-
'index': 'mocha_test',
70-
'type': 'mocha_test'
71-
}, {
72-
'home': {
73-
'type': "geo_point"
74-
}
75-
});
76-
(async() => {
77-
await testType.sync();
78-
})().then(() => {
79-
done();
80-
}).catch((e) => {
81-
done(e);
68+
instance.on('connected', () => {
69+
let testType = instance.register('testType', {
70+
'index': 'mocha_test',
71+
'type': 'mocha_test'
72+
}, {
73+
'home': {
74+
'type': "geo_point"
75+
}
76+
});
77+
(async () => {
78+
await testType.sync();
79+
})().then(() => {
80+
done();
81+
}).catch((e) => {
82+
done(e);
83+
});
8284
});
8385
});
84-
8586
});

test/uri-builder/urlBuilder.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ describe('URL 构建器相关', function() {
4747

4848

4949
it('滚动逻辑', function() {
50-
let builder = new UrlBuilder(BASE, INDEX, TYPE);
50+
const config = new Map();
51+
config.set('scroll', '1m');
52+
let builder = new UrlBuilder(BASE, INDEX, TYPE, config);
5153
expect(builder.buildScrollUrl('id')).to.equal(BASE + '_search/scroll/id?scroll=1m');
5254
expect(builder.buildScrollUrl('id', {
5355
'scroll': '5m'

0 commit comments

Comments
 (0)