Skip to content

Commit

Permalink
clean up
Browse files Browse the repository at this point in the history
Signed-off-by: Kawika Avilla <kavilla414@gmail.com>
  • Loading branch information
kavilla committed Apr 28, 2024
1 parent d601846 commit 6742fea
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 60 deletions.
6 changes: 6 additions & 0 deletions src/plugins/data/common/data_frames/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ export enum DATA_FRAME_TYPES {
POLLING = 'data_frame_polling',
}

export interface DataFrameService {
get: () => IDataFrame | undefined;
set: (dataFrame: IDataFrame) => Promise<void>;
clear: () => void;
}

export interface IDataFrame {
type?: DATA_FRAME_TYPES.DEFAULT;
name?: string;
Expand Down
7 changes: 5 additions & 2 deletions src/plugins/data/common/data_frames/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ export interface IDataFrameResponse extends SearchResponse<any> {
took: number;
}

export const getRawDataFrame = (searchRequest: IOpenSearchDashboardsSearchRequest) => {
return searchRequest.params?.body?.df;
};

export const getRawQueryString = (
searchRequest: IOpenSearchDashboardsSearchRequest
): string | undefined => {
Expand Down Expand Up @@ -63,8 +67,7 @@ export const convertResult = (response: IDataFrameResponse): SearchResponse<any>
hit[field.name] = field.values[index];
});
hits.push({
_index: data.name ?? '',
_id: '',
_index: data.name,
_source: hit,
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*/

import { UI_SETTINGS } from '../../../constants';
import { GetConfigFn } from '../../../types';
import { GetConfigFn, GetDataFrameFn, DestroyDataFrameFn } from '../../../types';
import { ISearchRequestParams } from '../../index';
import { SearchRequest } from './types';

Expand All @@ -49,16 +49,50 @@ export function getPreference(getConfig: GetConfigFn) {
: undefined;
}

export function getExternalSearchParamsFromRequest(
searchRequest: SearchRequest,
dependencies: {
getConfig: GetConfigFn;
getDataFrame: GetDataFrameFn;
}
): ISearchRequestParams {
const { getConfig, getDataFrame } = dependencies;
const searchParams = getSearchParams(getConfig);
const dataFrame = getDataFrame();
const indexTitle = searchRequest.index.title || searchRequest.index;

return {
index: indexTitle,
body: {
...searchRequest.body,
...(dataFrame && dataFrame?.name === indexTitle ? { df: dataFrame } : {}),
},
...searchParams,
};
}

/** @public */
// TODO: Could provide this on runtime contract with dependencies
// already wired up.
export function getSearchParamsFromRequest(
searchRequest: SearchRequest,
dependencies: { getConfig: GetConfigFn }
dependencies: {
getConfig: GetConfigFn;
getDataFrame?: GetDataFrameFn;
destroyDataFrame?: DestroyDataFrameFn;
}
): ISearchRequestParams {
const { getConfig } = dependencies;
const { getConfig, getDataFrame, destroyDataFrame } = dependencies;
const searchParams = getSearchParams(getConfig);

if (getDataFrame && destroyDataFrame) {
if (getDataFrame()) {
delete searchRequest.body.df;
delete searchRequest.indexType;
destroyDataFrame();
}
}

return {
index: searchRequest.index.title || searchRequest.index,
body: searchRequest.body,
Expand Down
7 changes: 6 additions & 1 deletion src/plugins/data/common/search/search_source/fetch/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@
* under the License.
*/

export { getSearchParams, getSearchParamsFromRequest, getPreference } from './get_search_params';
export {
getSearchParams,
getExternalSearchParamsFromRequest,
getSearchParamsFromRequest,
getPreference,
} from './get_search_params';
export { RequestFailure } from './request_error';
export * from './types';
33 changes: 21 additions & 12 deletions src/plugins/data/common/search/search_source/search_source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,13 @@ import { DATA_FRAME_TYPES, IDataFrame, IDataFrameResponse, convertResult } from
import { IOpenSearchSearchRequest, IOpenSearchSearchResponse, ISearchOptions } from '../..';
import { IOpenSearchDashboardsSearchRequest, IOpenSearchDashboardsSearchResponse } from '../types';
import { ISearchSource, SearchSourceOptions, SearchSourceFields } from './types';
import { FetchHandlers, RequestFailure, getSearchParamsFromRequest, SearchRequest } from './fetch';
import {
FetchHandlers,
RequestFailure,
getExternalSearchParamsFromRequest,
getSearchParamsFromRequest,
SearchRequest,
} from './fetch';

import {
getOpenSearchQueryConfig,
Expand Down Expand Up @@ -286,17 +292,26 @@ export class SearchSource {

/**
* Set the data frame of this SearchSource
*
* @async
* @return {undefined|IDataFrame}
*/
async setDataFrame(dataFrame: IDataFrame | undefined) {
if (dataFrame) {
await this.dependencies.df.set(dataFrame);
} else {
this.dependencies.df.clear();
this.destroyDataFrame();
}
return this.getDataFrame();
}

/**
* Clear the data frame of this SearchSource
*/
destroyDataFrame() {
this.dependencies.df.clear();
}

/**
* Fetch this source and reject the returned Promise on error
*
Expand Down Expand Up @@ -367,13 +382,10 @@ export class SearchSource {
private fetchSearch(searchRequest: SearchRequest, options: ISearchOptions) {
const { search, getConfig, onResponse } = this.dependencies;

if (this.getDataFrame()) {
delete searchRequest.body!.df;
this.setDataFrame(undefined);
}

const params = getSearchParamsFromRequest(searchRequest, {
getConfig,
getDataFrame: this.getDataFrame.bind(this),
destroyDataFrame: this.destroyDataFrame.bind(this),
});

return search(
Expand All @@ -389,14 +401,11 @@ export class SearchSource {
private async fetchExternalSearch(searchRequest: SearchRequest, options: ISearchOptions) {
const { search, getConfig, onResponse } = this.dependencies;

const params = getSearchParamsFromRequest(searchRequest, {
const params = getExternalSearchParamsFromRequest(searchRequest, {
getConfig,
getDataFrame: this.getDataFrame.bind(this),
});

if (this.getDataFrame() && this.getDataFrame()!.name === searchRequest.index) {
params.body!.df = this.getDataFrame();
}

return search({ params }, options).then(async (response: any) => {
if (response.hasOwnProperty('type')) {
if ((response as IDataFrameResponse).type === DATA_FRAME_TYPES.DEFAULT) {
Expand Down
4 changes: 4 additions & 0 deletions src/plugins/data/common/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
* under the License.
*/

import { IDataFrame } from './data_frames';

export * from './query/types';
export * from './osd_field_types/types';
export * from './index_patterns/types';
Expand All @@ -44,3 +46,5 @@ export * from './data_frames/types';
* not possible.
*/
export type GetConfigFn = <T = any>(key: string, defaultOverride?: T) => T;
export type GetDataFrameFn = () => IDataFrame | undefined;
export type DestroyDataFrameFn = () => void;
47 changes: 27 additions & 20 deletions src/plugins/data/public/search/search_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,12 @@ import {
} from '../../common/search/aggs/buckets/shard_delay';
import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn';
import {
DataFrameService,
IDataFrame,
IDataFrameResponse,
createDataFrameCache,
dataFrameToSpec,
} from '../../common';
} from '../../common/data_frames';

/** @internal */
export interface SearchServiceSetupDependencies {
Expand Down Expand Up @@ -138,6 +139,29 @@ export class SearchService implements Plugin<ISearchSetup, ISearchStart> {
const loadingCount$ = new BehaviorSubject(0);
http.addLoadingCountSource(loadingCount$);

const dfService: DataFrameService = {
get: () => this.dfCache.get(),
set: async (dataFrame: IDataFrame) => {
if (this.dfCache.get() && this.dfCache.get()?.name !== dataFrame.name) {
indexPatterns.clearCache(this.dfCache.get()!.name, false);
}
this.dfCache.set(dataFrame);
const existingIndexPattern = indexPatterns.getByTitle(dataFrame.name!, true);
const dataSet = await indexPatterns.create(
dataFrameToSpec(dataFrame, existingIndexPattern?.id),
!existingIndexPattern?.id
);
// save to cache by title because the id is not unique for temporary index pattern created
indexPatterns.saveToCache(dataSet.title, dataSet);
},
clear: () => {
if (this.dfCache.get() === undefined) return;
// name because the id is not unique for temporary index pattern created
indexPatterns.clearCache(this.dfCache.get()!.name, false);
this.dfCache.clear();
},
};

const searchSourceDependencies: SearchSourceDependencies = {
getConfig: uiSettings.get.bind(uiSettings),
search: <
Expand All @@ -156,25 +180,7 @@ export class SearchService implements Plugin<ISearchSetup, ISearchStart> {
callMsearch: getCallMsearch({ http }),
loadingCount$,
},
df: {
get: () => this.dfCache.get(),
set: async (dataFrame: IDataFrame) => {
this.dfCache.set(dataFrame);
const existingIndexPattern = indexPatterns.getByTitle(dataFrame.name!, true);
const dataSet = await indexPatterns.create(
dataFrameToSpec(dataFrame, existingIndexPattern?.id),
!existingIndexPattern?.id
);
// save to cache by title because the id is not unique for temporary index pattern created
indexPatterns.saveToCache(dataSet.title, dataSet);
},
clear: () => {
if (this.dfCache.get() === undefined) return;
// name because the id is not unique for temporary index pattern created
indexPatterns.clearCache(this.dfCache.get()!.name, false);
this.dfCache.clear();
},
},
df: dfService,
};

return {
Expand All @@ -188,6 +194,7 @@ export class SearchService implements Plugin<ISearchSetup, ISearchStart> {
this.searchInterceptor = enhancements.searchInterceptor;
},
getDefaultSearchInterceptor: () => this.defaultSearchInterceptor,
df: dfService,
};
}

Expand Down
2 changes: 2 additions & 0 deletions src/plugins/data/public/search/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { AggsSetup, AggsSetupDependencies, AggsStartDependencies, AggsStart } fr
import { ISearchGeneric, ISearchStartSearchSource } from '../../common/search';
import { IndexPatternsContract } from '../../common/index_patterns/index_patterns';
import { UsageCollectionSetup } from '../../../usage_collection/public';
import { DataFrameService } from '../../common/data_frames';

export { ISearchStartSearchSource };

Expand Down Expand Up @@ -80,6 +81,7 @@ export interface ISearchStart {
searchSource: ISearchStartSearchSource;
__enhance: (enhancements: SearchEnhancements) => void;
getDefaultSearchInterceptor: () => ISearchInterceptor;
df: DataFrameService;
}

export { SEARCH_EVENT_TYPE } from './collectors';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ export function QueryLanguageSwitcher(props: Props) {
? queryEnhancement.search
: searchService.getDefaultSearchInterceptor(),
});

if (!queryEnhancement) {
searchService.df.clear();
}
uiService.Settings.setUiOverridesByUserQueryLanguage(queryLanguage);
};

Expand Down
44 changes: 25 additions & 19 deletions src/plugins/data/server/search/search_service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ import {
import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn';
import { ConfigSchema } from '../../config';
import {
DataFrameService,
IDataFrame,
IDataFrameResponse,
createDataFrameCache,
Expand Down Expand Up @@ -211,6 +212,29 @@ export class SearchService implements Plugin<ISearchSetup, ISearchStart> {
searchSourceRequiredUiSettings
);

const dfService: DataFrameService = {
get: () => this.dfCache.get(),
set: async (dataFrame: IDataFrame) => {
if (this.dfCache.get() && this.dfCache.get()?.name !== dataFrame.name) {
scopedIndexPatterns.clearCache(this.dfCache.get()!.name, false);
}
this.dfCache.set(dataFrame);
const existingIndexPattern = scopedIndexPatterns.getByTitle(dataFrame.name!, true);
const dataSet = await scopedIndexPatterns.create(
dataFrameToSpec(dataFrame, existingIndexPattern?.id),
!existingIndexPattern?.id
);
// save to cache by title because the id is not unique for temporary index pattern created
scopedIndexPatterns.saveToCache(dataSet.title, dataSet);
},
clear: () => {
if (this.dfCache.get() === undefined) return;
// name because the id is not unique for temporary index pattern created
scopedIndexPatterns.clearCache(this.dfCache.get()!.name, false);
this.dfCache.clear();
},
};

const searchSourceDependencies: SearchSourceDependencies = {
getConfig: <T = any>(key: string): T => uiSettingsCache[key],
search: (searchRequest, options) => {
Expand Down Expand Up @@ -245,25 +269,7 @@ export class SearchService implements Plugin<ISearchSetup, ISearchStart> {
}),
loadingCount$: new BehaviorSubject(0),
},
df: {
get: () => this.dfCache.get(),
set: async (dataFrame: IDataFrame) => {
this.dfCache.set(dataFrame);
const existingIndexPattern = scopedIndexPatterns.getByTitle(dataFrame.name!, true);
const dataSet = await scopedIndexPatterns.create(
dataFrameToSpec(dataFrame, existingIndexPattern?.id),
!existingIndexPattern?.id
);
// save to cache by title because the id is not unique for temporary index pattern created
scopedIndexPatterns.saveToCache(dataSet.title, dataSet);
},
clear: () => {
if (this.dfCache.get() === undefined) return;
// name because the id is not unique for temporary index pattern created
scopedIndexPatterns.clearCache(this.dfCache.get()!.name, false);
this.dfCache.clear();
},
},
df: dfService,
};

return this.searchSourceService.start(scopedIndexPatterns, searchSourceDependencies);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@ export const updateSearchSource = async ({
}: Props) => {
const { uiSettings, data } = services;
let dataSet = indexPattern;
const dataFrame = searchSource?.getDataFrame();
if (
searchSource &&
searchSource.getDataFrame() &&
dataSet.title !== searchSource.getDataFrame()?.name
dataFrame &&
dataFrame.name &&
dataFrame.name !== '' &&
dataSet.title !== dataFrame.name
) {
dataSet = data.indexPatterns.getByTitle(searchSource.getDataFrame()?.name!, true) ?? dataSet;
dataSet = data.indexPatterns.getByTitle(dataFrame.name, true) ?? dataSet;
searchSource.setField('index', dataSet);
}

Expand Down

0 comments on commit 6742fea

Please sign in to comment.