Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MDS] Adds datasource filter for version decoupling #2051

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion opensearch_dashboards.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,7 @@
"dataSourceManagement"
],
"server": true,
"ui": true
"ui": true,
"supportedOSDataSourceVersions": ">=1.0.0",
DarshitChanpura marked this conversation as resolved.
Show resolved Hide resolved
"requiredOSDataSourcePlugins": ["opensearch-security"]
}
2 changes: 2 additions & 0 deletions public/apps/configuration/top-nav-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { AppDependencies } from '../types';
import {
setDataSourceInUrl,
setDataSource as setDataSourceInSubscription,
isDataSourceCompatible,
} from '../../utils/datasource-utils';

export interface TopNavMenuProps extends AppDependencies {
Expand Down Expand Up @@ -63,6 +64,7 @@ export const SecurityPluginTopNavMenu = React.memo(
: undefined,
onSelectedDataSources: wrapSetDataSourceWithUpdateUrl,
fullWidth: true,
dataSourceFilter: isDataSourceCompatible,
}}
/>
) : null;
Expand Down
28 changes: 27 additions & 1 deletion public/utils/datasource-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

import semver from 'semver';
DarshitChanpura marked this conversation as resolved.
Show resolved Hide resolved
import { BehaviorSubject } from 'rxjs';
import { DataSourceOption } from 'src/plugins/data_source_management/public/components/data_source_menu/types';
import pluginManifest from '../../opensearch_dashboards.json';
import type { SavedObject } from '../../../../src/core/public';
import type { DataSourceAttributes } from '../../../../src/plugins/data_source/common/data_sources';

const DATASOURCEURLKEY = 'dataSource';

Expand Down Expand Up @@ -55,3 +58,26 @@
export function setDataSource(dataSource: DataSourceOption) {
dataSource$.next(dataSource);
}

export const isDataSourceCompatible = (dataSource: SavedObject<DataSourceAttributes>) => {
if (
'requiredOSDataSourcePlugins' in pluginManifest &&
!pluginManifest.requiredOSDataSourcePlugins.every((plugin) =>
dataSource.attributes.installedPlugins?.includes(plugin)

Check warning on line 66 in public/utils/datasource-utils.ts

View check run for this annotation

Codecov / codecov/patch

public/utils/datasource-utils.ts#L65-L66

Added lines #L65 - L66 were not covered by tests
)
) {
return false;

Check warning on line 69 in public/utils/datasource-utils.ts

View check run for this annotation

Codecov / codecov/patch

public/utils/datasource-utils.ts#L69

Added line #L69 was not covered by tests
}

// filter out data sources which is NOT in the support range of plugin
if (
'supportedOSDataSourceVersions' in pluginManifest &&
!semver.satisfies(
dataSource.attributes.dataSourceVersion,
pluginManifest.supportedOSDataSourceVersions
)
) {
return false;

Check warning on line 80 in public/utils/datasource-utils.ts

View check run for this annotation

Codecov / codecov/patch

public/utils/datasource-utils.ts#L80

Added line #L80 was not covered by tests
}
return true;

Check warning on line 82 in public/utils/datasource-utils.ts

View check run for this annotation

Codecov / codecov/patch

public/utils/datasource-utils.ts#L82

Added line #L82 was not covered by tests
};
Loading