mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
refactor GET code so that it can be reused
This commit is contained in:
parent
1f6105591d
commit
0397a2f659
4 changed files with 113 additions and 95 deletions
7
src/plugins/kibana/server/lib/convert_to_snake_case.js
Normal file
7
src/plugins/kibana/server/lib/convert_to_snake_case.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
const _ = require('lodash');
|
||||
|
||||
module.exports = function convertToSnakeCase(object) {
|
||||
return _.mapKeys(object, (value, key) => {
|
||||
return _.snakeCase(key);
|
||||
});
|
||||
};
|
|
@ -0,0 +1,43 @@
|
|||
const convertToSnakeCase = require('../../../lib/convert_to_snake_case');
|
||||
const _ = require('lodash');
|
||||
const createApiDocument = require('../../../lib/api_document_builders/create_api_document');
|
||||
const createRelationshipObject = require('../../../lib/api_document_builders/create_relationship_object');
|
||||
const createResourceObject = require('../../../lib/api_document_builders/create_resource_object');
|
||||
|
||||
|
||||
module.exports = function getIndexPattern(patternId, boundCallWithRequest, shouldIncludeTemplate) {
|
||||
const params = {
|
||||
index: '.kibana',
|
||||
type: 'index-pattern',
|
||||
id: patternId
|
||||
};
|
||||
|
||||
return boundCallWithRequest('get', params)
|
||||
.then((result) => {
|
||||
result._source.fields = JSON.parse(result._source.fields);
|
||||
|
||||
let relationshipsObject;
|
||||
if (result._source.template_id) {
|
||||
relationshipsObject = {
|
||||
template: createRelationshipObject('index_templates', result._source.template_id)
|
||||
};
|
||||
delete result._source.template_id;
|
||||
}
|
||||
|
||||
const snakeAttributes = convertToSnakeCase(result._source);
|
||||
return createResourceObject('index_patterns', result._id, snakeAttributes, relationshipsObject);
|
||||
})
|
||||
.then((patternResource) => {
|
||||
if (!shouldIncludeTemplate) {
|
||||
return createApiDocument(patternResource);
|
||||
}
|
||||
const templateId = _.get(patternResource, 'relationships.template.data.id');
|
||||
|
||||
return boundCallWithRequest('indices.getTemplate', {name: templateId})
|
||||
.then((template) => {
|
||||
return createApiDocument(patternResource, [
|
||||
createResourceObject('index_templates', templateId, template[templateId])
|
||||
]);
|
||||
});
|
||||
});
|
||||
};
|
|
@ -0,0 +1,58 @@
|
|||
const convertToSnakeCase = require('../../../lib/convert_to_snake_case');
|
||||
const _ = require('lodash');
|
||||
const createApiDocument = require('../../../lib/api_document_builders/create_api_document');
|
||||
const createRelationshipObject = require('../../../lib/api_document_builders/create_relationship_object');
|
||||
const createResourceObject = require('../../../lib/api_document_builders/create_resource_object');
|
||||
|
||||
module.exports = function getIndexPatterns(boundCallWithRequest, shouldIncludeTemplate) {
|
||||
const params = {
|
||||
index: '.kibana',
|
||||
type: 'index-pattern',
|
||||
body: {
|
||||
query: {
|
||||
match_all: {}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return boundCallWithRequest('search', params)
|
||||
.then(function parseResults(results) {
|
||||
const hits = results.hits.hits;
|
||||
return _.map(hits, (patternHit) => {
|
||||
patternHit._source.fields = JSON.parse(patternHit._source.fields);
|
||||
|
||||
let relationshipsObject;
|
||||
if (patternHit._source.template_id) {
|
||||
relationshipsObject = {
|
||||
template: createRelationshipObject('index_templates', patternHit._source.template_id)
|
||||
};
|
||||
delete patternHit._source.template_id;
|
||||
}
|
||||
const snakeAttributes = convertToSnakeCase(patternHit._source);
|
||||
return createResourceObject('index_patterns', patternHit._id, snakeAttributes, relationshipsObject);
|
||||
});
|
||||
})
|
||||
.then((patterns) => {
|
||||
if (!shouldIncludeTemplate) {
|
||||
return createApiDocument(patterns);
|
||||
}
|
||||
|
||||
const templateIdSet = new Set();
|
||||
patterns.forEach(pattern => {
|
||||
const templateId = _.get(pattern, 'relationships.template.data.id');
|
||||
if (templateId) {
|
||||
templateIdSet.add(templateId);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.map(Array.from(templateIdSet), (templateId) => {
|
||||
return boundCallWithRequest('indices.getTemplate', {name: templateId})
|
||||
.then((template) => {
|
||||
return createResourceObject('index_templates', templateId, template[templateId]);
|
||||
});
|
||||
})
|
||||
.then((templates) => {
|
||||
return createApiDocument(patterns, templates);
|
||||
});
|
||||
});
|
||||
};
|
|
@ -1,18 +1,10 @@
|
|||
const _ = require('lodash');
|
||||
const Promise = require('bluebird');
|
||||
const handleESError = require('../../../lib/handle_es_error');
|
||||
const createApiDocument = require('../../../lib/api_document_builders/create_api_document');
|
||||
const createRelationshipObject = require('../../../lib/api_document_builders/create_relationship_object');
|
||||
const createResourceObject = require('../../../lib/api_document_builders/create_resource_object');
|
||||
const getIndexPattern = require('./get_index_pattern');
|
||||
const getIndexPatterns = require('./get_index_patterns');
|
||||
|
||||
module.exports = function registerGet(server) {
|
||||
|
||||
function convertToSnakeCase(object) {
|
||||
return _.mapKeys(object, (value, key) => {
|
||||
return _.snakeCase(key);
|
||||
});
|
||||
}
|
||||
|
||||
server.route({
|
||||
path: '/api/kibana/index_patterns',
|
||||
method: 'GET',
|
||||
|
@ -20,56 +12,7 @@ module.exports = function registerGet(server) {
|
|||
const boundCallWithRequest = _.partial(server.plugins.elasticsearch.callWithRequest, req);
|
||||
const shouldIncludeTemplate = req.query.include === 'template';
|
||||
|
||||
const params = {
|
||||
index: '.kibana',
|
||||
type: 'index-pattern',
|
||||
body: {
|
||||
query: {
|
||||
match_all: {}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
boundCallWithRequest('search', params)
|
||||
.then(function parseResults(results) {
|
||||
const hits = results.hits.hits;
|
||||
return _.map(hits, (patternHit) => {
|
||||
patternHit._source.fields = JSON.parse(patternHit._source.fields);
|
||||
|
||||
let relationshipsObject;
|
||||
if (patternHit._source.template_id) {
|
||||
relationshipsObject = {
|
||||
template: createRelationshipObject('index_templates', patternHit._source.template_id)
|
||||
};
|
||||
delete patternHit._source.template_id;
|
||||
}
|
||||
const snakeAttributes = convertToSnakeCase(patternHit._source);
|
||||
return createResourceObject('index_patterns', patternHit._id, snakeAttributes, relationshipsObject);
|
||||
});
|
||||
})
|
||||
.then((patterns) => {
|
||||
if (!shouldIncludeTemplate) {
|
||||
return createApiDocument(patterns);
|
||||
}
|
||||
|
||||
const templateIdSet = new Set();
|
||||
patterns.forEach(pattern => {
|
||||
const templateId = _.get(pattern, 'relationships.template.data.id');
|
||||
if (templateId) {
|
||||
templateIdSet.add(templateId);
|
||||
}
|
||||
});
|
||||
|
||||
return Promise.map(Array.from(templateIdSet), (templateId) => {
|
||||
return boundCallWithRequest('indices.getTemplate', {name: templateId})
|
||||
.then((template) => {
|
||||
return createResourceObject('index_templates', templateId, template[templateId]);
|
||||
});
|
||||
})
|
||||
.then((templates) => {
|
||||
return createApiDocument(patterns, templates);
|
||||
});
|
||||
})
|
||||
getIndexPatterns(boundCallWithRequest, shouldIncludeTemplate)
|
||||
.then(
|
||||
function (patterns) {
|
||||
reply(patterns);
|
||||
|
@ -87,42 +30,9 @@ module.exports = function registerGet(server) {
|
|||
handler: function (req, reply) {
|
||||
const boundCallWithRequest = _.partial(server.plugins.elasticsearch.callWithRequest, req);
|
||||
const shouldIncludeTemplate = req.query.include === 'template';
|
||||
const pattern = req.params.id;
|
||||
const patternId = req.params.id;
|
||||
|
||||
const params = {
|
||||
index: '.kibana',
|
||||
type: 'index-pattern',
|
||||
id: req.params.id
|
||||
};
|
||||
|
||||
boundCallWithRequest('get', params)
|
||||
.then((result) => {
|
||||
result._source.fields = JSON.parse(result._source.fields);
|
||||
|
||||
let relationshipsObject;
|
||||
if (result._source.template_id) {
|
||||
relationshipsObject = {
|
||||
template: createRelationshipObject('index_templates', result._source.template_id)
|
||||
};
|
||||
delete result._source.template_id;
|
||||
}
|
||||
|
||||
const snakeAttributes = convertToSnakeCase(result._source);
|
||||
return createResourceObject('index_patterns', result._id, snakeAttributes, relationshipsObject);
|
||||
})
|
||||
.then((patternResource) => {
|
||||
if (!shouldIncludeTemplate) {
|
||||
return createApiDocument(patternResource);
|
||||
}
|
||||
const templateId = _.get(patternResource, 'relationships.template.data.id');
|
||||
|
||||
return boundCallWithRequest('indices.getTemplate', {name: templateId})
|
||||
.then((template) => {
|
||||
return createApiDocument(patternResource, [
|
||||
createResourceObject('index_templates', templateId, template[templateId])
|
||||
]);
|
||||
});
|
||||
})
|
||||
getIndexPattern(patternId, boundCallWithRequest, shouldIncludeTemplate)
|
||||
.then(
|
||||
function (pattern) {
|
||||
reply(pattern);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue