Skip to content

Commit

Permalink
Add merge rollup capabilities with fields - small fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
alexwizp committed Jan 24, 2019
1 parent d9cc4ec commit 4298f0e
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ const getTimezoneFromRequest = request => {
};

export default class DefaultSearchCapabilities {
constructor(request, indexPattern, batchRequestsSupport, fieldsCapabilities = {}) {
constructor(request, batchRequestsSupport, fieldsCapabilities = {}) {
this.request = request;
this.indexPattern = indexPattern;
this.batchRequestsSupport = batchRequestsSupport;
this.fieldsCapabilities = fieldsCapabilities;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@ export default class DefaultSearchStrategy extends AbstractSearchStrategy {
super(server, callWithRequestFactory, SearchRequest);
}

checkForViability(req, indexPattern) {
checkForViability(req) {
return {
isViable: true,
capabilities: new DefaultSearchCapabilities(req, indexPattern, batchRequestsSupport)
capabilities: new DefaultSearchCapabilities(req, batchRequestsSupport)
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ const intervalMultiple = (userTimeInterval, defaultTimeInterval) => !Boolean(use

export default (DefaultSearchCapabilities) =>
(class RollupSearchCapabilities extends DefaultSearchCapabilities {
constructor(req, indexPattern, batchRequestsSupport, fieldsCapabilities) {
super(req, indexPattern, batchRequestsSupport, fieldsCapabilities);
constructor(req, batchRequestsSupport, fieldsCapabilities, rollupIndex) {
super(req, batchRequestsSupport, fieldsCapabilities);

this.rollupIndex = rollupIndex;
this.init();
}

Expand All @@ -32,7 +33,7 @@ export default (DefaultSearchCapabilities) =>
}

getDateHistogramAggregation() {
const dateHistogramField = this.fieldsCapabilities[this.indexPattern].aggs.date_histogram;
const dateHistogramField = this.fieldsCapabilities[this.rollupIndex].aggs.date_histogram;

// there is also only one valid date_histogram field
return Object.values(dateHistogramField)[0];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { merge, indexBy } from 'lodash';
import { indexBy } from 'lodash';
import { callWithRequestFactory } from '../call_with_request_factory';
import mergeCapabilitiesWithFields from '../merge_capabilities_with_fields';
import { getCapabilitiesForRollupIndices } from '../map_capabilities';

const ROLLUP_INDEX_CAPABILITIES_METHOD = 'rollup.rollupIndexCapabilities';
const INDEX_PATTERN_SEPARATOR = ',';
const DEFAULT_INDEX_PATTERN = '*';
const batchRequestsSupport = false;

const getRollupIndices = rollupData => Object.keys(rollupData);

export default (AbstractSearchStrategy, RollupSearchRequest, RollupSearchCapabilities) =>
(class RollupSearchStrategy extends AbstractSearchStrategy {
name = 'rollup';
Expand All @@ -20,42 +22,37 @@ export default (AbstractSearchStrategy, RollupSearchRequest, RollupSearchCapabil
super(server, callWithRequestFactory, RollupSearchRequest);
}

getRollupData(req, indexPattern) {
async getRollupData(req, indexPattern) {
const callWithRequest = this.getCallWithRequestInstance(req);
const indices = (indexPattern || '').split(INDEX_PATTERN_SEPARATOR);
const requests = indices.map(index => callWithRequest(ROLLUP_INDEX_CAPABILITIES_METHOD, {
indexPattern: index,
}));

return Promise.all(requests)
.then(data => (data || []).reduce((acc, rollupData) => merge(acc, rollupData), {}));
return await callWithRequest(ROLLUP_INDEX_CAPABILITIES_METHOD, {
indexPattern,
});
}

hasOneRollupIndex(rollupData) {
return Object.keys(rollupData).length === 1;
}

async checkForViability(req, indexPattern) {
async checkForViability(req, indexPattern = DEFAULT_INDEX_PATTERN) {
const rollupData = await this.getRollupData(req, indexPattern);
const isViable = this.hasOneRollupIndex(rollupData);
const rollupIndices = getRollupIndices(rollupData);
const isViable = rollupIndices.length === 1 && indexPattern !== DEFAULT_INDEX_PATTERN;
let capabilities = null;

if (isViable) {
const [rollupIndex] = rollupIndices;
const fieldsCapabilities = getCapabilitiesForRollupIndices(rollupData);

capabilities = new RollupSearchCapabilities(req, indexPattern, batchRequestsSupport, fieldsCapabilities);
capabilities = new RollupSearchCapabilities(req, batchRequestsSupport, fieldsCapabilities, rollupIndex);
}

return {
isViable,
capabilities
capabilities,
};
}

async getFieldsForWildcard(req, indexPattern, { fieldsCapabilities }) {
const fields = await super.getFieldsForWildcard(req, indexPattern);
async getFieldsForWildcard(req, indexPattern, { fieldsCapabilities, rollupIndex }) {
const fields = await super.getFieldsForWildcard(req, indexPattern);

const fieldsFromFieldCapsApi = indexBy(fields, 'name');
const rollupIndexCapabilities = fieldsCapabilities[indexPattern].aggs;
const rollupIndexCapabilities = fieldsCapabilities[rollupIndex].aggs;

return mergeCapabilitiesWithFields(rollupIndexCapabilities, fieldsFromFieldCapsApi);
}
Expand Down

0 comments on commit 4298f0e

Please sign in to comment.