diff --git a/opensearch_dashboards.json b/opensearch_dashboards.json index 8c284c707..522715edd 100644 --- a/opensearch_dashboards.json +++ b/opensearch_dashboards.json @@ -21,5 +21,7 @@ "opensearchDashboardsUtils" ], "server": true, - "ui": true -} \ No newline at end of file + "ui": true, + "supportedOSDataSourceVersions": ">=2.13.0", + "requiredOSDataSourcePlugins": ["opensearch-alerting"] +} diff --git a/public/pages/Main/Main.js b/public/pages/Main/Main.js index 5d2ce8d87..c90548101 100644 --- a/public/pages/Main/Main.js +++ b/public/pages/Main/Main.js @@ -22,6 +22,8 @@ import { } from '../../../public/services'; import { MultiDataSourceContext } from '../../../public/utils/MultiDataSourceContext'; import { parseQueryStringAndGetDataSource } from '../utils/helpers'; +import * as pluginManifest from "../../../opensearch_dashboards.json"; +import semver from "semver"; class Main extends Component { static contextType = CoreContext; @@ -101,6 +103,15 @@ class Main extends Component { } }; + dataSourceFilterFn = (dataSource) => { + const dataSourceVersion = dataSource?.attributes?.dataSourceVersion || ""; + const installedPlugins = dataSource?.attributes?.installedPlugins || []; + return ( + semver.satisfies(dataSourceVersion, pluginManifest.supportedOSDataSourceVersions) && + pluginManifest.requiredOSDataSourcePlugins.every((plugin) => installedPlugins.includes(plugin)) + ); + }; + renderDataSourceComponent(dataSourceType) { const { setActionMenu } = this.props; const componentConfig = { @@ -110,6 +121,7 @@ class Main extends Component { : [{ id: this.state.selectedDataSourceId }], savedObjects: getSavedObjectsClient(), notifications: getNotifications(), + dataSourceFilter: this.dataSourceFilterFn, }; if (dataSourceType === 'DataSourceSelectable') { componentConfig.onSelectedDataSources = this.handleDataSourceChange;