Skip to content

Commit

Permalink
Revert "[discover] Clean up enhanced search API (opensearch-project#8226
Browse files Browse the repository at this point in the history
) (opensearch-project#8284)"

This reverts commit fba9d40.
  • Loading branch information
abbyhu2000 committed Sep 24, 2024
1 parent 7553498 commit 396af5f
Show file tree
Hide file tree
Showing 11 changed files with 226 additions and 42 deletions.
2 changes: 0 additions & 2 deletions changelogs/fragments/8226.yml

This file was deleted.

2 changes: 1 addition & 1 deletion src/plugins/data/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export const DEFAULT_DATA = {
} as DataStructure,
LOCAL_DATASOURCE: {
id: '',
title: 'Default Cluster',
title: 'Local Cluster',
type: 'DATA_SOURCE',
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,19 @@ export function getExternalSearchParamsFromRequest(
searchRequest: SearchRequest,
dependencies: {
getConfig: GetConfigFn;
getDataFrame: GetDataFrameFn;
}
): ISearchRequestParams {
const { getConfig } = dependencies;
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,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export const indexTypeConfig: DatasetTypeConfig = {
const dataSources = await fetchDataSources(services.savedObjects.client);
return {
...dataStructure,
columnHeader: 'Clusters',
columnHeader: 'Cluster',
hasNext: true,
children: dataSources,
};
Expand Down
5 changes: 3 additions & 2 deletions src/plugins/query_enhancements/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ export const API = {
GENERATE: `${BASE_API}/assist/generate`,
},
DATA_SOURCE: {
ASYNC_JOBS: `${BASE_API}/jobs`,
CONNECTIONS: `${BASE_API}/connections`,
EXTERNAL: `${BASE_API}/datasource/external`,
ASYNC_JOBS: `${BASE_API}/datasource/jobs`,
CONNECTIONS: `${BASE_API}/datasource/connections`,
},
};

Expand Down
29 changes: 7 additions & 22 deletions src/plugins/query_enhancements/public/datasets/s3_type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/

import { HttpSetup, SavedObjectsClientContract } from 'opensearch-dashboards/public';
import { trimEnd } from 'lodash';
import {
DATA_STRUCTURE_META_TYPES,
DEFAULT_DATA,
Expand All @@ -15,7 +14,7 @@ import {
DatasetField,
} from '../../../data/common';
import { DatasetTypeConfig, IDataPluginServices } from '../../../data/public';
import { API, DATASET, handleQueryStatus } from '../../common';
import { DATASET, handleQueryStatus } from '../../common';
import S3_ICON from '../assets/s3_mark.svg';

export const s3TypeConfig: DatasetTypeConfig = {
Expand Down Expand Up @@ -116,9 +115,7 @@ const fetch = async (
try {
const response = await handleQueryStatus({
fetchStatus: () =>
http.fetch({
method: 'GET',
path: trimEnd(`${API.DATA_SOURCE.ASYNC_JOBS}`),
http.fetch('../../api/enhancements/datasource/jobs', {
query: {
id: dataSource?.id,
queryId: meta.queryId,
Expand Down Expand Up @@ -174,13 +171,9 @@ const fetchConnections = async (
http: HttpSetup,
dataSource: DataStructure
): Promise<DataStructure[]> => {
const abortController = new AbortController();
const query =
dataSource.id !== '' ? (dataSource.meta as DataStructureCustomMeta).query : undefined;
const response = await http.fetch({
method: 'GET',
path: trimEnd(`${API.DATA_SOURCE.CONNECTIONS}/${query?.id || ''}`),
signal: abortController.signal,
const query = (dataSource.meta as DataStructureCustomMeta).query;
const response = await http.fetch(`../../api/enhancements/datasource/external`, {
query,
});

return response
Expand All @@ -197,13 +190,10 @@ const fetchConnections = async (
};

const fetchDatabases = async (http: HttpSetup, path: DataStructure[]): Promise<DataStructure[]> => {
const abortController = new AbortController();
const dataSource = path.find((ds) => ds.type === 'DATA_SOURCE');
const connection = path[path.length - 1];
const meta = connection.meta as DataStructureCustomMeta;
const response = await http.fetch({
method: 'POST',
path: trimEnd(`${API.DATA_SOURCE.ASYNC_JOBS}`),
const response = await http.post(`../../api/enhancements/datasource/jobs`, {
body: JSON.stringify({
lang: 'sql',
query: `SHOW DATABASES in ${connection.title}`,
Expand All @@ -213,7 +203,6 @@ const fetchDatabases = async (http: HttpSetup, path: DataStructure[]): Promise<D
query: {
id: dataSource?.id,
},
signal: abortController.signal,
});

connection.meta = setMeta(connection, response);
Expand All @@ -222,14 +211,11 @@ const fetchDatabases = async (http: HttpSetup, path: DataStructure[]): Promise<D
};

const fetchTables = async (http: HttpSetup, path: DataStructure[]): Promise<DataStructure[]> => {
const abortController = new AbortController();
const dataSource = path.find((ds) => ds.type === 'DATA_SOURCE');
const connection = path.find((ds) => ds.type === 'CONNECTION');
const sessionId = (connection?.meta as DataStructureCustomMeta).sessionId;
const database = path[path.length - 1];
const response = await http.fetch({
method: 'POST',
path: trimEnd(`${API.DATA_SOURCE.ASYNC_JOBS}`),
const response = await http.post(`../../api/enhancements/datasource/jobs`, {
body: JSON.stringify({
lang: 'sql',
query: `SHOW TABLES in ${database.title}`,
Expand All @@ -239,7 +225,6 @@ const fetchTables = async (http: HttpSetup, path: DataStructure[]): Promise<Data
query: {
id: dataSource?.id,
},
signal: abortController.signal,
});

database.meta = setMeta(database, response);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { BehaviorSubject, Observable, from } from 'rxjs';
import { DataPublicPluginStart } from 'src/plugins/data/public';
import { CoreStart } from 'opensearch-dashboards/public';
import { API } from '../../common';
import { Connection, ConnectionsServiceDeps } from '../types';

export class ConnectionsService {
protected http!: ConnectionsServiceDeps['http'];
protected savedObjects!: CoreStart['savedObjects'];
private uiService$ = new BehaviorSubject<DataPublicPluginStart['ui'] | undefined>(undefined);
private isDataSourceEnabled = false;
private isDataSourceEnabled$ = new BehaviorSubject<boolean>(this.isDataSourceEnabled);
private selectedConnection: Connection | undefined = undefined;
private selectedConnection$ = new BehaviorSubject<Connection | undefined>(
this.selectedConnection
);

constructor(deps: ConnectionsServiceDeps) {
deps.startServices.then(([coreStart, depsStart]) => {
this.http = deps.http;
this.savedObjects = coreStart.savedObjects;
this.uiService$.next(depsStart.data.ui);
this.setIsDataSourceEnabled$(depsStart.dataSource?.dataSourceEnabled || false);
});
}

getSavedObjects = () => {
return this.savedObjects;
};

getIsDataSourceEnabled = () => {
return this.isDataSourceEnabled;
};

setIsDataSourceEnabled$ = (isDataSourceEnabled: boolean) => {
this.isDataSourceEnabled = isDataSourceEnabled;
this.isDataSourceEnabled$.next(this.isDataSourceEnabled);
};

getIsDataSourceEnabled$ = () => {
return this.isDataSourceEnabled$.asObservable();
};

getUiService = () => {
return this.uiService$.asObservable();
};

getConnections = (): Observable<Connection[]> => {
return from(
this.http.fetch({
method: 'GET',
path: API.DATA_SOURCE.CONNECTIONS,
})
);
};

getConnectionById = (id: string): Observable<Connection> => {
const path = `${API.DATA_SOURCE.CONNECTIONS}/${id}`;
return from(
this.http.fetch({
method: 'GET',
path,
})
);
};

getSelectedConnection = () => {
return this.selectedConnection;
};

setSelectedConnection$ = (connection: Connection | undefined) => {
this.selectedConnection = connection;
this.selectedConnection$.next(this.selectedConnection);
};

getSelectedConnection$ = () => {
return this.selectedConnection$.asObservable();
};
}
2 changes: 2 additions & 0 deletions src/plugins/query_enhancements/public/services/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ import { createGetterSetter } from '../../../opensearch_dashboards_utils/common'

export const [getStorage, setStorage] = createGetterSetter<DataStorage>('storage');
export const [getData, setData] = createGetterSetter<DataPublicPluginStart>('data');

export { ConnectionsService } from './connections_service';
5 changes: 5 additions & 0 deletions src/plugins/query_enhancements/public/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,8 @@ export interface Connection {
auth?: any;
};
}

export interface ConnectionsServiceDeps {
http: CoreSetup['http'];
startServices: Promise<[CoreStart, QueryEnhancementsPluginStartDependencies, unknown]>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,62 @@ export function registerDataSourceConnectionsRoutes(
) {
router.get(
{
path: `${API.DATA_SOURCE.CONNECTIONS}/{id?}`,
path: API.DATA_SOURCE.CONNECTIONS,
validate: {
params: schema.object({}, { unknowns: 'allow' }),
},
},
async (context, request, response) => {
const fields = ['id', 'title', 'auth.type'];
const resp = await context.core.savedObjects.client.find({
type: 'data-source',
fields,
perPage: 10000,
});

return response.ok({ body: { savedObjects: resp.saved_objects } });
}
);

router.get(
{
path: `${API.DATA_SOURCE.CONNECTIONS}/{dataSourceId}`,
validate: {
params: schema.object({
id: schema.maybe(schema.string()),
dataSourceId: schema.string(),
}),
},
},
async (context, request, response) => {
const resp = await context.core.savedObjects.client.get(
'data-source',
request.params.dataSourceId
);
return response.ok({ body: resp });
}
);

router.get(
{
path: `${API.DATA_SOURCE.EXTERNAL}`,
validate: {
query: schema.object({
id: schema.string(),
name: schema.nullable(schema.string()),
}),
},
},
async (context, request, response) => {
const client = request.params.id
? context.dataSource.opensearch.legacy.getClient(request.params.id).callAPI
const client = request.query.id
? context.dataSource.opensearch.legacy.getClient(request.query.id).callAPI
: defaultClient.asScoped(request).callAsCurrentUser;
try {
const resp = await client('enhancements.getDataConnections');
return response.ok({ body: resp });
} catch (error) {
if (error.statusCode === 404 || error.statusCode === 400) {
return response.ok({ body: [] });
}
return response.custom({ statusCode: error.statusCode || 500, body: error.message });
}

const resp = request.query.name
? await client('enhancements.getDataConnectionById', {
dataconnection: request.query.name,
})
: await client('enhancements.getDataConnections');
return response.ok({ body: resp });
}
);

Expand Down
Loading

0 comments on commit 396af5f

Please sign in to comment.