diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md
new file mode 100644
index 0000000000000..8fac5cf4d7a9e
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.es_search_strategy.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [ES\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-server.es_search_strategy.md)
+
+## ES\_SEARCH\_STRATEGY variable
+
+Signature:
+
+```typescript
+ES_SEARCH_STRATEGY = "es"
+```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md
index 62d954cb80eb7..577532d22b3d3 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md
@@ -16,5 +16,5 @@ export interface ISearchStartAggsStart | |
| [getSearchStrategy](./kibana-plugin-plugins-data-server.isearchstart.getsearchstrategy.md) | (name: string) => ISearchStrategy<SearchStrategyRequest, SearchStrategyResponse>
| Get other registered search strategies. For example, if a new strategy needs to use the already-registered ES search strategy, it can use this function to accomplish that. |
-| [search](./kibana-plugin-plugins-data-server.isearchstart.search.md) | (context: RequestHandlerContext, request: IKibanaSearchRequest, options: ISearchOptions) => Promise<IKibanaSearchResponse>
| |
+| [search](./kibana-plugin-plugins-data-server.isearchstart.search.md) | (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise<IEsSearchResponse>
| |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md
index 1c2ae91699559..33ca818afc769 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.search.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-search: (context: RequestHandlerContext, request: IKibanaSearchRequest, options: ISearchOptions) => Promise;
+search: (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise;
```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
index 0292e08063fbb..70c32adeab9fd 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
@@ -71,6 +71,7 @@
| [AggGroupNames](./kibana-plugin-plugins-data-server.agggroupnames.md) | |
| [castEsToKbnFieldTypeName](./kibana-plugin-plugins-data-server.castestokbnfieldtypename.md) | Get the KbnFieldType name for an esType string |
| [config](./kibana-plugin-plugins-data-server.config.md) | |
+| [ES\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-server.es_search_strategy.md) | |
| [esFilters](./kibana-plugin-plugins-data-server.esfilters.md) | |
| [esKuery](./kibana-plugin-plugins-data-server.eskuery.md) | |
| [esQuery](./kibana-plugin-plugins-data-server.esquery.md) | |
diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts
index f300fb0779e38..71ed83290e697 100644
--- a/src/plugins/data/server/index.ts
+++ b/src/plugins/data/server/index.ts
@@ -201,6 +201,7 @@ export {
ISearchOptions,
IEsSearchRequest,
IEsSearchResponse,
+ ES_SEARCH_STRATEGY,
// tabify
TabbedAggColumn,
TabbedAggRow,
diff --git a/src/plugins/data/server/search/routes/search.test.ts b/src/plugins/data/server/search/routes/search.test.ts
index e2518acd7d505..d4404c318ab47 100644
--- a/src/plugins/data/server/search/routes/search.test.ts
+++ b/src/plugins/data/server/search/routes/search.test.ts
@@ -48,7 +48,24 @@ describe('Search service', () => {
});
it('handler calls context.search.search with the given request and strategy', async () => {
- const response = { id: 'yay' };
+ const response = {
+ id: 'yay',
+ rawResponse: {
+ took: 100,
+ timed_out: true,
+ _shards: {
+ total: 0,
+ successful: 0,
+ failed: 0,
+ skipped: 0,
+ },
+ hits: {
+ total: 0,
+ max_score: 0,
+ hits: [],
+ },
+ },
+ };
mockDataStart.search.search.mockResolvedValue(response);
const mockContext = {};
const mockBody = { id: undefined, params: {} };
diff --git a/src/plugins/data/server/search/types.ts b/src/plugins/data/server/search/types.ts
index 6ce8430d0573b..b2b958454de48 100644
--- a/src/plugins/data/server/search/types.ts
+++ b/src/plugins/data/server/search/types.ts
@@ -18,7 +18,7 @@
*/
import { RequestHandlerContext } from '../../../../core/server';
-import { IKibanaSearchResponse, IKibanaSearchRequest, ISearchOptions } from '../../common/search';
+import { ISearchOptions } from '../../common/search';
import { AggsSetup, AggsStart } from './aggs';
import { SearchUsage } from './collectors/usage';
import { IEsSearchRequest, IEsSearchResponse } from './es_search';
@@ -66,9 +66,9 @@ export interface ISearchStart<
) => ISearchStrategy;
search: (
context: RequestHandlerContext,
- request: IKibanaSearchRequest,
+ request: IEsSearchRequest,
options: ISearchOptions
- ) => Promise;
+ ) => Promise;
}
/**
diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md
index 93f924493c3b4..a4f5f590e1774 100644
--- a/src/plugins/data/server/server.api.md
+++ b/src/plugins/data/server/server.api.md
@@ -323,6 +323,11 @@ export enum ES_FIELD_TYPES {
_TYPE = "_type"
}
+// Warning: (ae-missing-release-tag) "ES_SEARCH_STRATEGY" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
+//
+// @public (undocumented)
+export const ES_SEARCH_STRATEGY = "es";
+
// Warning: (ae-forgotten-export) The symbol "ExpressionFunctionDefinition" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "Input" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "Arguments" needs to be exported by the entry point index.d.ts
@@ -710,7 +715,7 @@ export interface ISearchStart Promise;
+ search: (context: RequestHandlerContext, request: IEsSearchRequest, options: ISearchOptions) => Promise;
}
// Warning: (ae-missing-release-tag) "ISearchStrategy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
@@ -1086,19 +1091,19 @@ export function usageProvider(core: CoreSetup_2): SearchUsage;
// src/plugins/data/server/index.ts:101:26 - (ae-forgotten-export) The symbol "TruncateFormat" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isFilterable" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/index.ts:127:27 - (ae-forgotten-export) The symbol "isNestedField" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:221:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:223:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:224:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:233:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:234:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:235:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:239:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:240:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:244:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts
-// src/plugins/data/server/index.ts:247:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:222:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:224:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:225:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:234:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:235:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:236:1 - (ae-forgotten-export) The symbol "Ipv4Address" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:240:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:241:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:245:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts
+// src/plugins/data/server/index.ts:248:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts
// src/plugins/data/server/plugin.ts:88:66 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts
// (No @packageDocumentation comment for this package)
diff --git a/src/plugins/vis_type_timelion/server/plugin.ts b/src/plugins/vis_type_timelion/server/plugin.ts
index 5e6557e305692..52c50b0646299 100644
--- a/src/plugins/vis_type_timelion/server/plugin.ts
+++ b/src/plugins/vis_type_timelion/server/plugin.ts
@@ -22,6 +22,7 @@ import { first } from 'rxjs/operators';
import { TypeOf, schema } from '@kbn/config-schema';
import { RecursiveReadonly } from '@kbn/utility-types';
+import { PluginStart } from '../../../../src/plugins/data/server';
import { CoreSetup, PluginInitializerContext } from '../../../../src/core/server';
import { deepFreeze } from '../../../../src/core/server';
import { configSchema } from '../config';
@@ -42,6 +43,10 @@ export interface PluginSetupContract {
uiEnabled: boolean;
}
+export interface TimelionPluginStartDeps {
+ data: PluginStart;
+}
+
/**
* Represents Timelion Plugin instance that will be managed by the Kibana plugin system.
*/
@@ -80,11 +85,12 @@ export class Plugin {
functions,
getFunction,
logger,
+ core,
};
functionsRoute(router, deps);
runRoute(router, deps);
- validateEsRoute(router);
+ validateEsRoute(router, core);
core.uiSettings.register({
'timelion:es.timefield': {
diff --git a/src/plugins/vis_type_timelion/server/routes/run.ts b/src/plugins/vis_type_timelion/server/routes/run.ts
index b8cefc8a07f28..19bb5238f9de0 100644
--- a/src/plugins/vis_type_timelion/server/routes/run.ts
+++ b/src/plugins/vis_type_timelion/server/routes/run.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { IRouter, Logger } from 'kibana/server';
+import { IRouter, Logger, CoreSetup } from 'kibana/server';
import { schema } from '@kbn/config-schema';
import Bluebird from 'bluebird';
import _ from 'lodash';
@@ -37,10 +37,12 @@ export function runRoute(
logger,
getFunction,
configManager,
+ core,
}: {
logger: Logger;
getFunction: (name: string) => TimelionFunctionInterface;
configManager: ConfigManager;
+ core: CoreSetup;
}
) {
router.post(
@@ -81,13 +83,14 @@ export function runRoute(
const uiSettings = await context.core.uiSettings.client.getAll();
const tlConfig = getTlConfig({
+ context,
request,
settings: _.defaults(uiSettings, timelionDefaults), // Just in case they delete some setting.
getFunction,
+ getStartServices: core.getStartServices,
allowedGraphiteUrls: configManager.getGraphiteUrls(),
esShardTimeout: configManager.getEsShardTimeout(),
savedObjectsClient: context.core.savedObjects.client,
- esDataClient: () => context.core.elasticsearch.legacy.client,
});
const chainRunner = chainRunnerFn(tlConfig);
const sheet = await Bluebird.all(chainRunner.processRequest(request.body));
diff --git a/src/plugins/vis_type_timelion/server/routes/validate_es.ts b/src/plugins/vis_type_timelion/server/routes/validate_es.ts
index d5ce80dc151a2..ea08310499a96 100644
--- a/src/plugins/vis_type_timelion/server/routes/validate_es.ts
+++ b/src/plugins/vis_type_timelion/server/routes/validate_es.ts
@@ -18,9 +18,11 @@
*/
import _ from 'lodash';
-import { IRouter } from 'kibana/server';
+import { IRouter, CoreSetup } from 'kibana/server';
+import { ES_SEARCH_STRATEGY } from '../../../data/server';
+import { TimelionPluginStartDeps } from '../plugin';
-export function validateEsRoute(router: IRouter) {
+export function validateEsRoute(router: IRouter, core: CoreSetup) {
router.get(
{
path: '/api/timelion/validate/es',
@@ -28,33 +30,37 @@ export function validateEsRoute(router: IRouter) {
},
async function (context, request, response) {
const uiSettings = await context.core.uiSettings.client.getAll();
-
- const { callAsCurrentUser } = context.core.elasticsearch.legacy.client;
+ const deps = (await core.getStartServices())[1] as TimelionPluginStartDeps;
const timefield = uiSettings['timelion:es.timefield'];
const body = {
- index: uiSettings['es.default_index'],
- body: {
- aggs: {
- maxAgg: {
- max: {
- field: timefield,
+ params: {
+ index: uiSettings['es.default_index'],
+ body: {
+ aggs: {
+ maxAgg: {
+ max: {
+ field: timefield,
+ },
},
- },
- minAgg: {
- min: {
- field: timefield,
+ minAgg: {
+ min: {
+ field: timefield,
+ },
},
},
+ size: 0,
},
- size: 0,
},
};
- let resp = {};
+ let resp;
try {
- resp = await callAsCurrentUser('search', body);
+ resp = await deps.data.search.search(context, body, {
+ strategy: ES_SEARCH_STRATEGY,
+ });
+ resp = resp.rawResponse;
} catch (errResp) {
resp = errResp;
}
diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js b/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js
index a624ff72ead69..4b5aab85cfc4e 100644
--- a/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js
+++ b/src/plugins/vis_type_timelion/server/series_functions/es/es.test.js
@@ -25,7 +25,6 @@ import buildRequest from './lib/build_request';
import createDateAgg from './lib/create_date_agg';
import esResponse from '../fixtures/es_response';
-import Bluebird from 'bluebird';
import _ from 'lodash';
import { expect } from 'chai';
import sinon from 'sinon';
@@ -34,14 +33,14 @@ import { UI_SETTINGS } from '../../../../data/server';
function stubRequestAndServer(response, indexPatternSavedObjects = []) {
return {
- esDataClient: sinon.stub().returns({
- callAsCurrentUser: function () {
- return Bluebird.resolve(response);
- },
- }),
+ getStartServices: sinon
+ .stub()
+ .returns(
+ Promise.resolve([{}, { data: { search: { search: () => Promise.resolve(response) } } }])
+ ),
savedObjectsClient: {
find: function () {
- return Bluebird.resolve({
+ return Promise.resolve({
saved_objects: indexPatternSavedObjects,
});
},
@@ -55,7 +54,9 @@ describe('es', () => {
describe('seriesList processor', () => {
it('throws an error then the index is missing', () => {
tlConfig = stubRequestAndServer({
- _shards: { total: 0 },
+ rawResponse: {
+ _shards: { total: 0 },
+ },
});
return invoke(es, [5], tlConfig)
.then(expect.fail)
@@ -65,7 +66,7 @@ describe('es', () => {
});
it('returns a seriesList', () => {
- tlConfig = stubRequestAndServer(esResponse);
+ tlConfig = stubRequestAndServer({ rawResponse: esResponse });
return invoke(es, [5], tlConfig).then((r) => {
expect(r.output.type).to.eql('seriesList');
});
@@ -168,22 +169,22 @@ describe('es', () => {
config.index = 'beer';
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.index).to.equal('beer');
+ expect(request.params.index).to.equal('beer');
});
it('always sets body.size to 0', () => {
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.body.size).to.equal(0);
+ expect(request.params.body.size).to.equal(0);
});
it('creates a filters agg that contains each of the queries passed', () => {
config.q = ['foo', 'bar'];
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.body.aggs.q.meta.type).to.equal('split');
+ expect(request.params.body.aggs.q.meta.type).to.equal('split');
- const filters = request.body.aggs.q.filters.filters;
+ const filters = request.params.body.aggs.q.filters.filters;
expect(filters.foo.query_string.query).to.eql('foo');
expect(filters.bar.query_string.query).to.eql('bar');
});
@@ -193,14 +194,14 @@ describe('es', () => {
config.index = 'beer';
const request = fn(config, tlConfig, emptyScriptedFields, 30000);
- expect(request.timeout).to.equal('30000ms');
+ expect(request.params.timeout).to.equal('30000ms');
});
it('sets no timeout if elasticsearch.shardTimeout is set to 0', () => {
config.index = 'beer';
const request = fn(config, tlConfig, emptyScriptedFields, 0);
- expect(request).to.not.have.property('timeout');
+ expect(request.params).to.not.have.property('timeout');
});
});
@@ -220,7 +221,7 @@ describe('es', () => {
tlConfig.settings[UI_SETTINGS.SEARCH_INCLUDE_FROZEN] = false;
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.ignore_throttled).to.equal(true);
+ expect(request.params.ignore_throttled).to.equal(true);
});
it('sets no timeout if elasticsearch.shardTimeout is set to 0', () => {
@@ -228,7 +229,7 @@ describe('es', () => {
config.index = 'beer';
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.ignore_throttled).to.equal(false);
+ expect(request.params.ignore_throttled).to.equal(false);
});
});
@@ -262,7 +263,7 @@ describe('es', () => {
it('adds the contents of body.extended.es.filter to a filter clause of the bool', () => {
config.kibana = true;
const request = fn(config, tlConfig, emptyScriptedFields);
- const filter = request.body.query.bool.filter.bool;
+ const filter = request.params.body.query.bool.filter.bool;
expect(filter.must.length).to.eql(1);
expect(filter.must_not.length).to.eql(2);
});
@@ -270,13 +271,13 @@ describe('es', () => {
it('does not include filters if config.kibana = false', () => {
config.kibana = false;
const request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.body.query.bool.filter).to.eql(undefined);
+ expect(request.params.body.query.bool.filter).to.eql(undefined);
});
it('adds a time filter to the bool querys must clause', () => {
let request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.body.query.bool.must.length).to.eql(1);
- expect(request.body.query.bool.must[0]).to.eql({
+ expect(request.params.body.query.bool.must.length).to.eql(1);
+ expect(request.params.body.query.bool.must[0]).to.eql({
range: {
'@timestamp': {
format: 'strict_date_optional_time',
@@ -288,7 +289,7 @@ describe('es', () => {
config.kibana = true;
request = fn(config, tlConfig, emptyScriptedFields);
- expect(request.body.query.bool.must.length).to.eql(1);
+ expect(request.params.body.query.bool.must.length).to.eql(1);
});
});
@@ -297,7 +298,7 @@ describe('es', () => {
config.split = ['beer:5', 'wine:10'];
const request = fn(config, tlConfig, emptyScriptedFields);
- const aggs = request.body.aggs.q.aggs;
+ const aggs = request.params.body.aggs.q.aggs;
expect(aggs.beer.meta.type).to.eql('split');
expect(aggs.beer.terms.field).to.eql('beer');
@@ -324,7 +325,7 @@ describe('es', () => {
];
const request = fn(config, tlConfig, scriptedFields);
- const aggs = request.body.aggs.q.aggs;
+ const aggs = request.params.body.aggs.q.aggs;
expect(aggs.scriptedBeer.meta.type).to.eql('split');
expect(aggs.scriptedBeer.terms.script).to.eql({
diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/index.js b/src/plugins/vis_type_timelion/server/series_functions/es/index.js
index fd392f599c1d2..bfa8d75900d11 100644
--- a/src/plugins/vis_type_timelion/server/series_functions/es/index.js
+++ b/src/plugins/vis_type_timelion/server/series_functions/es/index.js
@@ -19,6 +19,7 @@
import { i18n } from '@kbn/i18n';
import _ from 'lodash';
+import { ES_SEARCH_STRATEGY } from '../../../../data/server';
import Datasource from '../../lib/classes/datasource';
import buildRequest from './lib/build_request';
import toSeriesList from './lib/agg_response_to_series_list';
@@ -129,9 +130,13 @@ export default new Datasource('es', {
const body = buildRequest(config, tlConfig, scriptedFields, esShardTimeout);
- const { callAsCurrentUser: callWithRequest } = tlConfig.esDataClient();
- const resp = await callWithRequest('search', body);
- if (!resp._shards.total) {
+ const deps = (await tlConfig.getStartServices())[1];
+
+ const resp = await deps.data.search.search(tlConfig.context, body, {
+ strategy: ES_SEARCH_STRATEGY,
+ });
+
+ if (!resp.rawResponse._shards.total) {
throw new Error(
i18n.translate('timelion.serverSideErrors.esFunction.indexNotFoundErrorMessage', {
defaultMessage: 'Elasticsearch index not found: {index}',
@@ -143,7 +148,7 @@ export default new Datasource('es', {
}
return {
type: 'seriesList',
- list: toSeriesList(resp.aggregations, config),
+ list: toSeriesList(resp.rawResponse.aggregations, config),
};
},
});
diff --git a/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js b/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js
index e407636c41567..a8a7be6fd8609 100644
--- a/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js
+++ b/src/plugins/vis_type_timelion/server/series_functions/es/lib/build_request.js
@@ -93,5 +93,7 @@ export default function buildRequest(config, tlConfig, scriptedFields, timeout)
request.timeout = `${timeout}ms`;
}
- return request;
+ return {
+ params: request,
+ };
}
diff --git a/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js b/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js
index 6107a2845a7cc..38d70278fbf00 100644
--- a/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js
+++ b/src/plugins/vis_type_timelion/server/series_functions/fixtures/tl_config.js
@@ -30,11 +30,15 @@ export default function () {
if (!functions[name]) throw new Error('No such function: ' + name);
return functions[name];
},
- esDataClient: sinon.stub().returns({
- callAsCurrentUser: function () {
- return Promise.resolve(esResponse);
- },
- }),
+ getStartServices: sinon
+ .stub()
+ .returns(
+ Promise.resolve([
+ {},
+ { data: { search: { search: () => Promise.resolve({ rawResponse: esResponse }) } } },
+ ])
+ ),
+
esShardTimeout: moment.duration(30000),
allowedGraphiteUrls: ['https://www.hostedgraphite.com/UID/ACCESS_KEY/graphite'],
});