From e424be155daa6cdffb4234065b3f216922e79605 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 12:36:04 -0700 Subject: [PATCH] Support MDS on workflows and workflow_detail pages (#274) (#276) * Added MDS support Signed-off-by: saimedhi * Added MDS support, Fixed failing tests Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi * Fixing MDS Support Signed-off-by: saimedhi --------- Signed-off-by: saimedhi Signed-off-by: Sai Medhini Reddy Maryada <117196660+saimedhi@users.noreply.github.com> (cherry picked from commit c8bc6822b1afb08ce9fbffcb8b1860c1beb46f22) Co-authored-by: Sai Medhini Reddy Maryada <117196660+saimedhi@users.noreply.github.com> --- common/interfaces.ts | 3 + common/utils.ts | 15 + opensearch_dashboards.json | 2 +- public/app.tsx | 41 ++- .../pages/workflow_detail/workflow_detail.tsx | 63 +++- .../input_transform_modal.tsx | 22 +- .../output_transform_modal.tsx | 22 +- .../configure_search_request.tsx | 13 +- .../workflow_inputs/workflow_inputs.tsx | 93 ++++-- .../import_workflow/import_workflow_modal.tsx | 16 +- .../pages/workflows/new_workflow/use_case.tsx | 13 +- .../pages/workflows/workflow_list/columns.tsx | 78 +++-- .../workflows/workflow_list/workflow_list.tsx | 9 +- public/pages/workflows/workflows.test.tsx | 4 +- public/pages/workflows/workflows.tsx | 127 +++++++- public/plugin.ts | 26 +- public/render_app.tsx | 22 +- public/route_service.ts | 254 +++++++++++----- public/services.ts | 27 +- public/store/reducers/models_reducer.ts | 8 +- public/store/reducers/opensearch_reducer.ts | 74 +++-- public/store/reducers/workflows_reducer.ts | 101 +++++-- public/types.ts | 8 +- public/utils/constants.ts | 7 +- public/utils/utils.ts | 38 ++- server/plugin.ts | 29 +- .../routes/flow_framework_routes_service.ts | 286 +++++++++++++++--- server/routes/ml_routes_service.ts | 34 ++- server/routes/opensearch_routes_service.ts | 194 ++++++++++-- server/utils/helpers.ts | 26 ++ test/mocks/mock_core_services.ts | 5 + 31 files changed, 1327 insertions(+), 333 deletions(-) create mode 100644 server/utils/helpers.ts diff --git a/common/interfaces.ts b/common/interfaces.ts index ba1f1b99..9f705c8f 100644 --- a/common/interfaces.ts +++ b/common/interfaces.ts @@ -16,6 +16,9 @@ export type Index = { /** ********** WORKFLOW TYPES/INTERFACES ********** */ +export type MDSQueryParams = { + dataSourceId?: string; +}; export type ConfigFieldType = | 'string' diff --git a/common/utils.ts b/common/utils.ts index 6a5b9c0f..b6892191 100644 --- a/common/utils.ts +++ b/common/utils.ts @@ -5,7 +5,22 @@ import moment from 'moment'; import { DATE_FORMAT_PATTERN } from './'; +import { isEmpty } from 'lodash'; export function toFormattedDate(timestampMillis: number): String { return moment(new Date(timestampMillis)).format(DATE_FORMAT_PATTERN); } + +const PERMISSIONS_ERROR_PATTERN = /no permissions for \[(.+)\] and User \[name=(.+), backend_roles/; + +export const prettifyErrorMessage = (rawErrorMessage: string) => { + if (isEmpty(rawErrorMessage) || rawErrorMessage === 'undefined') { + return 'Unknown error is returned.'; + } + const match = rawErrorMessage.match(PERMISSIONS_ERROR_PATTERN); + if (isEmpty(match)) { + return rawErrorMessage; + } else { + return `User ${match[2]} has no permissions to [${match[1]}].`; + } +}; diff --git a/opensearch_dashboards.json b/opensearch_dashboards.json index a5836447..3bad0752 100644 --- a/opensearch_dashboards.json +++ b/opensearch_dashboards.json @@ -9,5 +9,5 @@ "navigation", "opensearchDashboardsUtils" ], - "optionalPlugins": [] + "optionalPlugins": ["dataSource","dataSourceManagement"] } \ No newline at end of file diff --git a/public/app.tsx b/public/app.tsx index f2a352c8..78e29ef1 100644 --- a/public/app.tsx +++ b/public/app.tsx @@ -4,7 +4,12 @@ */ import React from 'react'; -import { Route, RouteComponentProps, Switch } from 'react-router-dom'; +import { + Route, + RouteComponentProps, + Switch, + useLocation, +} from 'react-router-dom'; import { EuiPageSideBar, EuiSideNav, @@ -18,13 +23,24 @@ import { WorkflowDetailRouterProps, WorkflowsRouterProps, } from './pages'; +import { MountPoint } from '../../../src/core/public'; +import { + constructHrefWithDataSourceId, + getDataSourceFromURL, +} from './utils/utils'; // styling import './global-styles.scss'; -interface Props extends RouteComponentProps {} +interface Props extends RouteComponentProps { + setHeaderActionMenu: (menuMount?: MountPoint) => void; +} export const FlowFrameworkDashboardsApp = (props: Props) => { + const { setHeaderActionMenu } = props; + const location = useLocation(); + const queryParams = getDataSourceFromURL(location); + const dataSourceId = queryParams.dataSourceId; const sidebar = (