From 3bda7bdbfe102d6fd6932b200ac0359acd0f8884 Mon Sep 17 00:00:00 2001 From: Yulong Ruan Date: Mon, 11 Sep 2023 22:42:00 +0800 Subject: [PATCH] refactor: simplify sample data saved object id prefix logic Signed-off-by: Yulong Ruan --- .../sample_data/data_sets/ecommerce/index.ts | 13 +++------- .../sample_data/data_sets/flights/index.ts | 13 +++------- .../sample_data/data_sets/logs/index.ts | 13 +++------- .../services/sample_data/data_sets/util.ts | 25 ++++++++----------- .../lib/sample_dataset_registry_types.ts | 13 +--------- .../services/sample_data/routes/install.ts | 11 ++++---- .../services/sample_data/routes/list.ts | 4 +-- .../services/sample_data/routes/uninstall.ts | 18 ++++++------- 8 files changed, 35 insertions(+), 75 deletions(-) diff --git a/src/plugins/home/server/services/sample_data/data_sets/ecommerce/index.ts b/src/plugins/home/server/services/sample_data/data_sets/ecommerce/index.ts index 370a4ce5406..02e7691794e 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/ecommerce/index.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/ecommerce/index.ts @@ -33,12 +33,7 @@ import { i18n } from '@osd/i18n'; import { getSavedObjects } from './saved_objects'; import { fieldMappings } from './field_mappings'; import { SampleDatasetSchema, AppLinkSchema } from '../../lib/sample_dataset_registry_types'; -import { - appendDataSourceId, - appendWorkspaceAndDataSourceId, - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, -} from '../util'; +import { appendPrefixTo } from '../util'; const ecommerceName = i18n.translate('home.sampleData.ecommerceSpecTitle', { defaultMessage: 'Sample eCommerce orders', @@ -59,13 +54,11 @@ export const ecommerceSpecProvider = function (): SampleDatasetSchema { previewImagePath: '/plugins/home/assets/sample_data_resources/ecommerce/dashboard.png', darkPreviewImagePath: '/plugins/home/assets/sample_data_resources/ecommerce/dashboard_dark.png', overviewDashboard: DASHBOARD_ID, - getWorkspaceAndDataSourceIntegratedDashboard: appendWorkspaceAndDataSourceId(DASHBOARD_ID), + getDashboardWithPrefix: appendPrefixTo(DASHBOARD_ID), appLinks: initialAppLinks, defaultIndex: DEFAULT_INDEX, - getDataSourceIntegratedDefaultIndex: appendDataSourceId(DEFAULT_INDEX), + getDataSourceIntegratedDefaultIndex: appendPrefixTo(DEFAULT_INDEX), savedObjects: getSavedObjects(), - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, dataIndices: [ { id: 'ecommerce', diff --git a/src/plugins/home/server/services/sample_data/data_sets/flights/index.ts b/src/plugins/home/server/services/sample_data/data_sets/flights/index.ts index 39e2171eff2..d324f8512c5 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/flights/index.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/flights/index.ts @@ -33,12 +33,7 @@ import { i18n } from '@osd/i18n'; import { getSavedObjects } from './saved_objects'; import { fieldMappings } from './field_mappings'; import { SampleDatasetSchema, AppLinkSchema } from '../../lib/sample_dataset_registry_types'; -import { - appendDataSourceId, - appendWorkspaceAndDataSourceId, - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, -} from '../util'; +import { appendPrefixTo } from '../util'; const flightsName = i18n.translate('home.sampleData.flightsSpecTitle', { defaultMessage: 'Sample flight data', @@ -59,13 +54,11 @@ export const flightsSpecProvider = function (): SampleDatasetSchema { previewImagePath: '/plugins/home/assets/sample_data_resources/flights/dashboard.png', darkPreviewImagePath: '/plugins/home/assets/sample_data_resources/flights/dashboard_dark.png', overviewDashboard: DASHBOARD_ID, - getWorkspaceAndDataSourceIntegratedDashboard: appendWorkspaceAndDataSourceId(DASHBOARD_ID), + getDashboardWithPrefix: appendPrefixTo(DASHBOARD_ID), appLinks: initialAppLinks, defaultIndex: DEFAULT_INDEX, - getDataSourceIntegratedDefaultIndex: appendDataSourceId(DEFAULT_INDEX), + getDataSourceIntegratedDefaultIndex: appendPrefixTo(DEFAULT_INDEX), savedObjects: getSavedObjects(), - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, dataIndices: [ { id: 'flights', diff --git a/src/plugins/home/server/services/sample_data/data_sets/logs/index.ts b/src/plugins/home/server/services/sample_data/data_sets/logs/index.ts index e7b8735ed0f..90994343ad3 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/logs/index.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/logs/index.ts @@ -33,12 +33,7 @@ import { i18n } from '@osd/i18n'; import { getSavedObjects } from './saved_objects'; import { fieldMappings } from './field_mappings'; import { SampleDatasetSchema, AppLinkSchema } from '../../lib/sample_dataset_registry_types'; -import { - appendDataSourceId, - appendWorkspaceAndDataSourceId, - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, -} from '../util'; +import { appendPrefixTo } from '../util'; const logsName = i18n.translate('home.sampleData.logsSpecTitle', { defaultMessage: 'Sample web logs', @@ -59,13 +54,11 @@ export const logsSpecProvider = function (): SampleDatasetSchema { previewImagePath: '/plugins/home/assets/sample_data_resources/logs/dashboard.png', darkPreviewImagePath: '/plugins/home/assets/sample_data_resources/logs/dashboard_dark.png', overviewDashboard: DASHBOARD_ID, - getWorkspaceAndDataSourceIntegratedDashboard: appendWorkspaceAndDataSourceId(DASHBOARD_ID), + getDashboardWithPrefix: appendPrefixTo(DASHBOARD_ID), appLinks: initialAppLinks, defaultIndex: DEFAULT_INDEX, - getDataSourceIntegratedDefaultIndex: appendDataSourceId(DEFAULT_INDEX), + getDataSourceIntegratedDefaultIndex: appendPrefixTo(DEFAULT_INDEX), savedObjects: getSavedObjects(), - getDataSourceIntegratedSavedObjects, - getWorkspaceIntegratedSavedObjects, dataIndices: [ { id: 'logs', diff --git a/src/plugins/home/server/services/sample_data/data_sets/util.ts b/src/plugins/home/server/services/sample_data/data_sets/util.ts index a4f44b9e3ce..a48b102a269 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/util.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/util.ts @@ -6,12 +6,16 @@ import { SavedObject } from 'opensearch-dashboards/server'; import { cloneDeep } from 'lodash'; -const generateIdWithPrefix = (id: string, prefix?: string) => { - return [...(prefix ? [prefix] : []), id].join('_'); +const withPrefix = (...args: Array) => (id: string) => { + const prefix = args.filter(Boolean).join('_'); + if (prefix) { + return `${prefix}_${id}`; + } + return id; }; -export const appendDataSourceId = (id: string) => { - return (dataSourceId?: string) => generateIdWithPrefix(id, dataSourceId); +export const appendPrefixTo = (id: string) => (...args: Array) => { + return withPrefix(...args)(id); }; const overrideSavedObjectId = (savedObject: SavedObject, idGenerator: (id: string) => string) => { @@ -62,9 +66,8 @@ export const getDataSourceIntegratedSavedObjects = ( ): SavedObject[] => { savedObjectList = cloneDeep(savedObjectList); if (dataSourceId) { - const idGeneratorWithDataSource = (id: string) => generateIdWithPrefix(id, dataSourceId); return savedObjectList.map((savedObject) => { - overrideSavedObjectId(savedObject, idGeneratorWithDataSource); + overrideSavedObjectId(savedObject, withPrefix(dataSourceId)); // update reference if (savedObject.type === 'index-pattern') { @@ -94,22 +97,14 @@ export const getDataSourceIntegratedSavedObjects = ( return savedObjectList; }; -export const appendWorkspaceId = (id: string) => (workspaceId?: string) => - generateIdWithPrefix(id, workspaceId); - -export const appendWorkspaceAndDataSourceId = (id: string) => (workspaceId?: string) => ( - dataSourceId?: string -) => appendDataSourceId(appendWorkspaceId(id)(workspaceId))(dataSourceId); - export const getWorkspaceIntegratedSavedObjects = ( savedObjectList: SavedObject[], workspaceId?: string ) => { savedObjectList = cloneDeep(savedObjectList); - const generateWithWorkspaceId = (id: string) => appendWorkspaceId(id)(workspaceId); savedObjectList.forEach((savedObject) => { - overrideSavedObjectId(savedObject, generateWithWorkspaceId); + overrideSavedObjectId(savedObject, withPrefix(workspaceId)); }); return savedObjectList; }; diff --git a/src/plugins/home/server/services/sample_data/lib/sample_dataset_registry_types.ts b/src/plugins/home/server/services/sample_data/lib/sample_dataset_registry_types.ts index dae19499748..d89a9c91b95 100644 --- a/src/plugins/home/server/services/sample_data/lib/sample_dataset_registry_types.ts +++ b/src/plugins/home/server/services/sample_data/lib/sample_dataset_registry_types.ts @@ -88,9 +88,7 @@ export interface SampleDatasetSchema { // saved object id of main dashboard for sample data set overviewDashboard: string; - getWorkspaceAndDataSourceIntegratedDashboard: ( - workspaceId?: string - ) => (dataSourceId?: string) => string; + getDashboardWithPrefix: (...args: Array) => string; appLinks: AppLinkSchema[]; // saved object id of default index-pattern for sample data set @@ -100,15 +98,6 @@ export interface SampleDatasetSchema { // OpenSearch Dashboards saved objects (index patter, visualizations, dashboard, ...) // Should provide a nice demo of OpenSearch Dashboards's functionality with the sample data set savedObjects: Array>; - getDataSourceIntegratedSavedObjects: ( - savedObjects: Array>, - dataSourceId?: string, - dataSourceTitle?: string - ) => Array>; - getWorkspaceIntegratedSavedObjects: ( - savedObjects: Array>, - workspaceId?: string - ) => Array>; dataIndices: DataIndexSchema[]; status?: string | undefined; statusMsg?: unknown; diff --git a/src/plugins/home/server/services/sample_data/routes/install.ts b/src/plugins/home/server/services/sample_data/routes/install.ts index a2e6c13e93f..964d6a5c16b 100644 --- a/src/plugins/home/server/services/sample_data/routes/install.ts +++ b/src/plugins/home/server/services/sample_data/routes/install.ts @@ -39,6 +39,10 @@ import { } from '../lib/translate_timestamp'; import { loadData } from '../lib/load_data'; import { SampleDataUsageTracker } from '../usage/usage'; +import { + getDataSourceIntegratedSavedObjects, + getWorkspaceIntegratedSavedObjects, +} from '../data_sets/util'; const insertDataIntoIndex = ( dataIndexConfig: any, @@ -202,17 +206,14 @@ export function createInstallRoute( let createResults; let savedObjectsList = sampleDataset.savedObjects; if (dataSourceId) { - savedObjectsList = sampleDataset.getDataSourceIntegratedSavedObjects( + savedObjectsList = getDataSourceIntegratedSavedObjects( savedObjectsList, dataSourceId, dataSourceTitle ); } if (workspaceId) { - savedObjectsList = sampleDataset.getWorkspaceIntegratedSavedObjects( - savedObjectsList, - workspaceId - ); + savedObjectsList = getWorkspaceIntegratedSavedObjects(savedObjectsList, workspaceId); } try { diff --git a/src/plugins/home/server/services/sample_data/routes/list.ts b/src/plugins/home/server/services/sample_data/routes/list.ts index edb1061e5e0..761ff3d5000 100644 --- a/src/plugins/home/server/services/sample_data/routes/list.ts +++ b/src/plugins/home/server/services/sample_data/routes/list.ts @@ -59,9 +59,7 @@ export const createListRoute = (router: IRouter, sampleDatasets: SampleDatasetSc description: sampleDataset.description, previewImagePath: sampleDataset.previewImagePath, darkPreviewImagePath: sampleDataset.darkPreviewImagePath, - overviewDashboard: sampleDataset.getWorkspaceAndDataSourceIntegratedDashboard( - workspaceId - )(dataSourceId), + overviewDashboard: sampleDataset.getDashboardWithPrefix(dataSourceId, workspaceId), appLinks: sampleDataset.appLinks, defaultIndex: sampleDataset.getDataSourceIntegratedDefaultIndex(dataSourceId), dataIndices: sampleDataset.dataIndices.map(({ id }) => ({ id })), diff --git a/src/plugins/home/server/services/sample_data/routes/uninstall.ts b/src/plugins/home/server/services/sample_data/routes/uninstall.ts index fef0f0484ce..95398e63683 100644 --- a/src/plugins/home/server/services/sample_data/routes/uninstall.ts +++ b/src/plugins/home/server/services/sample_data/routes/uninstall.ts @@ -34,6 +34,10 @@ import { IRouter } from 'src/core/server'; import { SampleDatasetSchema } from '../lib/sample_dataset_registry_types'; import { createIndexName } from '../lib/create_index_name'; import { SampleDataUsageTracker } from '../usage/usage'; +import { + getDataSourceIntegratedSavedObjects, + getWorkspaceIntegratedSavedObjects, +} from '../data_sets/util'; export function createUninstallRoute( router: IRouter, @@ -81,17 +85,11 @@ export function createUninstallRoute( } let savedObjectsList = sampleDataset.savedObjects; - if (dataSourceId) { - savedObjectsList = sampleDataset.getDataSourceIntegratedSavedObjects( - savedObjectsList, - dataSourceId - ); - } if (workspaceId) { - savedObjectsList = sampleDataset.getWorkspaceIntegratedSavedObjects( - savedObjectsList, - workspaceId - ); + savedObjectsList = getWorkspaceIntegratedSavedObjects(savedObjectsList, workspaceId); + } + if (dataSourceId) { + savedObjectsList = getDataSourceIntegratedSavedObjects(savedObjectsList, dataSourceId); } const deletePromises = savedObjectsList.map(({ type, id }) =>