mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
Merge pull request #251 from simianhacker/indexPattern-flattenWith
Closes #246
This commit is contained in:
commit
e02bf83099
5 changed files with 78 additions and 3 deletions
|
@ -74,6 +74,7 @@ define(function (require) {
|
|||
|
||||
var defaultFormat = courier.indexPatterns.fieldFormats.defaultByType.string;
|
||||
|
||||
|
||||
var stateDefaults = {
|
||||
query: initialQuery || '',
|
||||
columns: ['_source'],
|
||||
|
@ -304,7 +305,9 @@ define(function (require) {
|
|||
if (sortFn && hit._formatted) return;
|
||||
|
||||
// Flatten the fields
|
||||
hit._source = _.flattenWith('.', hit._source);
|
||||
|
||||
var indexPattern = $scope.searchSource.get('index');
|
||||
hit._source = indexPattern.flattenSearchResponse(hit._source);
|
||||
|
||||
hit._formatted = _.mapValues(hit._source, function (value, name) {
|
||||
// add up the counts for each field name
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
return function (nestedObj) {
|
||||
var key; // original key
|
||||
var stack = []; // track key stack
|
||||
var flatObj = {};
|
||||
var self = this;
|
||||
(function flattenObj(obj) {
|
||||
_.keys(obj).forEach(function (key) {
|
||||
stack.push(key);
|
||||
var flattenKey = stack.join('.');
|
||||
|
||||
if (self.fieldsByName[flattenKey]) {
|
||||
flatObj[flattenKey] = obj[key];
|
||||
} else if (_.isObject(obj[key])) {
|
||||
flattenObj(obj[key]);
|
||||
}
|
||||
|
||||
stack.pop();
|
||||
});
|
||||
}(nestedObj));
|
||||
return flatObj;
|
||||
};
|
||||
});
|
|
@ -11,6 +11,7 @@ define(function (require) {
|
|||
var intervals = Private(require('components/index_patterns/_intervals'));
|
||||
var mappingSetup = Private(require('utils/mapping_setup'));
|
||||
var DocSource = Private(require('components/courier/data_source/doc_source'));
|
||||
var flattenSearchResponse = require('components/index_patterns/_flatten_search_response');
|
||||
|
||||
var type = 'index-pattern';
|
||||
|
||||
|
@ -171,7 +172,10 @@ define(function (require) {
|
|||
pattern.toString = function () {
|
||||
return '' + pattern.toJSON();
|
||||
};
|
||||
|
||||
pattern.flattenSearchResponse = flattenSearchResponse.bind(pattern);
|
||||
|
||||
}
|
||||
return IndexPattern;
|
||||
};
|
||||
});
|
||||
});
|
||||
|
|
|
@ -78,7 +78,8 @@
|
|||
'specs/state_management/state',
|
||||
'specs/utils/diff_object',
|
||||
'specs/utils/diff_time_picker_vals',
|
||||
'specs/factories/events'
|
||||
'specs/factories/events',
|
||||
'specs/index_patterns/_flatten_search_response'
|
||||
], function (kibana, sinon) {
|
||||
kibana.load(function () {
|
||||
var xhr = sinon.useFakeXMLHttpRequest();
|
||||
|
|
43
test/unit/specs/index_patterns/_flatten_search_response.js
Normal file
43
test/unit/specs/index_patterns/_flatten_search_response.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
define(function (require) {
|
||||
var _ = require('lodash');
|
||||
var flattenSearchResponse = require('components/index_patterns/_flatten_search_response');
|
||||
describe('IndexPattern#flattenSearchResponse()', function () {
|
||||
|
||||
var indexPattern = {
|
||||
fieldsByName: {
|
||||
'message': { type: 'string' },
|
||||
'geo.coordinates': { type: 'geo_point' },
|
||||
'geo.dest': { type: 'string' },
|
||||
'geo.src': { type: 'string' },
|
||||
'bytes': { type: 'number' },
|
||||
'@timestamp': { type: 'date' }
|
||||
}
|
||||
};
|
||||
|
||||
indexPattern.flattenSearchResponse = _.bind(flattenSearchResponse, indexPattern);
|
||||
|
||||
var fixture = {
|
||||
message: 'Hello World',
|
||||
geo: {
|
||||
coordinates: { lat: 33.4500, lon: 112.0667 },
|
||||
dest: 'US',
|
||||
src: 'IN'
|
||||
},
|
||||
bytes: 10039103,
|
||||
'@timestamp': (new Date()).toString()
|
||||
};
|
||||
|
||||
it('should only flatten keys as far as the mapping', function () {
|
||||
var obj = indexPattern.flattenSearchResponse(fixture);
|
||||
expect(obj).to.have.property('geo.coordinates', fixture.geo.coordinates);
|
||||
expect(obj).to.not.have.property('geo.coordinates.lat');
|
||||
expect(obj).to.not.have.property('geo.coordinates.lon');
|
||||
expect(obj).to.have.property('geo.dest', 'US');
|
||||
expect(obj).to.have.property('geo.src', 'IN');
|
||||
expect(obj).to.have.property('@timestamp', fixture['@timestamp']);
|
||||
expect(obj).to.have.property('message', 'Hello World');
|
||||
expect(obj).to.have.property('bytes', 10039103);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue