Skip to content

Commit

Permalink
Move decideClient and decideLegacy client to data source plugin util
Browse files Browse the repository at this point in the history
Signed-off-by: Zhongnan Su <[email protected]>
  • Loading branch information
zhongnansu committed Jun 24, 2024
1 parent 7f0e9d0 commit 19a3a79
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 44 deletions.
1 change: 0 additions & 1 deletion src/plugins/data/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ export {
FieldDescriptor as IndexPatternFieldDescriptor,
shouldReadFieldFromDocValues, // used only in logstash_fields fixture
FieldDescriptor,
decideClient,
} from './index_patterns';

export {
Expand Down
1 change: 0 additions & 1 deletion src/plugins/data/server/index_patterns/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,3 @@
export * from './utils';
export { IndexPatternsFetcher, FieldDescriptor, shouldReadFieldFromDocValues } from './fetcher';
export { IndexPatternsService, IndexPatternsServiceStart } from './index_patterns_service';
export { decideClient } from './routes';
21 changes: 4 additions & 17 deletions src/plugins/data/server/index_patterns/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,9 @@
*/

import { schema } from '@osd/config-schema';
import {
HttpServiceSetup,
LegacyAPICaller,
RequestHandlerContext,
} from 'opensearch-dashboards/server';
import { HttpServiceSetup, RequestHandlerContext } from 'opensearch-dashboards/server';
import { IndexPatternsFetcher } from './fetcher';
import { decideLegacyClient } from '../../../data_source/server';

export function registerRoutes(http: HttpServiceSetup) {
const parseMetaFields = (metaFields: string | string[]) => {
Expand Down Expand Up @@ -62,7 +59,7 @@ export function registerRoutes(http: HttpServiceSetup) {
},
},
async (context, request, response) => {
const callAsCurrentUser = await decideClient(context, request);
const callAsCurrentUser = await decideLegacyClient(context, request);
const indexPatterns = new IndexPatternsFetcher(callAsCurrentUser);
const { pattern, meta_fields: metaFields } = request.query;

Expand Down Expand Up @@ -122,7 +119,7 @@ export function registerRoutes(http: HttpServiceSetup) {
},
},
async (context: RequestHandlerContext, request: any, response: any) => {
const callAsCurrentUser = await decideClient(context, request);
const callAsCurrentUser = await decideLegacyClient(context, request);

const indexPatterns = new IndexPatternsFetcher(callAsCurrentUser);
const { pattern, interval, look_back: lookBack, meta_fields: metaFields } = request.query;
Expand Down Expand Up @@ -154,13 +151,3 @@ export function registerRoutes(http: HttpServiceSetup) {
}
);
}

export const decideClient = async (
context: RequestHandlerContext,
request: any
): Promise<LegacyAPICaller> => {
const dataSourceId = request.query.data_source;
return dataSourceId
? (context.dataSource.opensearch.legacy.getClient(dataSourceId).callAPI as LegacyAPICaller)
: context.core.opensearch.legacy.client.callAsCurrentUser;
};
21 changes: 0 additions & 21 deletions src/plugins/data/server/search/opensearch_search/decide_client.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import {
getShardTimeout,
shimAbortSignal,
} from '..';
import { decideClient } from './decide_client';
import { decideClient } from '../../../../data_source/server';

export const opensearchSearchStrategyProvider = (
config$: Observable<SharedGlobalConfig>,
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/data_source/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ export {
DataSourcePluginSetup,
DataSourcePluginStart,
DataSourcePluginRequestContext,
DataSourceError,
} from './types';

export { decideClient, decideLegacyClient } from './util/decide_client';
74 changes: 74 additions & 0 deletions src/plugins/data_source/server/util/decide_client.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { coreMock } from '../../../../core/server/mocks';
import { RequestHandlerContext } from '../../../../core/server';
import { IOpenSearchSearchRequest } from '../../../data/server';
import { decideClient, decideLegacyClient } from './decide_client';

const context: RequestHandlerContext = {
core: {
...coreMock.createRequestHandlerContext(),
},
dataSource: {
opensearch: {
getClient: jest.fn(),
legacy: {
getClient: jest.fn(),
},
},
},
};

describe('decideClient', () => {
const request: IOpenSearchSearchRequest = {
dataSourceId: 'dataSourceId',
};

it('should return defaultOpenSearchClient when dataSourceId is not provided', async () => {
const result = await decideClient(context, { ...request, dataSourceId: undefined });
expect(result).toBe(context.core.opensearch.client.asCurrentUser);
});

it('should return defaultOpenSearchClientWithLongNumeralsSupport when withLongNumeralsSupport is true', async () => {
const result = await decideClient(context, { ...request, dataSourceId: undefined }, true);
expect(result).toBe(context.core.opensearch.client.asCurrentUserWithLongNumeralsSupport);
});

it('should return client from dataSource when dataSourceId is provided', async () => {
const dataSourceClient = jest.fn();
(context.dataSource.opensearch.getClient as jest.Mock).mockResolvedValueOnce(dataSourceClient);

const result = await decideClient(context, request);
expect(result).toBe(dataSourceClient);
expect(context.dataSource.opensearch.getClient).toHaveBeenCalledWith(request.dataSourceId);
});
});

describe('decideLegacyClient', () => {
const request = {
query: {
data_source: 'dataSourceId',
},
};

it('should return callAsCurrentUser when dataSourceId is not provided', async () => {
const result = await decideLegacyClient(context, { ...request, query: {} });
expect(result).toBe(context.core.opensearch.legacy.client.callAsCurrentUser);
});

it('should return legacy client from dataSource when dataSourceId is provided', async () => {
const dataSourceClient = jest.fn();
(context.dataSource.opensearch.legacy.getClient as jest.Mock).mockReturnValueOnce({
callAPI: dataSourceClient,
});

const result = await decideLegacyClient(context, request);
expect(result).toBe(dataSourceClient);
expect(context.dataSource.opensearch.legacy.getClient).toHaveBeenCalledWith(
request.query.data_source
);
});
});
37 changes: 37 additions & 0 deletions src/plugins/data_source/server/util/decide_client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*
* Any modifications Copyright OpenSearch Contributors. See
* GitHub history for details.
*/

import { LegacyAPICaller, OpenSearchClient, RequestHandlerContext } from '../../../../core/server';
import { IOpenSearchSearchRequest } from '../../../data/server';

export const decideClient = async (
context: RequestHandlerContext,
request: IOpenSearchSearchRequest,
withLongNumeralsSupport: boolean = false
): Promise<OpenSearchClient> => {
const defaultOpenSearchClient = withLongNumeralsSupport
? context.core.opensearch.client.asCurrentUserWithLongNumeralsSupport
: context.core.opensearch.client.asCurrentUser;

return request.dataSourceId && context.dataSource
? await context.dataSource.opensearch.getClient(request.dataSourceId)
: defaultOpenSearchClient;
};

export const decideLegacyClient = async (
context: RequestHandlerContext,
request: any
): Promise<LegacyAPICaller> => {
const dataSourceId = request.query.data_source;
return dataSourceId
? (context.dataSource.opensearch.legacy.getClient(dataSourceId).callAPI as LegacyAPICaller)
: context.core.opensearch.legacy.client.callAsCurrentUser;
};
4 changes: 2 additions & 2 deletions src/plugins/vis_type_timeseries/server/lib/get_fields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ import {
indexPatterns,
IndexPatternFieldDescriptor,
IndexPatternsFetcher,
decideClient,
} from '../../../data/server';
import { ReqFacade } from './search_strategies/strategies/abstract_search_strategy';
import { decideLegacyClient } from '../../../data_source/server';

export async function getFields(
requestContext: RequestHandlerContext,
Expand All @@ -51,7 +51,7 @@ export async function getFields(
// removes the need to refactor many layers of dependencies on "req", and instead just augments the top
// level object passed from here. The layers should be refactored fully at some point, but for now
// this works and we are still using the New Platform services for these vis data portions.
const client = await decideClient(requestContext, request);
const client = await decideLegacyClient(requestContext, request);

const reqFacade: ReqFacade = {
requestContext,
Expand Down

0 comments on commit 19a3a79

Please sign in to comment.