From 4298f0e7925b63dbd700e1c3d780567dc635ce4f Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Wed, 23 Jan 2019 19:01:54 +0300 Subject: [PATCH] Add merge rollup capabilities with fields - small fixes --- .../default_search_capabilities.js | 3 +- .../strategies/default_search_strategy.js | 4 +- .../rollup_search_capabilities.js | 7 ++-- .../rollup_search_strategy.js | 39 +++++++++---------- 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/legacy/core_plugins/metrics/server/lib/search_strategies/default_search_capabilities.js b/src/legacy/core_plugins/metrics/server/lib/search_strategies/default_search_capabilities.js index be0ff7be13d398..1cd5ebe1219109 100644 --- a/src/legacy/core_plugins/metrics/server/lib/search_strategies/default_search_capabilities.js +++ b/src/legacy/core_plugins/metrics/server/lib/search_strategies/default_search_capabilities.js @@ -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; diff --git a/src/legacy/core_plugins/metrics/server/lib/search_strategies/strategies/default_search_strategy.js b/src/legacy/core_plugins/metrics/server/lib/search_strategies/strategies/default_search_strategy.js index a6b8193fdd19fc..a5f1f8d8a5e663 100644 --- a/src/legacy/core_plugins/metrics/server/lib/search_strategies/strategies/default_search_strategy.js +++ b/src/legacy/core_plugins/metrics/server/lib/search_strategies/strategies/default_search_strategy.js @@ -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) }; } } diff --git a/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_capabilities.js b/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_capabilities.js index 685db48c75c3e8..d5a94cd2018ce0 100644 --- a/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_capabilities.js +++ b/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_capabilities.js @@ -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(); } @@ -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]; diff --git a/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_strategy.js b/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_strategy.js index b004cdd45d8e99..05545732c9ca57 100644 --- a/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_strategy.js +++ b/x-pack/plugins/rollup/server/lib/search_strategies/rollup_search_strategy.js @@ -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'; @@ -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); }