[Vega] Supports runtime fields (#98707)

* [Vega] Support of Runtime Fields

* Refactor es_query_parser

* Refactor es_query_parser

* Remove unnecessary object creation

* Revert tests and move changes related to runtime fields into search_api

* Remove unnecessary code
This commit is contained in:
Diana Derevyankina 2021-05-05 16:33:44 +03:00 committed by GitHub
parent 203c40c945
commit 86b688934a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -6,9 +6,10 @@
* Side Public License, v 1.
*/
import { combineLatest } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { combineLatest, from } from 'rxjs';
import { map, tap, switchMap } from 'rxjs/operators';
import { CoreStart, IUiSettingsClient } from 'kibana/public';
import { getData } from '../services';
import {
getSearchParamsFromRequest,
SearchRequest,
@ -19,6 +20,25 @@ import { search as dataPluginSearch } from '../../../data/public';
import { VegaInspectorAdapters } from '../vega_inspector';
import { RequestResponder } from '../../../inspector/public';
const extendSearchParamsWithRuntimeFields = async (
requestParams: ReturnType<typeof getSearchParamsFromRequest>,
indexPatternString?: string
) => {
if (indexPatternString) {
const indexPattern = (await getData().indexPatterns.find(indexPatternString)).find(
(index) => index.title === indexPatternString
);
const runtimeFields = indexPattern?.getComputedFields().runtimeFields;
return {
...requestParams,
body: { ...requestParams.body, runtime_mappings: runtimeFields },
};
}
return requestParams;
};
export interface SearchAPIDependencies {
uiSettings: IUiSettingsClient;
injectedMetadata: CoreStart['injectedMetadata'];
@ -40,7 +60,7 @@ export class SearchAPI {
return combineLatest(
searchRequests.map((request) => {
const requestId = request.name;
const params = getSearchParamsFromRequest(request, {
const requestParams = getSearchParamsFromRequest(request, {
getConfig: this.dependencies.uiSettings.get.bind(this.dependencies.uiSettings),
});
@ -49,18 +69,25 @@ export class SearchAPI {
...request,
searchSessionId: this.searchSessionId,
});
requestResponders[requestId].json(params.body);
requestResponders[requestId].json(requestParams.body);
}
return search
.search({ params }, { abortSignal: this.abortSignal, sessionId: this.searchSessionId })
.pipe(
tap((data) => this.inspectSearchResult(data, requestResponders[requestId])),
map((data) => ({
name: requestId,
rawResponse: data.rawResponse,
}))
);
return from(extendSearchParamsWithRuntimeFields(requestParams, request.index)).pipe(
switchMap((params) =>
search
.search(
{ params },
{ abortSignal: this.abortSignal, sessionId: this.searchSessionId }
)
.pipe(
tap((data) => this.inspectSearchResult(data, requestResponders[requestId])),
map((data) => ({
name: requestId,
rawResponse: data.rawResponse,
}))
)
)
);
})
);
}