From 358d13919bc597d13e6a98ec97fae2615093027e Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 13 Apr 2020 13:28:09 +0200 Subject: [PATCH 01/65] Migrate SO management section to NP (#61700) * move libs to new plugin * adapt libs to use NP apis * add required plugins * add get_allowed_types route * move object_view components * add service registry * migrate table header component * migrate table component * migrate saved_objects_table component * remove migrated legacy files * fix re-export from legacy management + section label * migrate services registration * adapt management section mock * fix imports * migrate flyout component * migrate relationships component * migrate saved_objects_table tests * migrate breadcrumb * add redirect if unauthorized check * migrate translations to new savedObjectsManagement prefix * remove obsolete translations * convert action registry to service pattern * wire extra actions * remove importAndExportableTypes from injected vars * handle newIndexPatternUrl * remove duplicate dashboard dependency * remove old TODO * remove old TODO * properly mock lodash in tests * add async management section loading * expose createSavedSearchesLoader from discover plugin contract * address most review comments * fix merge conflicts --- src/core/public/mocks.ts | 6 +- .../server/saved_objects/service/index.ts | 1 - src/core/server/server.api.md | 2 - src/legacy/core_plugins/kibana/inject_vars.js | 3 - .../core_plugins/kibana/public/index.ts | 2 +- .../management/saved_object_registry.ts | 64 +-- .../public/management/sections/index.js | 1 - .../management/sections/objects/_objects.html | 5 - .../management/sections/objects/_objects.js | 104 ----- .../management/sections/objects/_view.html | 5 - .../management/sections/objects/_view.js | 85 ---- .../sections/objects/breadcrumbs.js | 50 --- .../objects/components/objects_table/index.js | 20 - .../saved_objects/saved_objects_mixin.js | 5 - src/plugins/data/public/mocks.ts | 1 + src/plugins/discover/public/mocks.ts | 3 + src/plugins/discover/public/plugin.ts | 12 + src/plugins/management/public/mocks/index.ts | 13 +- .../saved_objects_management/common/index.ts} | 2 +- .../saved_objects_management/common}/types.ts | 30 +- .../saved_objects_management/kibana.json | 3 +- .../saved_objects_management/public/index.ts | 6 +- .../public}/lib/case_conversion.test.ts | 0 .../public}/lib/case_conversion.ts | 0 .../public}/lib/create_field_list.test.ts | 4 +- .../public}/lib/create_field_list.ts | 8 +- .../lib/extract_export_details.test.ts | 0 .../public}/lib/extract_export_details.ts | 0 .../lib/fetch_export_by_type_and_search.ts | 7 +- .../public}/lib/fetch_export_objects.ts | 7 +- .../public}/lib/find_objects.ts | 29 +- .../public/lib/get_allowed_types.ts | 31 ++ .../public}/lib/get_default_title.ts | 0 .../public}/lib/get_relationships.test.ts | 37 +- .../public}/lib/get_relationships.ts | 32 +- .../public}/lib/get_saved_object_counts.ts | 17 +- .../public}/lib/get_saved_object_label.ts | 0 .../public}/lib/import_file.ts | 14 +- .../public}/lib/import_legacy_file.test.ts | 0 .../public}/lib/import_legacy_file.ts | 0 .../public}/lib/in_app_url.test.ts | 2 +- .../public}/lib/in_app_url.ts | 0 .../public}/lib/index.ts | 2 + .../public}/lib/log_legacy_import.ts | 9 +- .../public}/lib/numeric.ts | 0 .../public}/lib/parse_query.test.ts | 2 +- .../public}/lib/parse_query.ts | 15 +- .../lib/process_import_response.test.ts | 0 .../public}/lib/process_import_response.ts | 0 .../public}/lib/resolve_import_errors.test.ts | 35 +- .../public}/lib/resolve_import_errors.ts | 12 +- .../public}/lib/resolve_saved_objects.test.ts | 7 +- .../public}/lib/resolve_saved_objects.ts | 26 +- .../public/management_section/index.ts} | 2 +- .../management_section/mount_section.tsx | 211 +++++++++ .../__snapshots__/header.test.tsx.snap | 6 +- .../__snapshots__/intro.test.tsx.snap | 6 +- .../not_found_errors.test.tsx.snap | 30 +- .../object_view/components}/field.test.tsx | 0 .../object_view/components}/field.tsx | 4 +- .../object_view/components}/form.tsx | 18 +- .../object_view/components}/header.test.tsx | 0 .../object_view/components}/header.tsx | 8 +- .../object_view/components}/index.ts | 0 .../object_view/components}/intro.test.tsx | 0 .../object_view/components}/intro.tsx | 4 +- .../components}/not_found_errors.test.tsx | 0 .../components}/not_found_errors.tsx | 10 +- .../management_section/object_view/index.ts} | 2 +- .../object_view}/saved_object_view.tsx | 18 +- .../saved_objects_table.test.tsx.snap} | 116 ++++- .../__snapshots__/flyout.test.tsx.snap} | 84 ++-- .../__snapshots__/header.test.tsx.snap} | 10 +- .../relationships.test.tsx.snap} | 2 +- .../__snapshots__/table.test.tsx.snap} | 24 +- .../components/flyout.test.mocks.ts | 44 ++ .../objects_table/components/flyout.test.tsx} | 183 ++++---- .../objects_table/components/flyout.tsx} | 260 ++++++----- .../objects_table/components/header.test.tsx} | 3 +- .../objects_table/components/header.tsx} | 31 +- .../objects_table/components/index.ts | 23 + .../components/relationships.test.tsx} | 44 +- .../components/relationships.tsx} | 89 ++-- .../objects_table/components/table.test.tsx} | 31 +- .../objects_table/components/table.tsx} | 154 ++++--- .../objects_table/index.ts} | 2 +- .../saved_objects_table.test.mocks.ts | 67 +++ .../saved_objects_table.test.tsx} | 419 ++++++++---------- .../objects_table/saved_objects_table.tsx} | 260 ++++++----- .../public/management_section/types.ts | 38 ++ .../saved_objects_management/public/mocks.ts | 12 +- .../public/plugin.test.ts | 10 +- .../saved_objects_management/public/plugin.ts | 71 ++- .../public/register_services.ts | 59 +++ .../public/services/action_service.mock.ts | 57 +++ ...egistry.test.ts => action_service.test.ts} | 30 +- .../{action_registry.ts => action_service.ts} | 48 +- .../public/services/index.ts | 14 +- ...istry.mock.ts => service_registry.mock.ts} | 13 +- .../public/services/service_registry.ts | 49 ++ .../services/{action_types.ts => types.ts} | 0 .../saved_objects_management/public/types.ts | 20 + .../server/routes/get_allowed_types.ts} | 34 +- .../server/routes/index.test.ts | 8 +- .../server/routes/index.ts | 2 + .../saved_objects_management/server/types.ts | 30 +- ...opy_saved_objects_to_space_service.test.ts | 4 +- .../copy_saved_objects_to_space_service.ts | 2 +- .../translations/translations/ja-JP.json | 245 +++++----- .../translations/translations/zh-CN.json | 243 +++++----- 110 files changed, 2184 insertions(+), 1689 deletions(-) delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.html delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.js delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/_view.html delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/_view.js delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/breadcrumbs.js delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/index.js rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/index.js => plugins/saved_objects_management/common/index.ts} (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/common}/types.ts (74%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/case_conversion.test.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/case_conversion.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/create_field_list.test.ts (96%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/create_field_list.ts (92%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/extract_export_details.test.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/extract_export_details.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/fetch_export_by_type_and_search.ts (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/fetch_export_objects.ts (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/find_objects.ts (57%) create mode 100644 src/plugins/saved_objects_management/public/lib/get_allowed_types.ts rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/get_default_title.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/get_relationships.test.ts (67%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/get_relationships.ts (67%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/get_saved_object_counts.ts (72%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/get_saved_object_label.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/import_file.ts (75%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/import_legacy_file.test.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/import_legacy_file.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/in_app_url.test.ts (98%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/in_app_url.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/index.ts (94%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/log_legacy_import.ts (81%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/numeric.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/parse_query.test.ts (92%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/parse_query.ts (77%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/process_import_response.test.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/process_import_response.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/resolve_import_errors.test.ts (90%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/resolve_import_errors.ts (95%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/resolve_saved_objects.test.ts (98%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public}/lib/resolve_saved_objects.ts (94%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/index.js => plugins/saved_objects_management/public/management_section/index.ts} (93%) create mode 100644 src/plugins/saved_objects_management/public/management_section/mount_section.tsx rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/__snapshots__/header.test.tsx.snap (96%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/__snapshots__/intro.test.tsx.snap (90%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/__snapshots__/not_found_errors.test.tsx.snap (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/field.test.tsx (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/field.tsx (97%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/form.tsx (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/header.test.tsx (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/header.tsx (92%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/index.ts (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/intro.test.tsx (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/intro.tsx (92%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/not_found_errors.test.tsx (100%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/object_view => plugins/saved_objects_management/public/management_section/object_view/components}/not_found_errors.tsx (87%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/index.js => plugins/saved_objects_management/public/management_section/object_view/index.ts} (93%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects => plugins/saved_objects_management/public/management_section/object_view}/saved_object_view.tsx (89%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/__snapshots__/objects_table.test.js.snap => plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap} (73%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/__snapshots__/flyout.test.js.snap => plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/flyout.test.tsx.snap} (85%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/__snapshots__/header.test.js.snap => plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap} (88%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/__snapshots__/relationships.test.js.snap => plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap} (99%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/__snapshots__/table.test.js.snap => plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap} (93%) create mode 100644 src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.mocks.ts rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js => plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx} (75%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/flyout.js => plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx} (77%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/header.test.js => plugins/saved_objects_management/public/management_section/objects_table/components/header.test.tsx} (96%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/header.js => plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx} (83%) create mode 100644 src/plugins/saved_objects_management/public/management_section/objects_table/components/index.ts rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js => plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx} (88%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/relationships.js => plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx} (75%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/table.test.js => plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx} (87%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/table.js => plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx} (71%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/index.js => plugins/saved_objects_management/public/management_section/objects_table/index.ts} (93%) create mode 100644 src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.mocks.ts rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js => plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.tsx} (58%) rename src/{legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js => plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx} (73%) create mode 100644 src/plugins/saved_objects_management/public/management_section/types.ts create mode 100644 src/plugins/saved_objects_management/public/register_services.ts create mode 100644 src/plugins/saved_objects_management/public/services/action_service.mock.ts rename src/plugins/saved_objects_management/public/services/{action_registry.test.ts => action_service.test.ts} (69%) rename src/plugins/saved_objects_management/public/services/{action_registry.ts => action_service.ts} (56%) rename src/plugins/saved_objects_management/public/services/{action_registry.mock.ts => service_registry.mock.ts} (79%) create mode 100644 src/plugins/saved_objects_management/public/services/service_registry.ts rename src/plugins/saved_objects_management/public/services/{action_types.ts => types.ts} (100%) create mode 100644 src/plugins/saved_objects_management/public/types.ts rename src/{legacy/core_plugins/kibana/public/management/sections/objects/index.js => plugins/saved_objects_management/server/routes/get_allowed_types.ts} (61%) diff --git a/src/core/public/mocks.ts b/src/core/public/mocks.ts index 0c4930592b233e..959ffaa7e7e088 100644 --- a/src/core/public/mocks.ts +++ b/src/core/public/mocks.ts @@ -48,6 +48,7 @@ export { overlayServiceMock } from './overlays/overlay_service.mock'; export { uiSettingsServiceMock } from './ui_settings/ui_settings_service.mock'; export { savedObjectsServiceMock } from './saved_objects/saved_objects_service.mock'; export { scopedHistoryMock } from './application/scoped_history.mock'; +export { applicationServiceMock } from './application/application_service.mock'; function createCoreSetupMock({ basePath = '', @@ -62,9 +63,8 @@ function createCoreSetupMock({ application: applicationServiceMock.createSetupContract(), context: contextServiceMock.createSetupContract(), fatalErrors: fatalErrorsServiceMock.createSetupContract(), - getStartServices: jest.fn, object, any]>, []>( - () => - Promise.resolve([createCoreStartMock({ basePath }), pluginStartDeps, pluginStartContract]) + getStartServices: jest.fn, any, any]>, []>(() => + Promise.resolve([createCoreStartMock({ basePath }), pluginStartDeps, pluginStartContract]) ), http: httpServiceMock.createSetupContract({ basePath }), notifications: notificationServiceMock.createSetupContract(), diff --git a/src/core/server/saved_objects/service/index.ts b/src/core/server/saved_objects/service/index.ts index f44824238aa21b..9f625b4732e264 100644 --- a/src/core/server/saved_objects/service/index.ts +++ b/src/core/server/saved_objects/service/index.ts @@ -36,7 +36,6 @@ export interface SavedObjectsLegacyService { getScopedSavedObjectsClient: SavedObjectsClientProvider['getClient']; SavedObjectsClient: typeof SavedObjectsClient; types: string[]; - importAndExportableTypes: string[]; schema: SavedObjectsSchema; getSavedObjectsRepository(...rest: any[]): any; importExport: { diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index a35bca7375286d..37051da4b17da4 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -2084,8 +2084,6 @@ export interface SavedObjectsLegacyService { // (undocumented) getScopedSavedObjectsClient: SavedObjectsClientProvider['getClient']; // (undocumented) - importAndExportableTypes: string[]; - // (undocumented) importExport: { objectLimit: number; importSavedObjects(options: SavedObjectsImportOptions): Promise; diff --git a/src/legacy/core_plugins/kibana/inject_vars.js b/src/legacy/core_plugins/kibana/inject_vars.js index 76d1704907ab5b..c3b906ee842e33 100644 --- a/src/legacy/core_plugins/kibana/inject_vars.js +++ b/src/legacy/core_plugins/kibana/inject_vars.js @@ -20,10 +20,7 @@ export function injectVars(server) { const serverConfig = server.config(); - const { importAndExportableTypes } = server.savedObjects; - return { - importAndExportableTypes, autocompleteTerminateAfter: serverConfig.get('kibana.autocompleteTerminateAfter'), autocompleteTimeout: serverConfig.get('kibana.autocompleteTimeout'), }; diff --git a/src/legacy/core_plugins/kibana/public/index.ts b/src/legacy/core_plugins/kibana/public/index.ts index a4fffc6eec26da..be22652ab2c1c7 100644 --- a/src/legacy/core_plugins/kibana/public/index.ts +++ b/src/legacy/core_plugins/kibana/public/index.ts @@ -20,4 +20,4 @@ export { ProcessedImportResponse, processImportResponse, -} from './management/sections/objects/lib/process_import_response'; +} from '../../../../plugins/saved_objects_management/public/lib'; diff --git a/src/legacy/core_plugins/kibana/public/management/saved_object_registry.ts b/src/legacy/core_plugins/kibana/public/management/saved_object_registry.ts index 705be68a141e70..587a372f915551 100644 --- a/src/legacy/core_plugins/kibana/public/management/saved_object_registry.ts +++ b/src/legacy/core_plugins/kibana/public/management/saved_object_registry.ts @@ -17,66 +17,8 @@ * under the License. */ -import _ from 'lodash'; -import { i18n } from '@kbn/i18n'; -import { npStart } from 'ui/new_platform'; -import { SavedObjectLoader } from '../../../../../plugins/saved_objects/public'; -import { createSavedSearchesLoader } from '../../../../../plugins/discover/public'; +import { npSetup } from 'ui/new_platform'; -/** - * This registry is used for the editing mode of Saved Searches, Visualizations, - * Dashboard and Time Lion saved objects. - */ -interface SavedObjectRegistryEntry { - id: string; - service: SavedObjectLoader; - title: string; -} - -export interface ISavedObjectsManagementRegistry { - register(service: SavedObjectRegistryEntry): void; - all(): SavedObjectRegistryEntry[]; - get(id: string): SavedObjectRegistryEntry | undefined; -} - -const registry: SavedObjectRegistryEntry[] = []; - -export const savedObjectManagementRegistry: ISavedObjectsManagementRegistry = { - register: (service: SavedObjectRegistryEntry) => { - registry.push(service); - }, - all: () => { - return registry; - }, - get: (id: string) => { - return _.find(registry, { id }); - }, -}; - -const services = { - savedObjectsClient: npStart.core.savedObjects.client, - indexPatterns: npStart.plugins.data.indexPatterns, - search: npStart.plugins.data.search, - chrome: npStart.core.chrome, - overlays: npStart.core.overlays, -}; - -savedObjectManagementRegistry.register({ - id: 'savedVisualizations', - service: npStart.plugins.visualizations.savedVisualizationsLoader, - title: 'visualizations', -}); - -savedObjectManagementRegistry.register({ - id: 'savedDashboards', - service: npStart.plugins.dashboard.getSavedDashboardLoader(), - title: i18n.translate('kbn.dashboard.savedDashboardsTitle', { - defaultMessage: 'dashboards', - }), -}); +const registry = npSetup.plugins.savedObjectsManagement?.serviceRegistry; -savedObjectManagementRegistry.register({ - id: 'savedSearches', - service: createSavedSearchesLoader(services), - title: 'searches', -}); +export const savedObjectManagementRegistry = registry!; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index.js index 54717ad003adef..adc1741f57263a 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index.js @@ -17,5 +17,4 @@ * under the License. */ -import './objects'; import './index_patterns'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.html b/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.html deleted file mode 100644 index 090fb7b636685e..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.html +++ /dev/null @@ -1,5 +0,0 @@ - - -
-
-
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.js deleted file mode 100644 index c5901ca6ee6bf4..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/_objects.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { savedObjectManagementRegistry } from '../../saved_object_registry'; -import objectIndexHTML from './_objects.html'; -import uiRoutes from 'ui/routes'; -import chrome from 'ui/chrome'; -import { uiModules } from 'ui/modules'; -import React from 'react'; -import { render, unmountComponentAtNode } from 'react-dom'; -import { ObjectsTable } from './components/objects_table'; -import { I18nContext } from 'ui/i18n'; -import { get } from 'lodash'; -import { npStart } from 'ui/new_platform'; -import { getIndexBreadcrumbs } from './breadcrumbs'; - -const REACT_OBJECTS_TABLE_DOM_ELEMENT_ID = 'reactSavedObjectsTable'; - -function updateObjectsTable($scope, $injector) { - const indexPatterns = npStart.plugins.data.indexPatterns; - const $http = $injector.get('$http'); - const kbnUrl = $injector.get('kbnUrl'); - const config = $injector.get('config'); - - const savedObjectsClient = npStart.core.savedObjects.client; - const services = savedObjectManagementRegistry.all().map(obj => obj.service); - const uiCapabilites = npStart.core.application.capabilities; - - $scope.$$postDigest(() => { - const node = document.getElementById(REACT_OBJECTS_TABLE_DOM_ELEMENT_ID); - if (!node) { - return; - } - - render( - - { - if (object.meta.editUrl) { - kbnUrl.change(object.meta.editUrl); - $scope.$apply(); - } - }} - canGoInApp={object => { - const { inAppUrl } = object.meta; - return inAppUrl && get(uiCapabilites, inAppUrl.uiCapabilitiesPath); - }} - /> - , - node - ); - }); -} - -function destroyObjectsTable() { - const node = document.getElementById(REACT_OBJECTS_TABLE_DOM_ELEMENT_ID); - node && unmountComponentAtNode(node); -} - -uiRoutes - .when('/management/kibana/objects', { - template: objectIndexHTML, - k7Breadcrumbs: getIndexBreadcrumbs, - requireUICapability: 'management.kibana.objects', - }) - .when('/management/kibana/objects/:service', { - redirectTo: '/management/kibana/objects', - }); - -uiModules.get('apps/management').directive('kbnManagementObjects', function() { - return { - restrict: 'E', - controllerAs: 'managementObjectsController', - controller: function($scope, $injector) { - updateObjectsTable($scope, $injector); - $scope.$on('$destroy', destroyObjectsTable); - }, - }; -}); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.html b/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.html deleted file mode 100644 index 8bce0aabcd64a9..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.html +++ /dev/null @@ -1,5 +0,0 @@ - - -
-
-
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.js deleted file mode 100644 index a847055b40015a..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/_view.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { render, unmountComponentAtNode } from 'react-dom'; -import 'angular'; -import 'angular-elastic/elastic'; -import uiRoutes from 'ui/routes'; -import { uiModules } from 'ui/modules'; -import { I18nContext } from 'ui/i18n'; -import { npStart } from 'ui/new_platform'; -import objectViewHTML from './_view.html'; -import { getViewBreadcrumbs } from './breadcrumbs'; -import { savedObjectManagementRegistry } from '../../saved_object_registry'; -import { SavedObjectEdition } from './saved_object_view'; - -const REACT_OBJECTS_VIEW_DOM_ELEMENT_ID = 'reactSavedObjectsView'; - -uiRoutes.when('/management/kibana/objects/:service/:id', { - template: objectViewHTML, - k7Breadcrumbs: getViewBreadcrumbs, - requireUICapability: 'management.kibana.objects', -}); - -function createReactView($scope, $routeParams) { - const { service: serviceName, id: objectId, notFound } = $routeParams; - - const { savedObjects, overlays, notifications, application } = npStart.core; - - $scope.$$postDigest(() => { - const node = document.getElementById(REACT_OBJECTS_VIEW_DOM_ELEMENT_ID); - if (!node) { - return; - } - - render( - - - , - node - ); - }); -} - -function destroyReactView() { - const node = document.getElementById(REACT_OBJECTS_VIEW_DOM_ELEMENT_ID); - node && unmountComponentAtNode(node); -} - -uiModules - .get('apps/management', ['monospaced.elastic']) - .directive('kbnManagementObjectsView', function() { - return { - restrict: 'E', - controller: function($scope, $routeParams) { - createReactView($scope, $routeParams); - $scope.$on('$destroy', destroyReactView); - }, - }; - }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/breadcrumbs.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/breadcrumbs.js deleted file mode 100644 index e9082bfeb680d0..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/breadcrumbs.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { MANAGEMENT_BREADCRUMB } from 'ui/management'; -import { i18n } from '@kbn/i18n'; - -import { savedObjectManagementRegistry } from '../../saved_object_registry'; - -export function getIndexBreadcrumbs() { - return [ - MANAGEMENT_BREADCRUMB, - { - text: i18n.translate('kbn.management.savedObjects.indexBreadcrumb', { - defaultMessage: 'Saved objects', - }), - href: '#/management/kibana/objects', - }, - ]; -} - -export function getViewBreadcrumbs($routeParams) { - const serviceObj = savedObjectManagementRegistry.get($routeParams.service); - const { service } = serviceObj; - - return [ - ...getIndexBreadcrumbs(), - { - text: i18n.translate('kbn.management.savedObjects.editBreadcrumb', { - defaultMessage: 'Edit {savedObjectType}', - values: { savedObjectType: service.type }, - }), - }, - ]; -} diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/index.js deleted file mode 100644 index 601dea544361c8..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { ObjectsTable } from './objects_table'; diff --git a/src/legacy/server/saved_objects/saved_objects_mixin.js b/src/legacy/server/saved_objects/saved_objects_mixin.js index bcf766231dc9c7..3e71e1989ae7a3 100644 --- a/src/legacy/server/saved_objects/saved_objects_mixin.js +++ b/src/legacy/server/saved_objects/saved_objects_mixin.js @@ -78,13 +78,8 @@ export function savedObjectsMixin(kbnServer, server) { const provider = kbnServer.newPlatform.__internals.savedObjectsClientProvider; - const importAndExportableTypes = typeRegistry - .getImportableAndExportableTypes() - .map(type => type.name); - const service = { types: visibleTypes, - importAndExportableTypes, SavedObjectsClient, SavedObjectsRepository, getSavedObjectsRepository: createRepository, diff --git a/src/plugins/data/public/mocks.ts b/src/plugins/data/public/mocks.ts index ea1c27550867ee..2d43cae79ac989 100644 --- a/src/plugins/data/public/mocks.ts +++ b/src/plugins/data/public/mocks.ts @@ -62,6 +62,7 @@ const createStartContract = (): Start => { }, }), get: jest.fn().mockReturnValue(Promise.resolve({})), + clearCache: jest.fn(), } as unknown) as IndexPatternsContract, }; }; diff --git a/src/plugins/discover/public/mocks.ts b/src/plugins/discover/public/mocks.ts index bb05e3d4120013..218c59b5db07b6 100644 --- a/src/plugins/discover/public/mocks.ts +++ b/src/plugins/discover/public/mocks.ts @@ -37,6 +37,9 @@ const createStartContract = (): Start => { docViews: { DocViewer: jest.fn(() => null), }, + savedSearches: { + createLoader: jest.fn(), + }, }; return startContract; }; diff --git a/src/plugins/discover/public/plugin.ts b/src/plugins/discover/public/plugin.ts index d2797586bfdfbd..aa54823e6ec4df 100644 --- a/src/plugins/discover/public/plugin.ts +++ b/src/plugins/discover/public/plugin.ts @@ -21,12 +21,14 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { auto } from 'angular'; import { CoreSetup, Plugin } from 'kibana/public'; +import { SavedObjectLoader, SavedObjectKibanaServices } from '../../saved_objects/public'; import { DocViewInput, DocViewInputFn, DocViewRenderProps } from './doc_views/doc_views_types'; import { DocViewsRegistry } from './doc_views/doc_views_registry'; import { DocViewTable } from './components/table/table'; import { JsonCodeBlock } from './components/json_code_block/json_code_block'; import { DocViewer } from './components/doc_viewer/doc_viewer'; import { setDocViewsRegistry } from './services'; +import { createSavedSearchesLoader } from './saved_searches'; import './index.scss'; @@ -62,6 +64,13 @@ export interface DiscoverStart { */ DocViewer: React.ComponentType; }; + savedSearches: { + /** + * Create a {@link SavedObjectLoader | loader} to handle the saved searches type. + * @param services + */ + createLoader(services: SavedObjectKibanaServices): SavedObjectLoader; + }; } /** @@ -105,6 +114,9 @@ export class DiscoverPlugin implements Plugin { docViews: { DocViewer, }, + savedSearches: { + createLoader: createSavedSearchesLoader, + }, }; } } diff --git a/src/plugins/management/public/mocks/index.ts b/src/plugins/management/public/mocks/index.ts index 6099a2cc32afc1..82789d3c3f55f1 100644 --- a/src/plugins/management/public/mocks/index.ts +++ b/src/plugins/management/public/mocks/index.ts @@ -18,12 +18,21 @@ */ import { ManagementSetup, ManagementStart } from '../types'; +import { ManagementSection } from '../management_section'; + +const createManagementSectionMock = (): jest.Mocked> => { + return { + registerApp: jest.fn(), + getApp: jest.fn(), + getAppsEnabled: jest.fn().mockReturnValue([]), + }; +}; const createSetupContract = (): DeeplyMockedKeys => ({ sections: { register: jest.fn(), - getSection: jest.fn(), - getAllSections: jest.fn(), + getSection: jest.fn().mockReturnValue(createManagementSectionMock()), + getAllSections: jest.fn().mockReturnValue([]), }, }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/index.js b/src/plugins/saved_objects_management/common/index.ts similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/index.js rename to src/plugins/saved_objects_management/common/index.ts index ac1e7bac06c874..67c3ae6d934ab5 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/index.js +++ b/src/plugins/saved_objects_management/common/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { Header } from './header'; +export { SavedObjectRelation, SavedObjectWithMetadata, SavedObjectMetadata } from './types'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/types.ts b/src/plugins/saved_objects_management/common/types.ts similarity index 74% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/types.ts rename to src/plugins/saved_objects_management/common/types.ts index 6a89142bc97983..be52d8e6486e26 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/types.ts +++ b/src/plugins/saved_objects_management/common/types.ts @@ -17,8 +17,12 @@ * under the License. */ -import { SavedObject, SavedObjectReference } from 'src/core/public'; +import { SavedObject } from 'src/core/types'; +/** + * The metadata injected into a {@link SavedObject | saved object} when returning + * {@link SavedObjectWithMetadata | enhanced objects} from the plugin API endpoints. + */ export interface SavedObjectMetadata { icon?: string; title?: string; @@ -26,31 +30,19 @@ export interface SavedObjectMetadata { inAppUrl?: { path: string; uiCapabilitiesPath: string }; } +/** + * A {@link SavedObject | saved object} enhanced with meta properties used by the client-side plugin. + */ export type SavedObjectWithMetadata = SavedObject & { meta: SavedObjectMetadata; }; +/** + * Represents a relation between two {@link SavedObject | saved object} + */ export interface SavedObjectRelation { id: string; type: string; relationship: 'child' | 'parent'; meta: SavedObjectMetadata; } - -export interface ObjectField { - type: FieldType; - name: string; - value: any; -} - -export type FieldType = 'text' | 'number' | 'boolean' | 'array' | 'json'; - -export interface FieldState { - value?: any; - invalid?: boolean; -} - -export interface SubmittedFormData { - attributes: any; - references: SavedObjectReference[]; -} diff --git a/src/plugins/saved_objects_management/kibana.json b/src/plugins/saved_objects_management/kibana.json index e1f14b0e3c59d8..22135ce4558ae4 100644 --- a/src/plugins/saved_objects_management/kibana.json +++ b/src/plugins/saved_objects_management/kibana.json @@ -3,5 +3,6 @@ "version": "kibana", "server": true, "ui": true, - "requiredPlugins": ["home"] + "requiredPlugins": ["home", "management", "data"], + "optionalPlugins": ["dashboard", "visualizations", "discover"] } diff --git a/src/plugins/saved_objects_management/public/index.ts b/src/plugins/saved_objects_management/public/index.ts index 7fb2f137d7d842..b20b320bc6645f 100644 --- a/src/plugins/saved_objects_management/public/index.ts +++ b/src/plugins/saved_objects_management/public/index.ts @@ -22,10 +22,14 @@ import { SavedObjectsManagementPlugin } from './plugin'; export { SavedObjectsManagementPluginSetup, SavedObjectsManagementPluginStart } from './plugin'; export { - ISavedObjectsManagementActionRegistry, + SavedObjectsManagementActionServiceSetup, + SavedObjectsManagementActionServiceStart, SavedObjectsManagementAction, SavedObjectsManagementRecord, + ISavedObjectsManagementServiceRegistry, + SavedObjectsManagementServiceRegistryEntry, } from './services'; +export { SavedObjectRelation, SavedObjectWithMetadata, SavedObjectMetadata } from './types'; export function plugin(initializerContext: PluginInitializerContext) { return new SavedObjectsManagementPlugin(); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/case_conversion.test.ts b/src/plugins/saved_objects_management/public/lib/case_conversion.test.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/case_conversion.test.ts rename to src/plugins/saved_objects_management/public/lib/case_conversion.test.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/case_conversion.ts b/src/plugins/saved_objects_management/public/lib/case_conversion.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/case_conversion.ts rename to src/plugins/saved_objects_management/public/lib/case_conversion.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.test.ts b/src/plugins/saved_objects_management/public/lib/create_field_list.test.ts similarity index 96% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.test.ts rename to src/plugins/saved_objects_management/public/lib/create_field_list.test.ts index 345716f91ea886..e7d6754ac4d05a 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.test.ts +++ b/src/plugins/saved_objects_management/public/lib/create_field_list.test.ts @@ -17,8 +17,8 @@ * under the License. */ -import { SimpleSavedObject, SavedObjectReference } from '../../../../../../../../core/public'; -import { savedObjectsServiceMock } from '../../../../../../../../core/public/mocks'; +import { SimpleSavedObject, SavedObjectReference } from '../../../../core/public'; +import { savedObjectsServiceMock } from '../../../../core/public/mocks'; import { createFieldList } from './create_field_list'; const savedObjectClientMock = savedObjectsServiceMock.createStartContract().client; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.ts b/src/plugins/saved_objects_management/public/lib/create_field_list.ts similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.ts rename to src/plugins/saved_objects_management/public/lib/create_field_list.ts index 88a1184d5d70f9..5d87c11a871982 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/create_field_list.ts +++ b/src/plugins/saved_objects_management/public/lib/create_field_list.ts @@ -18,10 +18,10 @@ */ import { forOwn, indexBy, isNumber, isBoolean, isPlainObject, isString } from 'lodash'; -import { SimpleSavedObject } from '../../../../../../../../core/public'; -import { castEsToKbnFieldTypeName } from '../../../../../../../../plugins/data/public'; -import { ObjectField } from '../types'; -import { SavedObjectLoader } from '../../../../../../../../plugins/saved_objects/public'; +import { SimpleSavedObject } from '../../../../core/public'; +import { castEsToKbnFieldTypeName } from '../../../data/public'; +import { ObjectField } from '../management_section/types'; +import { SavedObjectLoader } from '../../../saved_objects/public'; const maxRecursiveIterations = 20; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/extract_export_details.test.ts b/src/plugins/saved_objects_management/public/lib/extract_export_details.test.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/extract_export_details.test.ts rename to src/plugins/saved_objects_management/public/lib/extract_export_details.test.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/extract_export_details.ts b/src/plugins/saved_objects_management/public/lib/extract_export_details.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/extract_export_details.ts rename to src/plugins/saved_objects_management/public/lib/extract_export_details.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type_and_search.ts b/src/plugins/saved_objects_management/public/lib/fetch_export_by_type_and_search.ts similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type_and_search.ts rename to src/plugins/saved_objects_management/public/lib/fetch_export_by_type_and_search.ts index d3e527b9f96b72..e0f005fab2a3bc 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_by_type_and_search.ts +++ b/src/plugins/saved_objects_management/public/lib/fetch_export_by_type_and_search.ts @@ -17,16 +17,15 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; +import { HttpStart } from 'src/core/public'; export async function fetchExportByTypeAndSearch( + http: HttpStart, types: string[], search: string | undefined, includeReferencesDeep: boolean = false ): Promise { - return await kfetch({ - method: 'POST', - pathname: '/api/saved_objects/_export', + return http.post('/api/saved_objects/_export', { body: JSON.stringify({ type: types, search, diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_objects.ts b/src/plugins/saved_objects_management/public/lib/fetch_export_objects.ts similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_objects.ts rename to src/plugins/saved_objects_management/public/lib/fetch_export_objects.ts index 744f8ef38af47a..745d3758371a3b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/fetch_export_objects.ts +++ b/src/plugins/saved_objects_management/public/lib/fetch_export_objects.ts @@ -17,15 +17,14 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; +import { HttpStart } from 'src/core/public'; export async function fetchExportObjects( + http: HttpStart, objects: any[], includeReferencesDeep: boolean = false ): Promise { - return await kfetch({ - method: 'POST', - pathname: '/api/saved_objects/_export', + return http.post('/api/saved_objects/_export', { body: JSON.stringify({ objects, includeReferencesDeep, diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/find_objects.ts b/src/plugins/saved_objects_management/public/lib/find_objects.ts similarity index 57% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/find_objects.ts rename to src/plugins/saved_objects_management/public/lib/find_objects.ts index 24e08f0524f629..5a77d3ae2f663b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/find_objects.ts +++ b/src/plugins/saved_objects_management/public/lib/find_objects.ts @@ -17,16 +17,27 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; -import { SavedObjectsFindOptions } from 'src/core/public'; +import { HttpStart, SavedObjectsFindOptions } from 'src/core/public'; import { keysToCamelCaseShallow } from './case_conversion'; +import { SavedObjectWithMetadata } from '../types'; -export async function findObjects(findOptions: SavedObjectsFindOptions) { - const response = await kfetch({ - method: 'GET', - pathname: '/api/kibana/management/saved_objects/_find', - query: findOptions as Record, - }); +interface SavedObjectsFindResponse { + total: number; + page: number; + perPage: number; + savedObjects: SavedObjectWithMetadata[]; +} + +export async function findObjects( + http: HttpStart, + findOptions: SavedObjectsFindOptions +): Promise { + const response = await http.get>( + '/api/kibana/management/saved_objects/_find', + { + query: findOptions as Record, + } + ); - return keysToCamelCaseShallow(response); + return keysToCamelCaseShallow(response) as SavedObjectsFindResponse; } diff --git a/src/plugins/saved_objects_management/public/lib/get_allowed_types.ts b/src/plugins/saved_objects_management/public/lib/get_allowed_types.ts new file mode 100644 index 00000000000000..7d952ebf2ca141 --- /dev/null +++ b/src/plugins/saved_objects_management/public/lib/get_allowed_types.ts @@ -0,0 +1,31 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { HttpStart } from 'src/core/public'; + +interface GetAllowedTypesResponse { + types: string[]; +} + +export async function getAllowedTypes(http: HttpStart) { + const response = await http.get( + '/api/kibana/management/saved_objects/_allowed_types' + ); + return response.types; +} diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_default_title.ts b/src/plugins/saved_objects_management/public/lib/get_default_title.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_default_title.ts rename to src/plugins/saved_objects_management/public/lib/get_default_title.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.test.ts b/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts similarity index 67% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.test.ts rename to src/plugins/saved_objects_management/public/lib/get_relationships.test.ts index b45b51b4de2937..d79447378dde55 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.test.ts +++ b/src/plugins/saved_objects_management/public/lib/get_relationships.test.ts @@ -17,44 +17,43 @@ * under the License. */ +import { httpServiceMock } from '../../../../core/public/mocks'; import { getRelationships } from './get_relationships'; describe('getRelationships', () => { - it('should make an http request', async () => { - const $http = jest.fn() as any; - const basePath = 'test'; + let httpMock: ReturnType; - await getRelationships('dashboard', '1', ['search', 'index-pattern'], $http, basePath); - expect($http.mock.calls.length).toBe(1); + beforeEach(() => { + httpMock = httpServiceMock.createSetupContract(); + }); + + it('should make an http request', async () => { + await getRelationships(httpMock, 'dashboard', '1', ['search', 'index-pattern']); + expect(httpMock.get).toHaveBeenCalledTimes(1); }); it('should handle successful responses', async () => { - const $http = jest.fn().mockImplementation(() => ({ data: [1, 2] })) as any; - const basePath = 'test'; - - const response = await getRelationships( - 'dashboard', - '1', - ['search', 'index-pattern'], - $http, - basePath - ); + httpMock.get.mockResolvedValue([1, 2]); + + const response = await getRelationships(httpMock, 'dashboard', '1', [ + 'search', + 'index-pattern', + ]); expect(response).toEqual([1, 2]); }); it('should handle errors', async () => { - const $http = jest.fn().mockImplementation(() => { + httpMock.get.mockImplementation(() => { const err = new Error(); (err as any).data = { error: 'Test error', statusCode: 500, }; throw err; - }) as any; - const basePath = 'test'; + }); await expect( - getRelationships('dashboard', '1', ['search', 'index-pattern'], $http, basePath) + getRelationships(httpMock, 'dashboard', '1', ['search', 'index-pattern']) ).rejects.toThrowErrorMatchingInlineSnapshot(`"Test error"`); }); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.ts b/src/plugins/saved_objects_management/public/lib/get_relationships.ts similarity index 67% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.ts rename to src/plugins/saved_objects_management/public/lib/get_relationships.ts index 07bdf2db68fa2f..bf2e651aa6593c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_relationships.ts +++ b/src/plugins/saved_objects_management/public/lib/get_relationships.ts @@ -17,36 +17,30 @@ * under the License. */ -import { IHttpService } from 'angular'; +import { HttpStart } from 'src/core/public'; import { get } from 'lodash'; import { SavedObjectRelation } from '../types'; export async function getRelationships( + http: HttpStart, type: string, id: string, - savedObjectTypes: string[], - $http: IHttpService, - basePath: string + savedObjectTypes: string[] ): Promise { - const url = `${basePath}/api/kibana/management/saved_objects/relationships/${encodeURIComponent( + const url = `/api/kibana/management/saved_objects/relationships/${encodeURIComponent( type )}/${encodeURIComponent(id)}`; - const options = { - method: 'GET', - url, - params: { - savedObjectTypes, - }, - }; - try { - const response = await $http(options); - return response?.data; - } catch (resp) { - const respBody = get(resp, 'data', {}) as any; - const err = new Error(respBody.message || respBody.error || `${resp.status} Response`); + return await http.get(url, { + query: { + savedObjectTypes, + }, + }); + } catch (respError) { + const respBody = get(respError, 'data', {}) as any; + const err = new Error(respBody.message || respBody.error || `${respError.status} Response`); - (err as any).statusCode = respBody.statusCode || resp.status; + (err as any).statusCode = respBody.statusCode || respError.status; (err as any).body = respBody; throw err; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_saved_object_counts.ts b/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts similarity index 72% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_saved_object_counts.ts rename to src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts index d4dda1190bc437..dcf59142e73e31 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_saved_object_counts.ts +++ b/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts @@ -17,18 +17,15 @@ * under the License. */ -import { IHttpService } from 'angular'; -import chrome from 'ui/chrome'; +import { HttpStart } from 'src/core/public'; -const apiBase = chrome.addBasePath('/api/kibana/management/saved_objects/scroll'); export async function getSavedObjectCounts( - $http: IHttpService, + http: HttpStart, typesToInclude: string[], - searchString: string + searchString?: string ): Promise> { - const results = await $http.post>(`${apiBase}/counts`, { - typesToInclude, - searchString, - }); - return results.data; + return await http.post>( + `/api/kibana/management/saved_objects/scroll/counts`, + { body: JSON.stringify({ typesToInclude, searchString }) } + ); } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_saved_object_label.ts b/src/plugins/saved_objects_management/public/lib/get_saved_object_label.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/get_saved_object_label.ts rename to src/plugins/saved_objects_management/public/lib/get_saved_object_label.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_file.ts b/src/plugins/saved_objects_management/public/lib/import_file.ts similarity index 75% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_file.ts rename to src/plugins/saved_objects_management/public/lib/import_file.ts index 9bd5fbeed3a4c8..96263452253ba2 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_file.ts +++ b/src/plugins/saved_objects_management/public/lib/import_file.ts @@ -17,14 +17,18 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; +import { HttpStart, SavedObjectsImportError } from 'src/core/public'; -export async function importFile(file: Blob, overwriteAll: boolean = false) { +interface ImportResponse { + success: boolean; + successCount: number; + errors?: SavedObjectsImportError[]; +} + +export async function importFile(http: HttpStart, file: File, overwriteAll: boolean = false) { const formData = new FormData(); formData.append('file', file); - return await kfetch({ - method: 'POST', - pathname: '/api/saved_objects/_import', + return await http.post('/api/saved_objects/_import', { body: formData, headers: { // Important to be undefined, it forces proper headers to be set for FormData diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_legacy_file.test.ts b/src/plugins/saved_objects_management/public/lib/import_legacy_file.test.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_legacy_file.test.ts rename to src/plugins/saved_objects_management/public/lib/import_legacy_file.test.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_legacy_file.ts b/src/plugins/saved_objects_management/public/lib/import_legacy_file.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/import_legacy_file.ts rename to src/plugins/saved_objects_management/public/lib/import_legacy_file.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/in_app_url.test.ts b/src/plugins/saved_objects_management/public/lib/in_app_url.test.ts similarity index 98% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/in_app_url.test.ts rename to src/plugins/saved_objects_management/public/lib/in_app_url.test.ts index c0d6716391a1f4..09e08e6ec333b0 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/in_app_url.test.ts +++ b/src/plugins/saved_objects_management/public/lib/in_app_url.test.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Capabilities } from '../../../../../../../../core/public'; +import { Capabilities } from '../../../../core/public'; import { canViewInApp } from './in_app_url'; const createCapabilities = (sections: Record): Capabilities => { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/in_app_url.ts b/src/plugins/saved_objects_management/public/lib/in_app_url.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/in_app_url.ts rename to src/plugins/saved_objects_management/public/lib/in_app_url.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.ts b/src/plugins/saved_objects_management/public/lib/index.ts similarity index 94% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.ts rename to src/plugins/saved_objects_management/public/lib/index.ts index ecdfa6549a54ea..7021744095651b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/index.ts +++ b/src/plugins/saved_objects_management/public/lib/index.ts @@ -43,3 +43,5 @@ export { export { getDefaultTitle } from './get_default_title'; export { findObjects } from './find_objects'; export { extractExportDetails, SavedObjectsExportResultDetails } from './extract_export_details'; +export { createFieldList } from './create_field_list'; +export { getAllowedTypes } from './get_allowed_types'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/log_legacy_import.ts b/src/plugins/saved_objects_management/public/lib/log_legacy_import.ts similarity index 81% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/log_legacy_import.ts rename to src/plugins/saved_objects_management/public/lib/log_legacy_import.ts index 9bbafe3e69c988..9ec3c85b91c22c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/log_legacy_import.ts +++ b/src/plugins/saved_objects_management/public/lib/log_legacy_import.ts @@ -17,11 +17,8 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; +import { HttpStart } from 'src/core/public'; -export async function logLegacyImport() { - return await kfetch({ - method: 'POST', - pathname: '/api/saved_objects/_log_legacy_import', - }); +export async function logLegacyImport(http: HttpStart) { + return http.post('/api/saved_objects/_log_legacy_import'); } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/numeric.ts b/src/plugins/saved_objects_management/public/lib/numeric.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/numeric.ts rename to src/plugins/saved_objects_management/public/lib/numeric.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.test.ts b/src/plugins/saved_objects_management/public/lib/parse_query.test.ts similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.test.ts rename to src/plugins/saved_objects_management/public/lib/parse_query.test.ts index 77b34eccd9c6ff..f62234eaf4e94c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.test.ts +++ b/src/plugins/saved_objects_management/public/lib/parse_query.test.ts @@ -25,6 +25,6 @@ describe('getQueryText', () => { getTermClauses: () => [{ value: 'foo' }, { value: 'bar' }], getFieldClauses: () => [{ value: 'lala' }, { value: 'lolo' }], }; - expect(parseQuery({ ast })).toEqual({ queryText: 'foo bar', visibleTypes: 'lala' }); + expect(parseQuery({ ast } as any)).toEqual({ queryText: 'foo bar', visibleTypes: 'lala' }); }); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.ts b/src/plugins/saved_objects_management/public/lib/parse_query.ts similarity index 77% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.ts rename to src/plugins/saved_objects_management/public/lib/parse_query.ts index 9b33deedafd956..f5b7b69ea049cf 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/parse_query.ts +++ b/src/plugins/saved_objects_management/public/lib/parse_query.ts @@ -17,9 +17,16 @@ * under the License. */ -export function parseQuery(query: any) { - let queryText; - let visibleTypes; +import { Query } from '@elastic/eui'; + +interface ParsedQuery { + queryText?: string; + visibleTypes?: string[]; +} + +export function parseQuery(query: Query): ParsedQuery { + let queryText: string | undefined; + let visibleTypes: string[] | undefined; if (query) { if (query.ast.getTermClauses().length) { @@ -29,7 +36,7 @@ export function parseQuery(query: any) { .join(' '); } if (query.ast.getFieldClauses('type')) { - visibleTypes = query.ast.getFieldClauses('type')[0].value; + visibleTypes = query.ast.getFieldClauses('type')[0].value as string[]; } } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/process_import_response.test.ts b/src/plugins/saved_objects_management/public/lib/process_import_response.test.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/process_import_response.test.ts rename to src/plugins/saved_objects_management/public/lib/process_import_response.test.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/process_import_response.ts b/src/plugins/saved_objects_management/public/lib/process_import_response.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/process_import_response.ts rename to src/plugins/saved_objects_management/public/lib/process_import_response.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.test.ts b/src/plugins/saved_objects_management/public/lib/resolve_import_errors.test.ts similarity index 90% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.test.ts rename to src/plugins/saved_objects_management/public/lib/resolve_import_errors.test.ts index b94b0a9d1291f8..86eebad7ae787b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.test.ts +++ b/src/plugins/saved_objects_management/public/lib/resolve_import_errors.test.ts @@ -17,14 +17,10 @@ * under the License. */ -jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); - import { SavedObjectsImportUnknownError } from 'src/core/public'; -import { kfetch } from 'ui/kfetch'; +import { httpServiceMock } from '../../../../core/public/mocks'; import { resolveImportErrors } from './resolve_import_errors'; -const kfetchMock = kfetch as jest.Mock; - function getFormData(form: Map) { const formData: Record = {}; for (const [key, val] of form.entries()) { @@ -39,13 +35,20 @@ function getFormData(form: Map) { describe('resolveImportErrors', () => { const getConflictResolutions = jest.fn(); + let httpMock: ReturnType; beforeEach(() => { + httpMock = httpServiceMock.createSetupContract(); jest.resetAllMocks(); }); + const extractBodyFromCall = (index: number): Map => { + return (httpMock.post.mock.calls[index] as any)[1].body; + }; + test('works with empty import failures', async () => { const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -62,6 +65,7 @@ Object { test(`doesn't retry if only unknown failures are passed in`, async () => { const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -98,7 +102,7 @@ Object { }); test('resolves conflicts', async () => { - kfetchMock.mockResolvedValueOnce({ + httpMock.post.mockResolvedValueOnce({ success: true, successCount: 1, }); @@ -107,6 +111,7 @@ Object { 'a:2': false, }); const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -139,7 +144,8 @@ Object { "status": "success", } `); - const formData = getFormData(kfetchMock.mock.calls[0][0].body); + + const formData = getFormData(extractBodyFromCall(0)); expect(formData).toMatchInlineSnapshot(` Object { "file": "undefined", @@ -156,12 +162,13 @@ Object { }); test('resolves missing references', async () => { - kfetchMock.mockResolvedValueOnce({ + httpMock.post.mockResolvedValueOnce({ success: true, successCount: 2, }); getConflictResolutions.mockResolvedValueOnce({}); const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -203,7 +210,7 @@ Object { "status": "success", } `); - const formData = getFormData(kfetchMock.mock.calls[0][0].body); + const formData = getFormData(extractBodyFromCall(0)); expect(formData).toMatchInlineSnapshot(` Object { "file": "undefined", @@ -232,6 +239,7 @@ Object { test(`doesn't resolve missing references if newIndexPatternId isn't defined`, async () => { getConflictResolutions.mockResolvedValueOnce({}); const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -276,7 +284,7 @@ Object { }); test('handles missing references then conflicts on the same errored objects', async () => { - kfetchMock.mockResolvedValueOnce({ + httpMock.post.mockResolvedValueOnce({ success: false, successCount: 0, errors: [ @@ -289,7 +297,7 @@ Object { }, ], }); - kfetchMock.mockResolvedValueOnce({ + httpMock.post.mockResolvedValueOnce({ success: true, successCount: 1, }); @@ -298,6 +306,7 @@ Object { 'a:1': true, }); const result = await resolveImportErrors({ + http: httpMock, getConflictResolutions, state: { importCount: 0, @@ -334,7 +343,7 @@ Object { "status": "success", } `); - const formData1 = getFormData(kfetchMock.mock.calls[0][0].body); + const formData1 = getFormData(extractBodyFromCall(0)); expect(formData1).toMatchInlineSnapshot(` Object { "file": "undefined", @@ -354,7 +363,7 @@ Object { ], } `); - const formData2 = getFormData(kfetchMock.mock.calls[1][0].body); + const formData2 = getFormData(extractBodyFromCall(1)); expect(formData2).toMatchInlineSnapshot(` Object { "file": "undefined", diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.ts b/src/plugins/saved_objects_management/public/lib/resolve_import_errors.ts similarity index 95% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.ts rename to src/plugins/saved_objects_management/public/lib/resolve_import_errors.ts index dcc282402147da..0aea7114bad1c4 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_import_errors.ts +++ b/src/plugins/saved_objects_management/public/lib/resolve_import_errors.ts @@ -17,7 +17,7 @@ * under the License. */ -import { kfetch } from 'ui/kfetch'; +import { HttpStart } from 'src/core/public'; import { FailedImport } from './process_import_response'; interface RetryObject { @@ -27,13 +27,11 @@ interface RetryObject { replaceReferences?: any[]; } -async function callResolveImportErrorsApi(file: File, retries: any) { +async function callResolveImportErrorsApi(http: HttpStart, file: File, retries: any) { const formData = new FormData(); formData.append('file', file); formData.append('retries', JSON.stringify(retries)); - return await kfetch({ - method: 'POST', - pathname: '/api/saved_objects/_resolve_import_errors', + return http.post('/api/saved_objects/_resolve_import_errors', { headers: { // Important to be undefined, it forces proper headers to be set for FormData 'Content-Type': undefined, @@ -100,9 +98,11 @@ function mapImportFailureToRetryObject({ } export async function resolveImportErrors({ + http, getConflictResolutions, state, }: { + http: HttpStart; getConflictResolutions: (objects: any[]) => Promise>; state: { importCount: number; failedImports?: FailedImport[] } & Record; }) { @@ -170,7 +170,7 @@ export async function resolveImportErrors({ } // Call API - const response = await callResolveImportErrorsApi(file, retries); + const response = await callResolveImportErrorsApi(http, file, retries); successImportCount += response.successCount; importFailures = []; for (const { error, ...obj } of response.errors || []) { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.test.ts b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.test.ts similarity index 98% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.test.ts rename to src/plugins/saved_objects_management/public/lib/resolve_saved_objects.test.ts index dc6d2643145ffc..23c2b751695559 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.test.ts +++ b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.test.ts @@ -23,11 +23,8 @@ import { saveObjects, saveObject, } from './resolve_saved_objects'; -import { - SavedObject, - SavedObjectLoader, -} from '../../../../../../../../plugins/saved_objects/public'; -import { IndexPatternsContract } from '../../../../../../../../plugins/data/public'; +import { SavedObject, SavedObjectLoader } from '../../../saved_objects/public'; +import { IndexPatternsContract } from '../../../data/public'; class SavedObjectNotFound extends Error { constructor(options: Record) { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.ts b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts similarity index 94% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.ts rename to src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts index d9473367f7502e..15e03ed39d88c8 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/lib/resolve_saved_objects.ts +++ b/src/plugins/saved_objects_management/public/lib/resolve_saved_objects.ts @@ -20,15 +20,8 @@ import { i18n } from '@kbn/i18n'; import { cloneDeep } from 'lodash'; import { OverlayStart, SavedObjectReference } from 'src/core/public'; -import { - SavedObject, - SavedObjectLoader, -} from '../../../../../../../../plugins/saved_objects/public'; -import { - IndexPatternsContract, - IIndexPattern, - createSearchSource, -} from '../../../../../../../../plugins/data/public'; +import { SavedObject, SavedObjectLoader } from '../../../saved_objects/public'; +import { IndexPatternsContract, IIndexPattern, createSearchSource } from '../../../data/public'; type SavedObjectsRawDoc = Record; @@ -55,7 +48,7 @@ function addJsonFieldToIndexPattern( target[fieldName] = JSON.parse(sourceString); } catch (error) { throw new Error( - i18n.translate('kbn.management.objects.parsingFieldErrorMessage', { + i18n.translate('savedObjectsManagement.parsingFieldErrorMessage', { defaultMessage: 'Error encountered parsing {fieldName} for index pattern {indexName}: {errorMessage}', values: { @@ -103,18 +96,21 @@ async function importIndexPattern( if (!newId) { // We can override and we want to prompt for confirmation const isConfirmed = await openConfirm( - i18n.translate('kbn.management.indexPattern.confirmOverwriteLabel', { + i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteLabel', { values: { title }, defaultMessage: "Are you sure you want to overwrite '{title}'?", }), { - title: i18n.translate('kbn.management.indexPattern.confirmOverwriteTitle', { + title: i18n.translate('savedObjectsManagement.indexPattern.confirmOverwriteTitle', { defaultMessage: 'Overwrite {type}?', values: { type }, }), - confirmButtonText: i18n.translate('kbn.management.indexPattern.confirmOverwriteButton', { - defaultMessage: 'Overwrite', - }), + confirmButtonText: i18n.translate( + 'savedObjectsManagement.indexPattern.confirmOverwriteButton', + { + defaultMessage: 'Overwrite', + } + ), } ); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/index.js b/src/plugins/saved_objects_management/public/management_section/index.ts similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/index.js rename to src/plugins/saved_objects_management/public/management_section/index.ts index 522b1ce83a6b69..1bccb2102f3b45 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/index.js +++ b/src/plugins/saved_objects_management/public/management_section/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { Relationships } from './relationships'; +export { mountManagementSection } from './mount_section'; diff --git a/src/plugins/saved_objects_management/public/management_section/mount_section.tsx b/src/plugins/saved_objects_management/public/management_section/mount_section.tsx new file mode 100644 index 00000000000000..6f03f97079bb6e --- /dev/null +++ b/src/plugins/saved_objects_management/public/management_section/mount_section.tsx @@ -0,0 +1,211 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import { HashRouter, Switch, Route, useParams, useLocation } from 'react-router-dom'; +import { parse } from 'query-string'; +import { get } from 'lodash'; +import { i18n } from '@kbn/i18n'; +import { I18nProvider } from '@kbn/i18n/react'; +import { CoreSetup, CoreStart, ChromeBreadcrumb, Capabilities } from 'src/core/public'; +import { ManagementAppMountParams } from '../../../management/public'; +import { DataPublicPluginStart } from '../../../data/public'; +import { StartDependencies, SavedObjectsManagementPluginStart } from '../plugin'; +import { + ISavedObjectsManagementServiceRegistry, + SavedObjectsManagementActionServiceStart, +} from '../services'; +import { SavedObjectsTable } from './objects_table'; +import { SavedObjectEdition } from './object_view'; +import { getAllowedTypes } from './../lib'; + +interface MountParams { + core: CoreSetup; + serviceRegistry: ISavedObjectsManagementServiceRegistry; + mountParams: ManagementAppMountParams; +} + +let allowedObjectTypes: string[] | undefined; + +export const mountManagementSection = async ({ + core, + mountParams, + serviceRegistry, +}: MountParams) => { + const [coreStart, { data }, pluginStart] = await core.getStartServices(); + const { element, basePath, setBreadcrumbs } = mountParams; + if (allowedObjectTypes === undefined) { + allowedObjectTypes = await getAllowedTypes(coreStart.http); + } + + const capabilities = coreStart.application.capabilities; + + ReactDOM.render( + + + + + + + + + + + + + + + + , + element + ); + + return () => { + ReactDOM.unmountComponentAtNode(element); + }; +}; + +const RedirectToHomeIfUnauthorized: React.FunctionComponent<{ + capabilities: Capabilities; +}> = ({ children, capabilities }) => { + const allowed = capabilities?.management?.kibana?.objects ?? false; + if (!allowed) { + window.location.hash = '/home'; + return null; + } + return children! as React.ReactElement; +}; + +const SavedObjectsEditionPage = ({ + coreStart, + serviceRegistry, + setBreadcrumbs, +}: { + coreStart: CoreStart; + serviceRegistry: ISavedObjectsManagementServiceRegistry; + setBreadcrumbs: (crumbs: ChromeBreadcrumb[]) => void; +}) => { + const { service: serviceName, id } = useParams<{ service: string; id: string }>(); + const capabilities = coreStart.application.capabilities; + + const { search } = useLocation(); + const query = parse(search); + const service = serviceRegistry.get(serviceName); + + useEffect(() => { + setBreadcrumbs([ + { + text: i18n.translate('savedObjectsManagement.breadcrumb.index', { + defaultMessage: 'Saved objects', + }), + href: '#/management/kibana/objects', + }, + { + text: i18n.translate('savedObjectsManagement.breadcrumb.edit', { + defaultMessage: 'Edit {savedObjectType}', + values: { savedObjectType: service?.service.type ?? 'object' }, + }), + }, + ]); + }, [setBreadcrumbs, service]); + + return ( + + ); +}; + +const SavedObjectsTablePage = ({ + coreStart, + dataStart, + allowedTypes, + serviceRegistry, + actionRegistry, + setBreadcrumbs, +}: { + coreStart: CoreStart; + dataStart: DataPublicPluginStart; + allowedTypes: string[]; + serviceRegistry: ISavedObjectsManagementServiceRegistry; + actionRegistry: SavedObjectsManagementActionServiceStart; + setBreadcrumbs: (crumbs: ChromeBreadcrumb[]) => void; +}) => { + const capabilities = coreStart.application.capabilities; + const itemsPerPage = coreStart.uiSettings.get('savedObjects:perPage', 50); + + useEffect(() => { + setBreadcrumbs([ + { + text: i18n.translate('savedObjectsManagement.breadcrumb.index', { + defaultMessage: 'Saved objects', + }), + href: '#/management/kibana/objects', + }, + ]); + }, [setBreadcrumbs]); + + return ( + { + const { editUrl } = savedObject.meta; + if (editUrl) { + // previously, kbnUrl.change(object.meta.editUrl); was used. + // using direct access to location.hash seems the only option for now, + // as using react-router-dom will prefix the url with the router's basename + // which should be ignored there. + window.location.hash = editUrl; + } + }} + canGoInApp={savedObject => { + const { inAppUrl } = savedObject.meta; + return inAppUrl ? get(capabilities, inAppUrl.uiCapabilitiesPath) : false; + }} + /> + ); +}; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/header.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/header.test.tsx.snap similarity index 96% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/header.test.tsx.snap rename to src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/header.test.tsx.snap index 7e1f7ea12b0147..d56776c2be9d71 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/header.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/header.test.tsx.snap @@ -23,7 +23,7 @@ exports[`Intro component renders correctly 1`] = ` > } @@ -37,7 +37,7 @@ exports[`Intro component renders correctly 1`] = ` > Proceed with caution! @@ -53,7 +53,7 @@ exports[`Intro component renders correctly 1`] = `
Modifying objects is for advanced users only. Object properties are not validated and invalid objects could cause errors, data loss, or worse. Unless someone with intimate knowledge of the code told you to be in here, you probably shouldn’t be. diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/not_found_errors.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/not_found_errors.test.tsx.snap rename to src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap index ac565a000813e0..d5372fd5b18d96 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/__snapshots__/not_found_errors.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap @@ -10,7 +10,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] = title={ } @@ -39,7 +39,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] = > There is a problem with this saved object @@ -55,7 +55,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] =
The index pattern associated with this object no longer exists. @@ -64,7 +64,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] =
If you know what this error means, go ahead and fix it — otherwise click the delete button above. @@ -87,7 +87,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type title={ } @@ -116,7 +116,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type > There is a problem with this saved object @@ -132,7 +132,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type
A field associated with this object no longer exists in the index pattern. @@ -141,7 +141,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type
If you know what this error means, go ahead and fix it — otherwise click the delete button above. @@ -164,7 +164,7 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = ` title={ } @@ -193,7 +193,7 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = ` > There is a problem with this saved object @@ -209,7 +209,7 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = `
The saved search associated with this object no longer exists. @@ -218,7 +218,7 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = `
If you know what this error means, go ahead and fix it — otherwise click the delete button above. @@ -241,7 +241,7 @@ exports[`NotFoundErrors component renders correctly for unknown type 1`] = ` title={ } @@ -270,7 +270,7 @@ exports[`NotFoundErrors component renders correctly for unknown type 1`] = ` > There is a problem with this saved object @@ -287,7 +287,7 @@ exports[`NotFoundErrors component renders correctly for unknown type 1`] = `
If you know what this error means, go ahead and fix it — otherwise click the delete button above. diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/field.test.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/field.test.tsx similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/field.test.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/field.test.tsx diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/field.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/field.tsx similarity index 97% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/field.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/field.tsx index 1ed0b57e400b87..1b69eb4240d680 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/field.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/field.tsx @@ -104,9 +104,9 @@ export class Field extends PureComponent { id={this.fieldId} label={ !!currentValue ? ( - + ) : ( - + ) } checked={!!currentValue} diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/form.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/form.tsx similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/form.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/form.tsx index 7270d41eef5290..04be7ee3ce2070 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/form.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/form.tsx @@ -29,15 +29,11 @@ import { import { cloneDeep, set } from 'lodash'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { - SimpleSavedObject, - SavedObjectsClientContract, -} from '../../../../../../../../../core/public'; - -import { SavedObjectLoader } from '../../../../../../../../../plugins/saved_objects/public'; +import { SimpleSavedObject, SavedObjectsClientContract } from '../../../../../../core/public'; +import { SavedObjectLoader } from '../../../../../saved_objects/public'; import { Field } from './field'; import { ObjectField, FieldState, SubmittedFormData } from '../../types'; -import { createFieldList } from '../../lib/create_field_list'; +import { createFieldList } from '../../../lib'; interface FormProps { object: SimpleSavedObject; @@ -96,7 +92,7 @@ export class Form extends Component { { data-test-subj="savedObjectEditSave" > @@ -117,14 +113,14 @@ export class Form extends Component { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/header.test.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/header.test.tsx similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/header.test.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/header.test.tsx diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/header.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/header.tsx similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/header.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/header.tsx index 641493e0cbaa80..305d953c4990b8 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/header.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/header.tsx @@ -52,7 +52,7 @@ export const Header = ({ {canEdit ? (

@@ -60,7 +60,7 @@ export const Header = ({ ) : (

@@ -79,7 +79,7 @@ export const Header = ({ data-test-subj="savedObjectEditViewInApp" > @@ -96,7 +96,7 @@ export const Header = ({ data-test-subj="savedObjectEditDelete" > diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/index.ts b/src/plugins/saved_objects_management/public/management_section/object_view/components/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/index.ts rename to src/plugins/saved_objects_management/public/management_section/object_view/components/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/intro.test.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/intro.test.tsx similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/intro.test.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/intro.test.tsx diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/intro.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/intro.tsx similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/intro.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/intro.tsx index 098ad71345d49d..920a5fcbcb02ee 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/intro.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/intro.tsx @@ -26,7 +26,7 @@ export const Intro = () => { } @@ -35,7 +35,7 @@ export const Intro = () => { >
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/not_found_errors.test.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/not_found_errors.test.tsx similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/not_found_errors.test.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/not_found_errors.test.tsx diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/not_found_errors.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/components/not_found_errors.tsx similarity index 87% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/not_found_errors.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/components/not_found_errors.tsx index c3d18855f6c9a0..1a63f7eaf4819d 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/object_view/not_found_errors.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/not_found_errors.tsx @@ -31,21 +31,21 @@ export const NotFoundErrors = ({ type }: NotFoundErrors) => { case 'search': return ( ); case 'index-pattern': return ( ); case 'index-pattern-field': return ( ); @@ -58,7 +58,7 @@ export const NotFoundErrors = ({ type }: NotFoundErrors) => { } @@ -68,7 +68,7 @@ export const NotFoundErrors = ({ type }: NotFoundErrors) => {
{getMessage()}
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/index.js b/src/plugins/saved_objects_management/public/management_section/object_view/index.ts similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/index.js rename to src/plugins/saved_objects_management/public/management_section/object_view/index.ts index cdeebdbf7b63ae..a823923536d312 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/index.js +++ b/src/plugins/saved_objects_management/public/management_section/object_view/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { Flyout } from './flyout'; +export { SavedObjectEdition } from './saved_object_view'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/saved_object_view.tsx b/src/plugins/saved_objects_management/public/management_section/object_view/saved_object_view.tsx similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/saved_object_view.tsx rename to src/plugins/saved_objects_management/public/management_section/object_view/saved_object_view.tsx index 4984fe3e6d6b8f..f714970a5cac38 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/saved_object_view.tsx +++ b/src/plugins/saved_objects_management/public/management_section/object_view/saved_object_view.tsx @@ -26,16 +26,16 @@ import { OverlayStart, NotificationsStart, SimpleSavedObject, -} from '../../../../../../../core/public'; -import { ISavedObjectsManagementRegistry } from '../../saved_object_registry'; -import { Header, NotFoundErrors, Intro, Form } from './components/object_view'; -import { canViewInApp } from './lib/in_app_url'; -import { SubmittedFormData } from './types'; +} from '../../../../../core/public'; +import { ISavedObjectsManagementServiceRegistry } from '../../services'; +import { Header, NotFoundErrors, Intro, Form } from './components'; +import { canViewInApp } from '../../lib'; +import { SubmittedFormData } from '../types'; interface SavedObjectEditionProps { id: string; serviceName: string; - serviceRegistry: ISavedObjectsManagementRegistry; + serviceRegistry: ISavedObjectsManagementServiceRegistry; capabilities: Capabilities; overlays: OverlayStart; notifications: NotificationsStart; @@ -135,17 +135,17 @@ export class SavedObjectEdition extends Component< const { type, object } = this.state; const confirmed = await overlays.openConfirm( - i18n.translate('kbn.management.objects.confirmModalOptions.modalDescription', { + i18n.translate('savedObjectsManagement.deleteConfirm.modalDescription', { defaultMessage: 'This action permanently removes the object from Kibana.', }), { confirmButtonText: i18n.translate( - 'kbn.management.objects.confirmModalOptions.deleteButtonLabel', + 'savedObjectsManagement.deleteConfirm.modalDeleteButtonLabel', { defaultMessage: 'Delete', } ), - title: i18n.translate('kbn.management.objects.confirmModalOptions.modalTitle', { + title: i18n.translate('savedObjectsManagement.deleteConfirm.modalTitle', { defaultMessage: `Delete '{title}'?`, values: { title: object?.attributes?.title || 'saved Kibana object', diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/__snapshots__/objects_table.test.js.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap similarity index 73% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/__snapshots__/objects_table.test.js.snap rename to src/plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap index 2c0a5d8f6b8f19..fe64df6ff51d1c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/__snapshots__/objects_table.test.js.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap @@ -1,19 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ObjectsTable delete should show a confirm modal 1`] = ` +exports[`SavedObjectsTable delete should show a confirm modal 1`] = ` } confirmButtonText={ } @@ -23,7 +23,7 @@ exports[`ObjectsTable delete should show a confirm modal 1`] = ` title={ } @@ -31,7 +31,7 @@ exports[`ObjectsTable delete should show a confirm modal 1`] = `

@@ -58,12 +58,10 @@ exports[`ObjectsTable delete should show a confirm modal 1`] = ` Array [ Object { "id": "1", - "title": "Title 1", "type": "index-pattern", }, Object { "id": "3", - "title": "Title 2", "type": "dashboard", }, ] @@ -76,7 +74,7 @@ exports[`ObjectsTable delete should show a confirm modal 1`] = `
`; -exports[`ObjectsTable export should allow the user to choose when exporting all 1`] = ` +exports[`SavedObjectsTable export should allow the user to choose when exporting all 1`] = ` @@ -84,7 +82,7 @@ exports[`ObjectsTable export should allow the user to choose when exporting all } @@ -149,7 +147,7 @@ exports[`ObjectsTable export should allow the user to choose when exporting all label={ } @@ -173,7 +171,7 @@ exports[`ObjectsTable export should allow the user to choose when exporting all > @@ -187,7 +185,7 @@ exports[`ObjectsTable export should allow the user to choose when exporting all > @@ -199,23 +197,87 @@ exports[`ObjectsTable export should allow the user to choose when exporting all `; -exports[`ObjectsTable import should show the flyout 1`] = ` +exports[`SavedObjectsTable import should show the flyout 1`] = ` `; -exports[`ObjectsTable relationships should show the flyout 1`] = ` +exports[`SavedObjectsTable relationships should show the flyout 1`] = ` `; -exports[`ObjectsTable should render normally 1`] = ` +exports[`SavedObjectsTable should render normally 1`] = ` @@ -251,7 +313,23 @@ exports[`ObjectsTable should render normally 1`] = ` size="xs" /> @@ -36,7 +36,7 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = ` title={ } @@ -44,7 +44,7 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = `

, @@ -131,7 +131,7 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = ` > @@ -148,7 +148,7 @@ exports[`Flyout conflicts should allow conflict resolution 1`] = ` > @@ -164,6 +164,30 @@ exports[`Flyout conflicts should allow conflict resolution 2`] = ` Array [ Object { "getConflictResolutions": [Function], + "http": Object { + "addLoadingCountSource": [MockFunction], + "anonymousPaths": Object { + "isAnonymous": [MockFunction], + "register": [MockFunction], + }, + "basePath": BasePath { + "basePath": "", + "get": [Function], + "prepend": [Function], + "remove": [Function], + "serverBasePath": "", + }, + "delete": [MockFunction], + "fetch": [MockFunction], + "get": [MockFunction], + "getLoadingCount$": [MockFunction], + "head": [MockFunction], + "intercept": [MockFunction], + "options": [MockFunction], + "patch": [MockFunction], + "post": [MockFunction], + "put": [MockFunction], + }, "state": Object { "conflictedIndexPatterns": undefined, "conflictedSavedObjectsLinkedToSavedSearches": undefined, @@ -243,7 +267,7 @@ exports[`Flyout conflicts should handle errors 1`] = ` title={ } @@ -251,7 +275,7 @@ exports[`Flyout conflicts should handle errors 1`] = `

} @@ -280,7 +304,7 @@ exports[`Flyout errors should display unsupported type errors properly 1`] = `

@@ -331,7 +355,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = ` title={ } @@ -339,7 +363,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = `

@@ -356,7 +380,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = ` title={ } @@ -364,7 +388,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = `

, @@ -462,7 +486,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = ` > @@ -479,7 +503,7 @@ exports[`Flyout legacy conflicts should allow conflict resolution 1`] = ` > @@ -498,7 +522,7 @@ Array [ title={ } @@ -506,7 +530,7 @@ Array [

@@ -518,7 +542,7 @@ Array [ title={ } @@ -526,7 +550,7 @@ Array [

, @@ -548,7 +572,7 @@ Array [ title={ } @@ -578,7 +602,7 @@ exports[`Flyout should render import step 1`] = `

@@ -595,7 +619,7 @@ exports[`Flyout should render import step 1`] = ` label={ } @@ -607,7 +631,7 @@ exports[`Flyout should render import step 1`] = ` initialPromptText={ } @@ -628,7 +652,7 @@ exports[`Flyout should render import step 1`] = ` label={ } @@ -651,7 +675,7 @@ exports[`Flyout should render import step 1`] = ` > @@ -668,7 +692,7 @@ exports[`Flyout should render import step 1`] = ` > diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/__snapshots__/header.test.js.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap similarity index 88% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/__snapshots__/header.test.js.snap rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap index 51bd51a5e2e582..642a5030e4ec0c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/__snapshots__/header.test.js.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap @@ -13,7 +13,7 @@ exports[`Header should render normally 1`] = `

@@ -38,7 +38,7 @@ exports[`Header should render normally 1`] = ` > @@ -73,7 +73,7 @@ exports[`Header should render normally 1`] = ` > @@ -93,7 +93,7 @@ exports[`Header should render normally 1`] = ` > diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/__snapshots__/relationships.test.js.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap similarity index 99% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/__snapshots__/relationships.test.js.snap rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap index 728944f3ccbfe3..a8bb691cd54e99 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/__snapshots__/relationships.test.js.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/relationships.test.tsx.snap @@ -202,7 +202,7 @@ exports[`Relationships should render errors 1`] = ` title={ } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/__snapshots__/table.test.js.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/__snapshots__/table.test.js.snap rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap index a4dcfb9c38184c..d09dd6f8b868bb 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/__snapshots__/table.test.js.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap @@ -36,7 +36,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` > , @@ -51,7 +51,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` > @@ -72,7 +72,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` label={ } @@ -83,7 +83,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` label={ } @@ -106,7 +106,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` > @@ -171,6 +171,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` items={ Array [ Object { + "attributes": Object {}, "id": "1", "meta": Object { "editUrl": "#/management/kibana/index_patterns/1", @@ -181,6 +182,7 @@ exports[`Table prevents saved objects from being deleted 1`] = ` }, "title": "MyIndexPattern*", }, + "references": Array [], "type": "index-pattern", }, ] @@ -249,7 +251,7 @@ exports[`Table should render normally 1`] = ` > , @@ -264,7 +266,7 @@ exports[`Table should render normally 1`] = ` > @@ -285,7 +287,7 @@ exports[`Table should render normally 1`] = ` label={ } @@ -296,7 +298,7 @@ exports[`Table should render normally 1`] = ` label={ } @@ -319,7 +321,7 @@ exports[`Table should render normally 1`] = ` > @@ -384,6 +386,7 @@ exports[`Table should render normally 1`] = ` items={ Array [ Object { + "attributes": Object {}, "id": "1", "meta": Object { "editUrl": "#/management/kibana/index_patterns/1", @@ -394,6 +397,7 @@ exports[`Table should render normally 1`] = ` }, "title": "MyIndexPattern*", }, + "references": Array [], "type": "index-pattern", }, ] diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.mocks.ts b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.mocks.ts new file mode 100644 index 00000000000000..b5361d212954f7 --- /dev/null +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.mocks.ts @@ -0,0 +1,44 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export const importFileMock = jest.fn(); +jest.doMock('../../../lib/import_file', () => ({ + importFile: importFileMock, +})); + +export const resolveImportErrorsMock = jest.fn(); +jest.doMock('../../../lib/resolve_import_errors', () => ({ + resolveImportErrors: resolveImportErrorsMock, +})); + +export const importLegacyFileMock = jest.fn(); +jest.doMock('../../../lib/import_legacy_file', () => ({ + importLegacyFile: importLegacyFileMock, +})); + +export const resolveSavedObjectsMock = jest.fn(); +export const resolveSavedSearchesMock = jest.fn(); +export const resolveIndexPatternConflictsMock = jest.fn(); +export const saveObjectsMock = jest.fn(); +jest.doMock('../../../lib/resolve_saved_objects', () => ({ + resolveSavedObjects: resolveSavedObjectsMock, + resolveSavedSearches: resolveSavedSearchesMock, + resolveIndexPatternConflicts: resolveIndexPatternConflictsMock, + saveObjects: saveObjectsMock, +})); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx similarity index 75% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx index 0d16e0ae35dd66..5d713ff044f243 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.test.tsx @@ -17,68 +17,62 @@ * under the License. */ +import { + importFileMock, + importLegacyFileMock, + resolveImportErrorsMock, + resolveIndexPatternConflictsMock, + resolveSavedObjectsMock, + resolveSavedSearchesMock, + saveObjectsMock, +} from './flyout.test.mocks'; + import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -import { mockManagementPlugin } from '../../../../../../../../../../../../plugins/index_pattern_management/public/mocks'; -import { Flyout } from '../flyout'; - -jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); - -jest.mock('../../../../../lib/import_file', () => ({ - importFile: jest.fn(), -})); - -jest.mock('../../../../../lib/resolve_import_errors', () => ({ - resolveImportErrors: jest.fn(), -})); - -jest.mock('ui/chrome', () => ({ - addBasePath: () => {}, - getInjected: () => ['index-pattern', 'visualization', 'dashboard', 'search'], -})); - -jest.mock('../../../../../lib/import_legacy_file', () => ({ - importLegacyFile: jest.fn(), -})); - -jest.mock('../../../../../lib/resolve_saved_objects', () => ({ - resolveSavedObjects: jest.fn(), - resolveSavedSearches: jest.fn(), - resolveIndexPatternConflicts: jest.fn(), - saveObjects: jest.fn(), -})); - -jest.mock('../../../../../../../../../../../../plugins/index_pattern_management/public', () => ({ - setup: mockManagementPlugin.createSetupContract(), - start: mockManagementPlugin.createStartContract(), -})); - -jest.mock('ui/notify', () => ({})); - -const defaultProps = { - close: jest.fn(), - done: jest.fn(), - services: [], - newIndexPatternUrl: '', - getConflictResolutions: jest.fn(), - confirmModalPromise: jest.fn(), - indexPatterns: { - getFields: jest.fn().mockImplementation(() => [{ id: '1' }, { id: '2' }]), - }, -}; - -const mockFile = { +import { coreMock } from '../../../../../../core/public/mocks'; +import { serviceRegistryMock } from '../../../services/service_registry.mock'; +import { Flyout, FlyoutProps, FlyoutState } from './flyout'; +import { ShallowWrapper } from 'enzyme'; + +const mockFile = ({ name: 'foo.ndjson', path: '/home/foo.ndjson', -}; -const legacyMockFile = { +} as unknown) as File; +const legacyMockFile = ({ name: 'foo.json', path: '/home/foo.json', -}; +} as unknown) as File; describe('Flyout', () => { + let defaultProps: FlyoutProps; + + const shallowRender = (props: FlyoutProps) => { + return (shallowWithI18nProvider() as unknown) as ShallowWrapper< + FlyoutProps, + FlyoutState, + Flyout + >; + }; + + beforeEach(() => { + const { http, overlays } = coreMock.createStart(); + + defaultProps = { + close: jest.fn(), + done: jest.fn(), + newIndexPatternUrl: '', + indexPatterns: { + getFields: jest.fn().mockImplementation(() => [{ id: '1' }, { id: '2' }]), + } as any, + overlays, + http, + allowedTypes: ['search', 'index-pattern', 'visualization'], + serviceRegistry: serviceRegistryMock.create(), + }; + }); + it('should render import step', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -89,7 +83,7 @@ describe('Flyout', () => { }); it('should toggle the overwrite all control', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -102,7 +96,7 @@ describe('Flyout', () => { }); it('should allow picking a file', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -115,7 +109,7 @@ describe('Flyout', () => { }); it('should allow removing a file', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await Promise.resolve(); @@ -130,22 +124,21 @@ describe('Flyout', () => { }); it('should handle invalid files', async () => { - const { importLegacyFile } = require('../../../../../lib/import_legacy_file'); - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); // Ensure the state changes are reflected component.update(); - importLegacyFile.mockImplementation(() => { + importLegacyFileMock.mockImplementation(() => { throw new Error('foobar'); }); await component.instance().legacyImport(); expect(component.state('error')).toBe('The file could not be processed.'); - importLegacyFile.mockImplementation(() => ({ + importLegacyFileMock.mockImplementation(() => ({ invalid: true, })); @@ -156,11 +149,8 @@ describe('Flyout', () => { }); describe('conflicts', () => { - const { importFile } = require('../../../../../lib/import_file'); - const { resolveImportErrors } = require('../../../../../lib/resolve_import_errors'); - beforeEach(() => { - importFile.mockImplementation(() => ({ + importFileMock.mockImplementation(() => ({ success: false, successCount: 0, errors: [ @@ -180,7 +170,7 @@ describe('Flyout', () => { }, ], })); - resolveImportErrors.mockImplementation(() => ({ + resolveImportErrorsMock.mockImplementation(() => ({ status: 'success', importCount: 1, failedImports: [], @@ -188,7 +178,7 @@ describe('Flyout', () => { }); it('should figure out unmatchedReferences', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -198,7 +188,7 @@ describe('Flyout', () => { component.setState({ file: mockFile, isLegacyFile: false }); await component.instance().import(); - expect(importFile).toHaveBeenCalledWith(mockFile, true); + expect(importFileMock).toHaveBeenCalledWith(defaultProps.http, mockFile, true); expect(component.state()).toMatchObject({ conflictedIndexPatterns: undefined, conflictedSavedObjectsLinkedToSavedSearches: undefined, @@ -223,7 +213,7 @@ describe('Flyout', () => { }); it('should allow conflict resolution', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -239,7 +229,7 @@ describe('Flyout', () => { // Ensure we can change the resolution component.instance().onIndexChanged('MyIndexPattern*', { target: { value: '2' } }); - expect(component.state('unmatchedReferences')[0].newIndexPatternId).toBe('2'); + expect(component.state('unmatchedReferences')![0].newIndexPatternId).toBe('2'); // Let's resolve now await component @@ -247,18 +237,18 @@ describe('Flyout', () => { .simulate('click'); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); - expect(resolveImportErrors).toMatchSnapshot(); + expect(resolveImportErrorsMock).toMatchSnapshot(); }); it('should handle errors', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); // Ensure the state changes are reflected component.update(); - resolveImportErrors.mockImplementation(() => ({ + resolveImportErrorsMock.mockImplementation(() => ({ status: 'success', importCount: 0, failedImports: [ @@ -303,18 +293,15 @@ describe('Flyout', () => { }); describe('errors', () => { - const { importFile } = require('../../../../../lib/import_file'); - const { resolveImportErrors } = require('../../../../../lib/resolve_import_errors'); - it('should display unsupported type errors properly', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await Promise.resolve(); // Ensure the state changes are reflected component.update(); - importFile.mockImplementation(() => ({ + importFileMock.mockImplementation(() => ({ success: false, successCount: 0, errors: [ @@ -328,7 +315,7 @@ describe('Flyout', () => { }, ], })); - resolveImportErrors.mockImplementation(() => ({ + resolveImportErrorsMock.mockImplementation(() => ({ status: 'success', importCount: 0, failedImports: [ @@ -372,14 +359,6 @@ describe('Flyout', () => { }); describe('legacy conflicts', () => { - const { importLegacyFile } = require('../../../../../lib/import_legacy_file'); - const { - resolveSavedObjects, - resolveSavedSearches, - resolveIndexPatternConflicts, - saveObjects, - } = require('../../../../../lib/resolve_saved_objects'); - const mockData = [ { _id: '1', @@ -406,7 +385,7 @@ describe('Flyout', () => { }, obj: { searchSource: { - getOwnField: field => { + getOwnField: (field: string) => { if (field === 'index') { return 'MyIndexPattern*'; } @@ -426,8 +405,8 @@ describe('Flyout', () => { const mockConflictedSearchDocs = [3]; beforeEach(() => { - importLegacyFile.mockImplementation(() => mockData); - resolveSavedObjects.mockImplementation(() => ({ + importLegacyFileMock.mockImplementation(() => mockData); + resolveSavedObjectsMock.mockImplementation(() => ({ conflictedIndexPatterns: mockConflictedIndexPatterns, conflictedSavedObjectsLinkedToSavedSearches: mockConflictedSavedObjectsLinkedToSavedSearches, conflictedSearchDocs: mockConflictedSearchDocs, @@ -437,7 +416,7 @@ describe('Flyout', () => { }); it('should figure out unmatchedReferences', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -447,14 +426,14 @@ describe('Flyout', () => { component.setState({ file: legacyMockFile, isLegacyFile: true }); await component.instance().legacyImport(); - expect(importLegacyFile).toHaveBeenCalledWith(legacyMockFile); + expect(importLegacyFileMock).toHaveBeenCalledWith(legacyMockFile); // Remove the last element from data since it should be filtered out - expect(resolveSavedObjects).toHaveBeenCalledWith( + expect(resolveSavedObjectsMock).toHaveBeenCalledWith( mockData.slice(0, 2).map(doc => ({ ...doc, _migrationVersion: {} })), true, - defaultProps.services, + defaultProps.serviceRegistry.all().map(s => s.service), defaultProps.indexPatterns, - defaultProps.confirmModalPromise + defaultProps.overlays.openConfirm ); expect(component.state()).toMatchObject({ @@ -492,7 +471,7 @@ describe('Flyout', () => { }); it('should allow conflict resolution', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -508,7 +487,7 @@ describe('Flyout', () => { // Ensure we can change the resolution component.instance().onIndexChanged('MyIndexPattern*', { target: { value: '2' } }); - expect(component.state('unmatchedReferences')[0].newIndexPatternId).toBe('2'); + expect(component.state('unmatchedReferences')![0].newIndexPatternId).toBe('2'); // Let's resolve now await component @@ -516,33 +495,33 @@ describe('Flyout', () => { .simulate('click'); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); - expect(resolveIndexPatternConflicts).toHaveBeenCalledWith( + expect(resolveIndexPatternConflictsMock).toHaveBeenCalledWith( component.instance().resolutions, mockConflictedIndexPatterns, true, defaultProps.indexPatterns ); - expect(saveObjects).toHaveBeenCalledWith( + expect(saveObjectsMock).toHaveBeenCalledWith( mockConflictedSavedObjectsLinkedToSavedSearches, true ); - expect(resolveSavedSearches).toHaveBeenCalledWith( + expect(resolveSavedSearchesMock).toHaveBeenCalledWith( mockConflictedSearchDocs, - defaultProps.services, + defaultProps.serviceRegistry.all().map(s => s.service), defaultProps.indexPatterns, true ); }); it('should handle errors', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(defaultProps); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); // Ensure the state changes are reflected component.update(); - resolveIndexPatternConflicts.mockImplementation(() => { + resolveIndexPatternConflictsMock.mockImplementation(() => { throw new Error('foobar'); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/flyout.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx similarity index 77% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/flyout.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx index da2221bb54203d..45788dcb601aeb 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/flyout.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/flyout.tsx @@ -18,7 +18,6 @@ */ import React, { Component, Fragment } from 'react'; -import PropTypes from 'prop-types'; import { take, get as getField } from 'lodash'; import { EuiFlyout, @@ -32,6 +31,7 @@ import { EuiForm, EuiFormRow, EuiSwitch, + // @ts-ignore EuiFilePicker, EuiInMemoryTable, EuiSelect, @@ -47,34 +47,62 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; - +import { OverlayStart, HttpStart } from 'src/core/public'; +import { IndexPatternsContract, IIndexPattern } from '../../../../../data/public'; import { importFile, importLegacyFile, resolveImportErrors, logLegacyImport, getDefaultTitle, -} from '../../../../lib'; -import { processImportResponse } from '../../../../lib/process_import_response'; + processImportResponse, + ProcessedImportResponse, +} from '../../../lib'; import { resolveSavedObjects, resolveSavedSearches, resolveIndexPatternConflicts, saveObjects, -} from '../../../../lib/resolve_saved_objects'; -import { POSSIBLE_TYPES } from '../../objects_table'; - -export class Flyout extends Component { - static propTypes = { - close: PropTypes.func.isRequired, - done: PropTypes.func.isRequired, - services: PropTypes.array.isRequired, - newIndexPatternUrl: PropTypes.string.isRequired, - indexPatterns: PropTypes.object.isRequired, - confirmModalPromise: PropTypes.func.isRequired, - }; +} from '../../../lib/resolve_saved_objects'; +import { ISavedObjectsManagementServiceRegistry } from '../../../services'; + +export interface FlyoutProps { + serviceRegistry: ISavedObjectsManagementServiceRegistry; + allowedTypes: string[]; + close: () => void; + done: () => void; + newIndexPatternUrl: string; + indexPatterns: IndexPatternsContract; + overlays: OverlayStart; + http: HttpStart; +} + +export interface FlyoutState { + conflictedIndexPatterns?: any[]; + conflictedSavedObjectsLinkedToSavedSearches?: any[]; + conflictedSearchDocs?: any[]; + unmatchedReferences?: ProcessedImportResponse['unmatchedReferences']; + failedImports?: ProcessedImportResponse['failedImports']; + conflictingRecord?: ConflictingRecord; + error?: string; + file?: File; + importCount: number; + indexPatterns?: IIndexPattern[]; + isOverwriteAllChecked: boolean; + loadingMessage?: string; + isLegacyFile: boolean; + status: string; +} + +interface ConflictingRecord { + id: string; + type: string; + title: string; + done: (success: boolean) => void; +} - constructor(props) { +export class Flyout extends Component { + constructor(props: FlyoutProps) { super(props); this.state = { @@ -100,7 +128,7 @@ export class Flyout extends Component { fetchIndexPatterns = async () => { const indexPatterns = await this.props.indexPatterns.getFields(['id', 'title']); - this.setState({ indexPatterns }); + this.setState({ indexPatterns } as any); }; changeOverwriteAll = () => { @@ -109,11 +137,12 @@ export class Flyout extends Component { })); }; - setImportFile = ([file]) => { - if (!file) { + setImportFile = (files: FileList | null) => { + if (!files || !files[0]) { this.setState({ file: undefined, isLegacyFile: false }); return; } + const file = files[0]; this.setState({ file, isLegacyFile: /\.json$/i.test(file.name) || file.type === 'application/json', @@ -126,30 +155,29 @@ export class Flyout extends Component { * Does the initial import of a file, resolveImportErrors then handles errors and retries */ import = async () => { + const { http } = this.props; const { file, isOverwriteAllChecked } = this.state; this.setState({ status: 'loading', error: undefined }); // Import the file - let response; try { - response = await importFile(file, isOverwriteAllChecked); + const response = await importFile(http, file!, isOverwriteAllChecked); + this.setState(processImportResponse(response), () => { + // Resolve import errors right away if there's no index patterns to match + // This will ask about overwriting each object, etc + if (this.state.unmatchedReferences?.length === 0) { + this.resolveImportErrors(); + } + }); } catch (e) { this.setState({ status: 'error', - error: i18n.translate('kbn.management.objects.objectsTable.flyout.importFileErrorMessage', { + error: i18n.translate('savedObjectsManagement.objectsTable.flyout.importFileErrorMessage', { defaultMessage: 'The file could not be processed.', }), }); return; } - - this.setState(processImportResponse(response), () => { - // Resolve import errors right away if there's no index patterns to match - // This will ask about overwriting each object, etc - if (this.state.unmatchedReferences.length === 0) { - this.resolveImportErrors(); - } - }); }; /** @@ -160,10 +188,10 @@ export class Flyout extends Component { * @param {array} objects List of objects to request the user if they wish to overwrite it * @return {Promise} An object with the key being "type:id" and value the resolution chosen by the user */ - getConflictResolutions = async objects => { - const resolutions = {}; + getConflictResolutions = async (objects: any[]) => { + const resolutions: Record = {}; for (const { type, id, title } of objects) { - const overwrite = await new Promise(resolve => { + const overwrite = await new Promise(resolve => { this.setState({ conflictingRecord: { id, @@ -193,6 +221,7 @@ export class Flyout extends Component { try { const updatedState = await resolveImportErrors({ + http: this.props.http, state: this.state, getConflictResolutions: this.getConflictResolutions, }); @@ -201,7 +230,7 @@ export class Flyout extends Component { this.setState({ status: 'error', error: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.resolveImportErrorsFileErrorMessage', + 'savedObjectsManagement.objectsTable.flyout.resolveImportErrorsFileErrorMessage', { defaultMessage: 'The file could not be processed.' } ), }); @@ -209,22 +238,22 @@ export class Flyout extends Component { }; legacyImport = async () => { - const { services, indexPatterns, confirmModalPromise } = this.props; + const { serviceRegistry, indexPatterns, overlays, http, allowedTypes } = this.props; const { file, isOverwriteAllChecked } = this.state; this.setState({ status: 'loading', error: undefined }); // Log warning on server, don't wait for response - logLegacyImport(); + logLegacyImport(http); let contents; try { - contents = await importLegacyFile(file); + contents = await importLegacyFile(file!); } catch (e) { this.setState({ status: 'error', error: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.importLegacyFileErrorMessage', + 'savedObjectsManagement.objectsTable.flyout.importLegacyFileErrorMessage', { defaultMessage: 'The file could not be processed.' } ), }); @@ -235,7 +264,7 @@ export class Flyout extends Component { this.setState({ status: 'error', error: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage', + 'savedObjectsManagement.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage', { defaultMessage: 'Saved objects file format is invalid and cannot be imported.' } ), }); @@ -243,7 +272,7 @@ export class Flyout extends Component { } contents = contents - .filter(content => POSSIBLE_TYPES.includes(content._type)) + .filter(content => allowedTypes.includes(content._type)) .map(doc => ({ ...doc, // The server assumes that documents with no migrationVersion are up to date. @@ -263,18 +292,18 @@ export class Flyout extends Component { } = await resolveSavedObjects( contents, isOverwriteAllChecked, - services, + serviceRegistry.all().map(e => e.service), indexPatterns, - confirmModalPromise + overlays.openConfirm ); - const byId = {}; + const byId: Record = {}; conflictedIndexPatterns .map(({ doc, obj }) => { return { doc, obj: obj._serialize() }; }) .forEach(({ doc, obj }) => - obj.references.forEach(ref => { + obj.references.forEach((ref: Record) => { byId[ref.id] = byId[ref.id] != null ? byId[ref.id].concat({ doc, obj }) : [{ doc, obj }]; }) ); @@ -291,7 +320,7 @@ export class Flyout extends Component { }); return accum; }, - [] + [] as any[] ); this.setState({ @@ -305,12 +334,12 @@ export class Flyout extends Component { }); }; - get hasUnmatchedReferences() { + public get hasUnmatchedReferences() { return this.state.unmatchedReferences && this.state.unmatchedReferences.length > 0; } - get resolutions() { - return this.state.unmatchedReferences.reduce( + public get resolutions() { + return this.state.unmatchedReferences!.reduce( (accum, { existingIndexPatternId, newIndexPatternId }) => { if (newIndexPatternId) { accum.push({ @@ -320,7 +349,7 @@ export class Flyout extends Component { } return accum; }, - [] + [] as Array<{ oldId: string; newId: string }> ); } @@ -333,7 +362,7 @@ export class Flyout extends Component { failedImports, } = this.state; - const { services, indexPatterns } = this.props; + const { serviceRegistry, indexPatterns } = this.props; this.setState({ error: undefined, @@ -350,48 +379,48 @@ export class Flyout extends Component { // Do not Promise.all these calls as the order matters this.setState({ loadingMessage: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage', + 'savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage', { defaultMessage: 'Resolving conflicts…' } ), }); if (resolutions.length) { importCount += await resolveIndexPatternConflicts( resolutions, - conflictedIndexPatterns, + conflictedIndexPatterns!, isOverwriteAllChecked, - this.props.indexPatterns + indexPatterns ); } this.setState({ loadingMessage: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage', + 'savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage', { defaultMessage: 'Saving conflicts…' } ), }); importCount += await saveObjects( - conflictedSavedObjectsLinkedToSavedSearches, + conflictedSavedObjectsLinkedToSavedSearches!, isOverwriteAllChecked ); this.setState({ loadingMessage: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage', + 'savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage', { defaultMessage: 'Ensure saved searches are linked properly…' } ), }); importCount += await resolveSavedSearches( - conflictedSearchDocs, - services, + conflictedSearchDocs!, + serviceRegistry.all().map(e => e.service), indexPatterns, isOverwriteAllChecked ); this.setState({ loadingMessage: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage', + 'savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage', { defaultMessage: 'Retrying failed objects…' } ), }); importCount += await saveObjects( - failedImports.map(({ obj }) => obj), + failedImports!.map(({ obj }) => obj) as any[], isOverwriteAllChecked ); } catch (e) { @@ -407,26 +436,26 @@ export class Flyout extends Component { this.setState({ status: 'success', importCount }); }; - onIndexChanged = (id, e) => { + onIndexChanged = (id: string, e: any) => { const value = e.target.value; this.setState(state => { - const conflictIndex = state.unmatchedReferences.findIndex( + const conflictIndex = state.unmatchedReferences?.findIndex( conflict => conflict.existingIndexPatternId === id ); - if (conflictIndex === -1) { + if (conflictIndex === undefined || conflictIndex === -1) { return state; } return { unmatchedReferences: [ - ...state.unmatchedReferences.slice(0, conflictIndex), + ...state.unmatchedReferences!.slice(0, conflictIndex), { - ...state.unmatchedReferences[conflictIndex], + ...state.unmatchedReferences![conflictIndex], newIndexPatternId: value, }, - ...state.unmatchedReferences.slice(conflictIndex + 1), + ...state.unmatchedReferences!.slice(conflictIndex + 1), ], - }; + } as any; }); }; @@ -441,11 +470,11 @@ export class Flyout extends Component { { field: 'existingIndexPatternId', name: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdName', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdName', { defaultMessage: 'ID' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdDescription', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdDescription', { defaultMessage: 'ID of the index pattern' } ), sortable: true, @@ -453,28 +482,28 @@ export class Flyout extends Component { { field: 'list', name: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountName', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountName', { defaultMessage: 'Count' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountDescription', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountDescription', { defaultMessage: 'How many affected objects' } ), - render: list => { + render: (list: any[]) => { return {list.length}; }, }, { field: 'list', name: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName', { defaultMessage: 'Sample of affected objects' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription', { defaultMessage: 'Sample of affected objects' } ), - render: list => { + render: (list: any[]) => { return (
    {take(list, 3).map((obj, key) => ( @@ -487,15 +516,18 @@ export class Flyout extends Component { { field: 'existingIndexPatternId', name: i18n.translate( - 'kbn.management.objects.objectsTable.flyout.renderConflicts.columnNewIndexPatternName', + 'savedObjectsManagement.objectsTable.flyout.renderConflicts.columnNewIndexPatternName', { defaultMessage: 'New index pattern' } ), - render: id => { - const options = this.state.indexPatterns.map(indexPattern => ({ - text: indexPattern.title, - value: indexPattern.id, - ['data-test-subj']: `indexPatternOption-${indexPattern.title}`, - })); + render: (id: string) => { + const options = this.state.indexPatterns!.map( + indexPattern => + ({ + text: indexPattern.title, + value: indexPattern.id, + 'data-test-subj': `indexPatternOption-${indexPattern.title}`, + } as { text: string; value: string; 'data-test-subj'?: string }) + ); options.unshift({ text: '-- Skip Import --', @@ -518,7 +550,11 @@ export class Flyout extends Component { }; return ( - + ); } @@ -534,7 +570,7 @@ export class Flyout extends Component { } @@ -581,7 +617,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsFailedWarning" title={ } @@ -590,7 +626,7 @@ export class Flyout extends Component { >

    { return i18n.translate( - 'kbn.management.objects.objectsTable.flyout.importFailedMissingReference', + 'savedObjectsManagement.objectsTable.flyout.importFailedMissingReference', { defaultMessage: '{type} [id={id}] could not locate {refType} [id={refId}]', values: { @@ -618,7 +654,7 @@ export class Flyout extends Component { }); } else if (error.type === 'unsupported_type') { return i18n.translate( - 'kbn.management.objects.objectsTable.flyout.importFailedUnsupportedType', + 'savedObjectsManagement.objectsTable.flyout.importFailedUnsupportedType', { defaultMessage: '{type} [id={id}] unsupported type', values: { @@ -628,7 +664,7 @@ export class Flyout extends Component { } ); } - return getField(error, 'body.message', error.message || ''); + return getField(error, 'body.message', (error as any).message ?? ''); }) .join(' ')}

    @@ -643,7 +679,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsSuccessNoneImported" title={ } @@ -657,7 +693,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsSuccess" title={ } @@ -666,7 +702,7 @@ export class Flyout extends Component { >

    @@ -684,7 +720,7 @@ export class Flyout extends Component { } @@ -692,7 +728,7 @@ export class Flyout extends Component { } @@ -704,7 +740,7 @@ export class Flyout extends Component { name="overwriteAll" label={ } @@ -727,7 +763,7 @@ export class Flyout extends Component { confirmButton = ( @@ -742,7 +778,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsConfirmBtn" > @@ -757,7 +793,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsImportBtn" > @@ -769,7 +805,7 @@ export class Flyout extends Component { @@ -791,7 +827,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsLegacyWarning" title={ } @@ -800,7 +836,7 @@ export class Flyout extends Component { >

    @@ -815,7 +851,7 @@ export class Flyout extends Component { data-test-subj="importSavedObjectsConflictsWarning" title={ } @@ -824,7 +860,7 @@ export class Flyout extends Component { >

    @@ -867,11 +903,11 @@ export class Flyout extends Component { } overwriteConfirmed() { - this.state.conflictingRecord.done(true); + this.state.conflictingRecord!.done(true); } overwriteSkipped() { - this.state.conflictingRecord.done(false); + this.state.conflictingRecord!.done(false); } render() { @@ -883,18 +919,18 @@ export class Flyout extends Component {

    diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/header.test.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/header.test.tsx similarity index 96% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/header.test.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/header.test.tsx index 1f501b57512249..891190d0bb24bb 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/__jest__/header.test.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/header.test.tsx @@ -19,8 +19,7 @@ import React from 'react'; import { shallow } from 'enzyme'; - -import { Header } from '../header'; +import { Header } from './header'; describe('Header', () => { it('should render normally', () => { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/header.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx similarity index 83% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/header.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx index 0bec8a0cf2daf8..7a9584f08d632a 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/header/header.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx @@ -18,8 +18,6 @@ */ import React, { Fragment } from 'react'; -import PropTypes from 'prop-types'; - import { EuiSpacer, EuiTitle, @@ -31,14 +29,24 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -export const Header = ({ onExportAll, onImport, onRefresh, filteredCount }) => ( +export const Header = ({ + onExportAll, + onImport, + onRefresh, + filteredCount, +}: { + onExportAll: () => void; + onImport: () => void; + onRefresh: () => void; + filteredCount: number; +}) => (

    @@ -55,7 +63,7 @@ export const Header = ({ onExportAll, onImport, onRefresh, filteredCount }) => ( onClick={onExportAll} > ( onClick={onImport} > @@ -79,7 +87,7 @@ export const Header = ({ onExportAll, onImport, onRefresh, filteredCount }) => ( @@ -92,7 +100,7 @@ export const Header = ({ onExportAll, onImport, onRefresh, filteredCount }) => (

    ); - -Header.propTypes = { - onExportAll: PropTypes.func.isRequired, - onImport: PropTypes.func.isRequired, - onRefresh: PropTypes.func.isRequired, - filteredCount: PropTypes.number.isRequired, -}; diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/index.ts b/src/plugins/saved_objects_management/public/management_section/objects_table/components/index.ts new file mode 100644 index 00000000000000..9c8736a9011eba --- /dev/null +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/index.ts @@ -0,0 +1,23 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { Header } from './header'; +export { Table } from './table'; +export { Flyout } from './flyout'; +export { Relationships } from './relationships'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx similarity index 88% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx index 479726e8785d80..347f2d977015c7 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/__jest__/relationships.test.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.test.tsx @@ -19,27 +19,23 @@ import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; +import { httpServiceMock } from '../../../../../../core/public/mocks'; +import { Relationships, RelationshipsProps } from './relationships'; -jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); - -jest.mock('ui/chrome', () => ({ - addBasePath: () => '', -})); - -jest.mock('../../../../../lib/fetch_export_by_type_and_search', () => ({ +jest.mock('../../../lib/fetch_export_by_type_and_search', () => ({ fetchExportByTypeAndSearch: jest.fn(), })); -jest.mock('../../../../../lib/fetch_export_objects', () => ({ +jest.mock('../../../lib/fetch_export_objects', () => ({ fetchExportObjects: jest.fn(), })); -import { Relationships } from '../relationships'; - describe('Relationships', () => { it('should render index patterns normally', async () => { - const props = { + const props: RelationshipsProps = { goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, getRelationships: jest.fn().mockImplementation(() => [ { type: 'search', @@ -73,6 +69,8 @@ describe('Relationships', () => { savedObject: { id: '1', type: 'index-pattern', + attributes: {}, + references: [], meta: { title: 'MyIndexPattern*', icon: 'indexPatternApp', @@ -101,8 +99,10 @@ describe('Relationships', () => { }); it('should render searches normally', async () => { - const props = { + const props: RelationshipsProps = { goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, getRelationships: jest.fn().mockImplementation(() => [ { type: 'index-pattern', @@ -136,6 +136,8 @@ describe('Relationships', () => { savedObject: { id: '1', type: 'search', + attributes: {}, + references: [], meta: { title: 'MySearch', icon: 'search', @@ -164,8 +166,10 @@ describe('Relationships', () => { }); it('should render visualizations normally', async () => { - const props = { + const props: RelationshipsProps = { goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, getRelationships: jest.fn().mockImplementation(() => [ { type: 'dashboard', @@ -199,6 +203,8 @@ describe('Relationships', () => { savedObject: { id: '1', type: 'visualization', + attributes: {}, + references: [], meta: { title: 'MyViz', icon: 'visualizeApp', @@ -227,8 +233,10 @@ describe('Relationships', () => { }); it('should render dashboards normally', async () => { - const props = { + const props: RelationshipsProps = { goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, getRelationships: jest.fn().mockImplementation(() => [ { type: 'visualization', @@ -262,6 +270,8 @@ describe('Relationships', () => { savedObject: { id: '1', type: 'dashboard', + attributes: {}, + references: [], meta: { title: 'MyDashboard', icon: 'dashboardApp', @@ -290,14 +300,18 @@ describe('Relationships', () => { }); it('should render errors', async () => { - const props = { + const props: RelationshipsProps = { goInspectObject: () => {}, + canGoInApp: () => true, + basePath: httpServiceMock.createSetupContract().basePath, getRelationships: jest.fn().mockImplementation(() => { throw new Error('foo'); }), savedObject: { id: '1', type: 'dashboard', + attributes: {}, + references: [], meta: { title: 'MyDashboard', icon: 'dashboardApp', diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/relationships.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx similarity index 75% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/relationships.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx index ce3415ad2f0e78..ddb262138d5655 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/relationships/relationships.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx @@ -18,8 +18,6 @@ */ import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - import { EuiTitle, EuiFlyout, @@ -34,25 +32,34 @@ import { EuiText, EuiSpacer, } from '@elastic/eui'; -import chrome from 'ui/chrome'; +import { FilterConfig } from '@elastic/eui/src/components/search_bar/filters/filters'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { getDefaultTitle, getSavedObjectLabel } from '../../../../lib'; +import { IBasePath } from 'src/core/public'; +import { getDefaultTitle, getSavedObjectLabel } from '../../../lib'; +import { SavedObjectWithMetadata, SavedObjectRelation } from '../../../types'; + +export interface RelationshipsProps { + basePath: IBasePath; + getRelationships: (type: string, id: string) => Promise; + savedObject: SavedObjectWithMetadata; + close: () => void; + goInspectObject: (obj: SavedObjectWithMetadata) => void; + canGoInApp: (obj: SavedObjectWithMetadata) => boolean; +} -export class Relationships extends Component { - static propTypes = { - getRelationships: PropTypes.func.isRequired, - savedObject: PropTypes.object.isRequired, - close: PropTypes.func.isRequired, - goInspectObject: PropTypes.func.isRequired, - canGoInApp: PropTypes.func.isRequired, - }; +export interface RelationshipsState { + relationships: SavedObjectRelation[]; + isLoading: boolean; + error?: string; +} - constructor(props) { +export class Relationships extends Component { + constructor(props: RelationshipsProps) { super(props); this.state = { - relationships: undefined, + relationships: [], isLoading: false, error: undefined, }; @@ -62,7 +69,7 @@ export class Relationships extends Component { this.getRelationshipData(); } - UNSAFE_componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps: RelationshipsProps) { if (nextProps.savedObject.id !== this.props.savedObject.id) { this.getRelationshipData(); } @@ -92,7 +99,7 @@ export class Relationships extends Component { } @@ -104,7 +111,7 @@ export class Relationships extends Component { } renderRelationships() { - const { goInspectObject, savedObject } = this.props; + const { goInspectObject, savedObject, basePath } = this.props; const { relationships, isLoading, error } = this.state; if (error) { @@ -118,17 +125,17 @@ export class Relationships extends Component { const columns = [ { field: 'type', - name: i18n.translate('kbn.management.objects.objectsTable.relationships.columnTypeName', { + name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeName', { defaultMessage: 'Type', }), width: '50px', align: 'center', description: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.columnTypeDescription', + 'savedObjectsManagement.objectsTable.relationships.columnTypeDescription', { defaultMessage: 'Type of the saved object' } ), sortable: false, - render: (type, object) => { + render: (type: string, object: SavedObjectWithMetadata) => { return ( { + render: (relationship: string) => { if (relationship === 'parent') { return ( @@ -166,7 +173,7 @@ export class Relationships extends Component { return ( @@ -176,17 +183,17 @@ export class Relationships extends Component { }, { field: 'meta.title', - name: i18n.translate('kbn.management.objects.objectsTable.relationships.columnTitleName', { + name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTitleName', { defaultMessage: 'Title', }), description: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.columnTitleDescription', + 'savedObjectsManagement.objectsTable.relationships.columnTitleDescription', { defaultMessage: 'Title of the saved object' } ), dataType: 'string', sortable: false, - render: (title, object) => { - const { path } = object.meta.inAppUrl || {}; + render: (title: string, object: SavedObjectWithMetadata) => { + const { path = '' } = object.meta.inAppUrl || {}; const canGoInApp = this.props.canGoInApp(object); if (!canGoInApp) { return ( @@ -196,7 +203,7 @@ export class Relationships extends Component { ); } return ( - + {title || getDefaultTitle(object)} ); @@ -204,24 +211,24 @@ export class Relationships extends Component { }, { name: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.columnActionsName', + 'savedObjectsManagement.objectsTable.relationships.columnActionsName', { defaultMessage: 'Actions' } ), actions: [ { name: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.columnActions.inspectActionName', + 'savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionName', { defaultMessage: 'Inspect' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.columnActions.inspectActionDescription', + 'savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionDescription', { defaultMessage: 'Inspect this saved object' } ), type: 'icon', icon: 'inspect', 'data-test-subj': 'relationshipsTableAction-inspect', - onClick: object => goInspectObject(object), - available: object => !!object.meta.editUrl, + onClick: (object: SavedObjectWithMetadata) => goInspectObject(object), + available: (object: SavedObjectWithMetadata) => !!object.meta.editUrl, }, ], }, @@ -244,7 +251,7 @@ export class Relationships extends Component { type: 'field_value_selection', field: 'relationship', name: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.search.filters.relationship.name', + 'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.name', { defaultMessage: 'Direct relationship' } ), multiSelect: 'or', @@ -253,7 +260,7 @@ export class Relationships extends Component { value: 'parent', name: 'parent', view: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.search.filters.relationship.parentAsValue.view', + 'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.parentAsValue.view', { defaultMessage: 'Parent' } ), }, @@ -261,7 +268,7 @@ export class Relationships extends Component { value: 'child', name: 'child', view: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.search.filters.relationship.childAsValue.view', + 'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.childAsValue.view', { defaultMessage: 'Child' } ), }, @@ -271,13 +278,13 @@ export class Relationships extends Component { type: 'field_value_selection', field: 'type', name: i18n.translate( - 'kbn.management.objects.objectsTable.relationships.search.filters.type.name', + 'savedObjectsManagement.objectsTable.relationships.search.filters.type.name', { defaultMessage: 'Type' } ), multiSelect: 'or', options: [...filterTypesMap.values()], }, - ], + ] as FilterConfig[], }; return ( @@ -285,7 +292,7 @@ export class Relationships extends Component {

    {i18n.translate( - 'kbn.management.objects.objectsTable.relationships.relationshipsTitle', + 'savedObjectsManagement.objectsTable.relationships.relationshipsTitle', { defaultMessage: 'Here are the saved objects related to {title}. ' + @@ -301,7 +308,7 @@ export class Relationships extends Component { ({ diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/table.test.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx similarity index 87% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/table.test.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx index 9b3e2314c9f84a..356f227773610f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/__jest__/table.test.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx @@ -19,27 +19,22 @@ import React from 'react'; import { shallowWithI18nProvider, mountWithI18nProvider } from 'test_utils/enzyme_helpers'; +// @ts-ignore import { findTestSubject } from '@elastic/eui/lib/test'; -import { keyCodes } from '@elastic/eui/lib/services'; -import { npSetup as mockNpSetup } from '../../../../../../../../../../../ui/public/new_platform/__mocks__'; +import { keyCodes } from '@elastic/eui'; +import { httpServiceMock } from '../../../../../../core/public/mocks'; +import { actionServiceMock } from '../../../services/action_service.mock'; +import { Table, TableProps } from './table'; -jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); - -jest.mock('ui/chrome', () => ({ - addBasePath: () => '', -})); - -jest.mock('ui/new_platform', () => ({ - npSetup: mockNpSetup, -})); - -import { Table } from '../table'; - -const defaultProps = { +const defaultProps: TableProps = { + basePath: httpServiceMock.createSetupContract().basePath, + actionRegistry: actionServiceMock.createStart(), selectedSavedObjects: [ { id: '1', type: 'index-pattern', + attributes: {}, + references: [], meta: { title: `MyIndexPattern*`, icon: 'indexPatternApp', @@ -58,13 +53,15 @@ const defaultProps = { onDelete: () => {}, onExport: () => {}, goInspectObject: () => {}, - canGoInApp: () => {}, + canGoInApp: () => true, pageIndex: 1, pageSize: 2, items: [ { id: '1', type: 'index-pattern', + attributes: {}, + references: [], meta: { title: `MyIndexPattern*`, icon: 'indexPatternApp', @@ -120,7 +117,7 @@ describe('Table', () => { { type: 'visualization' }, { type: 'search' }, { type: 'index-pattern' }, - ]; + ] as any; const customizedProps = { ...defaultProps, selectedSavedObjects, canDelete: false }; const component = shallowWithI18nProvider(

); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/table.js b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx similarity index 71% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/table.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx index 132fa1e691c1cb..5b574e4b3d331f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/table.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx @@ -17,12 +17,10 @@ * under the License. */ -import chrome from 'ui/chrome'; -import { npSetup } from 'ui/new_platform'; +import { IBasePath } from 'src/core/public'; import React, { PureComponent, Fragment } from 'react'; -import PropTypes from 'prop-types'; - import { + // @ts-ignore EuiSearchBar, EuiBasicTable, EuiButton, @@ -35,54 +33,64 @@ import { EuiSwitch, EuiFormRow, EuiText, + EuiTableFieldDataColumnType, + EuiTableActionsColumnType, } from '@elastic/eui'; -import { getDefaultTitle, getSavedObjectLabel } from '../../../../lib'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; +import { getDefaultTitle, getSavedObjectLabel } from '../../../lib'; +import { SavedObjectWithMetadata } from '../../../types'; +import { + SavedObjectsManagementActionServiceStart, + SavedObjectsManagementAction, +} from '../../../services'; -export class Table extends PureComponent { - static propTypes = { - selectedSavedObjects: PropTypes.array.isRequired, - selectionConfig: PropTypes.shape({ - selectable: PropTypes.func, - selectableMessage: PropTypes.func, - onSelectionChange: PropTypes.func.isRequired, - }).isRequired, - filterOptions: PropTypes.array.isRequired, - canDelete: PropTypes.bool.isRequired, - onDelete: PropTypes.func.isRequired, - onExport: PropTypes.func.isRequired, - goInspectObject: PropTypes.func.isRequired, - - pageIndex: PropTypes.number.isRequired, - pageSize: PropTypes.number.isRequired, - items: PropTypes.array.isRequired, - itemId: PropTypes.oneOfType([ - PropTypes.string, // the name of the item id property - PropTypes.func, // (item) => string - ]), - totalItemCount: PropTypes.number.isRequired, - onQueryChange: PropTypes.func.isRequired, - onTableChange: PropTypes.func.isRequired, - isSearching: PropTypes.bool.isRequired, - - onShowRelationships: PropTypes.func.isRequired, +export interface TableProps { + basePath: IBasePath; + actionRegistry: SavedObjectsManagementActionServiceStart; + selectedSavedObjects: SavedObjectWithMetadata[]; + selectionConfig: { + onSelectionChange: (selection: SavedObjectWithMetadata[]) => void; }; + filterOptions: any[]; + canDelete: boolean; + onDelete: () => void; + onExport: (includeReferencesDeep: boolean) => void; + goInspectObject: (obj: SavedObjectWithMetadata) => void; + pageIndex: number; + pageSize: number; + items: SavedObjectWithMetadata[]; + itemId: string | (() => string); + totalItemCount: number; + onQueryChange: (query: any) => void; + onTableChange: (table: any) => void; + isSearching: boolean; + onShowRelationships: (object: SavedObjectWithMetadata) => void; + canGoInApp: (obj: SavedObjectWithMetadata) => boolean; +} + +interface TableState { + isSearchTextValid: boolean; + parseErrorMessage: any; + isExportPopoverOpen: boolean; + isIncludeReferencesDeepChecked: boolean; + activeAction?: SavedObjectsManagementAction; +} - state = { +export class Table extends PureComponent { + state: TableState = { isSearchTextValid: true, parseErrorMessage: null, isExportPopoverOpen: false, isIncludeReferencesDeepChecked: true, - activeAction: null, + activeAction: undefined, }; - constructor(props) { + constructor(props: TableProps) { super(props); - this.extraActions = npSetup.plugins.savedObjectsManagement.actionRegistry.getAll(); } - onChange = ({ query, error }) => { + onChange = ({ query, error }: any) => { if (error) { this.setState({ isSearchTextValid: false, @@ -136,12 +144,14 @@ export class Table extends PureComponent { onTableChange, goInspectObject, onShowRelationships, + basePath, + actionRegistry, } = this.props; const pagination = { - pageIndex: pageIndex, - pageSize: pageSize, - totalItemCount: totalItemCount, + pageIndex, + pageSize, + totalItemCount, pageSizeOptions: [5, 10, 20, 50], }; @@ -149,7 +159,7 @@ export class Table extends PureComponent { { type: 'field_value_selection', field: 'type', - name: i18n.translate('kbn.management.objects.objectsTable.table.typeFilterName', { + name: i18n.translate('savedObjectsManagement.objectsTable.table.typeFilterName', { defaultMessage: 'Type', }), multiSelect: 'or', @@ -168,18 +178,18 @@ export class Table extends PureComponent { const columns = [ { field: 'type', - name: i18n.translate('kbn.management.objects.objectsTable.table.columnTypeName', { + name: i18n.translate('savedObjectsManagement.objectsTable.table.columnTypeName', { defaultMessage: 'Type', }), width: '50px', align: 'center', description: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnTypeDescription', + 'savedObjectsManagement.objectsTable.table.columnTypeDescription', { defaultMessage: 'Type of the saved object' } ), sortable: false, 'data-test-subj': 'savedObjectsTableRowType', - render: (type, object) => { + render: (type: string, object: SavedObjectWithMetadata) => { return ( ); }, - }, + } as EuiTableFieldDataColumnType>, { field: 'meta.title', - name: i18n.translate('kbn.management.objects.objectsTable.table.columnTitleName', { + name: i18n.translate('savedObjectsManagement.objectsTable.table.columnTitleName', { defaultMessage: 'Title', }), description: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnTitleDescription', + 'savedObjectsManagement.objectsTable.table.columnTitleDescription', { defaultMessage: 'Title of the saved object' } ), dataType: 'string', sortable: false, 'data-test-subj': 'savedObjectsTableRowTitle', - render: (title, object) => { - const { path } = object.meta.inAppUrl || {}; + render: (title: string, object: SavedObjectWithMetadata) => { + const { path = '' } = object.meta.inAppUrl || {}; const canGoInApp = this.props.canGoInApp(object); if (!canGoInApp) { return {title || getDefaultTitle(object)}; } return ( - {title || getDefaultTitle(object)} + {title || getDefaultTitle(object)} ); }, - }, + } as EuiTableFieldDataColumnType>, { - name: i18n.translate('kbn.management.objects.objectsTable.table.columnActionsName', { + name: i18n.translate('savedObjectsManagement.objectsTable.table.columnActionsName', { defaultMessage: 'Actions', }), actions: [ { name: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnActions.inspectActionName', + 'savedObjectsManagement.objectsTable.table.columnActions.inspectActionName', { defaultMessage: 'Inspect' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnActions.inspectActionDescription', + 'savedObjectsManagement.objectsTable.table.columnActions.inspectActionDescription', { defaultMessage: 'Inspect this saved object' } ), type: 'icon', @@ -237,11 +247,11 @@ export class Table extends PureComponent { }, { name: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionName', + 'savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionName', { defaultMessage: 'Relationships' } ), description: i18n.translate( - 'kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionDescription', + 'savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionDescription', { defaultMessage: 'View the relationships this saved object has to other saved objects', @@ -252,33 +262,35 @@ export class Table extends PureComponent { onClick: object => onShowRelationships(object), 'data-test-subj': 'savedObjectsTableAction-relationships', }, - ...this.extraActions.map(action => { + ...actionRegistry.getAll().map(action => { return { ...action.euiAction, 'data-test-subj': `savedObjectsTableAction-${action.id}`, - onClick: object => { + onClick: (object: SavedObjectWithMetadata) => { this.setState({ activeAction: action, }); action.registerOnFinishCallback(() => { this.setState({ - activeAction: null, + activeAction: undefined, }); }); - action.euiAction.onClick(object); + if (action.euiAction.onClick) { + action.euiAction.onClick(object as any); + } }, }; }), ], - }, + } as EuiTableActionsColumnType, ]; let queryParseError; if (!this.state.isSearchTextValid) { const parseErrorMsg = i18n.translate( - 'kbn.management.objects.objectsTable.searchBar.unableToParseQueryErrorMessage', + 'savedObjectsManagement.objectsTable.searchBar.unableToParseQueryErrorMessage', { defaultMessage: 'Unable to parse query' } ); queryParseError = ( @@ -294,20 +306,20 @@ export class Table extends PureComponent { isDisabled={selectedSavedObjects.length === 0} > ); - const activeActionContents = this.state.activeAction ? this.state.activeAction.render() : null; + const activeActionContents = this.state.activeAction?.render() ?? null; return ( {activeActionContents} , @@ -339,7 +351,7 @@ export class Table extends PureComponent { } @@ -348,7 +360,7 @@ export class Table extends PureComponent { name="includeReferencesDeep" label={ } @@ -359,7 +371,7 @@ export class Table extends PureComponent { @@ -374,7 +386,7 @@ export class Table extends PureComponent { loading={isSearching} itemId={itemId} items={items} - columns={columns} + columns={columns as any} pagination={pagination} selection={selection} onChange={onTableChange} diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/index.js b/src/plugins/saved_objects_management/public/management_section/objects_table/index.ts similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/index.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/index.ts index e1195c6edfe317..8777b153896903 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/table/index.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { Table } from './table'; +export { SavedObjectsTable } from './saved_objects_table'; diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.mocks.ts b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.mocks.ts new file mode 100644 index 00000000000000..6b4659a6b5a13e --- /dev/null +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.mocks.ts @@ -0,0 +1,67 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export const saveAsMock = jest.fn(); +jest.doMock('@elastic/filesaver', () => ({ + saveAs: saveAsMock, +})); + +jest.doMock('lodash', () => ({ + ...jest.requireActual('lodash'), + debounce: (func: Function) => { + function debounced(this: any, ...args: any[]) { + return func.apply(this, args); + } + return debounced; + }, +})); + +export const findObjectsMock = jest.fn(); +jest.doMock('../../lib/find_objects', () => ({ + findObjects: findObjectsMock, +})); + +export const fetchExportObjectsMock = jest.fn(); +jest.doMock('../../lib/fetch_export_objects', () => ({ + fetchExportObjects: fetchExportObjectsMock, +})); + +export const fetchExportByTypeAndSearchMock = jest.fn(); +jest.doMock('../../lib/fetch_export_by_type_and_search', () => ({ + fetchExportByTypeAndSearch: fetchExportByTypeAndSearchMock, +})); + +export const extractExportDetailsMock = jest.fn(); +jest.doMock('../../lib/extract_export_details', () => ({ + extractExportDetails: extractExportDetailsMock, +})); + +jest.doMock('./components/header', () => ({ + Header: () => 'Header', +})); + +export const getSavedObjectCountsMock = jest.fn(); +jest.doMock('../../lib/get_saved_object_counts', () => ({ + getSavedObjectCounts: getSavedObjectCountsMock, +})); + +export const getRelationshipsMock = jest.fn(); +jest.doMock('../../lib/get_relationships', () => ({ + getRelationships: getRelationshipsMock, +})); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.tsx similarity index 58% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.tsx index 7b9c17640a0f3e..342fdc4784b098 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.tsx @@ -17,69 +17,39 @@ * under the License. */ +import { + extractExportDetailsMock, + fetchExportByTypeAndSearchMock, + fetchExportObjectsMock, + findObjectsMock, + getRelationshipsMock, + getSavedObjectCountsMock, + saveAsMock, +} from './saved_objects_table.test.mocks'; + import React from 'react'; -import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -import { mockManagementPlugin } from '../../../../../../../../../../plugins/index_pattern_management/public/mocks'; import { Query } from '@elastic/eui'; - -import { ObjectsTable, POSSIBLE_TYPES } from '../objects_table'; -import { Flyout } from '../components/flyout/'; -import { Relationships } from '../components/relationships/'; -import { findObjects } from '../../../lib'; -import { extractExportDetails } from '../../../lib/extract_export_details'; - -jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); - -jest.mock('../../../../../../../../../../plugins/index_pattern_management/public', () => ({ - setup: mockManagementPlugin.createSetupContract(), - start: mockManagementPlugin.createStartContract(), -})); - -jest.mock('../../../lib/find_objects', () => ({ - findObjects: jest.fn(), -})); - -jest.mock('../components/header', () => ({ - Header: () => 'Header', -})); - -jest.mock('ui/chrome', () => ({ - addBasePath: () => '', - getInjected: () => ['index-pattern', 'visualization', 'dashboard', 'search'], -})); - -jest.mock('../../../lib/fetch_export_objects', () => ({ - fetchExportObjects: jest.fn(), -})); - -jest.mock('../../../lib/fetch_export_by_type_and_search', () => ({ - fetchExportByTypeAndSearch: jest.fn(), -})); - -jest.mock('../../../lib/extract_export_details', () => ({ - extractExportDetails: jest.fn(), -})); - -jest.mock('../../../lib/get_saved_object_counts', () => ({ - getSavedObjectCounts: jest.fn().mockImplementation(() => { - return { - 'index-pattern': 0, - visualization: 0, - dashboard: 0, - search: 0, - }; - }), -})); - -jest.mock('@elastic/filesaver', () => ({ - saveAs: jest.fn(), -})); - -jest.mock('../../../lib/get_relationships', () => ({ - getRelationships: jest.fn(), -})); - -jest.mock('ui/notify', () => ({})); +import { ShallowWrapper } from 'enzyme'; +import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; +import { + httpServiceMock, + overlayServiceMock, + notificationServiceMock, + savedObjectsServiceMock, + applicationServiceMock, +} from '../../../../../core/public/mocks'; +import { dataPluginMock } from '../../../../data/public/mocks'; +import { serviceRegistryMock } from '../../services/service_registry.mock'; +import { actionServiceMock } from '../../services/action_service.mock'; +import { + SavedObjectsTable, + SavedObjectsTableProps, + SavedObjectsTableState, +} from './saved_objects_table'; +import { Flyout, Relationships } from './components'; +import { SavedObjectWithMetadata } from '../../types'; + +const allowedTypes = ['index-pattern', 'visualization', 'dashboard', 'search']; const allSavedObjects = [ { @@ -112,122 +82,128 @@ const allSavedObjects = [ }, ]; -const $http = () => {}; -$http.post = jest.fn().mockImplementation(() => []); -const defaultProps = { - goInspectObject: () => {}, - confirmModalPromise: jest.fn(), - savedObjectsClient: { - find: jest.fn(), - bulkGet: jest.fn(), - }, - indexPatterns: { - clearCache: jest.fn(), - }, - $http, - basePath: '', - newIndexPatternUrl: '', - kbnIndex: '', - services: [], - uiCapabilities: { - savedObjectsManagement: { - read: true, - edit: false, - delete: false, - }, - }, - canDelete: true, -}; - -beforeEach(() => { - findObjects.mockImplementation(() => ({ - total: 4, - savedObjects: [ - { - id: '1', - type: 'index-pattern', - meta: { - title: `MyIndexPattern*`, - icon: 'indexPatternApp', - editUrl: '#/management/kibana/index_patterns/1', - inAppUrl: { - path: '/management/kibana/index_patterns/1', - uiCapabilitiesPath: 'management.kibana.index_patterns', +describe('SavedObjectsTable', () => { + let defaultProps: SavedObjectsTableProps; + let http: ReturnType; + let overlays: ReturnType; + let notifications: ReturnType; + let savedObjects: ReturnType; + + const shallowRender = (overrides: Partial = {}) => { + return (shallowWithI18nProvider( + + ) as unknown) as ShallowWrapper< + SavedObjectsTableProps, + SavedObjectsTableState, + SavedObjectsTable + >; + }; + + beforeEach(() => { + extractExportDetailsMock.mockReset(); + + http = httpServiceMock.createStartContract(); + overlays = overlayServiceMock.createStartContract(); + notifications = notificationServiceMock.createStartContract(); + savedObjects = savedObjectsServiceMock.createStartContract(); + + const applications = applicationServiceMock.createStartContract(); + applications.capabilities = { + navLinks: {}, + management: {}, + catalogue: {}, + savedObjectsManagement: { + read: true, + edit: false, + delete: false, + }, + }; + + http.post.mockResolvedValue([]); + + getSavedObjectCountsMock.mockReturnValue({ + 'index-pattern': 0, + visualization: 0, + dashboard: 0, + search: 0, + }); + + defaultProps = { + allowedTypes, + serviceRegistry: serviceRegistryMock.create(), + actionRegistry: actionServiceMock.createStart(), + savedObjectsClient: savedObjects.client, + indexPatterns: dataPluginMock.createStartContract().indexPatterns, + http, + overlays, + notifications, + applications, + perPageConfig: 15, + goInspectObject: () => {}, + canGoInApp: () => true, + }; + + findObjectsMock.mockImplementation(() => ({ + total: 4, + savedObjects: [ + { + id: '1', + type: 'index-pattern', + meta: { + title: `MyIndexPattern*`, + icon: 'indexPatternApp', + editUrl: '#/management/kibana/index_patterns/1', + inAppUrl: { + path: '/management/kibana/index_patterns/1', + uiCapabilitiesPath: 'management.kibana.index_patterns', + }, }, }, - }, - { - id: '2', - type: 'search', - meta: { - title: `MySearch`, - icon: 'search', - editUrl: '#/management/kibana/objects/savedSearches/2', - inAppUrl: { - path: '/discover/2', - uiCapabilitiesPath: 'discover.show', + { + id: '2', + type: 'search', + meta: { + title: `MySearch`, + icon: 'search', + editUrl: '#/management/kibana/objects/savedSearches/2', + inAppUrl: { + path: '/discover/2', + uiCapabilitiesPath: 'discover.show', + }, }, }, - }, - { - id: '3', - type: 'dashboard', - meta: { - title: `MyDashboard`, - icon: 'dashboardApp', - editUrl: '#/management/kibana/objects/savedDashboards/3', - inAppUrl: { - path: '/dashboard/3', - uiCapabilitiesPath: 'dashboard.show', + { + id: '3', + type: 'dashboard', + meta: { + title: `MyDashboard`, + icon: 'dashboardApp', + editUrl: '#/management/kibana/objects/savedDashboards/3', + inAppUrl: { + path: '/dashboard/3', + uiCapabilitiesPath: 'dashboard.show', + }, }, }, - }, - { - id: '4', - type: 'visualization', - meta: { - title: `MyViz`, - icon: 'visualizeApp', - editUrl: '#/management/kibana/objects/savedVisualizations/4', - inAppUrl: { - path: '/visualize/edit/4', - uiCapabilitiesPath: 'visualize.show', + { + id: '4', + type: 'visualization', + meta: { + title: `MyViz`, + icon: 'visualizeApp', + editUrl: '#/management/kibana/objects/savedVisualizations/4', + inAppUrl: { + path: '/visualize/edit/4', + uiCapabilitiesPath: 'visualize.show', + }, }, }, - }, - ], - })); -}); - -let addDangerMock; -let addSuccessMock; -let addWarningMock; - -describe('ObjectsTable', () => { - beforeEach(() => { - defaultProps.savedObjectsClient.find.mockClear(); - extractExportDetails.mockReset(); - // mock _.debounce to fire immediately with no internal timer - require('lodash').debounce = func => { - function debounced(...args) { - return func.apply(this, args); - } - return debounced; - }; - addDangerMock = jest.fn(); - addSuccessMock = jest.fn(); - addWarningMock = jest.fn(); - require('ui/notify').toastNotifications = { - addDanger: addDangerMock, - addSuccess: addSuccessMock, - addWarning: addWarningMock, - }; + ], + })); }); it('should render normally', async () => { - const component = shallowWithI18nProvider( - - ); + const component = shallowRender({ perPageConfig: 15 }); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -238,19 +214,17 @@ describe('ObjectsTable', () => { }); it('should add danger toast when find fails', async () => { - findObjects.mockImplementation(() => { + findObjectsMock.mockImplementation(() => { throw new Error('Simulated find error'); }); - const component = shallowWithI18nProvider( - - ); + const component = shallowRender({ perPageConfig: 15 }); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); // Ensure the state changes are reflected component.update(); - expect(addDangerMock).toHaveBeenCalled(); + expect(notifications.toasts.addDanger).toHaveBeenCalled(); }); describe('export', () => { @@ -258,7 +232,7 @@ describe('ObjectsTable', () => { const mockSelectedSavedObjects = [ { id: '1', type: 'index-pattern' }, { id: '3', type: 'dashboard' }, - ]; + ] as SavedObjectWithMetadata[]; const mockSavedObjects = mockSelectedSavedObjects.map(obj => ({ _id: obj.id, @@ -272,11 +246,7 @@ describe('ObjectsTable', () => { })), }; - const { fetchExportObjects } = require('../../../lib/fetch_export_objects'); - - const component = shallowWithI18nProvider( - - ); + const component = shallowRender({ savedObjectsClient: mockSavedObjectsClient }); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -288,8 +258,8 @@ describe('ObjectsTable', () => { await component.instance().onExport(true); - expect(fetchExportObjects).toHaveBeenCalledWith(mockSelectedSavedObjects, true); - expect(addSuccessMock).toHaveBeenCalledWith({ + expect(fetchExportObjectsMock).toHaveBeenCalledWith(http, mockSelectedSavedObjects, true); + expect(notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: 'Your file is downloading in the background', }); }); @@ -298,7 +268,7 @@ describe('ObjectsTable', () => { const mockSelectedSavedObjects = [ { id: '1', type: 'index-pattern' }, { id: '3', type: 'dashboard' }, - ]; + ] as SavedObjectWithMetadata[]; const mockSavedObjects = mockSelectedSavedObjects.map(obj => ({ _id: obj.id, @@ -312,16 +282,13 @@ describe('ObjectsTable', () => { })), }; - const { fetchExportObjects } = require('../../../lib/fetch_export_objects'); - extractExportDetails.mockImplementation(() => ({ + extractExportDetailsMock.mockImplementation(() => ({ exportedCount: 2, missingRefCount: 1, missingReferences: [{ id: '7', type: 'visualisation' }], })); - const component = shallowWithI18nProvider( - - ); + const component = shallowRender({ savedObjectsClient: mockSavedObjectsClient }); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -333,8 +300,8 @@ describe('ObjectsTable', () => { await component.instance().onExport(true); - expect(fetchExportObjects).toHaveBeenCalledWith(mockSelectedSavedObjects, true); - expect(addWarningMock).toHaveBeenCalledWith({ + expect(fetchExportObjectsMock).toHaveBeenCalledWith(http, mockSelectedSavedObjects, true); + expect(notifications.toasts.addWarning).toHaveBeenCalledWith({ title: 'Your file is downloading in the background. ' + 'Some related objects could not be found. ' + @@ -343,25 +310,21 @@ describe('ObjectsTable', () => { }); it('should allow the user to choose when exporting all', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); // Ensure the state changes are reflected component.update(); - component.find('Header').prop('onExportAll')(); + (component.find('Header') as any).prop('onExportAll')(); component.update(); expect(component.find('EuiModal')).toMatchSnapshot(); }); it('should export all', async () => { - const { - fetchExportByTypeAndSearch, - } = require('../../../lib/fetch_export_by_type_and_search'); - const { saveAs } = require('@elastic/filesaver'); - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -370,23 +333,24 @@ describe('ObjectsTable', () => { // Set up mocks const blob = new Blob([JSON.stringify(allSavedObjects)], { type: 'application/ndjson' }); - fetchExportByTypeAndSearch.mockImplementation(() => blob); + fetchExportByTypeAndSearchMock.mockImplementation(() => blob); await component.instance().onExportAll(); - expect(fetchExportByTypeAndSearch).toHaveBeenCalledWith(POSSIBLE_TYPES, undefined, true); - expect(saveAs).toHaveBeenCalledWith(blob, 'export.ndjson'); - expect(addSuccessMock).toHaveBeenCalledWith({ + expect(fetchExportByTypeAndSearchMock).toHaveBeenCalledWith( + http, + allowedTypes, + undefined, + true + ); + expect(saveAsMock).toHaveBeenCalledWith(blob, 'export.ndjson'); + expect(notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: 'Your file is downloading in the background', }); }); it('should export all, accounting for the current search criteria', async () => { - const { - fetchExportByTypeAndSearch, - } = require('../../../lib/fetch_export_by_type_and_search'); - const { saveAs } = require('@elastic/filesaver'); - const component = shallowWithI18nProvider(); + const component = shallowRender(); component.instance().onQueryChange({ query: Query.parse('test'), @@ -399,13 +363,18 @@ describe('ObjectsTable', () => { // Set up mocks const blob = new Blob([JSON.stringify(allSavedObjects)], { type: 'application/ndjson' }); - fetchExportByTypeAndSearch.mockImplementation(() => blob); + fetchExportByTypeAndSearchMock.mockImplementation(() => blob); await component.instance().onExportAll(); - expect(fetchExportByTypeAndSearch).toHaveBeenCalledWith(POSSIBLE_TYPES, 'test*', true); - expect(saveAs).toHaveBeenCalledWith(blob, 'export.ndjson'); - expect(addSuccessMock).toHaveBeenCalledWith({ + expect(fetchExportByTypeAndSearchMock).toHaveBeenCalledWith( + http, + allowedTypes, + 'test*', + true + ); + expect(saveAsMock).toHaveBeenCalledWith(blob, 'export.ndjson'); + expect(notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: 'Your file is downloading in the background', }); }); @@ -413,7 +382,7 @@ describe('ObjectsTable', () => { describe('import', () => { it('should show the flyout', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -427,7 +396,7 @@ describe('ObjectsTable', () => { }); it('should hide the flyout', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -443,9 +412,7 @@ describe('ObjectsTable', () => { describe('relationships', () => { it('should fetch relationships', async () => { - const { getRelationships } = require('../../../lib/get_relationships'); - - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -454,17 +421,11 @@ describe('ObjectsTable', () => { await component.instance().getRelationships('search', '1'); const savedObjectTypes = ['index-pattern', 'visualization', 'dashboard', 'search']; - expect(getRelationships).toHaveBeenCalledWith( - 'search', - '1', - savedObjectTypes, - defaultProps.$http, - defaultProps.basePath - ); + expect(getRelationshipsMock).toHaveBeenCalledWith(http, 'search', '1', savedObjectTypes); }); it('should show the flyout', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -483,7 +444,7 @@ describe('ObjectsTable', () => { uiCapabilitiesPath: 'discover.show', }, }, - }); + } as SavedObjectWithMetadata); component.update(); expect(component.find(Relationships)).toMatchSnapshot(); @@ -503,7 +464,7 @@ describe('ObjectsTable', () => { }); it('should hide the flyout', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -522,12 +483,12 @@ describe('ObjectsTable', () => { describe('delete', () => { it('should show a confirm modal', async () => { - const component = shallowWithI18nProvider(); + const component = shallowRender(); const mockSelectedSavedObjects = [ - { id: '1', type: 'index-pattern', title: 'Title 1' }, - { id: '3', type: 'dashboard', title: 'Title 2' }, - ]; + { id: '1', type: 'index-pattern' }, + { id: '3', type: 'dashboard' }, + ] as SavedObjectWithMetadata[]; // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); @@ -546,7 +507,7 @@ describe('ObjectsTable', () => { const mockSelectedSavedObjects = [ { id: '1', type: 'index-pattern' }, { id: '3', type: 'dashboard' }, - ]; + ] as SavedObjectWithMetadata[]; const mockSavedObjects = mockSelectedSavedObjects.map(obj => ({ id: obj.id, @@ -562,9 +523,7 @@ describe('ObjectsTable', () => { delete: jest.fn(), }; - const component = shallowWithI18nProvider( - - ); + const component = shallowRender({ savedObjectsClient: mockSavedObjectsClient }); // Ensure all promises resolve await new Promise(resolve => process.nextTick(resolve)); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx similarity index 73% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js rename to src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx index 188762f165b24a..c76fea5a0fb29f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/objects_table.js +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx @@ -17,17 +17,10 @@ * under the License. */ -import chrome from 'ui/chrome'; -import { saveAs } from '@elastic/filesaver'; import React, { Component } from 'react'; -import PropTypes from 'prop-types'; import { debounce } from 'lodash'; -import { Header } from './components/header'; -import { Flyout } from './components/flyout'; -import { Relationships } from './components/relationships'; -import { Table } from './components/table'; -import { toastNotifications } from 'ui/notify'; - +// @ts-ignore +import { saveAs } from '@elastic/filesaver'; import { EuiSpacer, Query, @@ -54,7 +47,15 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; - +import { + SavedObjectsClientContract, + SavedObjectsFindOptions, + HttpStart, + OverlayStart, + NotificationsStart, + ApplicationStart, +} from 'src/core/public'; +import { IndexPatternsContract } from '../../../../data/public'; import { parseQuery, getSavedObjectCounts, @@ -63,39 +64,72 @@ import { fetchExportObjects, fetchExportByTypeAndSearch, findObjects, + extractExportDetails, + SavedObjectsExportResultDetails, } from '../../lib'; -import { extractExportDetails } from '../../lib/extract_export_details'; - -export const POSSIBLE_TYPES = chrome.getInjected('importAndExportableTypes'); - -export class ObjectsTable extends Component { - static propTypes = { - savedObjectsClient: PropTypes.object.isRequired, - indexPatterns: PropTypes.object.isRequired, - $http: PropTypes.func.isRequired, - basePath: PropTypes.string.isRequired, - perPageConfig: PropTypes.number, - newIndexPatternUrl: PropTypes.string.isRequired, - confirmModalPromise: PropTypes.func.isRequired, - services: PropTypes.array.isRequired, - uiCapabilities: PropTypes.object.isRequired, - goInspectObject: PropTypes.func.isRequired, - canGoInApp: PropTypes.func.isRequired, - }; +import { SavedObjectWithMetadata } from '../../types'; +import { + ISavedObjectsManagementServiceRegistry, + SavedObjectsManagementActionServiceStart, +} from '../../services'; +import { Header, Table, Flyout, Relationships } from './components'; + +interface ExportAllOption { + id: string; + label: string; +} - constructor(props) { +export interface SavedObjectsTableProps { + allowedTypes: string[]; + serviceRegistry: ISavedObjectsManagementServiceRegistry; + actionRegistry: SavedObjectsManagementActionServiceStart; + savedObjectsClient: SavedObjectsClientContract; + indexPatterns: IndexPatternsContract; + http: HttpStart; + overlays: OverlayStart; + notifications: NotificationsStart; + applications: ApplicationStart; + perPageConfig: number; + goInspectObject: (obj: SavedObjectWithMetadata) => void; + canGoInApp: (obj: SavedObjectWithMetadata) => boolean; +} + +export interface SavedObjectsTableState { + totalCount: number; + page: number; + perPage: number; + savedObjects: SavedObjectWithMetadata[]; + savedObjectCounts: Record; + activeQuery: Query; + selectedSavedObjects: SavedObjectWithMetadata[]; + isShowingImportFlyout: boolean; + isSearching: boolean; + filteredItemCount: number; + isShowingRelationships: boolean; + relationshipObject?: SavedObjectWithMetadata; + isShowingDeleteConfirmModal: boolean; + isShowingExportAllOptionsModal: boolean; + isDeleting: boolean; + exportAllOptions: ExportAllOption[]; + exportAllSelectedOptions: Record; + isIncludeReferencesDeepChecked: boolean; +} + +export class SavedObjectsTable extends Component { + private _isMounted = false; + + constructor(props: SavedObjectsTableProps) { super(props); - this.savedObjectTypes = POSSIBLE_TYPES; this.state = { totalCount: 0, page: 0, perPage: props.perPageConfig || 50, savedObjects: [], - savedObjectCounts: this.savedObjectTypes.reduce((typeToCountMap, type) => { + savedObjectCounts: props.allowedTypes.reduce((typeToCountMap, type) => { typeToCountMap[type] = 0; return typeToCountMap; - }, {}), + }, {} as Record), activeQuery: Query.parse(''), selectedSavedObjects: [], isShowingImportFlyout: false, @@ -124,21 +158,20 @@ export class ObjectsTable extends Component { } fetchCounts = async () => { + const { allowedTypes } = this.props; const { queryText, visibleTypes } = parseQuery(this.state.activeQuery); - const filteredTypes = this.savedObjectTypes.filter( - type => !visibleTypes || visibleTypes.includes(type) - ); + const filteredTypes = allowedTypes.filter(type => !visibleTypes || visibleTypes.includes(type)); // These are the saved objects visible in the table. const filteredSavedObjectCounts = await getSavedObjectCounts( - this.props.$http, + this.props.http, filteredTypes, queryText ); - const exportAllOptions = []; - const exportAllSelectedOptions = {}; + const exportAllOptions: ExportAllOption[] = []; + const exportAllSelectedOptions: Record = {}; Object.keys(filteredSavedObjectCounts).forEach(id => { // Add this type as a bulk-export option. @@ -147,17 +180,13 @@ export class ObjectsTable extends Component { label: `${id} (${filteredSavedObjectCounts[id] || 0})`, }); - // Select it by defayult. + // Select it by default. exportAllSelectedOptions[id] = true; }); // Fetch all the saved objects that exist so we can accurately populate the counts within // the table filter dropdown. - const savedObjectCounts = await getSavedObjectCounts( - this.props.$http, - this.savedObjectTypes, - queryText - ); + const savedObjectCounts = await getSavedObjectCounts(this.props.http, allowedTypes, queryText); this.setState(state => ({ ...state, @@ -178,66 +207,64 @@ export class ObjectsTable extends Component { debouncedFetch = debounce(async () => { const { activeQuery: query, page, perPage } = this.state; + const { notifications, http, allowedTypes } = this.props; const { queryText, visibleTypes } = parseQuery(query); // "searchFields" is missing from the "findOptions" but gets injected via the API. // The API extracts the fields from each uiExports.savedObjectsManagement "defaultSearchField" attribute - const findOptions = { + const findOptions: SavedObjectsFindOptions = { search: queryText ? `${queryText}*` : undefined, perPage, page: page + 1, fields: ['id'], - type: this.savedObjectTypes.filter(type => !visibleTypes || visibleTypes.includes(type)), + type: allowedTypes.filter(type => !visibleTypes || visibleTypes.includes(type)), }; if (findOptions.type.length > 1) { findOptions.sortField = 'type'; } - let resp; try { - resp = await findObjects(findOptions); + const resp = await findObjects(http, findOptions); + if (!this._isMounted) { + return; + } + + this.setState(({ activeQuery }) => { + // ignore results for old requests + if (activeQuery.text !== query.text) { + return null; + } + + return { + savedObjects: resp.savedObjects, + filteredItemCount: resp.total, + isSearching: false, + }; + }); } catch (error) { if (this._isMounted) { this.setState({ isSearching: false, }); } - toastNotifications.addDanger({ + notifications.toasts.addDanger({ title: i18n.translate( - 'kbn.management.objects.objectsTable.unableFindSavedObjectsNotificationMessage', + 'savedObjectsManagement.objectsTable.unableFindSavedObjectsNotificationMessage', { defaultMessage: 'Unable find saved objects' } ), text: `${error}`, }); - return; - } - - if (!this._isMounted) { - return; } - - this.setState(({ activeQuery }) => { - // ignore results for old requests - if (activeQuery.text !== query.text) { - return {}; - } - - return { - savedObjects: resp.savedObjects, - filteredItemCount: resp.total, - isSearching: false, - }; - }); }, 300); refreshData = async () => { await Promise.all([this.fetchSavedObjects(), this.fetchCounts()]); }; - onSelectionChanged = selection => { + onSelectionChanged = (selection: SavedObjectWithMetadata[]) => { this.setState({ selectedSavedObjects: selection }); }; - onQueryChange = ({ query }) => { + onQueryChange = ({ query }: { query: Query }) => { // TODO: Use isSameQuery to compare new query with state.activeQuery to avoid re-fetching the // same data we already have. this.setState( @@ -253,7 +280,7 @@ export class ObjectsTable extends Component { ); }; - onTableChange = async table => { + onTableChange = async (table: any) => { const { index: page, size: perPage } = table.page || {}; this.setState( @@ -266,7 +293,7 @@ export class ObjectsTable extends Component { ); }; - onShowRelationships = object => { + onShowRelationships = (object: SavedObjectWithMetadata) => { this.setState({ isShowingRelationships: true, relationshipObject: object, @@ -280,16 +307,17 @@ export class ObjectsTable extends Component { }); }; - onExport = async includeReferencesDeep => { + onExport = async (includeReferencesDeep: boolean) => { const { selectedSavedObjects } = this.state; + const { notifications, http } = this.props; const objectsToExport = selectedSavedObjects.map(obj => ({ id: obj.id, type: obj.type })); let blob; try { - blob = await fetchExportObjects(objectsToExport, includeReferencesDeep); + blob = await fetchExportObjects(http, objectsToExport, includeReferencesDeep); } catch (e) { - toastNotifications.addDanger({ - title: i18n.translate('kbn.management.objects.objectsTable.export.dangerNotification', { + notifications.toasts.addDanger({ + title: i18n.translate('savedObjectsManagement.objectsTable.export.dangerNotification', { defaultMessage: 'Unable to generate export', }), }); @@ -304,24 +332,26 @@ export class ObjectsTable extends Component { onExportAll = async () => { const { exportAllSelectedOptions, isIncludeReferencesDeepChecked, activeQuery } = this.state; + const { notifications, http } = this.props; const { queryText } = parseQuery(activeQuery); const exportTypes = Object.entries(exportAllSelectedOptions).reduce((accum, [id, selected]) => { if (selected) { accum.push(id); } return accum; - }, []); + }, [] as string[]); let blob; try { blob = await fetchExportByTypeAndSearch( + http, exportTypes, queryText ? `${queryText}*` : undefined, isIncludeReferencesDeepChecked ); } catch (e) { - toastNotifications.addDanger({ - title: i18n.translate('kbn.management.objects.objectsTable.export.dangerNotification', { + notifications.toasts.addDanger({ + title: i18n.translate('savedObjectsManagement.objectsTable.export.dangerNotification', { defaultMessage: 'Unable to generate export', }), }); @@ -335,11 +365,12 @@ export class ObjectsTable extends Component { this.setState({ isShowingExportAllOptionsModal: false }); }; - showExportSuccessMessage = exportDetails => { + showExportSuccessMessage = (exportDetails: SavedObjectsExportResultDetails | undefined) => { + const { notifications } = this.props; if (exportDetails && exportDetails.missingReferences.length > 0) { - toastNotifications.addWarning({ + notifications.toasts.addWarning({ title: i18n.translate( - 'kbn.management.objects.objectsTable.export.successWithMissingRefsNotification', + 'savedObjectsManagement.objectsTable.export.successWithMissingRefsNotification', { defaultMessage: 'Your file is downloading in the background. ' + @@ -349,8 +380,8 @@ export class ObjectsTable extends Component { ), }); } else { - toastNotifications.addSuccess({ - title: i18n.translate('kbn.management.objects.objectsTable.export.successNotification', { + notifications.toasts.addSuccess({ + title: i18n.translate('savedObjectsManagement.objectsTable.export.successNotification', { defaultMessage: 'Your file is downloading in the background', }), }); @@ -412,30 +443,30 @@ export class ObjectsTable extends Component { }); }; - getRelationships = async (type, id) => { - return await getRelationships( - type, - id, - this.savedObjectTypes, - this.props.$http, - this.props.basePath - ); + getRelationships = async (type: string, id: string) => { + const { allowedTypes, http } = this.props; + return await getRelationships(http, type, id, allowedTypes); }; renderFlyout() { if (!this.state.isShowingImportFlyout) { return null; } + const { applications } = this.props; + const newIndexPatternUrl = applications.getUrlForApp('kibana', { + path: '#/management/kibana/index_pattern', + }); return ( ); } @@ -447,10 +478,10 @@ export class ObjectsTable extends Component { return ( @@ -482,7 +513,7 @@ export class ObjectsTable extends Component { } @@ -491,19 +522,19 @@ export class ObjectsTable extends Component { buttonColor="danger" cancelButtonText={ } confirmButtonText={ isDeleting ? ( ) : ( ) @@ -512,7 +543,7 @@ export class ObjectsTable extends Component { >

@@ -522,7 +553,7 @@ export class ObjectsTable extends Component { { field: 'type', name: i18n.translate( - 'kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName', + 'savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName', { defaultMessage: 'Type' } ), width: '50px', @@ -535,14 +566,14 @@ export class ObjectsTable extends Component { { field: 'id', name: i18n.translate( - 'kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.idColumnName', + 'savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.idColumnName', { defaultMessage: 'Id' } ), }, { field: 'meta.title', name: i18n.translate( - 'kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName', + 'savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName', { defaultMessage: 'Title' } ), }, @@ -586,7 +617,7 @@ export class ObjectsTable extends Component { } @@ -626,7 +657,7 @@ export class ObjectsTable extends Component { name="includeReferencesDeep" label={ } @@ -641,7 +672,7 @@ export class ObjectsTable extends Component { @@ -649,7 +680,7 @@ export class ObjectsTable extends Component { @@ -673,12 +704,13 @@ export class ObjectsTable extends Component { isSearching, savedObjectCounts, } = this.state; + const { http, allowedTypes, applications } = this.props; const selectionConfig = { onSelectionChange: this.onSelectionChanged, }; - const filterOptions = this.savedObjectTypes.map(type => ({ + const filterOptions = allowedTypes.map(type => ({ value: type, name: type, view: `${type} (${savedObjectCounts[type] || 0})`, @@ -698,14 +730,16 @@ export class ObjectsTable extends Component { />
=> { const mock = { - actionRegistry: actionRegistryMock.create(), + actions: actionServiceMock.createSetup(), + serviceRegistry: serviceRegistryMock.create(), }; return mock; }; const createStartContractMock = (): jest.Mocked => { - const mock = {}; + const mock = { + actions: actionServiceMock.createStart(), + }; return mock; }; export const savedObjectsManagementPluginMock = { - createActionRegistry: actionRegistryMock.create, + createServiceRegistry: serviceRegistryMock.create, createSetupContract: createSetupContractMock, createStartContract: createStartContractMock, }; diff --git a/src/plugins/saved_objects_management/public/plugin.test.ts b/src/plugins/saved_objects_management/public/plugin.test.ts index 1cafbb235ad5b9..09080f46a68694 100644 --- a/src/plugins/saved_objects_management/public/plugin.test.ts +++ b/src/plugins/saved_objects_management/public/plugin.test.ts @@ -20,6 +20,9 @@ import { coreMock } from '../../../core/public/mocks'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { homePluginMock } from '../../home/public/mocks'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { managementPluginMock } from '../../management/public/mocks'; +import { dataPluginMock } from '../../data/public/mocks'; import { SavedObjectsManagementPlugin } from './plugin'; describe('SavedObjectsManagementPlugin', () => { @@ -31,10 +34,13 @@ describe('SavedObjectsManagementPlugin', () => { describe('#setup', () => { it('registers the saved_objects feature to the home plugin', async () => { - const coreSetup = coreMock.createSetup(); + const coreSetup = coreMock.createSetup({ + pluginStartDeps: { data: dataPluginMock.createStartContract() }, + }); const homeSetup = homePluginMock.createSetupContract(); + const managementSetup = managementPluginMock.createSetupContract(); - await plugin.setup(coreSetup, { home: homeSetup }); + await plugin.setup(coreSetup, { home: homeSetup, management: managementSetup }); expect(homeSetup.featureCatalogue.register).toHaveBeenCalledTimes(1); expect(homeSetup.featureCatalogue.register).toHaveBeenCalledWith( diff --git a/src/plugins/saved_objects_management/public/plugin.ts b/src/plugins/saved_objects_management/public/plugin.ts index 3f2e9c166058ea..c8dede3da92631 100644 --- a/src/plugins/saved_objects_management/public/plugin.ts +++ b/src/plugins/saved_objects_management/public/plugin.ts @@ -19,37 +19,59 @@ import { i18n } from '@kbn/i18n'; import { CoreSetup, CoreStart, Plugin } from 'src/core/public'; +import { ManagementSetup } from '../../management/public'; +import { DataPublicPluginStart } from '../../data/public'; +import { DashboardStart } from '../../dashboard/public'; +import { DiscoverStart } from '../../discover/public'; import { HomePublicPluginSetup, FeatureCatalogueCategory } from '../../home/public'; +import { VisualizationsStart } from '../../visualizations/public'; import { - SavedObjectsManagementActionRegistry, - ISavedObjectsManagementActionRegistry, + SavedObjectsManagementActionService, + SavedObjectsManagementActionServiceSetup, + SavedObjectsManagementActionServiceStart, + SavedObjectsManagementServiceRegistry, + ISavedObjectsManagementServiceRegistry, } from './services'; +import { registerServices } from './register_services'; export interface SavedObjectsManagementPluginSetup { - actionRegistry: ISavedObjectsManagementActionRegistry; + actions: SavedObjectsManagementActionServiceSetup; + serviceRegistry: ISavedObjectsManagementServiceRegistry; } -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface SavedObjectsManagementPluginStart {} +export interface SavedObjectsManagementPluginStart { + actions: SavedObjectsManagementActionServiceStart; +} export interface SetupDependencies { + management: ManagementSetup; home: HomePublicPluginSetup; } +export interface StartDependencies { + data: DataPublicPluginStart; + dashboard?: DashboardStart; + visualizations?: VisualizationsStart; + discover?: DiscoverStart; +} + export class SavedObjectsManagementPlugin implements Plugin< SavedObjectsManagementPluginSetup, SavedObjectsManagementPluginStart, SetupDependencies, - {} + StartDependencies > { - private actionRegistry = new SavedObjectsManagementActionRegistry(); + private actionService = new SavedObjectsManagementActionService(); + private serviceRegistry = new SavedObjectsManagementServiceRegistry(); public setup( - core: CoreSetup<{}>, - { home }: SetupDependencies + core: CoreSetup, + { home, management }: SetupDependencies ): SavedObjectsManagementPluginSetup { + const actionSetup = this.actionService.setup(); + home.featureCatalogue.register({ id: 'saved_objects', title: i18n.translate('savedObjectsManagement.objects.savedObjectsTitle', { @@ -65,12 +87,39 @@ export class SavedObjectsManagementPlugin category: FeatureCatalogueCategory.ADMIN, }); + const kibanaSection = management.sections.getSection('kibana'); + if (!kibanaSection) { + throw new Error('`kibana` management section not found.'); + } + kibanaSection.registerApp({ + id: 'objects', + title: i18n.translate('savedObjectsManagement.managementSectionLabel', { + defaultMessage: 'Saved Objects', + }), + order: 10, + mount: async mountParams => { + const { mountManagementSection } = await import('./management_section'); + return mountManagementSection({ + core, + serviceRegistry: this.serviceRegistry, + mountParams, + }); + }, + }); + + // depends on `getStartServices`, should not be awaited + registerServices(this.serviceRegistry, core.getStartServices); + return { - actionRegistry: this.actionRegistry, + actions: actionSetup, + serviceRegistry: this.serviceRegistry, }; } public start(core: CoreStart) { - return {}; + const actionStart = this.actionService.start(); + return { + actions: actionStart, + }; } } diff --git a/src/plugins/saved_objects_management/public/register_services.ts b/src/plugins/saved_objects_management/public/register_services.ts new file mode 100644 index 00000000000000..a34b632b78f6cb --- /dev/null +++ b/src/plugins/saved_objects_management/public/register_services.ts @@ -0,0 +1,59 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { StartServicesAccessor } from '../../../core/public'; +import { SavedObjectsManagementPluginStart, StartDependencies } from './plugin'; +import { ISavedObjectsManagementServiceRegistry } from './services'; + +export const registerServices = async ( + registry: ISavedObjectsManagementServiceRegistry, + getStartServices: StartServicesAccessor +) => { + const [coreStart, { dashboard, data, visualizations, discover }] = await getStartServices(); + + if (dashboard) { + registry.register({ + id: 'savedDashboards', + title: 'dashboards', + service: dashboard.getSavedDashboardLoader(), + }); + } + + if (visualizations) { + registry.register({ + id: 'savedVisualizations', + title: 'visualizations', + service: visualizations.savedVisualizationsLoader, + }); + } + + if (discover) { + registry.register({ + id: 'savedSearches', + title: 'searches', + service: discover.savedSearches.createLoader({ + savedObjectsClient: coreStart.savedObjects.client, + indexPatterns: data.indexPatterns, + search: data.search, + chrome: coreStart.chrome, + overlays: coreStart.overlays, + }), + }); + } +}; diff --git a/src/plugins/saved_objects_management/public/services/action_service.mock.ts b/src/plugins/saved_objects_management/public/services/action_service.mock.ts new file mode 100644 index 00000000000000..97c95a589b9250 --- /dev/null +++ b/src/plugins/saved_objects_management/public/services/action_service.mock.ts @@ -0,0 +1,57 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + SavedObjectsManagementActionService, + SavedObjectsManagementActionServiceSetup, + SavedObjectsManagementActionServiceStart, +} from './action_service'; + +const createSetupMock = (): jest.Mocked => { + const mock = { + register: jest.fn(), + }; + return mock; +}; + +const createStartMock = (): jest.Mocked => { + const mock = { + has: jest.fn(), + getAll: jest.fn(), + }; + + mock.has.mockReturnValue(true); + mock.getAll.mockReturnValue([]); + + return mock; +}; + +const createServiceMock = (): jest.Mocked> => { + const mock = { + setup: jest.fn().mockReturnValue(createSetupMock()), + start: jest.fn().mockReturnValue(createStartMock()), + }; + return mock; +}; + +export const actionServiceMock = { + create: createServiceMock, + createSetup: createSetupMock, + createStart: createStartMock, +}; diff --git a/src/plugins/saved_objects_management/public/services/action_registry.test.ts b/src/plugins/saved_objects_management/public/services/action_service.test.ts similarity index 69% rename from src/plugins/saved_objects_management/public/services/action_registry.test.ts rename to src/plugins/saved_objects_management/public/services/action_service.test.ts index eb3bda00f4196e..107554589f83df 100644 --- a/src/plugins/saved_objects_management/public/services/action_registry.test.ts +++ b/src/plugins/saved_objects_management/public/services/action_service.test.ts @@ -17,8 +17,11 @@ * under the License. */ -import { SavedObjectsManagementActionRegistry } from './action_registry'; -import { SavedObjectsManagementAction } from './action_types'; +import { + SavedObjectsManagementActionService, + SavedObjectsManagementActionServiceSetup, +} from './action_service'; +import { SavedObjectsManagementAction } from './types'; class DummyAction extends SavedObjectsManagementAction { constructor(public id: string) { @@ -36,27 +39,30 @@ class DummyAction extends SavedObjectsManagementAction { } describe('SavedObjectsManagementActionRegistry', () => { - let registry: SavedObjectsManagementActionRegistry; + let service: SavedObjectsManagementActionService; + let setup: SavedObjectsManagementActionServiceSetup; const createAction = (id: string): SavedObjectsManagementAction => { return new DummyAction(id); }; beforeEach(() => { - registry = new SavedObjectsManagementActionRegistry(); + service = new SavedObjectsManagementActionService(); + setup = service.setup(); }); describe('#register', () => { it('allows actions to be registered and retrieved', () => { const action = createAction('foo'); - registry.register(action); - expect(registry.getAll()).toContain(action); + setup.register(action); + const start = service.start(); + expect(start.getAll()).toContain(action); }); it('does not allow actions with duplicate ids to be registered', () => { const action = createAction('my-action'); - registry.register(action); - expect(() => registry.register(action)).toThrowErrorMatchingInlineSnapshot( + setup.register(action); + expect(() => setup.register(action)).toThrowErrorMatchingInlineSnapshot( `"Saved Objects Management Action with id 'my-action' already exists"` ); }); @@ -65,12 +71,14 @@ describe('SavedObjectsManagementActionRegistry', () => { describe('#has', () => { it('returns true when an action with a matching ID exists', () => { const action = createAction('existing-action'); - registry.register(action); - expect(registry.has('existing-action')).toEqual(true); + setup.register(action); + const start = service.start(); + expect(start.has('existing-action')).toEqual(true); }); it(`returns false when an action doesn't exist`, () => { - expect(registry.has('missing-action')).toEqual(false); + const start = service.start(); + expect(start.has('missing-action')).toEqual(false); }); }); }); diff --git a/src/plugins/saved_objects_management/public/services/action_registry.ts b/src/plugins/saved_objects_management/public/services/action_service.ts similarity index 56% rename from src/plugins/saved_objects_management/public/services/action_registry.ts rename to src/plugins/saved_objects_management/public/services/action_service.ts index 8bf77231dd73fe..2b0b4cf5431e53 100644 --- a/src/plugins/saved_objects_management/public/services/action_registry.ts +++ b/src/plugins/saved_objects_management/public/services/action_service.ts @@ -17,36 +17,44 @@ * under the License. */ -import { SavedObjectsManagementAction } from './action_types'; - -export type ISavedObjectsManagementActionRegistry = PublicMethodsOf< - SavedObjectsManagementActionRegistry ->; - -export class SavedObjectsManagementActionRegistry { - private readonly actions = new Map(); +import { SavedObjectsManagementAction } from './types'; +export interface SavedObjectsManagementActionServiceSetup { /** * register given action in the registry. */ - register(action: SavedObjectsManagementAction) { - if (this.actions.has(action.id)) { - throw new Error(`Saved Objects Management Action with id '${action.id}' already exists`); - } - this.actions.set(action.id, action); - } + register: (action: SavedObjectsManagementAction) => void; +} +export interface SavedObjectsManagementActionServiceStart { /** * return true if the registry contains given action, false otherwise. */ - has(actionId: string) { - return this.actions.has(actionId); - } - + has: (actionId: string) => boolean; /** * return all {@link SavedObjectsManagementAction | actions} currently registered. */ - getAll() { - return [...this.actions.values()]; + getAll: () => SavedObjectsManagementAction[]; +} + +export class SavedObjectsManagementActionService { + private readonly actions = new Map(); + + setup(): SavedObjectsManagementActionServiceSetup { + return { + register: action => { + if (this.actions.has(action.id)) { + throw new Error(`Saved Objects Management Action with id '${action.id}' already exists`); + } + this.actions.set(action.id, action); + }, + }; + } + + start(): SavedObjectsManagementActionServiceStart { + return { + has: actionId => this.actions.has(actionId), + getAll: () => [...this.actions.values()], + }; } } diff --git a/src/plugins/saved_objects_management/public/services/index.ts b/src/plugins/saved_objects_management/public/services/index.ts index d6353576b8e11c..a59ad9012c4029 100644 --- a/src/plugins/saved_objects_management/public/services/index.ts +++ b/src/plugins/saved_objects_management/public/services/index.ts @@ -18,7 +18,13 @@ */ export { - SavedObjectsManagementActionRegistry, - ISavedObjectsManagementActionRegistry, -} from './action_registry'; -export { SavedObjectsManagementAction, SavedObjectsManagementRecord } from './action_types'; + SavedObjectsManagementActionService, + SavedObjectsManagementActionServiceStart, + SavedObjectsManagementActionServiceSetup, +} from './action_service'; +export { + SavedObjectsManagementServiceRegistry, + ISavedObjectsManagementServiceRegistry, + SavedObjectsManagementServiceRegistryEntry, +} from './service_registry'; +export { SavedObjectsManagementAction, SavedObjectsManagementRecord } from './types'; diff --git a/src/plugins/saved_objects_management/public/services/action_registry.mock.ts b/src/plugins/saved_objects_management/public/services/service_registry.mock.ts similarity index 79% rename from src/plugins/saved_objects_management/public/services/action_registry.mock.ts rename to src/plugins/saved_objects_management/public/services/service_registry.mock.ts index a9093ad42d0aca..2e671c781928ff 100644 --- a/src/plugins/saved_objects_management/public/services/action_registry.mock.ts +++ b/src/plugins/saved_objects_management/public/services/service_registry.mock.ts @@ -17,21 +17,20 @@ * under the License. */ -import { ISavedObjectsManagementActionRegistry } from './action_registry'; +import { ISavedObjectsManagementServiceRegistry } from './service_registry'; -const createRegistryMock = (): jest.Mocked => { +const createRegistryMock = (): jest.Mocked => { const mock = { register: jest.fn(), - has: jest.fn(), - getAll: jest.fn(), + all: jest.fn(), + get: jest.fn(), }; - mock.has.mockReturnValue(true); - mock.getAll.mockReturnValue([]); + mock.all.mockReturnValue([]); return mock; }; -export const actionRegistryMock = { +export const serviceRegistryMock = { create: createRegistryMock, }; diff --git a/src/plugins/saved_objects_management/public/services/service_registry.ts b/src/plugins/saved_objects_management/public/services/service_registry.ts new file mode 100644 index 00000000000000..2d6ec0b92047af --- /dev/null +++ b/src/plugins/saved_objects_management/public/services/service_registry.ts @@ -0,0 +1,49 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SavedObjectLoader } from '../../../saved_objects/public'; + +export interface SavedObjectsManagementServiceRegistryEntry { + id: string; + service: SavedObjectLoader; + title: string; +} + +export type ISavedObjectsManagementServiceRegistry = PublicMethodsOf< + SavedObjectsManagementServiceRegistry +>; + +export class SavedObjectsManagementServiceRegistry { + private readonly registry = new Map(); + + public register(entry: SavedObjectsManagementServiceRegistryEntry) { + if (this.registry.has(entry.id)) { + throw new Error(''); + } + this.registry.set(entry.id, entry); + } + + public all(): SavedObjectsManagementServiceRegistryEntry[] { + return [...this.registry.values()]; + } + + public get(id: string): SavedObjectsManagementServiceRegistryEntry | undefined { + return this.registry.get(id); + } +} diff --git a/src/plugins/saved_objects_management/public/services/action_types.ts b/src/plugins/saved_objects_management/public/services/types.ts similarity index 100% rename from src/plugins/saved_objects_management/public/services/action_types.ts rename to src/plugins/saved_objects_management/public/services/types.ts diff --git a/src/plugins/saved_objects_management/public/types.ts b/src/plugins/saved_objects_management/public/types.ts new file mode 100644 index 00000000000000..e91b5d253b55f9 --- /dev/null +++ b/src/plugins/saved_objects_management/public/types.ts @@ -0,0 +1,20 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { SavedObjectMetadata, SavedObjectWithMetadata, SavedObjectRelation } from '../common'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/index.js b/src/plugins/saved_objects_management/server/routes/get_allowed_types.ts similarity index 61% rename from src/legacy/core_plugins/kibana/public/management/sections/objects/index.js rename to src/plugins/saved_objects_management/server/routes/get_allowed_types.ts index 3965c42ac088dd..ab5bec66789466 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/index.js +++ b/src/plugins/saved_objects_management/server/routes/get_allowed_types.ts @@ -17,20 +17,24 @@ * under the License. */ -import { i18n } from '@kbn/i18n'; -import { management } from 'ui/management'; -import './_view'; -import './_objects'; -import 'ace'; -import { uiModules } from 'ui/modules'; +import { IRouter } from 'src/core/server'; -// add the module deps to this module -uiModules.get('apps/management'); +export const registerGetAllowedTypesRoute = (router: IRouter) => { + router.get( + { + path: '/api/kibana/management/saved_objects/_allowed_types', + validate: false, + }, + async (context, req, res) => { + const allowedTypes = context.core.savedObjects.typeRegistry + .getImportableAndExportableTypes() + .map(type => type.name); -management.getSection('kibana').register('objects', { - display: i18n.translate('kbn.management.objects.savedObjectsSectionLabel', { - defaultMessage: 'Saved Objects', - }), - order: 10, - url: '#/management/kibana/objects', -}); + return res.ok({ + body: { + types: allowedTypes, + }, + }); + } + ); +}; diff --git a/src/plugins/saved_objects_management/server/routes/index.test.ts b/src/plugins/saved_objects_management/server/routes/index.test.ts index f183972953dce4..237760444f04eb 100644 --- a/src/plugins/saved_objects_management/server/routes/index.test.ts +++ b/src/plugins/saved_objects_management/server/routes/index.test.ts @@ -34,7 +34,7 @@ describe('registerRoutes', () => { }); expect(httpSetup.createRouter).toHaveBeenCalledTimes(1); - expect(router.get).toHaveBeenCalledTimes(2); + expect(router.get).toHaveBeenCalledTimes(3); expect(router.post).toHaveBeenCalledTimes(2); expect(router.get).toHaveBeenCalledWith( @@ -49,6 +49,12 @@ describe('registerRoutes', () => { }), expect.any(Function) ); + expect(router.get).toHaveBeenCalledWith( + expect.objectContaining({ + path: '/api/kibana/management/saved_objects/_allowed_types', + }), + expect.any(Function) + ); expect(router.post).toHaveBeenCalledWith( expect.objectContaining({ path: '/api/kibana/management/saved_objects/scroll/counts', diff --git a/src/plugins/saved_objects_management/server/routes/index.ts b/src/plugins/saved_objects_management/server/routes/index.ts index 2c6adb71ed3cea..0929de56b215e4 100644 --- a/src/plugins/saved_objects_management/server/routes/index.ts +++ b/src/plugins/saved_objects_management/server/routes/index.ts @@ -23,6 +23,7 @@ import { registerFindRoute } from './find'; import { registerScrollForCountRoute } from './scroll_count'; import { registerScrollForExportRoute } from './scroll_export'; import { registerRelationshipsRoute } from './relationships'; +import { registerGetAllowedTypesRoute } from './get_allowed_types'; interface RegisterRouteOptions { http: HttpServiceSetup; @@ -35,4 +36,5 @@ export function registerRoutes({ http, managementServicePromise }: RegisterRoute registerScrollForCountRoute(router); registerScrollForExportRoute(router); registerRelationshipsRoute(router, managementServicePromise); + registerGetAllowedTypesRoute(router); } diff --git a/src/plugins/saved_objects_management/server/types.ts b/src/plugins/saved_objects_management/server/types.ts index 5c4763d357e875..bd17d6a19ae708 100644 --- a/src/plugins/saved_objects_management/server/types.ts +++ b/src/plugins/saved_objects_management/server/types.ts @@ -17,38 +17,10 @@ * under the License. */ -import { SavedObject } from 'src/core/server'; - // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SavedObjectsManagementPluginSetup {} // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SavedObjectsManagementPluginStart {} -/** - * The metadata injected into a {@link SavedObject | saved object} when returning - * {@link SavedObjectWithMetadata | enhanced objects} from the plugin API endpoints. - */ -export interface SavedObjectMetadata { - icon?: string; - title?: string; - editUrl?: string; - inAppUrl?: { path: string; uiCapabilitiesPath: string }; -} - -/** - * A {@link SavedObject | saved object} enhanced with meta properties used by the client-side plugin. - */ -export type SavedObjectWithMetadata = SavedObject & { - meta: SavedObjectMetadata; -}; - -/** - * Represents a relation between two {@link SavedObject | saved object} - */ -export interface SavedObjectRelation { - id: string; - type: string; - relationship: 'child' | 'parent'; - meta: SavedObjectMetadata; -} +export { SavedObjectMetadata, SavedObjectWithMetadata, SavedObjectRelation } from '../common'; diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.test.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.test.ts index 7d680f0ee0ed64..4e61756d933c94 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.test.ts +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.test.ts @@ -22,8 +22,8 @@ describe('CopySavedObjectsToSpaceService', () => { const service = new CopySavedObjectsToSpaceService(); service.setup(deps); - expect(deps.savedObjectsManagementSetup.actionRegistry.register).toHaveBeenCalledTimes(1); - expect(deps.savedObjectsManagementSetup.actionRegistry.register).toHaveBeenCalledWith( + expect(deps.savedObjectsManagementSetup.actions.register).toHaveBeenCalledTimes(1); + expect(deps.savedObjectsManagementSetup.actions.register).toHaveBeenCalledWith( expect.any(CopyToSpaceSavedObjectsManagementAction) ); }); diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.ts index d564514beebffe..93d0f92744d41e 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.ts +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/copy_saved_objects_to_space_service.ts @@ -18,6 +18,6 @@ interface SetupDeps { export class CopySavedObjectsToSpaceService { public setup({ spacesManager, savedObjectsManagementSetup, notificationsSetup }: SetupDeps) { const action = new CopyToSpaceSavedObjectsManagementAction(spacesManager, notificationsSetup); - savedObjectsManagementSetup.actionRegistry.register(action); + savedObjectsManagementSetup.actions.register(action); } } diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fe0c58e83e544a..e579830bad203a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2011,7 +2011,6 @@ "kbn.dashboard.listing.table.descriptionColumnName": "説明", "kbn.dashboard.panel.unableToMigratePanelDataForSixOneZeroErrorMessage": "「6.1.0」のダッシュボードの互換性のため、パネルデータを移行できませんでした。パネルには想定された列または行フィールドがありません", "kbn.dashboard.panel.unableToMigratePanelDataForSixThreeZeroErrorMessage": "「6.3.0」のダッシュボードの互換性のため、パネルデータを移行できませんでした。パネルに必要なフィールドがありません: {key}", - "kbn.dashboard.savedDashboardsTitle": "ダッシュボード", "kbn.dashboardTitle": "ダッシュボード", "kbn.devToolsTitle": "開発ツール", "kbn.discover.backToTopLinkText": "最上部へ戻る。", @@ -2281,9 +2280,6 @@ "kbn.management.editIndexPattern.timeFilterLabel.mappingAPILink": "マッピング API", "kbn.management.editIndexPattern.timeFilterLabel.timeFilterDetail": "このページは {indexPatternTitle} インデックス内のすべてのフィールドと、Elasticsearch に記録された各フィールドのコアタイプを一覧表示します。フィールドタイプを変更するには Elasticsearch を使用します", "kbn.management.editIndexPatternLiveRegionAriaLabel": "インデックスパターン", - "kbn.management.indexPattern.confirmOverwriteButton": "上書き", - "kbn.management.indexPattern.confirmOverwriteLabel": "「{title}」に上書きしてよろしいですか?", - "kbn.management.indexPattern.confirmOverwriteTitle": "{type} を上書きしますか?", "kbn.management.indexPattern.goToPatternButtonLabel": "既存のパターンに移動", "kbn.management.indexPattern.sectionsHeader": "インデックスパターン", "kbn.management.indexPattern.titleExistsLabel": "「{title}」というタイトルのインデックスパターンが既に存在します。", @@ -2306,125 +2302,128 @@ "kbn.management.indexPatternTable.title": "インデックスパターン", "kbn.management.landing.header": "Kibana {version} 管理", "kbn.management.landing.subhead": "インデックス、インデックスパターン、保存されたオブジェクト、Kibana の設定、その他を管理します。", - "kbn.management.landing.text": "アプリの一覧は左側のメニューにあります。", - "kbn.management.objects.confirmModalOptions.deleteButtonLabel": "削除", - "kbn.management.objects.confirmModalOptions.modalDescription": "このアクションはオブジェクトを Kibana から永久に削除します。", - "kbn.management.objects.confirmModalOptions.modalTitle": "「{title}」を削除しますか?", - "kbn.management.objects.deleteSavedObjectsConfirmModalDescription": "この操作は次の保存されたオブジェクトを削除します:", - "kbn.management.objects.field.offLabel": "オフ", - "kbn.management.objects.field.onLabel": "オン", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.cancelButtonLabel": "キャンセル", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.deleteButtonLabel": "削除", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.deleteProcessButtonLabel": "削除中…", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.idColumnName": "ID", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName": "タイトル", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName": "タイプ", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModalTitle": "保存されたオブジェクトの削除", - "kbn.management.objects.objectsTable.export.dangerNotification": "エクスポートを生成できません", - "kbn.management.objects.objectsTable.export.successNotification": "ファイルはバックグラウンドでダウンロード中です", - "kbn.management.objects.objectsTable.export.successWithMissingRefsNotification": "ファイルはバックグラウンドでダウンロード中です。一部の関連オブジェクトが見つかりませんでした。足りないオブジェクトの一覧は、エクスポートされたファイルの最後の行をご覧ください。", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.cancelButtonLabel": "キャンセル", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.exportAllButtonLabel": "すべてエクスポート:", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.exportOptionsLabel": "オプション", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.includeReferencesDeepLabel": "関連オブジェクトを含める", - "kbn.management.objects.objectsTable.exportObjectsConfirmModalDescription": "エクスポートするタイプを選択してください", - "kbn.management.objects.objectsTable.exportObjectsConfirmModalTitle": "{filteredItemCount, plural, one{# オブジェクト} other {# オブジェクト}}をエクスポート", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage": "矛盾を解決中…", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage": "失敗したオブジェクトを再試行中…", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage": "保存された検索が正しくリンクされていることを確認してください…", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage": "矛盾を保存中…", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteBody": "{title} を上書きしてよろしいですか?", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteCancelButtonText": "キャンセル", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteOverwriteButtonText": "上書き", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteTitle": "{type} を上書きしますか?", - "kbn.management.objects.objectsTable.flyout.errorCalloutTitle": "申し訳ございませんが、エラーが発生しました", - "kbn.management.objects.objectsTable.flyout.import.cancelButtonLabel": "キャンセル", - "kbn.management.objects.objectsTable.flyout.import.confirmButtonLabel": "インポート", - "kbn.management.objects.objectsTable.flyout.importFailedDescription": "{totalImportCount} 個中 {failedImportCount} 個のオブジェクトのインポートに失敗しました。インポート失敗", - "kbn.management.objects.objectsTable.flyout.importFailedMissingReference": "{type} [id={id}] は {refType} [id={refId}] を見つけられませんでした", - "kbn.management.objects.objectsTable.flyout.importFailedTitle": "インポート失敗", - "kbn.management.objects.objectsTable.flyout.importFailedUnsupportedType": "{type} [id={id}] サポートされていないタイプ", - "kbn.management.objects.objectsTable.flyout.importFileErrorMessage": "ファイルを処理できませんでした。", - "kbn.management.objects.objectsTable.flyout.importLegacyFileErrorMessage": "ファイルを処理できませんでした。", - "kbn.management.objects.objectsTable.flyout.importPromptText": "インポート", - "kbn.management.objects.objectsTable.flyout.importSavedObjectTitle": "保存されたオブジェクトのインポート", - "kbn.management.objects.objectsTable.flyout.importSuccessful.confirmAllChangesButtonLabel": "すべての変更を確定", - "kbn.management.objects.objectsTable.flyout.importSuccessful.confirmButtonLabel": "完了", - "kbn.management.objects.objectsTable.flyout.importSuccessfulCallout.noObjectsImportedTitle": "オブジェクトがインポートされませんでした", - "kbn.management.objects.objectsTable.flyout.importSuccessfulDescription": "{importCount} 個のオブジェクトがインポートされました。", - "kbn.management.objects.objectsTable.flyout.importSuccessfulTitle": "インポート成功", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsCalloutLinkText": "新規インデックスパターンを作成", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsDescription": "次の保存されたオブジェクトは、存在しないインデックスパターンを使用しています。別のデックスパターンを選択してください。必要に応じて {indexPatternLink} できます。", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsTitle": "インデックスパターンの矛盾", - "kbn.management.objects.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage": "保存されたオブジェクトのファイル形式が無効なため、インポートできません。", - "kbn.management.objects.objectsTable.flyout.legacyFileUsedBody": "最新のレポートで NDJSON ファイルを作成すれば完了です。", - "kbn.management.objects.objectsTable.flyout.legacyFileUsedTitle": "JSON ファイルのサポートが終了します", - "kbn.management.objects.objectsTable.flyout.overwriteSavedObjectsLabel": "すべての保存されたオブジェクトを自動的に上書きしますか?", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountDescription": "影響されるオブジェクトの数です", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountName": "カウント", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdDescription": "インデックスパターンの ID です", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdName": "ID", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnNewIndexPatternName": "新規インデックスパターン", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "影響されるオブジェクトのサンプルです", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "影響されるオブジェクトのサンプル", - "kbn.management.objects.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "ファイルを処理できませんでした。", - "kbn.management.objects.objectsTable.flyout.selectFileToImportFormRowLabel": "インポートするファイルを選択してください", - "kbn.management.objects.objectsTable.header.exportButtonLabel": "{filteredCount, plural, one{# オブジェクト} other {# オブジェクト}}をエクスポート", - "kbn.management.objects.objectsTable.header.importButtonLabel": "インポート", - "kbn.management.objects.objectsTable.header.refreshButtonLabel": "更新", - "kbn.management.objects.objectsTable.header.savedObjectsTitle": "保存されたオブジェクト", - "kbn.management.objects.objectsTable.howToDeleteSavedObjectsDescription": "ここから保存された検索などの保存されたオブジェクトを削除できます。保存されたオブジェクトの生データを編集することもできます。通常、オブジェクトは関連アプリケーションでのみ編集され、こn画面で編集するよりもそちらのほうが賢明です。", - "kbn.management.objects.objectsTable.relationships.columnActions.inspectActionDescription": "この保存されたオブジェクトを確認してください", - "kbn.management.objects.objectsTable.relationships.columnActions.inspectActionName": "検査", - "kbn.management.objects.objectsTable.relationships.columnActionsName": "アクション", - "kbn.management.objects.objectsTable.relationships.columnRelationship.childAsValue": "子", - "kbn.management.objects.objectsTable.relationships.columnRelationship.parentAsValue": "ペアレント", - "kbn.management.objects.objectsTable.relationships.columnRelationshipName": "直接関係", - "kbn.management.objects.objectsTable.relationships.columnTitleDescription": "保存されたオブジェクトのタイトルです", - "kbn.management.objects.objectsTable.relationships.columnTitleName": "タイトル", - "kbn.management.objects.objectsTable.relationships.columnTypeDescription": "保存されたオブジェクトのタイプです", - "kbn.management.objects.objectsTable.relationships.columnTypeName": "タイプ", - "kbn.management.objects.objectsTable.relationships.relationshipsTitle": "{title} に関連する保存されたオブジェクトはこちらです。この {type} を削除すると、親オブジェクトに影響がありますが、子オブジェクトには影響はありません。", - "kbn.management.objects.objectsTable.relationships.renderErrorMessage": "エラー", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.childAsValue.view": "子", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.name": "直接関係", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.parentAsValue.view": "親", - "kbn.management.objects.objectsTable.relationships.search.filters.type.name": "タイプ", - "kbn.management.objects.objectsTable.searchBar.unableToParseQueryErrorMessage": "クエリをパースできません", - "kbn.management.objects.objectsTable.table.columnActions.inspectActionDescription": "この保存されたオブジェクトを確認してください", - "kbn.management.objects.objectsTable.table.columnActions.inspectActionName": "検査", - "kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionDescription": "この保存されたオブジェクトと他の保存されたオブジェクトとの関係性を表示します", - "kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionName": "関係性", - "kbn.management.objects.objectsTable.table.columnActionsName": "アクション", - "kbn.management.objects.objectsTable.table.columnTitleDescription": "保存されたオブジェクトのタイトルです", - "kbn.management.objects.objectsTable.table.columnTitleName": "タイトル", - "kbn.management.objects.objectsTable.table.columnTypeDescription": "保存されたオブジェクトのタイプです", - "kbn.management.objects.objectsTable.table.columnTypeName": "タイプ", - "kbn.management.objects.objectsTable.table.deleteButtonLabel": "削除", - "kbn.management.objects.objectsTable.table.deleteButtonTitle": "保存されたオブジェクトを削除できません", - "kbn.management.objects.objectsTable.table.exportButtonLabel": "エクスポート", - "kbn.management.objects.objectsTable.table.exportPopoverButtonLabel": "エクスポート", - "kbn.management.objects.objectsTable.table.typeFilterName": "タイプ", - "kbn.management.objects.objectsTable.unableFindSavedObjectsNotificationMessage": "保存されたオブジェクトが見つかりません", - "kbn.management.objects.parsingFieldErrorMessage": "{fieldName} をインデックスパターン {indexName} 用にパース中にエラーが発生しました: {errorMessage}", - "kbn.management.objects.savedObjectsSectionLabel": "保存されたオブジェクト", - "kbn.management.objects.view.cancelButtonAriaLabel": "キャンセル", - "kbn.management.objects.view.cancelButtonLabel": "キャンセル", - "kbn.management.objects.view.deleteItemButtonLabel": "{title} を削除", - "kbn.management.objects.view.editItemTitle": "{title} の編集", - "kbn.management.objects.view.fieldDoesNotExistErrorMessage": "このオブジェクトに関連付けられたフィールドは、現在このインデックスパターンに存在しません。", - "kbn.management.objects.view.howToFixErrorDescription": "このエラーの原因がわかる場合は修正してください。わからない場合は上の削除ボタンをクリックしてください。", - "kbn.management.objects.view.howToModifyObjectDescription": "オブジェクトの編集は上級ユーザー向けです。オブジェクトのプロパティが検証されておらず、無効なオブジェクトはエラー、データ損失、またはそれ以上の問題の原因となります。コードを熟知した人に指示されていない限り、この設定は変更しない方が無難です。", - "kbn.management.objects.view.howToModifyObjectTitle": "十分ご注意ください!", - "kbn.management.objects.view.indexPatternDoesNotExistErrorMessage": "このオブジェクトに関連付けられたインデックスパターンは現在存在しません。", - "kbn.management.objects.view.saveButtonAriaLabel": "{ title } オブジェクトを保存", - "kbn.management.objects.view.saveButtonLabel": "{ title } オブジェクトを保存", - "kbn.management.objects.view.savedObjectProblemErrorMessage": "この保存されたオブジェクトに問題があります", - "kbn.management.objects.view.savedSearchDoesNotExistErrorMessage": "このオブジェクトに関連付けられた保存された検索は現在存在しません。", - "kbn.management.objects.view.viewItemButtonLabel": "{title} を表示", - "kbn.management.objects.view.viewItemTitle": "{title} を表示", - "kbn.management.savedObjects.editBreadcrumb": "{savedObjectType} を編集", - "kbn.management.savedObjects.indexBreadcrumb": "保存されたオブジェクト", + "kbn.management.landing.text": "すべてのツールの一覧は、左のメニューにあります。", + "savedObjectsManagement.indexPattern.confirmOverwriteButton": "上書き", + "savedObjectsManagement.indexPattern.confirmOverwriteLabel": "「{title}」に上書きしてよろしいですか?", + "savedObjectsManagement.indexPattern.confirmOverwriteTitle": "{type} を上書きしますか?", + "savedObjectsManagement.deleteConfirm.modalDeleteButtonLabel": "削除", + "savedObjectsManagement.deleteConfirm.modalDescription": "このアクションはオブジェクトを Kibana から永久に削除します。", + "savedObjectsManagement.deleteConfirm.modalTitle": "「{title}」を削除しますか?", + "savedObjectsManagement.deleteSavedObjectsConfirmModalDescription": "この操作は次の保存されたオブジェクトを削除します:", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.cancelButtonLabel": "キャンセル", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.deleteButtonLabel": "削除", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.deleteProcessButtonLabel": "削除中…", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.idColumnName": "ID", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName": "タイトル", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName": "タイプ", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModalTitle": "保存されたオブジェクトの削除", + "savedObjectsManagement.objectsTable.export.dangerNotification": "エクスポートを生成できません", + "savedObjectsManagement.objectsTable.export.successNotification": "ファイルはバックグラウンドでダウンロード中です", + "savedObjectsManagement.objectsTable.export.successWithMissingRefsNotification": "ファイルはバックグラウンドでダウンロード中です。一部の関連オブジェクトが見つかりませんでした。足りないオブジェクトの一覧は、エクスポートされたファイルの最後の行をご覧ください。", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.cancelButtonLabel": "キャンセル", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.exportAllButtonLabel": "すべてエクスポート:", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.exportOptionsLabel": "オプション", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.includeReferencesDeepLabel": "関連オブジェクトを含める", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModalDescription": "エクスポートするタイプを選択してください", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModalTitle": "{filteredItemCount, plural, one{# オブジェクト} other {# オブジェクト}}をエクスポート", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage": "矛盾を解決中…", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage": "失敗したオブジェクトを再試行中…", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage": "保存された検索が正しくリンクされていることを確認してください…", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage": "矛盾を保存中…", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteBody": "{title} を上書きしてよろしいですか?", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteCancelButtonText": "キャンセル", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteOverwriteButtonText": "上書き", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteTitle": "{type} を上書きしますか?", + "savedObjectsManagement.objectsTable.flyout.errorCalloutTitle": "申し訳ございませんが、エラーが発生しました", + "savedObjectsManagement.objectsTable.flyout.import.cancelButtonLabel": "キャンセル", + "savedObjectsManagement.objectsTable.flyout.import.confirmButtonLabel": "インポート", + "savedObjectsManagement.objectsTable.flyout.importFailedDescription": "{totalImportCount} 個中 {failedImportCount} 個のオブジェクトのインポートに失敗しました。インポート失敗", + "savedObjectsManagement.objectsTable.flyout.importFailedMissingReference": "{type} [id={id}] は {refType} [id={refId}] を見つけられませんでした", + "savedObjectsManagement.objectsTable.flyout.importFailedTitle": "インポート失敗", + "savedObjectsManagement.objectsTable.flyout.importFailedUnsupportedType": "{type} [id={id}] サポートされていないタイプ", + "savedObjectsManagement.objectsTable.flyout.importFileErrorMessage": "ファイルを処理できませんでした。", + "savedObjectsManagement.objectsTable.flyout.importLegacyFileErrorMessage": "ファイルを処理できませんでした。", + "savedObjectsManagement.objectsTable.flyout.importPromptText": "インポート", + "savedObjectsManagement.objectsTable.flyout.importSavedObjectTitle": "保存されたオブジェクトのインポート", + "savedObjectsManagement.objectsTable.flyout.importSuccessful.confirmAllChangesButtonLabel": "すべての変更を確定", + "savedObjectsManagement.objectsTable.flyout.importSuccessful.confirmButtonLabel": "完了", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulCallout.noObjectsImportedTitle": "オブジェクトがインポートされませんでした", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulDescription": "{importCount} 個のオブジェクトがインポートされました。", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulTitle": "インポート成功", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsCalloutLinkText": "新規インデックスパターンを作成", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsDescription": "次の保存されたオブジェクトは、存在しないインデックスパターンを使用しています。別のデックスパターンを選択してください。必要に応じて {indexPatternLink} できます。", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsTitle": "インデックスパターンの矛盾", + "savedObjectsManagement.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage": "保存されたオブジェクトのファイル形式が無効なため、インポートできません。", + "savedObjectsManagement.objectsTable.flyout.legacyFileUsedBody": "最新のレポートで NDJSON ファイルを作成すれば完了です。", + "savedObjectsManagement.objectsTable.flyout.legacyFileUsedTitle": "JSON ファイルのサポートが終了します", + "savedObjectsManagement.objectsTable.flyout.overwriteSavedObjectsLabel": "すべての保存されたオブジェクトを自動的に上書きしますか?", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountDescription": "影響されるオブジェクトの数です", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountName": "カウント", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdDescription": "インデックスパターンの ID です", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdName": "ID", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnNewIndexPatternName": "新規インデックスパターン", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "影響されるオブジェクトのサンプルです", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "影響されるオブジェクトのサンプル", + "savedObjectsManagement.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "ファイルを処理できませんでした。", + "savedObjectsManagement.objectsTable.flyout.selectFileToImportFormRowLabel": "インポートするファイルを選択してください", + "savedObjectsManagement.objectsTable.header.exportButtonLabel": "{filteredCount, plural, one{# オブジェクト} other {# オブジェクト}}をエクスポート", + "savedObjectsManagement.objectsTable.header.importButtonLabel": "インポート", + "savedObjectsManagement.objectsTable.header.refreshButtonLabel": "更新", + "savedObjectsManagement.objectsTable.header.savedObjectsTitle": "保存されたオブジェクト", + "savedObjectsManagement.objectsTable.howToDeleteSavedObjectsDescription": "ここから保存された検索などの保存されたオブジェクトを削除できます。保存されたオブジェクトの生データを編集することもできます。通常、オブジェクトは関連アプリケーションでのみ編集され、こn画面で編集するよりもそちらのほうが賢明です。", + "savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionDescription": "この保存されたオブジェクトを確認してください", + "savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionName": "検査", + "savedObjectsManagement.objectsTable.relationships.columnActionsName": "アクション", + "savedObjectsManagement.objectsTable.relationships.columnRelationship.childAsValue": "子", + "savedObjectsManagement.objectsTable.relationships.columnRelationship.parentAsValue": "ペアレント", + "savedObjectsManagement.objectsTable.relationships.columnRelationshipName": "直接関係", + "savedObjectsManagement.objectsTable.relationships.columnTitleDescription": "保存されたオブジェクトのタイトルです", + "savedObjectsManagement.objectsTable.relationships.columnTitleName": "タイトル", + "savedObjectsManagement.objectsTable.relationships.columnTypeDescription": "保存されたオブジェクトのタイプです", + "savedObjectsManagement.objectsTable.relationships.columnTypeName": "タイプ", + "savedObjectsManagement.objectsTable.relationships.relationshipsTitle": "{title} に関連する保存されたオブジェクトはこちらです。この {type} を削除すると、親オブジェクトに影響がありますが、子オブジェクトには影響はありません。", + "savedObjectsManagement.objectsTable.relationships.renderErrorMessage": "エラー", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.childAsValue.view": "子", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.name": "直接関係", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.parentAsValue.view": "親", + "savedObjectsManagement.objectsTable.relationships.search.filters.type.name": "タイプ", + "savedObjectsManagement.objectsTable.searchBar.unableToParseQueryErrorMessage": "クエリをパースできません", + "savedObjectsManagement.objectsTable.table.columnActions.inspectActionDescription": "この保存されたオブジェクトを確認してください", + "savedObjectsManagement.objectsTable.table.columnActions.inspectActionName": "検査", + "savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionDescription": "この保存されたオブジェクトと他の保存されたオブジェクトとの関係性を表示します", + "savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionName": "関係性", + "savedObjectsManagement.objectsTable.table.columnActionsName": "アクション", + "savedObjectsManagement.objectsTable.table.columnTitleDescription": "保存されたオブジェクトのタイトルです", + "savedObjectsManagement.objectsTable.table.columnTitleName": "タイトル", + "savedObjectsManagement.objectsTable.table.columnTypeDescription": "保存されたオブジェクトのタイプです", + "savedObjectsManagement.objectsTable.table.columnTypeName": "タイプ", + "savedObjectsManagement.objectsTable.table.deleteButtonLabel": "削除", + "savedObjectsManagement.objectsTable.table.deleteButtonTitle": "保存されたオブジェクトを削除できません", + "savedObjectsManagement.objectsTable.table.exportButtonLabel": "エクスポート", + "savedObjectsManagement.objectsTable.table.exportPopoverButtonLabel": "エクスポート", + "savedObjectsManagement.objectsTable.table.typeFilterName": "タイプ", + "savedObjectsManagement.objectsTable.unableFindSavedObjectsNotificationMessage": "保存されたオブジェクトが見つかりません", + "savedObjectsManagement.parsingFieldErrorMessage": "{fieldName} をインデックスパターン {indexName} 用にパース中にエラーが発生しました: {errorMessage}", + "savedObjectsManagement.managementSectionLabel": "保存されたオブジェクト", + "savedObjectsManagement.view.cancelButtonAriaLabel": "キャンセル", + "savedObjectsManagement.view.cancelButtonLabel": "キャンセル", + "savedObjectsManagement.view.deleteItemButtonLabel": "{title} を削除", + "savedObjectsManagement.view.editItemTitle": "{title} の編集", + "savedObjectsManagement.view.fieldDoesNotExistErrorMessage": "このオブジェクトに関連付けられたフィールドは、現在このインデックスパターンに存在しません。", + "savedObjectsManagement.view.howToFixErrorDescription": "このエラーの原因がわかる場合は修正してください。わからない場合は上の削除ボタンをクリックしてください。", + "savedObjectsManagement.view.howToModifyObjectDescription": " オブジェクトの編集は上級ユーザー向けです。オブジェクトのプロパティが検証されておらず、無効なオブジェクトはエラー、データ損失、またはそれ以上の問題の原因となります。コードを熟知した人に指示されていない限り、この設定は変更しない方が無難です。", + "savedObjectsManagement.view.howToModifyObjectTitle": "十分ご注意ください!", + "savedObjectsManagement.view.indexPatternDoesNotExistErrorMessage": "このオブジェクトに関連付けられたインデックスパターンは現在存在しません。", + "savedObjectsManagement.view.saveButtonAriaLabel": "{ title } オブジェクトを保存", + "savedObjectsManagement.view.saveButtonLabel": "{ title } オブジェクトを保存", + "savedObjectsManagement.view.savedObjectProblemErrorMessage": "この保存されたオブジェクトに問題があります", + "savedObjectsManagement.view.savedSearchDoesNotExistErrorMessage": "このオブジェクトに関連付けられた保存された検索は現在存在しません。", + "savedObjectsManagement.view.viewItemButtonLabel": "{title} を表示", + "savedObjectsManagement.view.viewItemTitle": "{title} を表示", + "savedObjectsManagement.breadcrumb.edit": "{savedObjectType} を編集", + "savedObjectsManagement.breadcrumb.index": "保存されたオブジェクト", + "savedObjectsManagement.field.offLabel": "オフ", + "savedObjectsManagement.field.onLabel": "オン", "kbn.managementTitle": "管理", "kbn.topNavMenu.openInspectorButtonLabel": "検査", "kbn.topNavMenu.refreshButtonLabel": "更新", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index fd2a92c2c402f6..75f48fb11823ab 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2012,7 +2012,6 @@ "kbn.dashboard.listing.table.descriptionColumnName": "描述", "kbn.dashboard.panel.unableToMigratePanelDataForSixOneZeroErrorMessage": "无法迁移用于“6.1.0”向后兼容的面板数据,面板不包含所需的列和/或行字段", "kbn.dashboard.panel.unableToMigratePanelDataForSixThreeZeroErrorMessage": "无法迁移用于“6.3.0”向后兼容的面板数据,面板不包含预期字段:{key}", - "kbn.dashboard.savedDashboardsTitle": "仪表板", "kbn.dashboardTitle": "仪表板", "kbn.devToolsTitle": "开发工具", "kbn.discover.backToTopLinkText": "返至顶部。", @@ -2282,9 +2281,6 @@ "kbn.management.editIndexPattern.timeFilterLabel.mappingAPILink": "映射 API", "kbn.management.editIndexPattern.timeFilterLabel.timeFilterDetail": "此页根据 Elasticsearch 的记录列出“{indexPatternTitle}”索引中的每个字段以及字段的关联核心类型。要更改字段类型,请使用 Elasticsearch", "kbn.management.editIndexPatternLiveRegionAriaLabel": "索引模式", - "kbn.management.indexPattern.confirmOverwriteButton": "覆盖", - "kbn.management.indexPattern.confirmOverwriteLabel": "确定要覆盖 “{title}”?", - "kbn.management.indexPattern.confirmOverwriteTitle": "覆盖“{type}”?", "kbn.management.indexPattern.goToPatternButtonLabel": "前往现有模式", "kbn.management.indexPattern.sectionsHeader": "索引模式", "kbn.management.indexPattern.titleExistsLabel": "具有标题 “{title}” 的索引模式已存在。", @@ -2308,124 +2304,127 @@ "kbn.management.landing.header": "Kibana {version} 管理", "kbn.management.landing.subhead": "管理您的索引、索引模式、已保存对象、Kibana 设置等等。", "kbn.management.landing.text": "应用的完整列表位于左侧菜单中。", - "kbn.management.objects.confirmModalOptions.deleteButtonLabel": "删除", - "kbn.management.objects.confirmModalOptions.modalDescription": "此操作会将对象从 Kibana 永久移除。", - "kbn.management.objects.confirmModalOptions.modalTitle": "删除“{title}”?", - "kbn.management.objects.deleteSavedObjectsConfirmModalDescription": "此操作将删除以下已保存对象:", - "kbn.management.objects.field.offLabel": "关闭", - "kbn.management.objects.field.onLabel": "开启", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.cancelButtonLabel": "取消", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.deleteButtonLabel": "删除", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.deleteProcessButtonLabel": "正在删除……", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.idColumnName": "ID", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName": "标题", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName": "类型", - "kbn.management.objects.objectsTable.deleteSavedObjectsConfirmModalTitle": "删除已保存对象", - "kbn.management.objects.objectsTable.export.dangerNotification": "无法生成报告", - "kbn.management.objects.objectsTable.export.successNotification": "您的文件正在后台下载", - "kbn.management.objects.objectsTable.export.successWithMissingRefsNotification": "您的文件正在后台下载。找不到某些相关对象。有关缺失对象列表,请查看导出文件的最后一行。", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.cancelButtonLabel": "取消", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.exportAllButtonLabel": "全部导出", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.exportOptionsLabel": "选项", - "kbn.management.objects.objectsTable.exportObjectsConfirmModal.includeReferencesDeepLabel": "包括相关对象", - "kbn.management.objects.objectsTable.exportObjectsConfirmModalDescription": "选择要导出的类型。", - "kbn.management.objects.objectsTable.exportObjectsConfirmModalTitle": "导出 {filteredItemCount, plural, one{# 个对象} other {# 个对象}}", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage": "正在解决冲突……", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage": "正在重试失败的对象……", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage": "确保已保存搜索已正确链接……", - "kbn.management.objects.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage": "正在保存冲突……", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteBody": "确定要覆盖 “{title}”?", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteCancelButtonText": "取消", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteOverwriteButtonText": "覆盖", - "kbn.management.objects.objectsTable.flyout.confirmOverwriteTitle": "覆盖“{type}”?", - "kbn.management.objects.objectsTable.flyout.errorCalloutTitle": "抱歉,出现了错误", - "kbn.management.objects.objectsTable.flyout.import.cancelButtonLabel": "取消", - "kbn.management.objects.objectsTable.flyout.import.confirmButtonLabel": "导入", - "kbn.management.objects.objectsTable.flyout.importFailedDescription": "无法导入 {failedImportCount} 个对象,共 {totalImportCount} 个。导入失败", - "kbn.management.objects.objectsTable.flyout.importFailedMissingReference": "{type} [id={id}] 无法找到 {refType} [id={refId}]", - "kbn.management.objects.objectsTable.flyout.importFailedTitle": "导入失败", - "kbn.management.objects.objectsTable.flyout.importFailedUnsupportedType": "{type} [id={id}] 不受支持的类型", - "kbn.management.objects.objectsTable.flyout.importFileErrorMessage": "无法处理该文件。", - "kbn.management.objects.objectsTable.flyout.importLegacyFileErrorMessage": "无法处理该文件。", - "kbn.management.objects.objectsTable.flyout.importPromptText": "导入", - "kbn.management.objects.objectsTable.flyout.importSavedObjectTitle": "导入已保存对象", - "kbn.management.objects.objectsTable.flyout.importSuccessful.confirmAllChangesButtonLabel": "确认所有更改", - "kbn.management.objects.objectsTable.flyout.importSuccessful.confirmButtonLabel": "完成", - "kbn.management.objects.objectsTable.flyout.importSuccessfulCallout.noObjectsImportedTitle": "未导入任何对象", - "kbn.management.objects.objectsTable.flyout.importSuccessfulDescription": "已成功导入 {importCount} 个对象。", - "kbn.management.objects.objectsTable.flyout.importSuccessfulTitle": "导入成功", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsCalloutLinkText": "创建新的索引模式", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsDescription": "以下已保存对象使用不存在的索引模式。请选择要重新关联的索引模式。必要时,您可以{indexPatternLink}。", - "kbn.management.objects.objectsTable.flyout.indexPatternConflictsTitle": "索引模式冲突", - "kbn.management.objects.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage": "已保存对象文件格式无效,无法导入。", - "kbn.management.objects.objectsTable.flyout.legacyFileUsedBody": "只需使用更新的导出功能生成 NDJSON 文件,便万事俱备。", - "kbn.management.objects.objectsTable.flyout.legacyFileUsedTitle": "将不再支持 JSON 文件", - "kbn.management.objects.objectsTable.flyout.overwriteSavedObjectsLabel": "自动覆盖所有已保存对象?", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountDescription": "受影响对象数目", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnCountName": "计数", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdDescription": "索引模式的 ID", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnIdName": "ID", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnNewIndexPatternName": "新建索引模式", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "受影响对象样例", - "kbn.management.objects.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "受影响对象样例", - "kbn.management.objects.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "无法处理该文件。", - "kbn.management.objects.objectsTable.flyout.selectFileToImportFormRowLabel": "请选择要导入的文件", - "kbn.management.objects.objectsTable.header.exportButtonLabel": "导出 {filteredCount, plural, one{# 个对象} other {# 个对象}}", - "kbn.management.objects.objectsTable.header.importButtonLabel": "导入", - "kbn.management.objects.objectsTable.header.refreshButtonLabel": "刷新", - "kbn.management.objects.objectsTable.header.savedObjectsTitle": "已保存对象", - "kbn.management.objects.objectsTable.howToDeleteSavedObjectsDescription": "从这里您可以删除已保存对象,如已保存搜索。还可以编辑已保存对象的原始数据。通常,对象只能通过其关联的应用程序进行修改;或许您应该遵循这一原则,而非使用此屏幕进行修改。", - "kbn.management.objects.objectsTable.relationships.columnActions.inspectActionDescription": "检查此已保存对象", - "kbn.management.objects.objectsTable.relationships.columnActions.inspectActionName": "检查", - "kbn.management.objects.objectsTable.relationships.columnActionsName": "操作", - "kbn.management.objects.objectsTable.relationships.columnRelationship.childAsValue": "子项", - "kbn.management.objects.objectsTable.relationships.columnRelationship.parentAsValue": "父项", - "kbn.management.objects.objectsTable.relationships.columnRelationshipName": "直接关系", - "kbn.management.objects.objectsTable.relationships.columnTitleDescription": "已保存对象的标题", - "kbn.management.objects.objectsTable.relationships.columnTitleName": "标题", - "kbn.management.objects.objectsTable.relationships.columnTypeDescription": "已保存对象的类型", - "kbn.management.objects.objectsTable.relationships.columnTypeName": "类型", - "kbn.management.objects.objectsTable.relationships.relationshipsTitle": "以下是与 {title} 相关的已保存对象。删除此{type}将影响其父级对象,但不会影响其子级对象。", - "kbn.management.objects.objectsTable.relationships.renderErrorMessage": "错误", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.childAsValue.view": "子项", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.name": "直接关系", - "kbn.management.objects.objectsTable.relationships.search.filters.relationship.parentAsValue.view": "父项", - "kbn.management.objects.objectsTable.relationships.search.filters.type.name": "类型", - "kbn.management.objects.objectsTable.searchBar.unableToParseQueryErrorMessage": "无法解析查询", - "kbn.management.objects.objectsTable.table.columnActions.inspectActionDescription": "检查此已保存对象", - "kbn.management.objects.objectsTable.table.columnActions.inspectActionName": "检查", - "kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionDescription": "查看此已保存对象与其他已保存对象的关系", - "kbn.management.objects.objectsTable.table.columnActions.viewRelationshipsActionName": "关系", - "kbn.management.objects.objectsTable.table.columnActionsName": "操作", - "kbn.management.objects.objectsTable.table.columnTitleDescription": "已保存对象的标题", - "kbn.management.objects.objectsTable.table.columnTitleName": "标题", - "kbn.management.objects.objectsTable.table.columnTypeDescription": "已保存对象的类型", - "kbn.management.objects.objectsTable.table.columnTypeName": "类型", - "kbn.management.objects.objectsTable.table.deleteButtonLabel": "删除", - "kbn.management.objects.objectsTable.table.deleteButtonTitle": "无法删除已保存对象", - "kbn.management.objects.objectsTable.table.exportButtonLabel": "导出", - "kbn.management.objects.objectsTable.table.exportPopoverButtonLabel": "导出", - "kbn.management.objects.objectsTable.table.typeFilterName": "类型", - "kbn.management.objects.objectsTable.unableFindSavedObjectsNotificationMessage": "找不到已保存对象", - "kbn.management.objects.parsingFieldErrorMessage": "为索引模式 “{indexName}” 解析 “{fieldName}” 时发生错误:{errorMessage}", - "kbn.management.objects.savedObjectsSectionLabel": "已保存对象", - "kbn.management.objects.view.cancelButtonAriaLabel": "取消", - "kbn.management.objects.view.cancelButtonLabel": "取消", - "kbn.management.objects.view.deleteItemButtonLabel": "删除“{title}”", - "kbn.management.objects.view.editItemTitle": "编辑“{title}", - "kbn.management.objects.view.fieldDoesNotExistErrorMessage": "与此对象关联的字段在该索引模式中已不存在。", - "kbn.management.objects.view.howToFixErrorDescription": "如果您清楚此错误的含义,请修复该错误 — 否则单击上面的删除按钮。", - "kbn.management.objects.view.howToModifyObjectDescription": "修改对象仅适用于高级用户。对象属性未得到验证,无效的对象可能会导致错误、数据丢失或更坏的情况发生。除非熟悉该代码的人让您来这里,否则您可能不应该来这里。", - "kbn.management.objects.view.howToModifyObjectTitle": "谨慎操作!", - "kbn.management.objects.view.indexPatternDoesNotExistErrorMessage": "与此对象关联的索引模式已不存在。", - "kbn.management.objects.view.saveButtonAriaLabel": "保存 { title } 对象", - "kbn.management.objects.view.saveButtonLabel": "保存 { title } 对象", - "kbn.management.objects.view.savedObjectProblemErrorMessage": "此已保存对象有问题", - "kbn.management.objects.view.savedSearchDoesNotExistErrorMessage": "与此对象关联的已保存搜索已不存在。", - "kbn.management.objects.view.viewItemButtonLabel": "查看“{title}”", - "kbn.management.objects.view.viewItemTitle": "查看“{title}”", - "kbn.management.savedObjects.editBreadcrumb": "编辑 {savedObjectType}", - "kbn.management.savedObjects.indexBreadcrumb": "已保存对象", + "savedObjectsManagement.indexPattern.confirmOverwriteButton": "覆盖", + "savedObjectsManagement.indexPattern.confirmOverwriteLabel": "确定要覆盖 “{title}”?", + "savedObjectsManagement.indexPattern.confirmOverwriteTitle": "覆盖“{type}”?", + "savedObjectsManagement.deleteConfirm.modalDeleteButtonLabel": "删除", + "savedObjectsManagement.deleteConfirm.modalDescription": "此操作会将对象从 Kibana 永久移除。", + "savedObjectsManagement.deleteConfirm.modalTitle": "删除“{title}”?", + "savedObjectsManagement.deleteSavedObjectsConfirmModalDescription": "此操作将删除以下已保存对象:", + "savedObjectsManagement.field.offLabel": "关闭", + "savedObjectsManagement.field.onLabel": "开启", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.cancelButtonLabel": "取消", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.deleteButtonLabel": "删除", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.deleteProcessButtonLabel": "正在删除……", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.idColumnName": "ID", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.titleColumnName": "标题", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModal.typeColumnName": "类型", + "savedObjectsManagement.objectsTable.deleteSavedObjectsConfirmModalTitle": "删除已保存对象", + "savedObjectsManagement.objectsTable.export.dangerNotification": "无法生成报告", + "savedObjectsManagement.objectsTable.export.successNotification": "您的文件正在后台下载", + "savedObjectsManagement.objectsTable.export.successWithMissingRefsNotification": "您的文件正在后台下载。找不到某些相关对象。有关缺失对象列表,请查看导出文件的最后一行。", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.cancelButtonLabel": "取消", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.exportAllButtonLabel": "全部导出", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.exportOptionsLabel": "选项", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModal.includeReferencesDeepLabel": "包括相关对象", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModalDescription": "选择要导出的类型。", + "savedObjectsManagement.objectsTable.exportObjectsConfirmModalTitle": "导出 {filteredItemCount, plural, one{# 个对象} other {# 个对象}}", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.resolvingConflictsLoadingMessage": "正在解决冲突……", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.retryingFailedObjectsLoadingMessage": "正在重试失败的对象……", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savedSearchAreLinkedProperlyLoadingMessage": "确保已保存搜索已正确链接……", + "savedObjectsManagement.objectsTable.flyout.confirmLegacyImport.savingConflictsLoadingMessage": "正在保存冲突……", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteBody": "确定要覆盖 “{title}”?", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteCancelButtonText": "取消", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteOverwriteButtonText": "覆盖", + "savedObjectsManagement.objectsTable.flyout.confirmOverwriteTitle": "覆盖“{type}”?", + "savedObjectsManagement.objectsTable.flyout.errorCalloutTitle": "抱歉,出现了错误", + "savedObjectsManagement.objectsTable.flyout.import.cancelButtonLabel": "取消", + "savedObjectsManagement.objectsTable.flyout.import.confirmButtonLabel": "导入", + "savedObjectsManagement.objectsTable.flyout.importFailedDescription": "无法导入 {failedImportCount} 个对象,共 {totalImportCount} 个。导入失败", + "savedObjectsManagement.objectsTable.flyout.importFailedMissingReference": "{type} [id={id}] 无法找到 {refType} [id={refId}]", + "savedObjectsManagement.objectsTable.flyout.importFailedTitle": "导入失败", + "savedObjectsManagement.objectsTable.flyout.importFailedUnsupportedType": "{type} [id={id}] 不受支持的类型", + "savedObjectsManagement.objectsTable.flyout.importFileErrorMessage": "无法处理该文件。", + "savedObjectsManagement.objectsTable.flyout.importLegacyFileErrorMessage": "无法处理该文件。", + "savedObjectsManagement.objectsTable.flyout.importPromptText": "导入", + "savedObjectsManagement.objectsTable.flyout.importSavedObjectTitle": "导入已保存对象", + "savedObjectsManagement.objectsTable.flyout.importSuccessful.confirmAllChangesButtonLabel": "确认所有更改", + "savedObjectsManagement.objectsTable.flyout.importSuccessful.confirmButtonLabel": "完成", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulCallout.noObjectsImportedTitle": "未导入任何对象", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulDescription": "已成功导入 {importCount} 个对象。", + "savedObjectsManagement.objectsTable.flyout.importSuccessfulTitle": "导入成功", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsCalloutLinkText": "创建新的索引模式", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsDescription": "以下已保存对象使用不存在的索引模式。请选择要重新关联的索引模式。必要时,您可以{indexPatternLink}。", + "savedObjectsManagement.objectsTable.flyout.indexPatternConflictsTitle": "索引模式冲突", + "savedObjectsManagement.objectsTable.flyout.invalidFormatOfImportedFileErrorMessage": "已保存对象文件格式无效,无法导入。", + "savedObjectsManagement.objectsTable.flyout.legacyFileUsedBody": "只需使用更新的导出功能生成 NDJSON 文件,便万事俱备。", + "savedObjectsManagement.objectsTable.flyout.legacyFileUsedTitle": "将不再支持 JSON 文件", + "savedObjectsManagement.objectsTable.flyout.overwriteSavedObjectsLabel": "自动覆盖所有已保存对象?", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountDescription": "受影响对象数目", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnCountName": "计数", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdDescription": "索引模式的 ID", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnIdName": "ID", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnNewIndexPatternName": "新建索引模式", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsDescription": "受影响对象样例", + "savedObjectsManagement.objectsTable.flyout.renderConflicts.columnSampleOfAffectedObjectsName": "受影响对象样例", + "savedObjectsManagement.objectsTable.flyout.resolveImportErrorsFileErrorMessage": "无法处理该文件。", + "savedObjectsManagement.objectsTable.flyout.selectFileToImportFormRowLabel": "请选择要导入的文件", + "savedObjectsManagement.objectsTable.header.exportButtonLabel": "导出 {filteredCount, plural, one{# 个对象} other {# 个对象}}", + "savedObjectsManagement.objectsTable.header.importButtonLabel": "导入", + "savedObjectsManagement.objectsTable.header.refreshButtonLabel": "刷新", + "savedObjectsManagement.objectsTable.header.savedObjectsTitle": "已保存对象", + "savedObjectsManagement.objectsTable.howToDeleteSavedObjectsDescription": "从这里您可以删除已保存对象,如已保存搜索。还可以编辑已保存对象的原始数据。通常,对象只能通过其关联的应用程序进行修改;或许您应该遵循这一原则,而非使用此屏幕进行修改。", + "savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionDescription": "检查此已保存对象", + "savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionName": "检查", + "savedObjectsManagement.objectsTable.relationships.columnActionsName": "操作", + "savedObjectsManagement.objectsTable.relationships.columnRelationship.childAsValue": "子项", + "savedObjectsManagement.objectsTable.relationships.columnRelationship.parentAsValue": "父项", + "savedObjectsManagement.objectsTable.relationships.columnRelationshipName": "直接关系", + "savedObjectsManagement.objectsTable.relationships.columnTitleDescription": "已保存对象的标题", + "savedObjectsManagement.objectsTable.relationships.columnTitleName": "标题", + "savedObjectsManagement.objectsTable.relationships.columnTypeDescription": "已保存对象的类型", + "savedObjectsManagement.objectsTable.relationships.columnTypeName": "类型", + "savedObjectsManagement.objectsTable.relationships.relationshipsTitle": "以下是与 {title} 相关的已保存对象。删除此{type}将影响其父级对象,但不会影响其子级对象。", + "savedObjectsManagement.objectsTable.relationships.renderErrorMessage": "错误", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.childAsValue.view": "子项", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.name": "直接关系", + "savedObjectsManagement.objectsTable.relationships.search.filters.relationship.parentAsValue.view": "父项", + "savedObjectsManagement.objectsTable.relationships.search.filters.type.name": "类型", + "savedObjectsManagement.objectsTable.searchBar.unableToParseQueryErrorMessage": "无法解析查询", + "savedObjectsManagement.objectsTable.table.columnActions.inspectActionDescription": "检查此已保存对象", + "savedObjectsManagement.objectsTable.table.columnActions.inspectActionName": "检查", + "savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionDescription": "查看此已保存对象与其他已保存对象的关系", + "savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionName": "关系", + "savedObjectsManagement.objectsTable.table.columnActionsName": "操作", + "savedObjectsManagement.objectsTable.table.columnTitleDescription": "已保存对象的标题", + "savedObjectsManagement.objectsTable.table.columnTitleName": "标题", + "savedObjectsManagement.objectsTable.table.columnTypeDescription": "已保存对象的类型", + "savedObjectsManagement.objectsTable.table.columnTypeName": "类型", + "savedObjectsManagement.objectsTable.table.deleteButtonLabel": "删除", + "savedObjectsManagement.objectsTable.table.deleteButtonTitle": "无法删除已保存对象", + "savedObjectsManagement.objectsTable.table.exportButtonLabel": "导出", + "savedObjectsManagement.objectsTable.table.exportPopoverButtonLabel": "导出", + "savedObjectsManagement.objectsTable.table.typeFilterName": "类型", + "savedObjectsManagement.objectsTable.unableFindSavedObjectsNotificationMessage": "找不到已保存对象", + "savedObjectsManagement.parsingFieldErrorMessage": "为索引模式 “{indexName}” 解析 “{fieldName}” 时发生错误:{errorMessage}", + "savedObjectsManagement.managementSectionLabel": "已保存对象", + "savedObjectsManagement.view.cancelButtonAriaLabel": "取消", + "savedObjectsManagement.view.cancelButtonLabel": "取消", + "savedObjectsManagement.view.deleteItemButtonLabel": "删除“{title}”", + "savedObjectsManagement.view.editItemTitle": "编辑“{title}", + "savedObjectsManagement.view.fieldDoesNotExistErrorMessage": "与此对象关联的字段在该索引模式中已不存在。", + "savedObjectsManagement.view.howToFixErrorDescription": "如果您清楚此错误的含义,请修复该错误 — 否则单击上面的删除按钮。", + "savedObjectsManagement.view.howToModifyObjectDescription": " 修改对象仅适用于高级用户。对象属性未得到验证,无效的对象可能会导致错误、数据丢失或更坏的情况发生。除非熟悉该代码的人让您来这里,否则您可能不应该来这里。", + "savedObjectsManagement.view.howToModifyObjectTitle": "谨慎操作!", + "savedObjectsManagement.view.indexPatternDoesNotExistErrorMessage": "与此对象关联的索引模式已不存在。", + "savedObjectsManagement.view.saveButtonAriaLabel": "保存 { title } 对象", + "savedObjectsManagement.view.saveButtonLabel": "保存 { title } 对象", + "savedObjectsManagement.view.savedObjectProblemErrorMessage": "此已保存对象有问题", + "savedObjectsManagement.view.savedSearchDoesNotExistErrorMessage": "与此对象关联的已保存搜索已不存在。", + "savedObjectsManagement.view.viewItemButtonLabel": "查看“{title}”", + "savedObjectsManagement.view.viewItemTitle": "查看“{title}”", + "savedObjectsManagement.breadcrumb.edit": "编辑 {savedObjectType}", + "savedObjectsManagement.breadcrumb.index": "已保存对象", "kbn.managementTitle": "管理", "kbn.topNavMenu.openInspectorButtonLabel": "检查", "kbn.topNavMenu.refreshButtonLabel": "刷新", From 61271c0652a8393f9af6972a46b31759d8b81c7d Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 13 Apr 2020 13:44:10 +0200 Subject: [PATCH 02/65] [Uptime] Simplify monitor param usage (#63121) * add useMonitorId hook * update url param hook * update type Co-authored-by: Elastic Machine --- .../connected/charts/monitor_duration.tsx | 5 ++-- .../connected/charts/ping_histogram.tsx | 5 ++-- .../connected/charts/snapshot_container.tsx | 5 ++-- .../monitor/list_drawer_container.tsx | 5 ++-- .../monitor/status_bar_container.tsx | 5 ++-- .../monitor/status_details_container.tsx | 5 ++-- .../monitor_list_drawer/most_recent_error.tsx | 5 ++-- .../monitor_details/ml/manage_ml_job.tsx | 10 +++---- .../ml/ml_flyout_container.tsx | 10 +++---- .../monitor_details/ml/ml_integeration.tsx | 6 ++--- .../contexts/uptime_settings_context.tsx | 6 ++--- .../hooks/__tests__/use_url_params.test.tsx | 3 ++- .../uptime/public/hooks/use_monitor.ts | 14 ++++++++++ .../uptime/public/hooks/use_telemetry.ts | 10 ++++--- .../uptime/public/hooks/use_url_params.ts | 27 +++++++++---------- .../plugins/uptime/public/pages/monitor.tsx | 6 ++--- .../plugins/uptime/public/pages/overview.tsx | 5 ++-- 17 files changed, 66 insertions(+), 66 deletions(-) create mode 100644 x-pack/legacy/plugins/uptime/public/hooks/use_monitor.ts diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/charts/monitor_duration.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/charts/monitor_duration.tsx index 7d1cb08cb8b1c8..40480905350aff 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/charts/monitor_duration.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/charts/monitor_duration.tsx @@ -6,7 +6,7 @@ import React, { useContext, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; import { getAnomalyRecordsAction, getMLCapabilitiesAction, @@ -28,13 +28,12 @@ interface Props { } export const DurationChart: React.FC = ({ monitorId }: Props) => { - const [getUrlParams] = useUrlParams(); const { dateRangeStart, dateRangeEnd, absoluteDateRangeStart, absoluteDateRangeEnd, - } = getUrlParams(); + } = useGetUrlParams(); const { durationLines, loading } = useSelector(selectDurationLines); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx index 50f91be4ff09f3..6428ddfd10f8c5 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx @@ -15,7 +15,7 @@ import { getPingHistogram } from '../../../state/actions'; import { selectPingHistogram } from '../../../state/selectors'; import { withResponsiveWrapper, ResponsiveWrapperProps } from '../../higher_order'; import { GetPingHistogramParams, HistogramResult } from '../../../../common/types'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; type Props = ResponsiveWrapperProps & Pick & @@ -30,14 +30,13 @@ const PingHistogramContainer: React.FC = ({ loading, esKuery, }) => { - const [getUrlParams] = useUrlParams(); const { absoluteDateRangeStart, absoluteDateRangeEnd, dateRangeStart: dateStart, dateRangeEnd: dateEnd, statusFilter, - } = getUrlParams(); + } = useGetUrlParams(); useEffect(() => { loadData({ monitorId, dateStart, dateEnd, statusFilter, filters: esKuery }); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/charts/snapshot_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/charts/snapshot_container.tsx index ac8ff13d1edce9..39ead242527f8e 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/charts/snapshot_container.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/charts/snapshot_container.tsx @@ -6,7 +6,7 @@ import React, { useEffect } from 'react'; import { connect } from 'react-redux'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; import { AppState } from '../../../state'; import { getSnapshotCountAction } from '../../../state/actions'; import { SnapshotComponent } from '../../functional/snapshot'; @@ -54,8 +54,7 @@ export const Container: React.FC = ({ esKuery, loadSnapshotCount, }: Props) => { - const [getUrlParams] = useUrlParams(); - const { dateRangeStart, dateRangeEnd, statusFilter } = getUrlParams(); + const { dateRangeStart, dateRangeEnd, statusFilter } = useGetUrlParams(); useEffect(() => { loadSnapshotCount({ dateRangeStart, dateRangeEnd, filters: esKuery, statusFilter }); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/list_drawer_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/list_drawer_container.tsx index ceeaa7026059f6..70da62d5833af2 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/list_drawer_container.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/list_drawer_container.tsx @@ -11,7 +11,7 @@ import { monitorDetailsSelector } from '../../../state/selectors'; import { MonitorDetailsActionPayload } from '../../../state/actions/types'; import { getMonitorDetailsAction } from '../../../state/actions/monitor'; import { MonitorListDrawerComponent } from '../../functional/monitor_list/monitor_list_drawer/monitor_list_drawer'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; import { MonitorSummary } from '../../../../common/graphql/types'; import { MonitorDetails } from '../../../../common/runtime_types/monitor'; @@ -24,8 +24,7 @@ interface ContainerProps { const Container: React.FC = ({ summary, loadMonitorDetails, monitorDetails }) => { const monitorId = summary?.monitor_id; - const [getUrlParams] = useUrlParams(); - const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = getUrlParams(); + const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = useGetUrlParams(); useEffect(() => { loadMonitorDetails({ diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx index dd6f7a89cf9a33..00cfd02d8dc326 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx @@ -11,7 +11,7 @@ import { AppState } from '../../../state'; import { monitorLocationsSelector, monitorStatusSelector } from '../../../state/selectors'; import { MonitorStatusBarComponent } from '../../functional/monitor_status_details/monitor_status_bar'; import { getMonitorStatusAction } from '../../../state/actions'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; import { Ping } from '../../../../common/graphql/types'; import { MonitorLocations } from '../../../../common/runtime_types/monitor'; import { UptimeRefreshContext } from '../../../contexts'; @@ -39,8 +39,7 @@ const Container: React.FC = ({ }: Props) => { const { lastRefresh } = useContext(UptimeRefreshContext); - const [getUrlParams] = useUrlParams(); - const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = getUrlParams(); + const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = useGetUrlParams(); useEffect(() => { loadMonitorStatus({ dateStart, dateEnd, monitorId }); diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_details_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_details_container.tsx index 3ced251dfab8c6..9d2e48830fbfe7 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_details_container.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_details_container.tsx @@ -7,7 +7,7 @@ import React, { useContext, useEffect } from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; import { AppState } from '../../../state'; import { monitorLocationsSelector } from '../../../state/selectors'; import { getMonitorLocationsAction, MonitorLocationsPayload } from '../../../state/actions/monitor'; @@ -36,8 +36,7 @@ export const Container: React.FC = ({ }: Props) => { const { lastRefresh } = useContext(UptimeRefreshContext); - const [getUrlParams] = useUrlParams(); - const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = getUrlParams(); + const { dateRangeStart: dateStart, dateRangeEnd: dateEnd } = useGetUrlParams(); useEffect(() => { loadMonitorLocations({ dateStart, dateEnd, monitorId }); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_list/monitor_list_drawer/most_recent_error.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_list/monitor_list_drawer/most_recent_error.tsx index 036882b49359f4..1963a9c852b11d 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_list/monitor_list_drawer/most_recent_error.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_list/monitor_list_drawer/most_recent_error.tsx @@ -8,7 +8,7 @@ import { EuiText, EuiSpacer } from '@elastic/eui'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { MonitorPageLink } from '../monitor_page_link'; -import { useUrlParams } from '../../../../hooks'; +import { useGetUrlParams } from '../../../../hooks'; import { stringifyUrlParams } from '../../../../lib/helper/stringify_url_params'; import { MonitorError } from '../../../../../common/runtime_types'; @@ -30,8 +30,7 @@ interface MostRecentErrorProps { } export const MostRecentError = ({ error, monitorId, timestamp }: MostRecentErrorProps) => { - const [getUrlParams] = useUrlParams(); - const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = getUrlParams(); + const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = useGetUrlParams(); params.selectedPingStatus = 'down'; const linkParameters = stringifyUrlParams(params, true); diff --git a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/manage_ml_job.tsx b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/manage_ml_job.tsx index 29f003437f7cba..1abda87abf73ac 100644 --- a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/manage_ml_job.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/manage_ml_job.tsx @@ -7,13 +7,13 @@ import React, { useContext, useState } from 'react'; import { EuiButtonEmpty, EuiContextMenu, EuiIcon, EuiPopover } from '@elastic/eui'; -import { useParams } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { canDeleteMLJobSelector } from '../../../state/selectors'; import { UptimeSettingsContext } from '../../../contexts'; import * as labels from './translations'; import { getMLJobLinkHref } from './ml_job_link'; -import { useUrlParams } from '../../../hooks'; +import { useGetUrlParams } from '../../../hooks'; +import { useMonitorId } from '../../../hooks/use_monitor'; interface Props { hasMLJob: boolean; @@ -28,11 +28,9 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro const canDeleteMLJob = useSelector(canDeleteMLJobSelector); - const [getUrlParams] = useUrlParams(); - const { dateRangeStart, dateRangeEnd } = getUrlParams(); + const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); - let { monitorId } = useParams(); - monitorId = atob(monitorId || ''); + const monitorId = useMonitorId(); const button = ( void; @@ -77,8 +77,7 @@ export const MachineLearningFlyout: React.FC = ({ onClose }) => { const { refreshApp } = useContext(UptimeRefreshContext); - let { monitorId } = useParams(); - monitorId = atob(monitorId || ''); + const monitorId = useMonitorId(); const canCreateMLJob = useSelector(canCreateMLJobSelector) && heartbeatIndices !== ''; @@ -93,8 +92,7 @@ export const MachineLearningFlyout: React.FC = ({ onClose }) => { const [isCreatingJob, setIsCreatingJob] = useState(false); - const [getUrlParams] = useUrlParams(); - const { dateRangeStart, dateRangeEnd } = getUrlParams(); + const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); useEffect(() => { if (isCreatingJob && !isMLJobCreating) { diff --git a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/ml_integeration.tsx b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/ml_integeration.tsx index a27796167091ed..e65a2510ea6f26 100644 --- a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/ml_integeration.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/ml_integeration.tsx @@ -5,8 +5,6 @@ */ import React, { useContext, useEffect, useState } from 'react'; - -import { useParams } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import { MachineLearningFlyout } from './ml_flyout_container'; import { @@ -23,6 +21,7 @@ import * as labels from './translations'; import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public'; import { ManageMLJobComponent } from './manage_ml_job'; import { JobStat } from '../../../../../../../plugins/ml/common/types/data_recognizer'; +import { useMonitorId } from '../../../hooks/use_monitor'; export const MLIntegrationComponent = () => { const [isMlFlyoutOpen, setIsMlFlyoutOpen] = useState(false); @@ -32,8 +31,7 @@ export const MLIntegrationComponent = () => { const { notifications } = useKibana(); - let { monitorId } = useParams(); - monitorId = atob(monitorId || ''); + const monitorId = useMonitorId(); const dispatch = useDispatch(); diff --git a/x-pack/legacy/plugins/uptime/public/contexts/uptime_settings_context.tsx b/x-pack/legacy/plugins/uptime/public/contexts/uptime_settings_context.tsx index 44a87d310c9c74..c5a0ec48317988 100644 --- a/x-pack/legacy/plugins/uptime/public/contexts/uptime_settings_context.tsx +++ b/x-pack/legacy/plugins/uptime/public/contexts/uptime_settings_context.tsx @@ -8,7 +8,7 @@ import React, { createContext, useMemo } from 'react'; import { UptimeAppProps } from '../uptime_app'; import { CLIENT_DEFAULTS, CONTEXT_DEFAULTS } from '../../common/constants'; import { CommonlyUsedRange } from '../components/functional/uptime_date_picker'; -import { useUrlParams } from '../hooks'; +import { useGetUrlParams } from '../hooks'; import { ILicense } from '../../../../../plugins/licensing/common/types'; export interface UptimeSettingsContextValues { @@ -50,9 +50,7 @@ export const UptimeSettingsContextProvider: React.FC = ({ childr plugins, } = props; - const [getUrlParams] = useUrlParams(); - - const { dateRangeStart, dateRangeEnd } = getUrlParams(); + const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); let license: ILicense | null = null; diff --git a/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_url_params.test.tsx b/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_url_params.test.tsx index a8999a50927d21..deb1f163c13267 100644 --- a/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_url_params.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/hooks/__tests__/use_url_params.test.tsx @@ -19,6 +19,7 @@ interface MockUrlParamsComponentProps { const UseUrlParamsTestComponent = ({ hook, updateParams }: MockUrlParamsComponentProps) => { const [params, setParams] = useState({}); const [getUrlParams, updateUrlParams] = hook(); + const queryParams = getUrlParams(); return ( {Object.keys(params).length > 0 ?
{JSON.stringify(params)}
: null} @@ -30,7 +31,7 @@ const UseUrlParamsTestComponent = ({ hook, updateParams }: MockUrlParamsComponen > Set url params -
diff --git a/x-pack/legacy/plugins/uptime/public/hooks/use_monitor.ts b/x-pack/legacy/plugins/uptime/public/hooks/use_monitor.ts new file mode 100644 index 00000000000000..8080ce2696a3cd --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/hooks/use_monitor.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useParams } from 'react-router-dom'; + +export const useMonitorId = (): string => { + const { monitorId } = useParams(); + + // decode 64 base string, it was decoded to make it a valid url, since monitor id can be a url + return atob(monitorId || ''); +}; diff --git a/x-pack/legacy/plugins/uptime/public/hooks/use_telemetry.ts b/x-pack/legacy/plugins/uptime/public/hooks/use_telemetry.ts index 13fe523332ae5c..a2012b8ac56365 100644 --- a/x-pack/legacy/plugins/uptime/public/hooks/use_telemetry.ts +++ b/x-pack/legacy/plugins/uptime/public/hooks/use_telemetry.ts @@ -5,7 +5,7 @@ */ import { useEffect } from 'react'; -import { useUrlParams } from './use_url_params'; +import { useGetUrlParams } from './use_url_params'; import { apiService } from '../state/api/utils'; import { API_URLS } from '../../common/constants'; @@ -17,8 +17,12 @@ export enum UptimePage { } export const useUptimeTelemetry = (page?: UptimePage) => { - const [getUrlParams] = useUrlParams(); - const { dateRangeStart, dateRangeEnd, autorefreshInterval, autorefreshIsPaused } = getUrlParams(); + const { + dateRangeStart, + dateRangeEnd, + autorefreshInterval, + autorefreshIsPaused, + } = useGetUrlParams(); useEffect(() => { if (!apiService.http) throw new Error('Core http services are not defined'); diff --git a/x-pack/legacy/plugins/uptime/public/hooks/use_url_params.ts b/x-pack/legacy/plugins/uptime/public/hooks/use_url_params.ts index 20063b2c1bc93f..8b13e9e4805597 100644 --- a/x-pack/legacy/plugins/uptime/public/hooks/use_url_params.ts +++ b/x-pack/legacy/plugins/uptime/public/hooks/use_url_params.ts @@ -15,27 +15,26 @@ export type UpdateUrlParams = (updatedParams: { export type UptimeUrlParamsHook = () => [GetUrlParams, UpdateUrlParams]; -export const useUrlParams: UptimeUrlParamsHook = () => { +const getParsedParams = (search: string) => { + return search ? parse(search[0] === '?' ? search.slice(1) : search, { sort: false }) : {}; +}; + +export const useGetUrlParams: GetUrlParams = () => { const location = useLocation(); - const history = useHistory(); - const getUrlParams: GetUrlParams = () => { - let search: string | undefined; - if (location) { - search = location.search; - } + const params = getParsedParams(location?.search); - const params = search - ? parse(search[0] === '?' ? search.slice(1) : search, { sort: false }) - : {}; + return getSupportedUrlParams(params); +}; - return getSupportedUrlParams(params); - }; +export const useUrlParams: UptimeUrlParamsHook = () => { + const location = useLocation(); + const history = useHistory(); const updateUrlParams: UpdateUrlParams = updatedParams => { if (!history || !location) return; const { pathname, search } = location; - const currentParams = parse(search[0] === '?' ? search.slice(1) : search, { sort: false }); + const currentParams = getParsedParams(search); const mergedParams = { ...currentParams, ...updatedParams, @@ -60,5 +59,5 @@ export const useUrlParams: UptimeUrlParamsHook = () => { }); }; - return [getUrlParams, updateUrlParams]; + return [useGetUrlParams, updateUrlParams]; }; diff --git a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx index 21124b7323d680..5016ccebbab54d 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx @@ -6,7 +6,6 @@ import { EuiSpacer } from '@elastic/eui'; import React, { useContext, useState } from 'react'; -import { useParams } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { MonitorCharts, PingList } from '../components/functional'; import { UptimeRefreshContext } from '../contexts'; @@ -16,11 +15,10 @@ import { MonitorStatusDetails } from '../components/connected'; import { monitorStatusSelector } from '../state/selectors'; import { PageHeader } from './page_header'; import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; +import { useMonitorId } from '../hooks/use_monitor'; export const MonitorPage: React.FC = () => { - // decode 64 base string, it was decoded to make it a valid url, since monitor id can be a url - let { monitorId } = useParams(); - monitorId = atob(monitorId || ''); + const monitorId = useMonitorId(); const [pingListPageCount, setPingListPageCount] = useState(10); const { refreshApp } = useContext(UptimeRefreshContext); diff --git a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx index 943dbd6bd57bab..5550facaf42e9f 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/overview.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/overview.tsx @@ -13,7 +13,7 @@ import { OverviewPageParsingErrorCallout, StatusPanel, } from '../components/functional'; -import { useUrlParams, useUptimeTelemetry, UptimePage } from '../hooks'; +import { useUptimeTelemetry, UptimePage, useGetUrlParams } from '../hooks'; import { stringifyUrlParams } from '../lib/helper/stringify_url_params'; import { useTrackPageview } from '../../../../../plugins/observability/public'; import { DataPublicPluginSetup, IIndexPattern } from '../../../../../../src/plugins/data/public'; @@ -55,12 +55,11 @@ const getMonitorListPageSizeValue = () => { export const OverviewPageComponent = ({ autocomplete, indexPattern, setEsKueryFilters }: Props) => { const { colors } = useContext(UptimeThemeContext); - const [getUrlParams] = useUrlParams(); // TODO: this is temporary until we migrate the monitor list to our Redux implementation const [monitorListPageSize, setMonitorListPageSize] = useState( getMonitorListPageSizeValue() ); - const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = getUrlParams(); + const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = useGetUrlParams(); const { dateRangeStart, dateRangeEnd, From c7f61f956a581bf39be01f9e0c263577c2165b6b Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 13 Apr 2020 13:49:46 +0200 Subject: [PATCH 03/65] [Uptime] Update Ml functional test (#62562) * update test * added test * updated type * updated test * updated test * update test Co-authored-by: Elastic Machine --- .../connected/empty_state/empty_state.tsx | 6 +- .../confirm_delete.test.tsx.snap | 2 + .../__snapshots__/license_info.test.tsx.snap | 2 + .../__snapshots__/ml_flyout.test.tsx.snap | 5 ++ .../ml_integerations.test.tsx.snap | 1 + .../__snapshots__/ml_manage_job.test.tsx.snap | 1 + .../monitor_details/ml/confirm_delete.tsx | 1 + .../monitor_details/ml/license_info.tsx | 1 + .../monitor_details/ml/manage_ml_job.tsx | 8 ++- .../monitor_details/ml/ml_flyout.tsx | 3 +- .../ml/ml_flyout_container.tsx | 6 +- .../monitor_details/ml/ml_integeration.tsx | 2 +- .../plugins/uptime/public/pages/settings.tsx | 2 +- x-pack/test/functional/apps/uptime/index.ts | 5 +- .../test/functional/apps/uptime/ml_anomaly.ts | 51 ++++++++++++++++ x-pack/test/functional/apps/uptime/monitor.ts | 7 +-- .../test/functional/apps/uptime/overview.ts | 24 ++++---- .../functional/page_objects/uptime_page.ts | 39 ++++++------ .../test/functional/services/uptime/common.ts | 15 +++++ .../functional/services/uptime/ml_anomaly.ts | 59 +++++++++++++++++++ .../functional/services/uptime/navigation.ts | 52 +++++++++++----- .../test/functional/services/uptime/uptime.ts | 3 + 22 files changed, 235 insertions(+), 60 deletions(-) create mode 100644 x-pack/test/functional/apps/uptime/ml_anomaly.ts create mode 100644 x-pack/test/functional/services/uptime/ml_anomaly.ts diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/empty_state/empty_state.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/empty_state/empty_state.tsx index b383a696095a32..55c92e70b6066d 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/empty_state/empty_state.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/empty_state/empty_state.tsx @@ -4,20 +4,22 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useEffect } from 'react'; +import React, { useContext, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { indexStatusAction } from '../../../state/actions'; import { indexStatusSelector } from '../../../state/selectors'; import { EmptyStateComponent } from '../../functional/empty_state/empty_state'; +import { UptimeRefreshContext } from '../../../contexts'; export const EmptyState: React.FC = ({ children }) => { const { data, loading, error } = useSelector(indexStatusSelector); + const { lastRefresh } = useContext(UptimeRefreshContext); const dispatch = useDispatch(); useEffect(() => { dispatch(indexStatusAction.get()); - }, [dispatch]); + }, [dispatch, lastRefresh]); return (
diff --git a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/__tests__/__snapshots__/ml_flyout.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/__tests__/__snapshots__/ml_flyout.test.tsx.snap index ead27425c26f3b..a83a1d99d7bb0c 100644 --- a/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/__tests__/__snapshots__/ml_flyout.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/components/monitor_details/ml/__tests__/__snapshots__/ml_flyout.test.tsx.snap @@ -3,6 +3,7 @@ exports[`ML Flyout component renders without errors 1`] = `
{}} fieldWildcardMatcher={() => {}} - saveFilter={() => {}} + saveFilter={() => undefined} isSaving={true} /> ); @@ -43,31 +58,33 @@ describe('Table', () => { expect(component).toMatchSnapshot(); }); - it('should render filter matches', async () => { - const component = shallowWithI18nProvider( + test('should render filter matches', () => { + const component = shallow
(
[{ name: 'time' }, { name: 'value' }], - }} + })} items={items} deleteFilter={() => {}} - fieldWildcardMatcher={filter => field => field.includes(filter[0])} - saveFilter={() => {}} + fieldWildcardMatcher={(filter: string) => (field: string) => field.includes(filter[0])} + saveFilter={() => undefined} isSaving={false} /> ); - const matchesTableCell = shallow(component.prop('columns')[1].render('tim', { clientId: 1 })); + const matchesTableCell = shallow( + getTableColumnRender(component, 1).render('tim', { clientId: 1 }) + ); expect(matchesTableCell).toMatchSnapshot(); }); describe('editing', () => { const saveFilter = jest.fn(); - const clientId = 1; - let component; + const clientId = '1'; + let component: ShallowWrapper; beforeEach(() => { - component = shallowWithI18nProvider( + component = shallow
(
{ ); }); - it('should show an input field', () => { + test('should show an input field', () => { // Start the editing process + const editingComponent = shallow( // Wrap in a div because: https://github.com/airbnb/enzyme/issues/1213 -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{getTableColumnRender(component, 2).render({ clientId, value: 'tim*' })}
); editingComponent .find('EuiButtonIcon') @@ -92,19 +110,19 @@ describe('Table', () => { // Ensure the state change propagates component.update(); - // Ensure the table cell switches to an input - const filterNameTableCell = shallow( - component.prop('columns')[0].render('tim*', { clientId }) - ); + const cell = getTableColumnRender(component).render('tim*', { clientId }); + const filterNameTableCell = shallow(cell); + expect(filterNameTableCell).toMatchSnapshot(); }); - it('should show a save button', () => { + test('should show a save button', () => { // Start the editing process const editingComponent = shallow( // Fixes: Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{getTableColumnRender(component, 2).render({ clientId, value: 'tim*' })}
); + editingComponent .find('EuiButtonIcon') .at(1) @@ -116,22 +134,20 @@ describe('Table', () => { // Verify save button const saveTableCell = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{getTableColumnRender(component, 2).render({ clientId, value: 'tim*' })}
); expect(saveTableCell).toMatchSnapshot(); }); - it('should update the matches dynamically as input value is changed', () => { - const localComponent = shallowWithI18nProvider( + test('should update the matches dynamically as input value is changed', () => { + const localComponent = shallow(
[{ name: 'time' }, { name: 'value' }], - }} + })} items={items} deleteFilter={() => {}} - fieldWildcardMatcher={query => () => { - return query.includes('time*'); - }} + fieldWildcardMatcher={(query: string) => () => query.includes('time*')} saveFilter={saveFilter} isSaving={false} /> @@ -142,6 +158,7 @@ describe('Table', () => { // Fixes: Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`.
{localComponent.prop('columns')[2].render({ clientId, value: 'tim*' })}
); + editingComponent .find('EuiButtonIcon') .at(1) @@ -161,7 +178,7 @@ describe('Table', () => { expect(matchesTableCell).toMatchSnapshot(); }); - it('should exit on save', () => { + test('should exit on save', () => { // Change the value to something else component.setState({ editingFilterId: clientId, @@ -171,34 +188,37 @@ describe('Table', () => { // Click the save button const editingComponent = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{getTableColumnRender(component, 2).render({ clientId, value: 'tim*' })}
); + editingComponent .find('EuiButtonIcon') .at(0) .simulate('click'); + editingComponent.update(); + // Ensure we call saveFilter properly expect(saveFilter).toBeCalledWith({ - filterId: clientId, - newFilterValue: 'ti*', + clientId, + value: 'ti*', }); // Ensure the state is properly reset - expect(component.state('editingFilterId')).toBe(null); + expect(component.state('editingFilterId')).toBe(''); }); }); - it('should allow deletes', () => { + test('should allow deletes', () => { const deleteFilter = jest.fn(); - const component = shallowWithI18nProvider( + const component = shallow(
{}} - saveFilter={() => {}} + saveFilter={() => undefined} isSaving={false} /> ); @@ -210,16 +230,15 @@ describe('Table', () => { ); deleteCellComponent .find('EuiButtonIcon') - .at(0) + .at(1) .simulate('click'); expect(deleteFilter).toBeCalled(); }); - it('should save when in edit mode and the enter key is pressed', () => { + test('should save when in edit mode and the enter key is pressed', () => { const saveFilter = jest.fn(); - const clientId = 1; - const component = shallowWithI18nProvider( + const component = shallow(
{ // Start the editing process const editingComponent = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{component.prop('columns')[2].render({ clientId: 1, value: 'tim*' })}
); editingComponent .find('EuiButtonIcon') - .at(1) + .at(0) .simulate('click'); - // Ensure the state change propagates + component.update(); // Get the rendered input cell const filterNameTableCell = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[0].render('tim*', { clientId })}
+
{component.prop('columns')[0].render('tim*', { clientId: 1 })}
); // Press the enter key @@ -253,14 +272,13 @@ describe('Table', () => { expect(saveFilter).toBeCalled(); // It should reset - expect(component.state('editingFilterId')).toBe(null); + expect(component.state('editingFilterId')).toBe(''); }); - it('should cancel when in edit mode and the esc key is pressed', () => { + test('should cancel when in edit mode and the esc key is pressed', () => { const saveFilter = jest.fn(); - const clientId = 1; - const component = shallowWithI18nProvider( + const component = shallow(
{ // Start the editing process const editingComponent = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[2].render({ clientId, value: 'tim*' })}
+
{component.prop('columns')[2].render({ clientId: 1, value: 'tim*' })}
); + editingComponent .find('EuiButtonIcon') - .at(1) + .at(0) .simulate('click'); + // Ensure the state change propagates component.update(); // Get the rendered input cell const filterNameTableCell = shallow( // Fixes Invariant Violation: ReactShallowRenderer render(): Shallow rendering works only with custom components, but the provided element type was `symbol`. -
{component.prop('columns')[0].render('tim*', { clientId })}
+
{component.prop('columns')[0].render('tim*', { clientId: 1 })}
); - // Press the enter key + // Press the ESCAPE key filterNameTableCell.find('EuiFieldText').simulate('keydown', { keyCode: keyCodes.ESCAPE }); expect(saveFilter).not.toBeCalled(); // It should reset - expect(component.state('editingFilterId')).toBe(null); + expect(component.state('editingFilterId')).toBe(''); }); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.tsx similarity index 54% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.tsx index f16663e1cd41af..db2b74bbc9824d 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/components/table/table.tsx @@ -17,48 +17,94 @@ * under the License. */ -import React, { Component, Fragment } from 'react'; -import PropTypes from 'prop-types'; +import React, { Component } from 'react'; import { + keyCodes, + EuiBasicTableColumn, EuiInMemoryTable, EuiFieldText, EuiButtonIcon, - keyCodes, RIGHT_ALIGNMENT, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; +import { SourceFiltersTableFilter } from '../../types'; -export class Table extends Component { - static propTypes = { - indexPattern: PropTypes.object.isRequired, - items: PropTypes.array.isRequired, - deleteFilter: PropTypes.func.isRequired, - fieldWildcardMatcher: PropTypes.func.isRequired, - saveFilter: PropTypes.func.isRequired, - isSaving: PropTypes.bool.isRequired, - }; +import { IIndexPattern } from '../../../../../../../../../../../plugins/data/public'; + +const filterHeader = i18n.translate('kbn.management.editIndexPattern.source.table.filterHeader', { + defaultMessage: 'Filter', +}); + +const filterDescription = i18n.translate( + 'kbn.management.editIndexPattern.source.table.filterDescription', + { defaultMessage: 'Filter name' } +); + +const matchesHeader = i18n.translate('kbn.management.editIndexPattern.source.table.matchesHeader', { + defaultMessage: 'Matches', +}); + +const matchesDescription = i18n.translate( + 'kbn.management.editIndexPattern.source.table.matchesDescription', + { defaultMessage: 'Language used for the field' } +); + +const editAria = i18n.translate('kbn.management.editIndexPattern.source.table.editAria', { + defaultMessage: 'Edit', +}); + +const saveAria = i18n.translate('kbn.management.editIndexPattern.source.table.saveAria', { + defaultMessage: 'Save', +}); + +const deleteAria = i18n.translate('kbn.management.editIndexPattern.source.table.deleteAria', { + defaultMessage: 'Delete', +}); + +const cancelAria = i18n.translate('kbn.management.editIndexPattern.source.table.cancelAria', { + defaultMessage: 'Cancel', +}); + +export interface TableProps { + indexPattern: IIndexPattern; + items: SourceFiltersTableFilter[]; + deleteFilter: Function; + fieldWildcardMatcher: Function; + saveFilter: (filter: SourceFiltersTableFilter) => any; + isSaving: boolean; +} + +export interface TableState { + editingFilterId: string | number; + editingFilterValue: string; +} - constructor(props) { +export class Table extends Component { + constructor(props: TableProps) { super(props); this.state = { - editingFilterId: null, - editingFilterValue: null, + editingFilterId: '', + editingFilterValue: '', }; } - startEditingFilter = (id, value) => - this.setState({ editingFilterId: id, editingFilterValue: value }); - stopEditingFilter = () => this.setState({ editingFilterId: null }); - onEditingFilterChange = e => this.setState({ editingFilterValue: e.target.value }); + startEditingFilter = ( + editingFilterId: TableState['editingFilterId'], + editingFilterValue: TableState['editingFilterValue'] + ) => this.setState({ editingFilterId, editingFilterValue }); + + stopEditingFilter = () => this.setState({ editingFilterId: '' }); + onEditingFilterChange = (e: React.ChangeEvent) => + this.setState({ editingFilterValue: e.target.value }); - onEditFieldKeyDown = ({ keyCode }) => { - if (keyCodes.ENTER === keyCode) { + onEditFieldKeyDown = ({ keyCode }: React.KeyboardEvent) => { + if (keyCodes.ENTER === keyCode && this.state.editingFilterId && this.state.editingFilterValue) { this.props.saveFilter({ - filterId: this.state.editingFilterId, - newFilterValue: this.state.editingFilterValue, + clientId: this.state.editingFilterId, + value: this.state.editingFilterValue, }); this.stopEditingFilter(); } @@ -67,23 +113,18 @@ export class Table extends Component { } }; - getColumns() { + getColumns(): Array> { const { deleteFilter, fieldWildcardMatcher, indexPattern, saveFilter } = this.props; return [ { field: 'value', - name: i18n.translate('kbn.management.editIndexPattern.source.table.filterHeader', { - defaultMessage: 'Filter', - }), - description: i18n.translate( - 'kbn.management.editIndexPattern.source.table.filterDescription', - { defaultMessage: 'Filter name' } - ), + name: filterHeader, + description: filterDescription, dataType: 'string', sortable: true, render: (value, filter) => { - if (this.state.editingFilterId === filter.clientId) { + if (this.state.editingFilterId && this.state.editingFilterId === filter.clientId) { return ( { - const realtimeValue = - this.state.editingFilterId === filter.clientId ? this.state.editingFilterValue : value; - const matcher = fieldWildcardMatcher([realtimeValue]); + const wildcardMatcher = fieldWildcardMatcher([ + this.state.editingFilterId === filter.clientId ? this.state.editingFilterValue : value, + ]); const matches = indexPattern .getNonScriptedFields() - .map(f => f.name) - .filter(matcher) + .map((currentFilter: any) => currentFilter.name) + .filter(wildcardMatcher) .sort(); + if (matches.length) { return {matches.join(', ')}; } @@ -135,24 +172,21 @@ export class Table extends Component { name: '', align: RIGHT_ALIGNMENT, width: '100', - render: filter => { + render: (filter: SourceFiltersTableFilter) => { if (this.state.editingFilterId === filter.clientId) { return ( - + <> { saveFilter({ - filterId: this.state.editingFilterId, - newFilterValue: this.state.editingFilterValue, + clientId: this.state.editingFilterId, + value: this.state.editingFilterValue, }); this.stopEditingFilter(); }} iconType="checkInCircleFilled" - aria-label={i18n.translate( - 'kbn.management.editIndexPattern.source.table.saveAria', - { defaultMessage: 'Save' } - )} + aria-label={saveAria} /> - + ); } return ( - + <> deleteFilter(filter)} - iconType="trash" - aria-label={i18n.translate( - 'kbn.management.editIndexPattern.source.table.deleteAria', - { defaultMessage: 'Delete' } - )} + onClick={() => this.startEditingFilter(filter.clientId, filter.value)} + iconType="pencil" + aria-label={editAria} /> this.startEditingFilter(filter.clientId, filter.value)} - iconType="pencil" - aria-label={i18n.translate( - 'kbn.management.editIndexPattern.source.table.editAria', - { defaultMessage: 'Edit' } - )} + color="danger" + onClick={() => deleteFilter(filter)} + iconType="trash" + aria-label={deleteAria} /> - + ); }, }, diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/__jest__/source_filters_table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.test.tsx similarity index 64% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/__jest__/source_filters_table.test.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.test.tsx index a39958a77abbf6..1b68dd13566d39 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/__jest__/source_filters_table.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.test.tsx @@ -20,13 +20,13 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { SourceFiltersTable } from '../source_filters_table'; +import { SourceFiltersTable } from './source_filters_table'; +import { IIndexPattern } from '../../../../../../../../../plugins/data/public'; jest.mock('@elastic/eui', () => ({ EuiButton: 'eui-button', EuiTitle: 'eui-title', EuiText: 'eui-text', - EuiButton: 'eui-button', EuiHorizontalRule: 'eui-horizontal-rule', EuiSpacer: 'eui-spacer', EuiCallOut: 'eui-call-out', @@ -39,42 +39,54 @@ jest.mock('@elastic/eui', () => ({ default: () => {}, }, })); -jest.mock('../components/header', () => ({ Header: 'header' })); -jest.mock('../components/table', () => ({ + +jest.mock('./components/header', () => ({ Header: 'header' })); +jest.mock('./components/table', () => ({ // Note: this seems to fix React complaining about non lowercase attributes Table: () => { return 'table'; }, })); -const indexPattern = { - sourceFilters: [{ value: 'time*' }, { value: 'nam*' }, { value: 'age*' }], -}; +const getIndexPatternMock = (mockedFields: any = {}) => + ({ + sourceFilters: [{ value: 'time*' }, { value: 'nam*' }, { value: 'age*' }], + ...mockedFields, + } as IIndexPattern); describe('SourceFiltersTable', () => { - it('should render normally', async () => { + test('should render normally', () => { const component = shallow( - {}} /> + {}} + filterFilter={''} + /> ); expect(component).toMatchSnapshot(); }); - it('should filter based on the query bar', async () => { + test('should filter based on the query bar', () => { const component = shallow( - {}} /> + {}} + filterFilter={''} + /> ); component.setProps({ filterFilter: 'ti' }); expect(component).toMatchSnapshot(); }); - it('should should a loading indicator when saving', async () => { + test('should should a loading indicator when saving', () => { const component = shallow( {}} /> ); @@ -83,34 +95,36 @@ describe('SourceFiltersTable', () => { expect(component).toMatchSnapshot(); }); - it('should show a delete modal', async () => { - const component = shallow( + test('should show a delete modal', () => { + const component = shallow( {}} /> ); - component.instance().startDeleteFilter({ value: 'tim*' }); + component.instance().startDeleteFilter({ value: 'tim*', clientId: 1 }); component.update(); // We are not calling `.setState` directly so we need to re-render expect(component).toMatchSnapshot(); }); - it('should remove a filter', async () => { + test('should remove a filter', async () => { const save = jest.fn(); - const component = shallow( + const component = shallow( {}} /> ); - component.instance().startDeleteFilter({ value: 'tim*' }); + component.instance().startDeleteFilter({ value: 'tim*', clientId: 1 }); component.update(); // We are not calling `.setState` directly so we need to re-render await component.instance().deleteFilter(); component.update(); // We are not calling `.setState` directly so we need to re-render @@ -119,14 +133,15 @@ describe('SourceFiltersTable', () => { expect(component).toMatchSnapshot(); }); - it('should add a filter', async () => { + test('should add a filter', async () => { const save = jest.fn(); - const component = shallow( + const component = shallow( {}} /> ); @@ -138,19 +153,20 @@ describe('SourceFiltersTable', () => { expect(component).toMatchSnapshot(); }); - it('should update a filter', async () => { + test('should update a filter', async () => { const save = jest.fn(); - const component = shallow( + const component = shallow( {}} /> ); - await component.instance().saveFilter({ oldFilterValue: 'tim*', newFilterValue: 'ti*' }); + await component.instance().saveFilter({ clientId: 'tim*', value: 'ti*' }); component.update(); // We are not calling `.setState` directly so we need to re-render expect(save).toBeCalled(); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.tsx similarity index 56% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.tsx index 3b485573f38212..dcf8ae9e1323f3 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/source_filters_table.tsx @@ -18,33 +18,40 @@ */ import React, { Component } from 'react'; -import PropTypes from 'prop-types'; import { createSelector } from 'reselect'; -import { EuiSpacer, EuiOverlayMask, EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui'; +import { EuiSpacer } from '@elastic/eui'; +import { AddFilter, Table, Header, DeleteFilterConfirmationModal } from './components'; +import { IIndexPattern } from '../../../../../../../../../plugins/data/public'; +import { SourceFiltersTableFilter } from './types'; -import { Table } from './components/table'; -import { Header } from './components/header'; -import { AddFilter } from './components/add_filter'; -import { FormattedMessage } from '@kbn/i18n/react'; +export interface SourceFiltersTableProps { + indexPattern: IIndexPattern; + filterFilter: string; + fieldWildcardMatcher: Function; + onAddOrRemoveFilter?: Function; +} -export class SourceFiltersTable extends Component { - static propTypes = { - indexPattern: PropTypes.object.isRequired, - filterFilter: PropTypes.string, - fieldWildcardMatcher: PropTypes.func.isRequired, - onAddOrRemoveFilter: PropTypes.func, - }; +export interface SourceFiltersTableState { + filterToDelete: any; + isDeleteConfirmationModalVisible: boolean; + isSaving: boolean; + filters: SourceFiltersTableFilter[]; +} - constructor(props) { +export class SourceFiltersTable extends Component< + SourceFiltersTableProps, + SourceFiltersTableState +> { + // Source filters do not have any unique ids, only the value is stored. + // To ensure we can create a consistent and expected UX when managing + // source filters, we are assigning a unique id to each filter on the + // client side only + private clientSideId: number = 0; + + constructor(props: SourceFiltersTableProps) { super(props); - // Source filters do not have any unique ids, only the value is stored. - // To ensure we can create a consistent and expected UX when managing - // source filters, we are assigning a unique id to each filter on the - // client side only - this.clientSideId = 0; - this.state = { filterToDelete: undefined, isDeleteConfirmationModalVisible: false, @@ -58,9 +65,9 @@ export class SourceFiltersTable extends Component { } updateFilters = () => { - const sourceFilters = this.props.indexPattern.sourceFilters || []; - const filters = sourceFilters.map(filter => ({ - ...filter, + const sourceFilters = this.props.indexPattern.sourceFilters; + const filters = (sourceFilters || []).map((sourceFilter: any) => ({ + ...sourceFilter, clientId: ++this.clientSideId, })); @@ -68,8 +75,8 @@ export class SourceFiltersTable extends Component { }; getFilteredFilters = createSelector( - state => state.filters, - (state, props) => props.filterFilter, + (state: SourceFiltersTableState) => state.filters, + (state: SourceFiltersTableState, props: SourceFiltersTableProps) => props.filterFilter, (filters, filterFilter) => { if (filterFilter) { const filterFilterToLowercase = filterFilter.toLowerCase(); @@ -82,7 +89,7 @@ export class SourceFiltersTable extends Component { } ); - startDeleteFilter = filter => { + startDeleteFilter = (filter: SourceFiltersTableFilter) => { this.setState({ filterToDelete: filter, isDeleteConfirmationModalVisible: true, @@ -106,35 +113,44 @@ export class SourceFiltersTable extends Component { this.setState({ isSaving: true }); await indexPattern.save(); - onAddOrRemoveFilter && onAddOrRemoveFilter(); + + if (onAddOrRemoveFilter) { + onAddOrRemoveFilter(); + } + this.updateFilters(); this.setState({ isSaving: false }); this.hideDeleteConfirmationModal(); }; - onAddFilter = async value => { + onAddFilter = async (value: string) => { const { indexPattern, onAddOrRemoveFilter } = this.props; indexPattern.sourceFilters = [...(indexPattern.sourceFilters || []), { value }]; this.setState({ isSaving: true }); await indexPattern.save(); - onAddOrRemoveFilter && onAddOrRemoveFilter(); + + if (onAddOrRemoveFilter) { + onAddOrRemoveFilter(); + } + this.updateFilters(); this.setState({ isSaving: false }); }; - saveFilter = async ({ filterId, newFilterValue }) => { + saveFilter = async ({ clientId, value }: SourceFiltersTableFilter) => { const { indexPattern } = this.props; const { filters } = this.state; indexPattern.sourceFilters = filters.map(filter => { - if (filter.clientId === filterId) { + if (filter.clientId === clientId) { return { - value: newFilterValue, - clientId: filter.clientId, + value, + clientId, }; } + return filter; }); @@ -144,55 +160,13 @@ export class SourceFiltersTable extends Component { this.setState({ isSaving: false }); }; - renderDeleteConfirmationModal() { - const { filterToDelete } = this.state; - - if (!filterToDelete) { - return null; - } - - return ( - - - } - onCancel={this.hideDeleteConfirmationModal} - onConfirm={this.deleteFilter} - cancelButtonText={ - - } - buttonColor="danger" - confirmButtonText={ - - } - defaultFocusedButton={EUI_MODAL_CONFIRM_BUTTON} - /> - - ); - } - render() { const { indexPattern, fieldWildcardMatcher } = this.props; - - const { isSaving } = this.state; - + const { isSaving, filterToDelete } = this.state; const filteredFilters = this.getFilteredFilters(this.state, this.props); return ( -
+ <>
@@ -205,8 +179,14 @@ export class SourceFiltersTable extends Component { saveFilter={this.saveFilter} /> - {this.renderDeleteConfirmationModal()} -
+ {filterToDelete && ( + + )} + ); } } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/types.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/types.ts new file mode 100644 index 00000000000000..ee3689f0174711 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/source_filters_table/types.ts @@ -0,0 +1,24 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** @internal **/ +export interface SourceFiltersTableFilter { + value: string; + clientId: string | number; +} From 7ea3f12e31f198d6e79907f26518bbab612266b9 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 13 Apr 2020 19:02:22 +0300 Subject: [PATCH 11/65] Index pattern management UI -> TypeScript (scripted_fields_table) (#63247) * Index pattern management UI -> TypeScript (scripted_fields_table) --- .../scripted_field_table.test.tsx.snap} | 40 +++--- .../call_outs.test.tsx.snap} | 4 +- .../call_outs.test.js => call_outs.test.tsx} | 4 +- .../call_outs/{call_outs.js => call_outs.tsx} | 12 +- .../call_outs/{index.js => index.ts} | 0 .../confirmation_modal.test.tsx.snap | 14 ++ .../confirmation_modal.test.tsx | 37 ++++++ .../confirmation_modal/confirmation_modal.tsx | 63 +++++++++ .../components/confirmation_modal/index.ts | 20 +++ .../header.test.tsx.snap} | 0 .../header.test.js => header.test.tsx} | 4 +- .../header/{header.js => header.tsx} | 12 +- .../components/header/{index.js => index.ts} | 0 .../components/{index.js => index.ts} | 1 + .../table.test.tsx.snap} | 7 +- .../components/table/{index.js => index.ts} | 0 .../table.test.js => table.test.tsx} | 49 +++---- .../components/table/{table.js => table.tsx} | 35 +++-- .../{index.js => index.ts} | 0 ....test.js => scripted_field_table.test.tsx} | 67 ++++++---- ...lds_table.js => scripted_fields_table.tsx} | 122 ++++++++---------- .../scripted_fields_table/types.ts | 25 ++++ .../{index.js => index.ts} | 12 +- 23 files changed, 346 insertions(+), 182 deletions(-) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/{__jest__/__snapshots__/scripted_field_table.test.js.snap => __snapshots__/scripted_field_table.test.tsx.snap} (89%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/{__jest__/__snapshots__/call_outs.test.js.snap => __snapshots__/call_outs.test.tsx.snap} (98%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/{__jest__/call_outs.test.js => call_outs.test.tsx} (92%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/{call_outs.js => call_outs.tsx} (94%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/{index.js => index.ts} (100%) create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/{__jest__/__snapshots__/header.test.js.snap => __snapshots__/header.test.tsx.snap} (100%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/{__jest__/header.test.js => header.test.tsx} (92%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/{header.js => header.tsx} (92%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/{index.js => index.ts} (100%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/{index.js => index.ts} (92%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/{__jest__/__snapshots__/table.test.js.snap => __snapshots__/table.test.tsx.snap} (93%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/{index.js => index.ts} (100%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/{__jest__/table.test.js => table.test.tsx} (71%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/{table.js => table.tsx} (84%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/{index.js => index.ts} (100%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/{__jest__/scripted_field_table.test.js => scripted_field_table.test.tsx} (75%) rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/{scripted_fields_table.js => scripted_fields_table.tsx} (60%) create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts rename src/legacy/ui/public/scripting_languages/{index.js => index.ts} (83%) diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap similarity index 89% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap index a53f4d7f609cb7..569b75c848c522 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`ScriptedFieldsTable should filter based on the lang filter 1`] = ` -
+
@@ -39,11 +39,11 @@ exports[`ScriptedFieldsTable should filter based on the lang filter 1`] = ` ] } /> -
+ `; exports[`ScriptedFieldsTable should filter based on the query bar 1`] = ` -
+
@@ -72,11 +72,11 @@ exports[`ScriptedFieldsTable should filter based on the query bar 1`] = ` ] } /> -
+ `; exports[`ScriptedFieldsTable should hide the table if there are no scripted fields 1`] = ` -
+
@@ -97,11 +97,11 @@ exports[`ScriptedFieldsTable should hide the table if there are no scripted fiel } items={Array []} /> -
+ `; exports[`ScriptedFieldsTable should render normally 1`] = ` -
+
@@ -135,11 +135,11 @@ exports[`ScriptedFieldsTable should render normally 1`] = ` ] } /> -
+ `; exports[`ScriptedFieldsTable should show a delete modal 1`] = ` -
+
@@ -173,14 +173,16 @@ exports[`ScriptedFieldsTable should show a delete modal 1`] = ` ] } /> - - - -
+ + `; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap similarity index 98% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap index e6f0d6cd819e35..4dfda1b9339b1a 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CallOuts should render normally 1`] = ` -
+ -
+ `; exports[`CallOuts should render without any call outs 1`] = `""`; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx index 12e0ee88399677..407928931191de 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx @@ -23,7 +23,7 @@ import { shallow } from 'enzyme'; import { CallOuts } from '../call_outs'; describe('CallOuts', () => { - it('should render normally', async () => { + test('should render normally', () => { const component = shallow( { expect(component).toMatchSnapshot(); }); - it('should render without any call outs', async () => { + test('should render without any call outs', () => { const component = shallow( ); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx similarity index 94% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx index 0c321c8ba8b01b..8e38b569a32fa9 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx @@ -20,16 +20,20 @@ import React from 'react'; import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui'; - import { FormattedMessage } from '@kbn/i18n/react'; -export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }) => { +interface CallOutsProps { + deprecatedLangsInUse: string[]; + painlessDocLink: string; +} + +export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }: CallOutsProps) => { if (!deprecatedLangsInUse.length) { return null; } return ( -
+ <> {

-
+ ); }; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap new file mode 100644 index 00000000000000..2b320782cb1634 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap @@ -0,0 +1,14 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`DeleteScritpedFieldConfirmationModal should render normally 1`] = ` + + + +`; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx new file mode 100644 index 00000000000000..f3594e7507a6a4 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx @@ -0,0 +1,37 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { shallow } from 'enzyme'; + +import { DeleteScritpedFieldConfirmationModal } from './confirmation_modal'; + +describe('DeleteScritpedFieldConfirmationModal', () => { + test('should render normally', () => { + const component = shallow( + {}} + hideDeleteConfirmationModal={() => {}} + /> + ); + + expect(component).toMatchSnapshot(); + }); +}); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx new file mode 100644 index 00000000000000..1e82174f863b0d --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx @@ -0,0 +1,63 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EUI_MODAL_CONFIRM_BUTTON, EuiConfirmModal, EuiOverlayMask } from '@elastic/eui'; + +import { ScriptedFieldItem } from '../../types'; + +interface DeleteScritpedFieldConfirmationModalProps { + field: ScriptedFieldItem; + hideDeleteConfirmationModal: ( + event?: React.KeyboardEvent | React.MouseEvent + ) => void; + deleteField: (event: React.MouseEvent) => void; +} + +export const DeleteScritpedFieldConfirmationModal = ({ + field, + hideDeleteConfirmationModal, + deleteField, +}: DeleteScritpedFieldConfirmationModalProps) => { + const title = i18n.translate('kbn.management.editIndexPattern.scripted.deleteFieldLabel', { + defaultMessage: "Delete scripted field '{fieldName}'?", + values: { fieldName: field.name }, + }); + const cancelButtonText = i18n.translate( + 'kbn.management.editIndexPattern.scripted.deleteField.cancelButton', + { defaultMessage: 'Cancel' } + ); + const confirmButtonText = i18n.translate( + 'kbn.management.editIndexPattern.scripted.deleteField.deleteButton', + { defaultMessage: 'Delete' } + ); + + return ( + + + + ); +}; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts new file mode 100644 index 00000000000000..b87b572333e6fa --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { DeleteScritpedFieldConfirmationModal } from './confirmation_modal'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/__snapshots__/header.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/__snapshots__/header.test.js.snap rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx index 3e377ccfbdd410..19479de8f2aa4c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx @@ -20,10 +20,10 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { Header } from '../header'; +import { Header } from './header'; describe('Header', () => { - it('should render normally', async () => { + test('should render normally', () => { const component = shallow(
); expect(component).toMatchSnapshot(); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx index 97c235d82f870a..b8f832dad72af6 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx @@ -18,13 +18,15 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; - import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiText, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -export const Header = ({ addScriptedFieldUrl }) => ( +interface HeaderProps { + addScriptedFieldUrl: string; +} + +export const Header = ({ addScriptedFieldUrl }: HeaderProps) => ( @@ -56,7 +58,3 @@ export const Header = ({ addScriptedFieldUrl }) => ( ); - -Header.propTypes = { - addScriptedFieldUrl: PropTypes.string.isRequired, -}; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts similarity index 92% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts index 5c0bb41eab7650..7d74776fb2bcad 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts @@ -20,3 +20,4 @@ export { Table } from './table'; export { Header } from './header'; export { CallOuts } from './call_outs'; +export { DeleteScritpedFieldConfirmationModal } from './confirmation_modal'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap index 2da4d84463b291..8439887dd468a9 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap @@ -41,6 +41,7 @@ exports[`Table should render normally 1`] = ` "icon": "pencil", "name": "Edit", "onClick": [Function], + "type": "icon", }, Object { "color": "danger", @@ -48,6 +49,7 @@ exports[`Table should render normally 1`] = ` "icon": "trash", "name": "Delete", "onClick": [Function], + "type": "icon", }, ], "name": "", @@ -58,8 +60,9 @@ exports[`Table should render normally 1`] = ` items={ Array [ Object { - "id": 1, - "name": "Elastic", + "lang": "Elastic", + "name": "1", + "script": "", }, ] } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx similarity index 71% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx index 4545bfa8f64db5..13b3875f586871 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx @@ -19,45 +19,50 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; import { Table } from '../table'; +import { ScriptedFieldItem } from '../../types'; +import { IIndexPattern } from '../../../../../../../../../../../plugins/data/public'; -const indexPattern = { - fieldFormatMap: { - Elastic: { - type: { - title: 'string', - }, - }, - }, -}; +const getIndexPatternMock = (mockedFields: any = {}) => ({ ...mockedFields } as IIndexPattern); -const items = [{ id: 1, name: 'Elastic' }]; +const items: ScriptedFieldItem[] = [{ name: '1', lang: 'Elastic', script: '' }]; describe('Table', () => { - it('should render normally', async () => { - const component = shallowWithI18nProvider( + let indexPattern: IIndexPattern; + + beforeEach(() => { + indexPattern = getIndexPatternMock({ + fieldFormatMap: { + Elastic: { + type: { + title: 'string', + }, + }, + }, + }); + }); + + test('should render normally', () => { + const component = shallow
(
{}} deleteField={() => {}} - onChange={() => {}} /> ); expect(component).toMatchSnapshot(); }); - it('should render the format', async () => { - const component = shallowWithI18nProvider( + test('should render the format', () => { + const component = shallow(
{}} deleteField={() => {}} - onChange={() => {}} /> ); @@ -65,16 +70,15 @@ describe('Table', () => { expect(formatTableCell).toMatchSnapshot(); }); - it('should allow edits', () => { + test('should allow edits', () => { const editField = jest.fn(); - const component = shallowWithI18nProvider( + const component = shallow(
{}} - onChange={() => {}} /> ); @@ -83,16 +87,15 @@ describe('Table', () => { expect(editField).toBeCalled(); }); - it('should allow deletes', () => { + test('should allow deletes', () => { const deleteField = jest.fn(); - const component = shallowWithI18nProvider( + const component = shallow(
{}} deleteField={deleteField} - onChange={() => {}} /> ); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx similarity index 84% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx index 5e05dd95827c7d..14aed11b32203f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx @@ -18,27 +18,24 @@ */ import React, { PureComponent } from 'react'; -import PropTypes from 'prop-types'; - -import { EuiInMemoryTable } from '@elastic/eui'; - +import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; +import { EuiInMemoryTable, EuiBasicTableColumn } from '@elastic/eui'; -export class Table extends PureComponent { - static propTypes = { - indexPattern: PropTypes.object.isRequired, - items: PropTypes.array.isRequired, - editField: PropTypes.func.isRequired, - deleteField: PropTypes.func.isRequired, - }; +import { ScriptedFieldItem } from '../../types'; +import { IIndexPattern } from '../../../../../../../../../../../plugins/data/public'; - renderFormatCell = value => { - const { indexPattern } = this.props; +interface TableProps { + indexPattern: IIndexPattern; + items: ScriptedFieldItem[]; + editField: (field: ScriptedFieldItem) => void; + deleteField: (field: ScriptedFieldItem) => void; +} - const title = - indexPattern.fieldFormatMap[value] && indexPattern.fieldFormatMap[value].type - ? indexPattern.fieldFormatMap[value].type.title - : ''; +export class Table extends PureComponent { + renderFormatCell = (value: string) => { + const { indexPattern } = this.props; + const title = get(indexPattern, ['fieldFormatMap', value, 'type', 'title'], ''); return {title}; }; @@ -46,7 +43,7 @@ export class Table extends PureComponent { render() { const { items, editField, deleteField } = this.props; - const columns = [ + const columns: Array> = [ { field: 'displayName', name: i18n.translate('kbn.management.editIndexPattern.scripted.table.nameHeader', { @@ -101,6 +98,7 @@ export class Table extends PureComponent { name: '', actions: [ { + type: 'icon', name: i18n.translate('kbn.management.editIndexPattern.scripted.table.editHeader', { defaultMessage: 'Edit', }), @@ -112,6 +110,7 @@ export class Table extends PureComponent { onClick: editField, }, { + type: 'icon', name: i18n.translate('kbn.management.editIndexPattern.scripted.table.deleteHeader', { defaultMessage: 'Delete', }), diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.ts similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.ts diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx similarity index 75% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx index 5be963ad94b7d2..914d80f9f61d7b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx @@ -18,9 +18,10 @@ */ import React from 'react'; -import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; +import { shallow } from 'enzyme'; import { ScriptedFieldsTable } from '../scripted_fields_table'; +import { IIndexPattern } from '../../../../../../../../../plugins/data/common/index_patterns'; jest.mock('@elastic/eui', () => ({ EuiTitle: 'eui-title', @@ -36,18 +37,20 @@ jest.mock('@elastic/eui', () => ({ default: () => {}, }, })); -jest.mock('../components/header', () => ({ Header: 'header' })); -jest.mock('../components/call_outs', () => ({ CallOuts: 'call-outs' })); -jest.mock('../components/table', () => ({ +jest.mock('./components/header', () => ({ Header: 'header' })); +jest.mock('./components/call_outs', () => ({ CallOuts: 'call-outs' })); +jest.mock('./components/table', () => ({ // Note: this seems to fix React complaining about non lowercase attributes Table: () => { return 'table'; }, })); + jest.mock('ui/scripting_languages', () => ({ getSupportedScriptingLanguages: () => ['painless'], getDeprecatedScriptingLanguages: () => [], })); + jest.mock('ui/documentation_links', () => ({ documentationLinks: { scriptedFields: { @@ -61,16 +64,22 @@ const helpers = { getRouteHref: () => '#', }; -const indexPattern = { - getScriptedFields: () => [ - { name: 'ScriptedField', lang: 'painless', script: 'x++' }, - { name: 'JustATest', lang: 'painless', script: 'z++' }, - ], -}; +const getIndexPatternMock = (mockedFields: any = {}) => ({ ...mockedFields } as IIndexPattern); describe('ScriptedFieldsTable', () => { - it('should render normally', async () => { - const component = shallowWithI18nProvider( + let indexPattern: IIndexPattern; + + beforeEach(() => { + indexPattern = getIndexPatternMock({ + getScriptedFields: () => [ + { name: 'ScriptedField', lang: 'painless', script: 'x++' }, + { name: 'JustATest', lang: 'painless', script: 'z++' }, + ], + }); + }); + + test('should render normally', async () => { + const component = shallow( ); @@ -82,8 +91,8 @@ describe('ScriptedFieldsTable', () => { expect(component).toMatchSnapshot(); }); - it('should filter based on the query bar', async () => { - const component = shallowWithI18nProvider( + test('should filter based on the query bar', async () => { + const component = shallow( ); @@ -98,16 +107,16 @@ describe('ScriptedFieldsTable', () => { expect(component).toMatchSnapshot(); }); - it('should filter based on the lang filter', async () => { - const component = shallowWithI18nProvider( + test('should filter based on the lang filter', async () => { + const component = shallow( [ { name: 'ScriptedField', lang: 'painless', script: 'x++' }, { name: 'JustATest', lang: 'painless', script: 'z++' }, { name: 'Bad', lang: 'somethingElse', script: 'z++' }, ], - }} + })} helpers={helpers} /> ); @@ -123,12 +132,12 @@ describe('ScriptedFieldsTable', () => { expect(component).toMatchSnapshot(); }); - it('should hide the table if there are no scripted fields', async () => { - const component = shallowWithI18nProvider( + test('should hide the table if there are no scripted fields', async () => { + const component = shallow( [], - }} + })} helpers={helpers} /> ); @@ -141,22 +150,22 @@ describe('ScriptedFieldsTable', () => { expect(component).toMatchSnapshot(); }); - it('should show a delete modal', async () => { - const component = shallowWithI18nProvider( + test('should show a delete modal', async () => { + const component = shallow( ); await component.update(); // Fire `componentWillMount()` - component.instance().startDeleteField({ name: 'ScriptedField' }); + component.instance().startDeleteField({ name: 'ScriptedField', lang: '', script: '' }); await component.update(); // Ensure the modal is visible expect(component).toMatchSnapshot(); }); - it('should delete a field', async () => { + test('should delete a field', async () => { const removeScriptedField = jest.fn(); - const component = shallowWithI18nProvider( + const component = shallow( { ); await component.update(); // Fire `componentWillMount()` - component.instance().startDeleteField({ name: 'ScriptedField' }); + component.instance().startDeleteField({ name: 'ScriptedField', lang: '', script: '' }); + await component.update(); await component.instance().deleteField(); await component.update(); + expect(removeScriptedField).toBeCalled(); }); }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx similarity index 60% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx index 69343a5175a25c..ba044296a693a9 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx @@ -18,31 +18,42 @@ */ import React, { Component } from 'react'; -import PropTypes from 'prop-types'; import { getSupportedScriptingLanguages, getDeprecatedScriptingLanguages, } from 'ui/scripting_languages'; import { documentationLinks } from 'ui/documentation_links'; -import { EuiSpacer, EuiOverlayMask, EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { Table, Header, CallOuts } from './components'; - -export class ScriptedFieldsTable extends Component { - static propTypes = { - indexPattern: PropTypes.object.isRequired, - fieldFilter: PropTypes.string, - scriptedFieldLanguageFilter: PropTypes.string, - helpers: PropTypes.shape({ - redirectToRoute: PropTypes.func.isRequired, - getRouteHref: PropTypes.func.isRequired, - }), - onRemoveField: PropTypes.func, +import { EuiSpacer } from '@elastic/eui'; + +import { Table, Header, CallOuts, DeleteScritpedFieldConfirmationModal } from './components'; +import { ScriptedFieldItem } from './types'; + +import { IIndexPattern } from '../../../../../../../../../plugins/data/public'; + +interface ScriptedFieldsTableProps { + indexPattern: IIndexPattern; + fieldFilter?: string; + scriptedFieldLanguageFilter?: string; + helpers: { + redirectToRoute: Function; + getRouteHref: Function; }; + onRemoveField?: () => void; +} - constructor(props) { +interface ScriptedFieldsTableState { + deprecatedLangsInUse: string[]; + fieldToDelete: ScriptedFieldItem | undefined; + isDeleteConfirmationModalVisible: boolean; + fields: ScriptedFieldItem[]; +} + +export class ScriptedFieldsTable extends Component< + ScriptedFieldsTableProps, + ScriptedFieldsTableState +> { + constructor(props: ScriptedFieldsTableProps) { super(props); this.state = { @@ -64,7 +75,8 @@ export class ScriptedFieldsTable extends Component { const deprecatedLangs = getDeprecatedScriptingLanguages(); const supportedLangs = getSupportedScriptingLanguages(); - for (const { lang } of fields) { + for (const field of fields) { + const lang: string = field.lang; if (deprecatedLangs.includes(lang) || !supportedLangs.includes(lang)) { deprecatedLangsInUse.push(lang); } @@ -91,7 +103,8 @@ export class ScriptedFieldsTable extends Component { let filteredFields = languageFilteredFields; if (fieldFilter) { - const normalizedFieldFilter = this.props.fieldFilter.toLowerCase(); + const normalizedFieldFilter = fieldFilter.toLowerCase(); + filteredFields = languageFilteredFields.filter(field => field.name.toLowerCase().includes(normalizedFieldFilter) ); @@ -100,18 +113,7 @@ export class ScriptedFieldsTable extends Component { return filteredFields; }; - renderCallOuts() { - const { deprecatedLangsInUse } = this.state; - - return ( - - ); - } - - startDeleteField = field => { + startDeleteField = (field: ScriptedFieldItem) => { this.setState({ fieldToDelete: field, isDeleteConfirmationModalVisible: true }); }; @@ -124,55 +126,29 @@ export class ScriptedFieldsTable extends Component { const { fieldToDelete } = this.state; indexPattern.removeScriptedField(fieldToDelete); - onRemoveField && onRemoveField(); - this.fetchFields(); - this.hideDeleteConfirmationModal(); - }; - renderDeleteConfirmationModal() { - const { fieldToDelete } = this.state; - - if (!fieldToDelete) { - return null; + if (onRemoveField) { + onRemoveField(); } - const title = i18n.translate('kbn.management.editIndexPattern.scripted.deleteFieldLabel', { - defaultMessage: "Delete scripted field '{fieldName}'?", - values: { fieldName: fieldToDelete.name }, - }); - const cancelButtonText = i18n.translate( - 'kbn.management.editIndexPattern.scripted.deleteField.cancelButton', - { defaultMessage: 'Cancel' } - ); - const confirmButtonText = i18n.translate( - 'kbn.management.editIndexPattern.scripted.deleteField.deleteButton', - { defaultMessage: 'Delete' } - ); - - return ( - - - - ); - } + this.fetchFields(); + this.hideDeleteConfirmationModal(); + }; render() { const { helpers, indexPattern } = this.props; + const { fieldToDelete, deprecatedLangsInUse } = this.state; const items = this.getFilteredItems(); return ( -
+ <>
- {this.renderCallOuts()} + @@ -183,8 +159,14 @@ export class ScriptedFieldsTable extends Component { deleteField={this.startDeleteField} /> - {this.renderDeleteConfirmationModal()} -
+ {fieldToDelete && ( + + )} + ); } } diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts new file mode 100644 index 00000000000000..c1227393c561f0 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts @@ -0,0 +1,25 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** @internal **/ +export interface ScriptedFieldItem { + name: string; + lang: string; + script: string; +} diff --git a/src/legacy/ui/public/scripting_languages/index.js b/src/legacy/ui/public/scripting_languages/index.ts similarity index 83% rename from src/legacy/ui/public/scripting_languages/index.js rename to src/legacy/ui/public/scripting_languages/index.ts index 2f43a44d660686..283a3273a2a5df 100644 --- a/src/legacy/ui/public/scripting_languages/index.js +++ b/src/legacy/ui/public/scripting_languages/index.ts @@ -17,23 +17,25 @@ * under the License. */ +import { IHttpService } from 'angular'; +import { i18n } from '@kbn/i18n'; + import chrome from '../chrome'; import { toastNotifications } from '../notify'; -import { i18n } from '@kbn/i18n'; -export function getSupportedScriptingLanguages() { +export function getSupportedScriptingLanguages(): string[] { return ['painless']; } -export function getDeprecatedScriptingLanguages() { +export function getDeprecatedScriptingLanguages(): string[] { return []; } -export function GetEnabledScriptingLanguagesProvider($http) { +export function GetEnabledScriptingLanguagesProvider($http: IHttpService) { return () => { return $http .get(chrome.addBasePath('/api/kibana/scripts/languages')) - .then(res => res.data) + .then((res: any) => res.data) .catch(() => { toastNotifications.addDanger( i18n.translate('common.ui.scriptingLanguages.errorFetchingToastDescription', { From 52747c9c1775c0e961a06ff808f8fac6fb189743 Mon Sep 17 00:00:00 2001 From: Brandon Kobel Date: Mon, 13 Apr 2020 09:02:48 -0700 Subject: [PATCH 12/65] Only fetching TaskManager's available tasks once per call to fillPool (#61991) Co-authored-by: Elastic Machine --- .../task_manager/server/lib/fill_pool.test.ts | 4 +- .../task_manager/server/lib/fill_pool.ts | 49 +++++++++---------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/x-pack/plugins/task_manager/server/lib/fill_pool.test.ts b/x-pack/plugins/task_manager/server/lib/fill_pool.test.ts index 3863fdaf9da62c..ebb72c3ed36d62 100644 --- a/x-pack/plugins/task_manager/server/lib/fill_pool.test.ts +++ b/x-pack/plugins/task_manager/server/lib/fill_pool.test.ts @@ -10,7 +10,7 @@ import { fillPool } from './fill_pool'; import { TaskPoolRunResult } from '../task_pool'; describe('fillPool', () => { - test('stops filling when there are no more tasks in the store', async () => { + test('stops filling when pool runs all claimed tasks, even if there is more capacity', async () => { const tasks = [ [1, 2, 3], [4, 5], @@ -22,7 +22,7 @@ describe('fillPool', () => { await fillPool(fetchAvailableTasks, converter, run); - expect(_.flattenDeep(run.args)).toEqual([1, 2, 3, 4, 5]); + expect(_.flattenDeep(run.args)).toEqual([1, 2, 3]); }); test('stops filling when the pool has no more capacity', async () => { diff --git a/x-pack/plugins/task_manager/server/lib/fill_pool.ts b/x-pack/plugins/task_manager/server/lib/fill_pool.ts index 60470b22c00a98..9e4894587203d6 100644 --- a/x-pack/plugins/task_manager/server/lib/fill_pool.ts +++ b/x-pack/plugins/task_manager/server/lib/fill_pool.ts @@ -5,12 +5,12 @@ */ import { performance } from 'perf_hooks'; -import { after } from 'lodash'; import { TaskPoolRunResult } from '../task_pool'; export enum FillPoolResult { NoTasksClaimed = 'NoTasksClaimed', RanOutOfCapacity = 'RanOutOfCapacity', + PoolFilled = 'PoolFilled', } type BatchRun = (tasks: T[]) => Promise; @@ -35,33 +35,28 @@ export async function fillPool( run: BatchRun ): Promise { performance.mark('fillPool.start'); - const markClaimedTasksOnRerunCycle = after(2, () => - performance.mark('fillPool.claimedOnRerunCycle') - ); - while (true) { - const instances = await fetchAvailableTasks(); + const instances = await fetchAvailableTasks(); - if (!instances.length) { - performance.mark('fillPool.bailNoTasks'); - performance.measure( - 'fillPool.activityDurationUntilNoTasks', - 'fillPool.start', - 'fillPool.bailNoTasks' - ); - return FillPoolResult.NoTasksClaimed; - } - markClaimedTasksOnRerunCycle(); - const tasks = instances.map(converter); + if (!instances.length) { + performance.mark('fillPool.bailNoTasks'); + performance.measure( + 'fillPool.activityDurationUntilNoTasks', + 'fillPool.start', + 'fillPool.bailNoTasks' + ); + return FillPoolResult.NoTasksClaimed; + } + const tasks = instances.map(converter); - if ((await run(tasks)) === TaskPoolRunResult.RanOutOfCapacity) { - performance.mark('fillPool.bailExhaustedCapacity'); - performance.measure( - 'fillPool.activityDurationUntilExhaustedCapacity', - 'fillPool.start', - 'fillPool.bailExhaustedCapacity' - ); - return FillPoolResult.RanOutOfCapacity; - } - performance.mark('fillPool.cycle'); + if ((await run(tasks)) === TaskPoolRunResult.RanOutOfCapacity) { + performance.mark('fillPool.bailExhaustedCapacity'); + performance.measure( + 'fillPool.activityDurationUntilExhaustedCapacity', + 'fillPool.start', + 'fillPool.bailExhaustedCapacity' + ); + return FillPoolResult.RanOutOfCapacity; } + performance.mark('fillPool.cycle'); + return FillPoolResult.PoolFilled; } From 0c09a7756fb76f26b3da81b58af00b4555d0a213 Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Mon, 13 Apr 2020 09:47:03 -0700 Subject: [PATCH 13/65] Added connectors loading spinner to show the actions forms only when connectors is loaded (#63211) * Added connectors loading spinner to show the actions forms only when connectors is loaded * Added warning message for actions with removed connectors * Fixed loading connectors spinner --- .../action_connector_form/action_form.tsx | 180 +++++++++++------- 1 file changed, 106 insertions(+), 74 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 5890d9fe07f0ea..87a8d572fda0fd 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -24,6 +24,7 @@ import { EuiToolTip, EuiIconTip, EuiLink, + EuiCallOut, } from '@elastic/eui'; import { HttpSetup, ToastsApi } from 'kibana/public'; import { loadActionTypes, loadAllActions } from '../../lib/action_connector_api'; @@ -85,8 +86,10 @@ export const ActionForm = ({ ); const [isAddActionPanelOpen, setIsAddActionPanelOpen] = useState(true); const [connectors, setConnectors] = useState([]); + const [isLoadingConnectors, setIsLoadingConnectors] = useState(false); const [isLoadingActionTypes, setIsLoadingActionTypes] = useState(false); const [actionTypesIndex, setActionTypesIndex] = useState(undefined); + const [emptyActionsIds, setEmptyActionsIds] = useState([]); // load action types useEffect(() => { @@ -128,6 +131,7 @@ export const ActionForm = ({ async function loadConnectors() { try { + setIsLoadingConnectors(true); const actionsResponse = await loadAllActions({ http }); setConnectors(actionsResponse); } catch (e) { @@ -139,6 +143,8 @@ export const ActionForm = ({ } ), }); + } finally { + setIsLoadingConnectors(false); } } const preconfiguredMessage = i18n.translate( @@ -387,13 +393,25 @@ export const ActionForm = ({ > + emptyActionsIds.find((emptyId: string) => actionItem.id === emptyId) ? ( + + ) : ( + + ) } actions={[ - {actions.map((actionItem: AlertAction, index: number) => { - const actionConnector = connectors.find(field => field.id === actionItem.id); - // connectors doesn't exists - if (!actionConnector) { - return getAddConnectorsForm(actionItem, index); - } + const alertActionsList = actions.map((actionItem: AlertAction, index: number) => { + const actionConnector = connectors.find(field => field.id === actionItem.id); + // connectors doesn't exists + if (!actionConnector) { + return getAddConnectorsForm(actionItem, index); + } + + const actionErrors: { errors: IErrorObject } = actionTypeRegistry + .get(actionItem.actionTypeId) + ?.validateParams(actionItem.params); - const actionErrors: { errors: IErrorObject } = actionTypeRegistry - .get(actionItem.actionTypeId) - ?.validateParams(actionItem.params); + return getActionTypeForm(actionItem, actionConnector, actionErrors, index); + }); - return getActionTypeForm(actionItem, actionConnector, actionErrors, index); - })} - - {isAddActionPanelOpen === false ? ( - setIsAddActionPanelOpen(true)} - > + return ( + + {isLoadingConnectors ? ( + - - ) : null} - {isAddActionPanelOpen ? ( + + ) : ( - - - -
- -
-
-
- {hasDisabledByLicenseActionTypes && ( - - -
- + {alertActionsList} + + {isAddActionPanelOpen === false ? ( + setIsAddActionPanelOpen(true)} + > + + + ) : null} + {isAddActionPanelOpen ? ( + + + + +
- -
-
-
- )} -
- - - {isLoadingActionTypes ? ( - - - - ) : ( - actionTypeNodes - )} - +
+
+
+ {hasDisabledByLicenseActionTypes && ( + + +
+ + + +
+
+
+ )} +
+ + + {isLoadingActionTypes ? ( + + + + ) : ( + actionTypeNodes + )} + +
+ ) : null} - ) : null} + )} {actionTypesIndex && activeActionItem ? ( Date: Mon, 13 Apr 2020 11:22:11 -0600 Subject: [PATCH 14/65] [Maps] turn on blended layer for geojson upload (#63200) Co-authored-by: Elastic Machine --- .../client_file_source/geojson_file_source.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js b/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js index 1003f8329da227..df11fe9f327709 100644 --- a/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js +++ b/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js @@ -10,11 +10,11 @@ import { ES_GEO_FIELD_TYPE, GEOJSON_FILE, DEFAULT_MAX_RESULT_WINDOW, + SCALING_TYPES, } from '../../../../common/constants'; import { ClientFileCreateSourceEditor } from './create_client_file_source_editor'; import { ESSearchSource } from '../es_search_source'; import uuid from 'uuid/v4'; -import _ from 'lodash'; import { i18n } from '@kbn/i18n'; import { registerSource } from '../source_registry'; @@ -91,23 +91,22 @@ const viewIndexedData = ( importErrorHandler(indexResponses); return; } - const { fields, id } = indexPatternResp; - const geoFieldArr = fields.filter(field => - Object.values(ES_GEO_FIELD_TYPE).includes(field.type) - ); - const geoField = _.get(geoFieldArr, '[0].name'); - const indexPatternId = id; + const { fields, id: indexPatternId } = indexPatternResp; + const geoField = fields.find(field => Object.values(ES_GEO_FIELD_TYPE).includes(field.type)); if (!indexPatternId || !geoField) { addAndViewSource(null); } else { - // Only turn on bounds filter for large doc counts - const filterByMapBounds = indexDataResp.docCount > DEFAULT_MAX_RESULT_WINDOW; const source = new ESSearchSource( { id: uuid(), indexPatternId, - geoField, - filterByMapBounds, + geoField: geoField.name, + // Only turn on bounds filter for large doc counts + filterByMapBounds: indexDataResp.docCount > DEFAULT_MAX_RESULT_WINDOW, + scalingType: + geoField.type === ES_GEO_FIELD_TYPE.GEO_POINT + ? SCALING_TYPES.CLUSTERS + : SCALING_TYPES.LIMIT, }, inspectorAdapters ); From 5559b09dccbf682686a48d7bfc3b4123e3aa245c Mon Sep 17 00:00:00 2001 From: Ryland Herrick Date: Mon, 13 Apr 2020 12:24:09 -0500 Subject: [PATCH 15/65] Consistent terminology around cypress test data (#63279) * Uses "data" or "test data" when referring to the general idea * Uses "archive" when referring to the specific data/implementation * Adds a few grammar/spelling tweaks --- x-pack/legacy/plugins/siem/cypress/README.md | 32 +++++++------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/x-pack/legacy/plugins/siem/cypress/README.md b/x-pack/legacy/plugins/siem/cypress/README.md index a031fea172be5e..89bafce9c9dc86 100644 --- a/x-pack/legacy/plugins/siem/cypress/README.md +++ b/x-pack/legacy/plugins/siem/cypress/README.md @@ -129,31 +129,21 @@ yarn cypress:run-as-ci ``` Note that with this type of execution you don't need to have running a kibana and elasticsearch instance. This is because - the command, as it would happen in the CI, will launch the instances. The elasticsearch instance will be fed with the data - placed in: `x-pack/test/siem_cypress/es_archives` + the command, as it would happen in the CI, will launch the instances. The elasticsearch instance will be fed data + found in: `x-pack/test/siem_cypress/es_archives` As in this case we want to mimic a CI execution we want to execute the tests with the same set of data, this is why in this case does not make sense to override Cypress environment variables. ### Test data -As said before when running the tests as Jenkins the tests are fed with the data placed in: `x-pack/test/siem_cypress/es_archives`. +As mentioned above, when running the tests as Jenkins the tests are populated with data ("archives") found in: `x-pack/test/siem_cypress/es_archives`. -Currently there are two different ways of feeding data: -1. By default -2. Specifying a specific set of data for a specific test +By default, each test is populated with some base data: an empty kibana index and a set of auditbeat data (the `empty_kibana` and `auditbeat` archives, respectively). This is usually enough to cover most of the scenarios that we are testing. -#### By default +#### Running tests with additional archives -When a execution of the test is going to be done an empty kibana and a set of audibteat data are loaded (empty_kibana and auditbeat). With this data usually is enough to cover most of the scenarios that we are testing. - -#### Running tests with custom data - -Sometimes the default data is not enough and we need a specific set of data in order to being able to test the desired behaviour. - -In that case in the hooks of the test use the function `esArchiverLoad` to load the set of data neeed and `esArchiverUnload` to remove the changes done in the data. - -Example: +When the base data is insufficient, one can specify additional archives. Use `esArchiverLoad` to load the necessary archive, and `esArchiverUnload` to remove the archive from elasticsearch: ```typescript import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; @@ -174,11 +164,11 @@ describe('This are going to be a set of tests', () => { ``` -Note that loading and unloading data takes a signifcant amount of time so try to minimize the use of it when possible. +Note that loading and unloading data take a significant amount of time, so try to minimize their use. -### Current sets of data +### Current archives -The current sets of data can be found in: `x-pack/test/siem_cypress/es_archives` folder. +The current archives can be found in `x-pack/test/siem_cypress/es_archives/`. - auditbeat - Auditbeat data generated in Sep, 2019 with the following hosts present: @@ -197,9 +187,9 @@ The current sets of data can be found in: `x-pack/test/siem_cypress/es_archives` - signals - Set of data with 108 opened signals linked to "Signals test" custom rule. -### How to generate new test data +### How to generate a new archive -We are using es_archiver in order to generate the data that our Cypress tests needs. +We are using es_archiver in order to manage the data that our Cypress tests needs. 1. Setup if possible a clean instance of kibana and elasticsearch (if not, possible please try to clean the data that you are going to generate). 2. With the kibana and elasticsearch instance up and running, create the data that you need for your test. From a58cc5da12a250610aae1cee078124ee350fd29b Mon Sep 17 00:00:00 2001 From: patrykkopycinski Date: Mon, 13 Apr 2020 19:40:48 +0200 Subject: [PATCH 16/65] [SIEM] Fix AlertsTable id (#63368) --- .../siem/public/components/alerts_viewer/alerts_table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx index 05d8f97bb8849b..dd608babef48fc 100644 --- a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx +++ b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx @@ -17,7 +17,7 @@ export interface OwnProps { start: number; } -const ALERTS_TABLE_ID = 'timeline-alerts-table'; +const ALERTS_TABLE_ID = 'alerts-table'; const defaultAlertsFilters: Filter[] = [ { meta: { From 1084b1c7b9ec09c98baa74ad56db3f5d2a394826 Mon Sep 17 00:00:00 2001 From: Maggie Ghamry <46542915+maggieghamry@users.noreply.github.com> Date: Mon, 13 Apr 2020 13:41:12 -0400 Subject: [PATCH 17/65] Update to pagination for workpad and templates (#62050) Added logic to hide pagination if no Canvas workpads exists, and disable the previous/next arrows if there is only one page, for both workapds and templates --- .../components/workpad_loader/workpad_loader.js | 16 +++++++++++----- .../workpad_templates/workpad_templates.js | 12 +++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/x-pack/legacy/plugins/canvas/public/components/workpad_loader/workpad_loader.js b/x-pack/legacy/plugins/canvas/public/components/workpad_loader/workpad_loader.js index 9b30b3e1ec7ca5..30d4ded8571c59 100644 --- a/x-pack/legacy/plugins/canvas/public/components/workpad_loader/workpad_loader.js +++ b/x-pack/legacy/plugins/canvas/public/components/workpad_loader/workpad_loader.js @@ -266,11 +266,17 @@ export class WorkpadLoader extends React.PureComponent { data-test-subj="canvasWorkpadLoaderTable" /> - - - - - + {rows.length > 0 && ( + + + + + + )} ); diff --git a/x-pack/legacy/plugins/canvas/public/components/workpad_templates/workpad_templates.js b/x-pack/legacy/plugins/canvas/public/components/workpad_templates/workpad_templates.js index c80db544bf3702..a9a157f5675f8d 100644 --- a/x-pack/legacy/plugins/canvas/public/components/workpad_templates/workpad_templates.js +++ b/x-pack/legacy/plugins/canvas/public/components/workpad_templates/workpad_templates.js @@ -113,11 +113,13 @@ export class WorkpadTemplates extends React.PureComponent { className="canvasWorkpad__dropzoneTable canvasWorkpad__dropzoneTable--tags" /> - - - - - + {rows.length > 0 && ( + + + + + + )} ); }; From 19fcc6111a1ce526c0c4157de6de36b40f4d634d Mon Sep 17 00:00:00 2001 From: Corey Robertson Date: Mon, 13 Apr 2020 14:21:02 -0400 Subject: [PATCH 18/65] Use MapInput type from Maps plugin (#61539) --- .../functions/common/saved_map.ts | 29 +++---------------- .../input_type_to_expression/map.test.ts | 10 +++---- .../input_type_to_expression/map.ts | 4 +-- 3 files changed, 11 insertions(+), 32 deletions(-) diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts index 4b045b0c5edcf2..cba19ce7da80f6 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts @@ -5,8 +5,6 @@ */ import { ExpressionFunctionDefinition } from 'src/plugins/expressions/common'; -import { TimeRange, Filter as DataFilter } from 'src/plugins/data/public'; -import { EmbeddableInput } from 'src/plugins/embeddable/public'; import { getQueryFilters } from '../../../public/lib/build_embeddable_filters'; import { Filter, MapCenter, TimeRange as TimeRangeArg } from '../../../types'; import { @@ -15,6 +13,7 @@ import { EmbeddableExpression, } from '../../expression_types'; import { getFunctionHelp } from '../../../i18n'; +import { MapEmbeddableInput } from '../../../../../plugins/maps/public'; interface Arguments { id: string; @@ -24,32 +23,12 @@ interface Arguments { timerange: TimeRangeArg | null; } -// Map embeddable is missing proper typings, so type is just to document what we -// are expecting to pass to the embeddable -export type SavedMapInput = EmbeddableInput & { - id: string; - isLayerTOCOpen: boolean; - timeRange?: TimeRange; - refreshConfig: { - isPaused: boolean; - interval: number; - }; - hideFilterActions: true; - filters: DataFilter[]; - mapCenter?: { - lat: number; - lon: number; - zoom: number; - }; - hiddenLayers?: string[]; -}; - const defaultTimeRange = { from: 'now-15m', to: 'now', }; -type Output = EmbeddableExpression; +type Output = EmbeddableExpression; export function savedMap(): ExpressionFunctionDefinition< 'savedMap', @@ -108,8 +87,8 @@ export function savedMap(): ExpressionFunctionDefinition< filters: getQueryFilters(filters), timeRange: args.timerange || defaultTimeRange, refreshConfig: { - isPaused: false, - interval: 0, + pause: false, + value: 0, }, mapCenter: center, diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.test.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.test.ts index 4c294fb37c2dba..f9ff94ee7d8f16 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.test.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.test.ts @@ -5,7 +5,7 @@ */ import { toExpression } from './map'; -import { SavedMapInput } from '../../../functions/common/saved_map'; +import { MapEmbeddableInput } from '../../../../../maps/public'; import { fromExpression, Ast } from '@kbn/interpreter/common'; const baseSavedMapInput = { @@ -13,15 +13,15 @@ const baseSavedMapInput = { filters: [], isLayerTOCOpen: false, refreshConfig: { - isPaused: true, - interval: 0, + pause: true, + value: 0, }, hideFilterActions: true as true, }; describe('toExpression', () => { it('converts to a savedMap expression', () => { - const input: SavedMapInput = { + const input: MapEmbeddableInput = { ...baseSavedMapInput, }; @@ -39,7 +39,7 @@ describe('toExpression', () => { }); it('includes optional input values', () => { - const input: SavedMapInput = { + const input: MapEmbeddableInput = { ...baseSavedMapInput, mapCenter: { lat: 1, diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.ts index e3f9eca61ae285..e0cb71c17774c0 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/input_type_to_expression/map.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SavedMapInput } from '../../../functions/common/saved_map'; +import { MapEmbeddableInput } from '../../../../../maps/public'; -export function toExpression(input: SavedMapInput): string { +export function toExpression(input: MapEmbeddableInput): string { const expressionParts = [] as string[]; expressionParts.push('savedMap'); From e27526fd92eaa0094b70ddb2119a326543475c2c Mon Sep 17 00:00:00 2001 From: Corey Robertson Date: Mon, 13 Apr 2020 15:29:24 -0400 Subject: [PATCH 19/65] Move away from npStart for embeddables in canvas (#62680) Co-authored-by: Elastic Machine --- .../canvas/canvas_plugin_src/plugin.ts | 28 +++- .../renderers/embeddable/embeddable.tsx | 143 +++++++++--------- .../canvas_plugin_src/renderers/index.js | 5 +- .../components/embeddable_flyout/flyout.tsx | 7 +- .../components/embeddable_flyout/index.tsx | 1 + x-pack/legacy/plugins/canvas/public/legacy.ts | 2 + .../legacy/plugins/canvas/public/plugin.tsx | 18 ++- 7 files changed, 114 insertions(+), 90 deletions(-) diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/plugin.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/plugin.ts index 7cd1efe9e27c83..a654c6b28b3505 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/plugin.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/plugin.ts @@ -6,11 +6,14 @@ import { CoreSetup, CoreStart, Plugin } from 'src/core/public'; import { CanvasSetup } from '../public'; +import { EmbeddableStart } from '../../../../../src/plugins/embeddable/public'; +import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; +import { Start as InspectorStart } from '../../../../../src/plugins/inspector/public'; import { functions } from './functions/browser'; import { typeFunctions } from './expression_types'; // @ts-ignore: untyped local -import { renderFunctions } from './renderers'; +import { renderFunctions, renderFunctionFactories } from './renderers'; import { elementSpecs } from './elements'; // @ts-ignore Untyped Local @@ -30,13 +33,26 @@ interface SetupDeps { canvas: CanvasSetup; } +export interface StartDeps { + embeddable: EmbeddableStart; + uiActions: UiActionsStart; + inspector: InspectorStart; +} + /** @internal */ -export class CanvasSrcPlugin implements Plugin<{}, {}, SetupDeps, {}> { - public setup(core: CoreSetup, plugins: SetupDeps) { +export class CanvasSrcPlugin implements Plugin { + public setup(core: CoreSetup, plugins: SetupDeps) { plugins.canvas.addFunctions(functions); plugins.canvas.addTypes(typeFunctions); + plugins.canvas.addRenderers(renderFunctions); + core.getStartServices().then(([coreStart, depsStart]) => { + plugins.canvas.addRenderers( + renderFunctionFactories.map((factory: any) => factory(coreStart, depsStart)) + ); + }); + plugins.canvas.addElements(elementSpecs); plugins.canvas.addDatasourceUIs(datasourceSpecs); plugins.canvas.addModelUIs(modelSpecs); @@ -45,11 +61,7 @@ export class CanvasSrcPlugin implements Plugin<{}, {}, SetupDeps, {}> { plugins.canvas.addTagUIs(tagSpecs); plugins.canvas.addTemplates(templateSpecs); plugins.canvas.addTransformUIs(transformSpecs); - - return {}; } - public start(core: CoreStart, plugins: {}) { - return {}; - } + public start(core: CoreStart, plugins: StartDeps) {} } diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx index 817be6e144fc83..a1096d50c16535 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx @@ -7,7 +7,8 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { I18nContext } from 'ui/i18n'; -import { npStart } from 'ui/new_platform'; +import { CoreStart } from '../../../../../../../src/core/public'; +import { StartDeps } from '../../plugin'; import { IEmbeddable, EmbeddableFactory, @@ -28,86 +29,88 @@ const embeddablesRegistry: { [key: string]: IEmbeddable; } = {}; -const renderEmbeddable = (embeddableObject: IEmbeddable, domNode: HTMLElement) => { - return ( -
- - - -
- ); +const renderEmbeddableFactory = (core: CoreStart, plugins: StartDeps) => { + return (embeddableObject: IEmbeddable, domNode: HTMLElement) => { + return ( +
+ + + +
+ ); + }; }; -const embeddable = () => ({ - name: 'embeddable', - displayName: strings.getDisplayName(), - help: strings.getHelpDescription(), - reuseDomNode: true, - render: async ( - domNode: HTMLElement, - { input, embeddableType }: EmbeddableExpression, - handlers: RendererHandlers - ) => { - const uniqueId = handlers.getElementId(); - - if (!embeddablesRegistry[uniqueId]) { - const factory = Array.from(npStart.plugins.embeddable.getEmbeddableFactories()).find( - embeddableFactory => embeddableFactory.type === embeddableType - ) as EmbeddableFactory; - - if (!factory) { - handlers.done(); - throw new EmbeddableFactoryNotFoundError(embeddableType); - } - - const embeddableObject = await factory.createFromSavedObject(input.id, input); +export const embeddableRendererFactory = (core: CoreStart, plugins: StartDeps) => { + const renderEmbeddable = renderEmbeddableFactory(core, plugins); + return () => ({ + name: 'embeddable', + displayName: strings.getDisplayName(), + help: strings.getHelpDescription(), + reuseDomNode: true, + render: async ( + domNode: HTMLElement, + { input, embeddableType }: EmbeddableExpression, + handlers: RendererHandlers + ) => { + const uniqueId = handlers.getElementId(); + + if (!embeddablesRegistry[uniqueId]) { + const factory = Array.from(plugins.embeddable.getEmbeddableFactories()).find( + embeddableFactory => embeddableFactory.type === embeddableType + ) as EmbeddableFactory; + + if (!factory) { + handlers.done(); + throw new EmbeddableFactoryNotFoundError(embeddableType); + } - embeddablesRegistry[uniqueId] = embeddableObject; - ReactDOM.unmountComponentAtNode(domNode); + const embeddableObject = await factory.createFromSavedObject(input.id, input); - const subscription = embeddableObject.getInput$().subscribe(function(updatedInput) { - const updatedExpression = embeddableInputToExpression(updatedInput, embeddableType); + embeddablesRegistry[uniqueId] = embeddableObject; + ReactDOM.unmountComponentAtNode(domNode); - if (updatedExpression) { - handlers.onEmbeddableInputChange(updatedExpression); - } - }); + const subscription = embeddableObject.getInput$().subscribe(function(updatedInput) { + const updatedExpression = embeddableInputToExpression(updatedInput, embeddableType); - ReactDOM.render(renderEmbeddable(embeddableObject, domNode), domNode, () => handlers.done()); + if (updatedExpression) { + handlers.onEmbeddableInputChange(updatedExpression); + } + }); - handlers.onResize(() => { ReactDOM.render(renderEmbeddable(embeddableObject, domNode), domNode, () => handlers.done() ); - }); - handlers.onDestroy(() => { - subscription.unsubscribe(); - handlers.onEmbeddableDestroyed(); + handlers.onResize(() => { + ReactDOM.render(renderEmbeddable(embeddableObject, domNode), domNode, () => + handlers.done() + ); + }); - delete embeddablesRegistry[uniqueId]; + handlers.onDestroy(() => { + subscription.unsubscribe(); + handlers.onEmbeddableDestroyed(); - return ReactDOM.unmountComponentAtNode(domNode); - }); - } else { - embeddablesRegistry[uniqueId].updateInput(input); - } - }, -}); + delete embeddablesRegistry[uniqueId]; -export { embeddable }; + return ReactDOM.unmountComponentAtNode(domNode); + }); + } else { + embeddablesRegistry[uniqueId].updateInput(input); + } + }, + }); +}; diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/index.js b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/index.js index 48364be06e539c..84f92f5149893f 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/index.js +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/renderers/index.js @@ -7,7 +7,7 @@ import { advancedFilter } from './advanced_filter'; import { debug } from './debug'; import { dropdownFilter } from './dropdown_filter'; -import { embeddable } from './embeddable/embeddable'; +import { embeddableRendererFactory } from './embeddable/embeddable'; import { error } from './error'; import { image } from './image'; import { markdown } from './markdown'; @@ -26,7 +26,6 @@ export const renderFunctions = [ advancedFilter, debug, dropdownFilter, - embeddable, error, image, markdown, @@ -41,3 +40,5 @@ export const renderFunctions = [ text, timeFilter, ]; + +export const renderFunctionFactories = [embeddableRendererFactory]; diff --git a/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/flyout.tsx b/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/flyout.tsx index 08cd3084c35cff..4916a27fcbe60a 100644 --- a/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/flyout.tsx +++ b/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/flyout.tsx @@ -5,7 +5,6 @@ */ import React from 'react'; -import { npStart } from 'ui/new_platform'; import { EuiFlyout, EuiFlyoutHeader, EuiFlyoutBody, EuiTitle } from '@elastic/eui'; import { SavedObjectFinderUi, @@ -13,6 +12,7 @@ import { } from '../../../../../../../src/plugins/saved_objects/public/'; import { ComponentStrings } from '../../../i18n'; import { CoreStart } from '../../../../../../../src/core/public'; +import { CanvasStartDeps } from '../../plugin'; const { AddEmbeddableFlyout: strings } = ComponentStrings; @@ -22,11 +22,12 @@ export interface Props { availableEmbeddables: string[]; savedObjects: CoreStart['savedObjects']; uiSettings: CoreStart['uiSettings']; + getEmbeddableFactories: CanvasStartDeps['embeddable']['getEmbeddableFactories']; } export class AddEmbeddableFlyout extends React.Component { onAddPanel = (id: string, savedObjectType: string, name: string) => { - const embeddableFactories = npStart.plugins.embeddable.getEmbeddableFactories(); + const embeddableFactories = this.props.getEmbeddableFactories(); // Find the embeddable type from the saved object type const found = Array.from(embeddableFactories).find(embeddableFactory => { @@ -42,7 +43,7 @@ export class AddEmbeddableFlyout extends React.Component { }; render() { - const embeddableFactories = npStart.plugins.embeddable.getEmbeddableFactories(); + const embeddableFactories = this.props.getEmbeddableFactories(); const availableSavedObjects = Array.from(embeddableFactories) .filter(factory => { diff --git a/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/index.tsx b/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/index.tsx index a86784d374f49b..c13cbfd0422377 100644 --- a/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/index.tsx +++ b/x-pack/legacy/plugins/canvas/public/components/embeddable_flyout/index.tsx @@ -105,6 +105,7 @@ export class EmbeddableFlyoutPortal extends React.Component, this.el ); diff --git a/x-pack/legacy/plugins/canvas/public/legacy.ts b/x-pack/legacy/plugins/canvas/public/legacy.ts index a6caa1985325ef..4af7c9b2bd0576 100644 --- a/x-pack/legacy/plugins/canvas/public/legacy.ts +++ b/x-pack/legacy/plugins/canvas/public/legacy.ts @@ -26,7 +26,9 @@ const shimSetupPlugins: CanvasSetupDeps = { }; const shimStartPlugins: CanvasStartDeps = { ...npStart.plugins, + embeddable: npStart.plugins.embeddable, expressions: npStart.plugins.expressions, + inspector: npStart.plugins.inspector, uiActions: npStart.plugins.uiActions, __LEGACY: { // ToDo: Copy directly into canvas diff --git a/x-pack/legacy/plugins/canvas/public/plugin.tsx b/x-pack/legacy/plugins/canvas/public/plugin.tsx index d9e5e6b4b084bf..3ea3ce625ca719 100644 --- a/x-pack/legacy/plugins/canvas/public/plugin.tsx +++ b/x-pack/legacy/plugins/canvas/public/plugin.tsx @@ -11,6 +11,8 @@ import { initLoadingIndicator } from './lib/loading_indicator'; import { featureCatalogueEntry } from './feature_catalogue_entry'; import { ExpressionsSetup, ExpressionsStart } from '../../../../../src/plugins/expressions/public'; import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; +import { EmbeddableStart } from '../../../../../src/plugins/embeddable/public'; +import { Start as InspectorStart } from '../../../../../src/plugins/inspector/public'; // @ts-ignore untyped local import { argTypeSpecs } from './expression_types/arg_types'; import { transitions } from './transitions'; @@ -31,7 +33,9 @@ export interface CanvasSetupDeps { } export interface CanvasStartDeps { + embeddable: EmbeddableStart; expressions: ExpressionsStart; + inspector: InspectorStart; uiActions: UiActionsStart; __LEGACY: { absoluteToParsedUrl: (url: string, basePath: string) => any; @@ -48,14 +52,19 @@ export interface CanvasStartDeps { // These interfaces are empty for now but will be populate as we need to export // things for other plugins to use at startup or runtime export type CanvasSetup = CanvasApi; -export interface CanvasStart {} // eslint-disable-line @typescript-eslint/no-empty-interface +export type CanvasStart = void; /** @internal */ export class CanvasPlugin implements Plugin { + // TODO: Do we want to completely move canvas_plugin_src into it's own plugin? + private srcPlugin = new CanvasSrcPlugin(); + public setup(core: CoreSetup, plugins: CanvasSetupDeps) { const { api: canvasApi, registries } = getPluginApi(plugins.expressions); + this.srcPlugin.setup(core, { canvas: canvasApi }); + core.application.register({ id: 'canvas', title: 'Canvas App', @@ -84,10 +93,6 @@ export class CanvasPlugin canvasApi.addElements(legacyRegistries.elements.getOriginalFns()); canvasApi.addTypes(legacyRegistries.types.getOriginalFns()); - // TODO: Do we want to completely move canvas_plugin_src into it's own plugin? - const srcPlugin = new CanvasSrcPlugin(); - srcPlugin.setup(core, { canvas: canvasApi }); - // Register core canvas stuff canvasApi.addFunctions(initFunctions({ typesRegistry: plugins.expressions.__LEGACY.types })); canvasApi.addArgumentUIs(argTypeSpecs); @@ -99,8 +104,7 @@ export class CanvasPlugin } public start(core: CoreStart, plugins: CanvasStartDeps) { + this.srcPlugin.start(core, plugins); initLoadingIndicator(core.http.addLoadingCountSource); - - return {}; } } From 301b795db6b988adb5875ef4a9d96fdb20c66ed5 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 13 Apr 2020 13:30:18 -0600 Subject: [PATCH 20/65] [Maps] update geospatial filters to use geo_shape query for geo_point fields (#62966) Co-authored-by: Elastic Machine --- .../map/mb/draw_control/draw_control.js | 19 ++-- .../maps/public/elasticsearch_geo_utils.js | 99 ++++++------------- 2 files changed, 34 insertions(+), 84 deletions(-) diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js b/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js index df2988d399c5bb..cc0e665525036f 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js +++ b/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js @@ -12,7 +12,6 @@ import DrawRectangle from 'mapbox-gl-draw-rectangle-mode'; import { DrawCircle } from './draw_circle'; import { createDistanceFilterWithMeta, - createSpatialFilterWithBoundingBox, createSpatialFilterWithGeometry, getBoundingBoxGeometry, roundCoordinates, @@ -84,23 +83,17 @@ export class DrawControl extends React.Component { roundCoordinates(geometry.coordinates); try { - const options = { + const filter = createSpatialFilterWithGeometry({ + geometry: + this.props.drawState.drawType === DRAW_TYPE.BOUNDS + ? getBoundingBoxGeometry(geometry) + : geometry, indexPatternId: this.props.drawState.indexPatternId, geoFieldName: this.props.drawState.geoFieldName, geoFieldType: this.props.drawState.geoFieldType, geometryLabel: this.props.drawState.geometryLabel, relation: this.props.drawState.relation, - }; - const filter = - this.props.drawState.drawType === DRAW_TYPE.BOUNDS - ? createSpatialFilterWithBoundingBox({ - ...options, - geometry: getBoundingBoxGeometry(geometry), - }) - : createSpatialFilterWithGeometry({ - ...options, - geometry, - }); + }); this.props.addFilters([filter]); } catch (error) { // TODO notify user why filter was not created diff --git a/x-pack/plugins/maps/public/elasticsearch_geo_utils.js b/x-pack/plugins/maps/public/elasticsearch_geo_utils.js index 79467e26ec3fad..617cf537fd5c31 100644 --- a/x-pack/plugins/maps/public/elasticsearch_geo_utils.js +++ b/x-pack/plugins/maps/public/elasticsearch_geo_utils.js @@ -231,28 +231,16 @@ function createGeoBoundBoxFilter(geometry, geoFieldName, filterProps = {}) { }; } -function createGeoPolygonFilter(polygonCoordinates, geoFieldName, filterProps = {}) { - return { - geo_polygon: { - ignore_unmapped: true, - [geoFieldName]: { - points: polygonCoordinates[POLYGON_COORDINATES_EXTERIOR_INDEX].map(coordinatePair => { - return { - lon: coordinatePair[LON_INDEX], - lat: coordinatePair[LAT_INDEX], - }; - }), - }, - }, - ...filterProps, - }; -} - export function createExtentFilter(mapExtent, geoFieldName, geoFieldType) { ensureGeoField(geoFieldType); const safePolygon = convertMapExtentToPolygon(mapExtent); + // Extent filters are used to dynamically filter data for the current map view port. + // Continue to use geo_bounding_box queries for extent filters + // 1) geo_bounding_box queries are faster than polygon queries + // 2) geo_shape benefits of pre-indexed shapes and + // compatability across multi-indices with geo_point and geo_shape do not apply to this use case. if (geoFieldType === ES_GEO_FIELD_TYPE.GEO_POINT) { return createGeoBoundBoxFilter(safePolygon, geoFieldName); } @@ -267,15 +255,7 @@ export function createExtentFilter(mapExtent, geoFieldName, geoFieldType) { }; } -export function createSpatialFilterWithBoundingBox(options) { - return createGeometryFilterWithMeta({ ...options, isBoundingBox: true }); -} - -export function createSpatialFilterWithGeometry(options) { - return createGeometryFilterWithMeta(options); -} - -function createGeometryFilterWithMeta({ +export function createSpatialFilterWithGeometry({ preIndexedShape, geometry, geometryLabel, @@ -283,16 +263,16 @@ function createGeometryFilterWithMeta({ geoFieldName, geoFieldType, relation = ES_SPATIAL_RELATIONS.INTERSECTS, - isBoundingBox = false, }) { ensureGeoField(geoFieldType); - const relationLabel = - geoFieldType === ES_GEO_FIELD_TYPE.GEO_POINT - ? i18n.translate('xpack.maps.es_geo_utils.shapeFilter.geoPointRelationLabel', { - defaultMessage: 'in', - }) - : getEsSpatialRelationLabel(relation); + const isGeoPoint = geoFieldType === ES_GEO_FIELD_TYPE.GEO_POINT; + + const relationLabel = isGeoPoint + ? i18n.translate('xpack.maps.es_geo_utils.shapeFilter.geoPointRelationLabel', { + defaultMessage: 'in', + }) + : getEsSpatialRelationLabel(relation); const meta = { type: SPATIAL_FILTER_TYPE, negate: false, @@ -301,47 +281,24 @@ function createGeometryFilterWithMeta({ alias: `${geoFieldName} ${relationLabel} ${geometryLabel}`, }; - if (geoFieldType === ES_GEO_FIELD_TYPE.GEO_SHAPE) { - const shapeQuery = { - relation, - }; - - if (preIndexedShape) { - shapeQuery.indexed_shape = preIndexedShape; - } else { - shapeQuery.shape = geometry; - } - - return { - meta, - geo_shape: { - ignore_unmapped: true, - [geoFieldName]: shapeQuery, - }, - }; - } - - // geo_points supports limited geometry types - ensureGeometryType(geometry.type, [GEO_JSON_TYPE.POLYGON, GEO_JSON_TYPE.MULTI_POLYGON]); - - if (geometry.type === GEO_JSON_TYPE.MULTI_POLYGON) { - return { - meta, - query: { - bool: { - should: geometry.coordinates.map(polygonCoordinates => { - return createGeoPolygonFilter(polygonCoordinates, geoFieldName); - }), - }, - }, - }; - } + const shapeQuery = { + // geo_shape query with geo_point field only supports intersects relation + relation: isGeoPoint ? ES_SPATIAL_RELATIONS.INTERSECTS : relation, + }; - if (isBoundingBox) { - return createGeoBoundBoxFilter(geometry, geoFieldName, { meta }); + if (preIndexedShape) { + shapeQuery.indexed_shape = preIndexedShape; + } else { + shapeQuery.shape = geometry; } - return createGeoPolygonFilter(geometry.coordinates, geoFieldName, { meta }); + return { + meta, + geo_shape: { + ignore_unmapped: true, + [geoFieldName]: shapeQuery, + }, + }; } export function createDistanceFilterWithMeta({ From a6ecd4c2783c81090072936c142faf6a0dc1bfe0 Mon Sep 17 00:00:00 2001 From: Thomas Neirynck Date: Mon, 13 Apr 2020 15:33:43 -0400 Subject: [PATCH 21/65] [Maps] Add SOURCE_TYPES enumeration (#62975) --- .../ems_raster_tile_to_ems_vector_tile.js | 4 ++-- .../migrations/move_apply_global_query.js | 6 +++-- .../maps/common/migrations/references.js | 8 +++++-- .../maps/common/migrations/references.test.js | 14 +++++------ .../maps/common/migrations/scaling_type.ts | 4 ++-- .../migrations/top_hits_time_to_sort.js | 4 ++-- .../server/maps_telemetry/maps_telemetry.ts | 4 ++-- .../components/embeddables/map_config.ts | 5 ++-- x-pack/plugins/maps/common/constants.ts | 23 ++++++++++--------- .../public/layers/blended_vector_layer.ts | 8 +++++-- .../client_file_source/geojson_file_source.js | 6 ++--- .../ems_file_source/ems_file_source.js | 6 ++--- .../sources/ems_tms_source/ems_tms_source.js | 6 ++--- .../es_geo_grid_source/es_geo_grid_source.js | 8 +++---- .../es_geo_grid_source.test.ts | 4 ++-- .../es_pew_pew_source/es_pew_pew_source.js | 6 ++--- .../es_search_source/es_search_source.js | 8 +++---- .../es_search_source/es_search_source.test.ts | 4 ++-- .../kibana_regionmap_source.js | 6 ++--- .../kibana_tilemap_source.js | 6 ++--- .../layers/sources/wms_source/wms_source.js | 6 ++--- .../xyz_tms_source/xyz_tms_source.test.ts | 4 ++-- .../sources/xyz_tms_source/xyz_tms_source.ts | 6 ++--- .../maps/public/layers/tile_layer.test.ts | 4 ++-- 24 files changed, 86 insertions(+), 74 deletions(-) diff --git a/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js b/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js index 94f4018bbdbb75..091cfd8605cb69 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js +++ b/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js @@ -5,11 +5,11 @@ */ import _ from 'lodash'; -import { EMS_TMS, LAYER_TYPE } from '../constants'; +import { SOURCE_TYPES, LAYER_TYPE } from '../constants'; function isEmsTileSource(layerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); - return sourceType === EMS_TMS; + return sourceType === SOURCE_TYPES.EMS_TMS; } function isTileLayer(layerDescriptor) { diff --git a/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js b/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js index 490e760d8c0031..0d6b0052d2b0d2 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js +++ b/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js @@ -5,11 +5,13 @@ */ import _ from 'lodash'; -import { ES_GEO_GRID, ES_PEW_PEW, ES_SEARCH } from '../constants'; +import { SOURCE_TYPES } from '../constants'; function isEsSource(layerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); - return [ES_GEO_GRID, ES_PEW_PEW, ES_SEARCH].includes(sourceType); + return [SOURCE_TYPES.ES_GEO_GRID, SOURCE_TYPES.ES_PEW_PEW, SOURCE_TYPES.ES_SEARCH].includes( + sourceType + ); } // Migration to move applyGlobalQuery from layer to sources. diff --git a/x-pack/legacy/plugins/maps/common/migrations/references.js b/x-pack/legacy/plugins/maps/common/migrations/references.js index a96af700da37c2..3980705fd7cfab 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/references.js +++ b/x-pack/legacy/plugins/maps/common/migrations/references.js @@ -7,11 +7,15 @@ // Can not use public Layer classes to extract references since this logic must run in both client and server. import _ from 'lodash'; -import { ES_GEO_GRID, ES_SEARCH, ES_PEW_PEW } from '../constants'; +import { SOURCE_TYPES } from '../constants'; function doesSourceUseIndexPattern(layerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); - return sourceType === ES_GEO_GRID || sourceType === ES_SEARCH || sourceType === ES_PEW_PEW; + return ( + sourceType === SOURCE_TYPES.ES_GEO_GRID || + sourceType === SOURCE_TYPES.ES_SEARCH || + sourceType === SOURCE_TYPES.ES_PEW_PEW + ); } export function extractReferences({ attributes, references = [] }) { diff --git a/x-pack/legacy/plugins/maps/common/migrations/references.test.js b/x-pack/legacy/plugins/maps/common/migrations/references.test.js index 40f6fd72a48d7d..50a45c81339dc3 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/references.test.js +++ b/x-pack/legacy/plugins/maps/common/migrations/references.test.js @@ -5,16 +5,16 @@ */ import { extractReferences, injectReferences } from './references'; -import { ES_GEO_GRID, ES_SEARCH, ES_PEW_PEW } from '../constants'; +import { SOURCE_TYPES } from '../constants'; const layerListJSON = { esSearchSource: { - withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${ES_SEARCH}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, - withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${ES_SEARCH}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, + withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_SEARCH}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, + withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_SEARCH}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, }, esGeoGridSource: { - withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${ES_GEO_GRID}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, - withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${ES_GEO_GRID}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, + withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_GEO_GRID}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, + withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_GEO_GRID}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, }, join: { withIndexPatternId: @@ -23,8 +23,8 @@ const layerListJSON = { '[{"joins":[{"right":{"indexPatternRefName":"layer_0_join_0_index_pattern"}}]}]', }, pewPewSource: { - withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${ES_PEW_PEW}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, - withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${ES_PEW_PEW}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, + withIndexPatternId: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_PEW_PEW}\",\"indexPatternId\":\"c698b940-e149-11e8-a35a-370a8516603a\"}}]`, + withIndexPatternRef: `[{\"sourceDescriptor\":{\"type\":\"${SOURCE_TYPES.ES_PEW_PEW}\",\"indexPatternRefName\":\"layer_0_source_index_pattern\"}}]`, }, }; diff --git a/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts b/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts index 5823ddd6b42e35..551975fbacea52 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts +++ b/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts @@ -5,13 +5,13 @@ */ import _ from 'lodash'; -import { ES_SEARCH, SCALING_TYPES } from '../constants'; +import { SOURCE_TYPES, SCALING_TYPES } from '../constants'; import { LayerDescriptor, ESSearchSourceDescriptor } from '../descriptor_types'; import { MapSavedObjectAttributes } from '../../../../../plugins/maps/common/map_saved_object_type'; function isEsDocumentSource(layerDescriptor: LayerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); - return sourceType === ES_SEARCH; + return sourceType === SOURCE_TYPES.ES_SEARCH; } export function migrateUseTopHitsToScalingType({ diff --git a/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js b/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js index 7392dfa71bf3ab..055c867486f6c1 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js +++ b/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js @@ -5,11 +5,11 @@ */ import _ from 'lodash'; -import { ES_SEARCH, SORT_ORDER } from '../constants'; +import { SOURCE_TYPES, SORT_ORDER } from '../constants'; function isEsDocumentSource(layerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); - return sourceType === ES_SEARCH; + return sourceType === SOURCE_TYPES.ES_SEARCH; } export function topHitsTimeToSort({ attributes }) { diff --git a/x-pack/legacy/plugins/maps/server/maps_telemetry/maps_telemetry.ts b/x-pack/legacy/plugins/maps/server/maps_telemetry/maps_telemetry.ts index 0300f22eeeb825..27c0211446e852 100644 --- a/x-pack/legacy/plugins/maps/server/maps_telemetry/maps_telemetry.ts +++ b/x-pack/legacy/plugins/maps/server/maps_telemetry/maps_telemetry.ts @@ -12,7 +12,7 @@ import { } from 'src/core/server'; import { IFieldType, IIndexPattern } from 'src/plugins/data/public'; import { - EMS_FILE, + SOURCE_TYPES, ES_GEO_FIELD_TYPE, MAP_SAVED_OBJECT_TYPE, TELEMETRY_TYPE, @@ -100,7 +100,7 @@ export function buildMapsTelemetry({ const emsLayersCount = layerLists.map(lList => _(lList) .countBy((layer: LayerDescriptor) => { - const isEmsFile = _.get(layer, 'sourceDescriptor.type') === EMS_FILE; + const isEmsFile = _.get(layer, 'sourceDescriptor.type') === SOURCE_TYPES.EMS_FILE; return isEmsFile && _.get(layer, 'sourceDescriptor.id'); }) .pick((val, key) => key !== 'false') diff --git a/x-pack/legacy/plugins/siem/public/components/embeddables/map_config.ts b/x-pack/legacy/plugins/siem/public/components/embeddables/map_config.ts index e8b267122f86fa..8c96e0b75a1365 100644 --- a/x-pack/legacy/plugins/siem/public/components/embeddables/map_config.ts +++ b/x-pack/legacy/plugins/siem/public/components/embeddables/map_config.ts @@ -13,6 +13,7 @@ import { LayerMappingDetails, } from './types'; import * as i18n from './translations'; +import { SOURCE_TYPES } from '../../../../../../plugins/maps/common/constants'; const euiVisColorPalette = euiPaletteColorBlind(); // Update field mappings to modify what fields will be returned to map tooltip @@ -101,7 +102,7 @@ export const lmc: LayerMappingCollection = { export const getLayerList = (indexPatternIds: IndexPatternMapping[]) => { return [ { - sourceDescriptor: { type: 'EMS_TMS', isAutoSelect: true }, + sourceDescriptor: { type: SOURCE_TYPES.EMS_TMS, isAutoSelect: true }, id: uuid.v4(), label: null, minZoom: 0, @@ -260,7 +261,7 @@ export const getLineLayer = ( layerDetails: LayerMapping ) => ({ sourceDescriptor: { - type: 'ES_PEW_PEW', + type: SOURCE_TYPES.ES_PEW_PEW, applyGlobalQuery: true, id: uuid.v4(), indexPatternId, diff --git a/x-pack/plugins/maps/common/constants.ts b/x-pack/plugins/maps/common/constants.ts index f3997f741a1bfe..1468bf7fdc1f27 100644 --- a/x-pack/plugins/maps/common/constants.ts +++ b/x-pack/plugins/maps/common/constants.ts @@ -56,15 +56,18 @@ export enum SORT_ORDER { DESC = 'desc', } -export const EMS_TMS = 'EMS_TMS'; -export const EMS_FILE = 'EMS_FILE'; -export const ES_GEO_GRID = 'ES_GEO_GRID'; -export const ES_SEARCH = 'ES_SEARCH'; -export const ES_PEW_PEW = 'ES_PEW_PEW'; -export const EMS_XYZ = 'EMS_XYZ'; // identifies a custom TMS source. Name is a little unfortunate. -export const WMS = 'WMS'; -export const KIBANA_TILEMAP = 'KIBANA_TILEMAP'; -export const REGIONMAP_FILE = 'REGIONMAP_FILE'; +export enum SOURCE_TYPES { + EMS_TMS = 'EMS_TMS', + EMS_FILE = 'EMS_FILE', + ES_GEO_GRID = 'ES_GEO_GRID', + ES_SEARCH = 'ES_SEARCH', + ES_PEW_PEW = 'ES_PEW_PEW', + EMS_XYZ = 'EMS_XYZ', // identifies a custom TMS source. Name is a little unfortunate. + WMS = 'WMS', + KIBANA_TILEMAP = 'KIBANA_TILEMAP', + REGIONMAP_FILE = 'REGIONMAP_FILE', + GEOJSON_FILE = 'GEOJSON_FILE', +} export enum FIELD_ORIGIN { SOURCE = 'source', @@ -77,8 +80,6 @@ export const SOURCE_META_ID_ORIGIN = `${SOURCE_DATA_ID_ORIGIN}_${META_ID_ORIGIN_ export const FORMATTERS_ID_ORIGIN_SUFFIX = 'formatters'; export const SOURCE_FORMATTERS_ID_ORIGIN = `${SOURCE_DATA_ID_ORIGIN}_${FORMATTERS_ID_ORIGIN_SUFFIX}`; -export const GEOJSON_FILE = 'GEOJSON_FILE'; - export const MIN_ZOOM = 0; export const MAX_ZOOM = 24; diff --git a/x-pack/plugins/maps/public/layers/blended_vector_layer.ts b/x-pack/plugins/maps/public/layers/blended_vector_layer.ts index 80bf0299380d9b..9a9ea2968ceebd 100644 --- a/x-pack/plugins/maps/public/layers/blended_vector_layer.ts +++ b/x-pack/plugins/maps/public/layers/blended_vector_layer.ts @@ -11,9 +11,9 @@ import { getDefaultDynamicProperties } from './styles/vector/vector_style_defaul import { IDynamicStyleProperty } from './styles/vector/properties/dynamic_style_property'; import { IStyleProperty } from './styles/vector/properties/style_property'; import { + SOURCE_TYPES, COUNT_PROP_LABEL, COUNT_PROP_NAME, - ES_GEO_GRID, LAYER_TYPE, AGG_TYPE, RENDER_AS, @@ -180,7 +180,11 @@ export class BlendedVectorLayer extends VectorLayer implements IVectorLayer { const sourceDataRequest = this.getSourceDataRequest(); if (sourceDataRequest) { const requestMeta = sourceDataRequest.getMeta(); - if (requestMeta && requestMeta.sourceType && requestMeta.sourceType === ES_GEO_GRID) { + if ( + requestMeta && + requestMeta.sourceType && + requestMeta.sourceType === SOURCE_TYPES.ES_GEO_GRID + ) { isClustered = true; } } diff --git a/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js b/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js index df11fe9f327709..137513ad7c6127 100644 --- a/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js +++ b/x-pack/plugins/maps/public/layers/sources/client_file_source/geojson_file_source.js @@ -8,7 +8,7 @@ import { AbstractVectorSource } from '../vector_source'; import React from 'react'; import { ES_GEO_FIELD_TYPE, - GEOJSON_FILE, + SOURCE_TYPES, DEFAULT_MAX_RESULT_WINDOW, SCALING_TYPES, } from '../../../../common/constants'; @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; import { registerSource } from '../source_registry'; export class GeojsonFileSource extends AbstractVectorSource { - static type = GEOJSON_FILE; + static type = SOURCE_TYPES.GEOJSON_FILE; static isIndexingSource = true; @@ -130,7 +130,7 @@ const previewGeojsonFile = (onPreviewSource, inspectorAdapters) => { registerSource({ ConstructorFunction: GeojsonFileSource, - type: GEOJSON_FILE, + type: SOURCE_TYPES.GEOJSON_FILE, }); export const uploadLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/ems_file_source/ems_file_source.js b/x-pack/plugins/maps/public/layers/sources/ems_file_source/ems_file_source.js index d3ccc0cb55821c..e8af17b9119391 100644 --- a/x-pack/plugins/maps/public/layers/sources/ems_file_source/ems_file_source.js +++ b/x-pack/plugins/maps/public/layers/sources/ems_file_source/ems_file_source.js @@ -7,7 +7,7 @@ import { AbstractVectorSource } from '../vector_source'; import { VECTOR_SHAPE_TYPES } from '../vector_feature_types'; import React from 'react'; -import { EMS_FILE, FIELD_ORIGIN } from '../../../../common/constants'; +import { SOURCE_TYPES, FIELD_ORIGIN } from '../../../../common/constants'; import { getEMSClient } from '../../../meta'; import { EMSFileCreateSourceEditor } from './create_source_editor'; import { i18n } from '@kbn/i18n'; @@ -21,7 +21,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.emsFileTitle', { }); export class EMSFileSource extends AbstractVectorSource { - static type = EMS_FILE; + static type = SOURCE_TYPES.EMS_FILE; static createDescriptor({ id, tooltipProperties = [] }) { return { @@ -159,7 +159,7 @@ export class EMSFileSource extends AbstractVectorSource { registerSource({ ConstructorFunction: EMSFileSource, - type: EMS_FILE, + type: SOURCE_TYPES.EMS_FILE, }); export const emsBoundariesLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/ems_tms_source/ems_tms_source.js b/x-pack/plugins/maps/public/layers/sources/ems_tms_source/ems_tms_source.js index 1da3680dfdc862..79121c4cdb31f6 100644 --- a/x-pack/plugins/maps/public/layers/sources/ems_tms_source/ems_tms_source.js +++ b/x-pack/plugins/maps/public/layers/sources/ems_tms_source/ems_tms_source.js @@ -14,7 +14,7 @@ import { TileServiceSelect } from './tile_service_select'; import { UpdateSourceEditor } from './update_source_editor'; import { i18n } from '@kbn/i18n'; import { getDataSourceLabel } from '../../../../common/i18n_getters'; -import { EMS_TMS } from '../../../../common/constants'; +import { SOURCE_TYPES } from '../../../../common/constants'; import { getInjectedVarFunc, getUiSettings } from '../../../kibana_services'; import { registerSource } from '../source_registry'; @@ -23,7 +23,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.emsTileTitle', { }); export class EMSTMSSource extends AbstractTMSSource { - static type = EMS_TMS; + static type = SOURCE_TYPES.EMS_TMS; static createDescriptor(sourceConfig) { return { @@ -148,7 +148,7 @@ export class EMSTMSSource extends AbstractTMSSource { registerSource({ ConstructorFunction: EMSTMSSource, - type: EMS_TMS, + type: SOURCE_TYPES.EMS_TMS, }); export const emsBaseMapLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.js b/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.js index 04f944396ab35b..b9ef13e520bf89 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.js +++ b/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.js @@ -17,8 +17,8 @@ import { COLOR_GRADIENTS } from '../../styles/color_utils'; import { CreateSourceEditor } from './create_source_editor'; import { UpdateSourceEditor } from './update_source_editor'; import { + SOURCE_TYPES, DEFAULT_MAX_BUCKETS_LIMIT, - ES_GEO_GRID, COUNT_PROP_NAME, COLOR_MAP_TYPE, RENDER_AS, @@ -45,7 +45,7 @@ const heatmapTitle = i18n.translate('xpack.maps.source.esGridHeatmapTitle', { }); export class ESGeoGridSource extends AbstractESAggSource { - static type = ES_GEO_GRID; + static type = SOURCE_TYPES.ES_GEO_GRID; static createDescriptor({ indexPatternId, geoField, requestType, resolution }) { return { @@ -311,7 +311,7 @@ export class ESGeoGridSource extends AbstractESAggSource { }, meta: { areResultsTrimmed: false, - sourceType: ES_GEO_GRID, + sourceType: SOURCE_TYPES.ES_GEO_GRID, }, }; } @@ -420,7 +420,7 @@ export class ESGeoGridSource extends AbstractESAggSource { registerSource({ ConstructorFunction: ESGeoGridSource, - type: ES_GEO_GRID, + type: SOURCE_TYPES.ES_GEO_GRID, }); export const clustersLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.test.ts b/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.test.ts index 727435c3cbfef1..e35bb998ce7dbe 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.test.ts +++ b/x-pack/plugins/maps/public/layers/sources/es_geo_grid_source/es_geo_grid_source.test.ts @@ -7,7 +7,7 @@ jest.mock('../../../kibana_services', () => {}); jest.mock('ui/new_platform'); import { ESGeoGridSource } from './es_geo_grid_source'; -import { ES_GEO_GRID, GRID_RESOLUTION, RENDER_AS } from '../../../../common/constants'; +import { GRID_RESOLUTION, RENDER_AS, SOURCE_TYPES } from '../../../../common/constants'; describe('ESGeoGridSource', () => { const geogridSource = new ESGeoGridSource( @@ -17,7 +17,7 @@ describe('ESGeoGridSource', () => { geoField: 'bar', metrics: [], resolution: GRID_RESOLUTION.COARSE, - type: ES_GEO_GRID, + type: SOURCE_TYPES.ES_GEO_GRID, requestType: RENDER_AS.HEATMAP, }, {} diff --git a/x-pack/plugins/maps/public/layers/sources/es_pew_pew_source/es_pew_pew_source.js b/x-pack/plugins/maps/public/layers/sources/es_pew_pew_source/es_pew_pew_source.js index ea3a2d2fe634d5..57e5afb99404b5 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_pew_pew_source/es_pew_pew_source.js +++ b/x-pack/plugins/maps/public/layers/sources/es_pew_pew_source/es_pew_pew_source.js @@ -16,7 +16,7 @@ import { getDefaultDynamicProperties } from '../../styles/vector/vector_style_de import { i18n } from '@kbn/i18n'; import { FIELD_ORIGIN, - ES_PEW_PEW, + SOURCE_TYPES, COUNT_PROP_NAME, VECTOR_STYLES, } from '../../../../common/constants'; @@ -35,7 +35,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.pewPewTitle', { }); export class ESPewPewSource extends AbstractESAggSource { - static type = ES_PEW_PEW; + static type = SOURCE_TYPES.ES_PEW_PEW; static createDescriptor({ indexPatternId, sourceGeoField, destGeoField }) { return { @@ -232,7 +232,7 @@ export class ESPewPewSource extends AbstractESAggSource { registerSource({ ConstructorFunction: ESPewPewSource, - type: ES_PEW_PEW, + type: SOURCE_TYPES.ES_PEW_PEW, }); export const point2PointLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.js b/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.js index ce9932bd15cea7..96679f0e859412 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.js +++ b/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.js @@ -17,7 +17,7 @@ import { hitsToGeoJson } from '../../../elasticsearch_geo_utils'; import { CreateSourceEditor } from './create_source_editor'; import { UpdateSourceEditor } from './update_source_editor'; import { - ES_SEARCH, + SOURCE_TYPES, ES_GEO_FIELD_TYPE, DEFAULT_MAX_BUCKETS_LIMIT, SORT_ORDER, @@ -69,7 +69,7 @@ function getDocValueAndSourceFields(indexPattern, fieldNames) { } export class ESSearchSource extends AbstractESSource { - static type = ES_SEARCH; + static type = SOURCE_TYPES.ES_SEARCH; constructor(descriptor, inspectorAdapters) { super( @@ -404,7 +404,7 @@ export class ESSearchSource extends AbstractESSource { return { data: featureCollection, - meta: { ...meta, sourceType: ES_SEARCH }, + meta: { ...meta, sourceType: SOURCE_TYPES.ES_SEARCH }, }; } @@ -570,7 +570,7 @@ export class ESSearchSource extends AbstractESSource { registerSource({ ConstructorFunction: ESSearchSource, - type: ES_SEARCH, + type: SOURCE_TYPES.ES_SEARCH, }); export const esDocumentsLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.test.ts b/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.test.ts index 2197e24aedb59a..66cc2ddd854041 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.test.ts +++ b/x-pack/plugins/maps/public/layers/sources/es_search_source/es_search_source.test.ts @@ -8,11 +8,11 @@ jest.mock('../../../kibana_services'); import { ESSearchSource } from './es_search_source'; import { VectorLayer } from '../../vector_layer'; -import { ES_SEARCH, SCALING_TYPES } from '../../../../common/constants'; +import { SCALING_TYPES, SOURCE_TYPES } from '../../../../common/constants'; import { ESSearchSourceDescriptor } from '../../../../common/descriptor_types'; const descriptor: ESSearchSourceDescriptor = { - type: ES_SEARCH, + type: SOURCE_TYPES.ES_SEARCH, id: '1234', indexPatternId: 'myIndexPattern', geoField: 'myLocation', diff --git a/x-pack/plugins/maps/public/layers/sources/kibana_regionmap_source/kibana_regionmap_source.js b/x-pack/plugins/maps/public/layers/sources/kibana_regionmap_source/kibana_regionmap_source.js index 7f4bcfa41f7c4e..be333f8ee85a43 100644 --- a/x-pack/plugins/maps/public/layers/sources/kibana_regionmap_source/kibana_regionmap_source.js +++ b/x-pack/plugins/maps/public/layers/sources/kibana_regionmap_source/kibana_regionmap_source.js @@ -10,7 +10,7 @@ import { CreateSourceEditor } from './create_source_editor'; import { getKibanaRegionList } from '../../../meta'; import { i18n } from '@kbn/i18n'; import { getDataSourceLabel } from '../../../../common/i18n_getters'; -import { FIELD_ORIGIN, REGIONMAP_FILE } from '../../../../common/constants'; +import { FIELD_ORIGIN, SOURCE_TYPES } from '../../../../common/constants'; import { KibanaRegionField } from '../../fields/kibana_region_field'; import { registerSource } from '../source_registry'; @@ -19,7 +19,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.kbnRegionMapTitle', { }); export class KibanaRegionmapSource extends AbstractVectorSource { - static type = REGIONMAP_FILE; + static type = SOURCE_TYPES.REGIONMAP_FILE; static createDescriptor({ name }) { return { @@ -99,7 +99,7 @@ export class KibanaRegionmapSource extends AbstractVectorSource { registerSource({ ConstructorFunction: KibanaRegionmapSource, - type: REGIONMAP_FILE, + type: SOURCE_TYPES.REGIONMAP_FILE, }); export const kibanaRegionMapLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/kibana_tilemap_source/kibana_tilemap_source.js b/x-pack/plugins/maps/public/layers/sources/kibana_tilemap_source/kibana_tilemap_source.js index b21bb6bdbbad45..bbb653eff32e24 100644 --- a/x-pack/plugins/maps/public/layers/sources/kibana_tilemap_source/kibana_tilemap_source.js +++ b/x-pack/plugins/maps/public/layers/sources/kibana_tilemap_source/kibana_tilemap_source.js @@ -11,7 +11,7 @@ import { getKibanaTileMap } from '../../../meta'; import { i18n } from '@kbn/i18n'; import { getDataSourceLabel } from '../../../../common/i18n_getters'; import _ from 'lodash'; -import { KIBANA_TILEMAP } from '../../../../common/constants'; +import { SOURCE_TYPES } from '../../../../common/constants'; import { registerSource } from '../source_registry'; const sourceTitle = i18n.translate('xpack.maps.source.kbnTMSTitle', { @@ -19,7 +19,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.kbnTMSTitle', { }); export class KibanaTilemapSource extends AbstractTMSSource { - static type = KIBANA_TILEMAP; + static type = SOURCE_TYPES.KIBANA_TILEMAP; static createDescriptor() { return { @@ -86,7 +86,7 @@ export class KibanaTilemapSource extends AbstractTMSSource { registerSource({ ConstructorFunction: KibanaTilemapSource, - type: KIBANA_TILEMAP, + type: SOURCE_TYPES.KIBANA_TILEMAP, }); export const kibanaBasemapLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/wms_source/wms_source.js b/x-pack/plugins/maps/public/layers/sources/wms_source/wms_source.js index 749560a2bb4b19..33f764784124e0 100644 --- a/x-pack/plugins/maps/public/layers/sources/wms_source/wms_source.js +++ b/x-pack/plugins/maps/public/layers/sources/wms_source/wms_source.js @@ -12,7 +12,7 @@ import { WMSCreateSourceEditor } from './wms_create_source_editor'; import { i18n } from '@kbn/i18n'; import { getDataSourceLabel, getUrlLabel } from '../../../../common/i18n_getters'; import { WmsClient } from './wms_client'; -import { WMS } from '../../../../common/constants'; +import { SOURCE_TYPES } from '../../../../common/constants'; import { registerSource } from '../source_registry'; const sourceTitle = i18n.translate('xpack.maps.source.wmsTitle', { @@ -20,7 +20,7 @@ const sourceTitle = i18n.translate('xpack.maps.source.wmsTitle', { }); export class WMSSource extends AbstractTMSSource { - static type = WMS; + static type = SOURCE_TYPES.WMS; static createDescriptor({ serviceUrl, layers, styles, attributionText, attributionUrl }) { return { @@ -92,7 +92,7 @@ export class WMSSource extends AbstractTMSSource { registerSource({ ConstructorFunction: WMSSource, - type: WMS, + type: SOURCE_TYPES.WMS, }); export const wmsLayerWizardConfig = { diff --git a/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.test.ts b/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.test.ts index 8a5cfb01e58215..4031a18bff7cb7 100644 --- a/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.test.ts +++ b/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.test.ts @@ -7,11 +7,11 @@ import { XYZTMSSource } from './xyz_tms_source'; import { ILayer } from '../../layer'; import { TileLayer } from '../../tile_layer'; -import { EMS_XYZ } from '../../../../common/constants'; +import { SOURCE_TYPES } from '../../../../common/constants'; import { XYZTMSSourceDescriptor } from '../../../../common/descriptor_types'; const descriptor: XYZTMSSourceDescriptor = { - type: EMS_XYZ, + type: SOURCE_TYPES.EMS_XYZ, urlTemplate: 'https://example.com/{x}/{y}/{z}.png', id: 'foobar', }; diff --git a/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.ts b/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.ts index dd96c315733162..8b64480f92961a 100644 --- a/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.ts +++ b/x-pack/plugins/maps/public/layers/sources/xyz_tms_source/xyz_tms_source.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { TileLayer } from '../../tile_layer'; import { getDataSourceLabel, getUrlLabel } from '../../../../common/i18n_getters'; -import { EMS_XYZ } from '../../../../common/constants'; +import { SOURCE_TYPES } from '../../../../common/constants'; import { registerSource } from '../source_registry'; import { AbstractTMSSource } from '../tms_source'; import { LayerDescriptor, XYZTMSSourceDescriptor } from '../../../../common/descriptor_types'; @@ -19,7 +19,7 @@ export const sourceTitle = i18n.translate('xpack.maps.source.ems_xyzTitle', { }); export class XYZTMSSource extends AbstractTMSSource { - static type = EMS_XYZ; + static type = SOURCE_TYPES.EMS_XYZ; readonly _descriptor: XYZTMSSourceDescriptor; @@ -83,5 +83,5 @@ export class XYZTMSSource extends AbstractTMSSource { registerSource({ ConstructorFunction: XYZTMSSource, - type: EMS_XYZ, + type: SOURCE_TYPES.EMS_XYZ, }); diff --git a/x-pack/plugins/maps/public/layers/tile_layer.test.ts b/x-pack/plugins/maps/public/layers/tile_layer.test.ts index 43465eac7f3ceb..f8c2fd9db60fa5 100644 --- a/x-pack/plugins/maps/public/layers/tile_layer.test.ts +++ b/x-pack/plugins/maps/public/layers/tile_layer.test.ts @@ -5,13 +5,13 @@ */ import { TileLayer } from './tile_layer'; -import { EMS_XYZ } from '../../common/constants'; +import { SOURCE_TYPES } from '../../common/constants'; import { XYZTMSSourceDescriptor } from '../../common/descriptor_types'; import { ITMSSource, AbstractTMSSource } from './sources/tms_source'; import { ILayer } from './layer'; const sourceDescriptor: XYZTMSSourceDescriptor = { - type: EMS_XYZ, + type: SOURCE_TYPES.EMS_XYZ, urlTemplate: 'https://example.com/{x}/{y}/{z}.png', id: 'foobar', }; From 9b25fe1ebdf03df51cde86a7f8c1dbf789e97877 Mon Sep 17 00:00:00 2001 From: Melori Arellano Date: Mon, 13 Apr 2020 13:57:50 -0600 Subject: [PATCH 22/65] [DOCS] Add ILM tutorial (#59502) * Add tutorial for ILM with filebeat * Change screenshots and add additional steps * Update screenshots, add numbered steps, and other minor edits * Incorporate feedback: update links, formatting, and minor edits * Move tip inline with list * Apply suggestions from code review Co-Authored-By: James Rodewig * Move TIP inline . . . again * Put TIP inline Co-authored-by: James Rodewig --- docs/images/tutorial-ilm-custom-policy.png | Bin 0 -> 482469 bytes .../tutorial-ilm-delete-phase-creation.png | Bin 0 -> 71022 bytes docs/images/tutorial-ilm-delete-rollover.png | Bin 0 -> 123735 bytes .../tutorial-ilm-hotphaserollover-default.png | Bin 0 -> 252951 bytes ...ilm-modify-default-warm-phase-rollover.png | Bin 0 -> 455134 bytes .../example-index-lifecycle-policy.asciidoc | 186 ++++++++++++++++-- 6 files changed, 171 insertions(+), 15 deletions(-) create mode 100644 docs/images/tutorial-ilm-custom-policy.png create mode 100644 docs/images/tutorial-ilm-delete-phase-creation.png create mode 100644 docs/images/tutorial-ilm-delete-rollover.png create mode 100644 docs/images/tutorial-ilm-hotphaserollover-default.png create mode 100644 docs/images/tutorial-ilm-modify-default-warm-phase-rollover.png diff --git a/docs/images/tutorial-ilm-custom-policy.png b/docs/images/tutorial-ilm-custom-policy.png new file mode 100644 index 0000000000000000000000000000000000000000..03b67829f605ca339df644110f9cf57838c58fb7 GIT binary patch literal 482469 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

Wj3VY2Cq%y z?80VQN8rQ{TFqkTe^&*5J21cXX@@G3D(?S>3RXPwdST{XX+g53>FG@(C{h zW@iG^`s;T_GX?knX4k!GXUfVi?+(`oT$9*1&?^Vt@przyeERzvQK!dsw>P!Q@j12L zKE2s?-)RZHz4A`0Cwim1%LY(3JY8zl-;%qrTgJV*Hs@Bct9+d=ayNwwv8@J9=(k;y zZO#`q^!*|JeE}!pQJkdzJ%0=tODoa6&8C;F_kjC^4?K?4y@-E zPv>=p;k```xU6g&$)tQUboSe(Scy zJ&A7Ini9Da+3uqSHPXIDHC+Wj7(bG{<~e$@x!Ig%GZas*eA^>!WJTKtkDqk1UYl1k z9P6uvxEz7DrN8?ESYv7a?q+CTIV@$49oyV=OSR9_2y#Nf+etc!)b=6Qq1Qr z2i8b8)wpHHT(y_CFN?{1TVOq>k8ty~lq^TK%Ye$dNaJ72R+>GDm>%~SvpHX*`88mn z^7j4kJ_lcfvxIZ5vK827%o%5`d(;1neLn>RPf%gZmPtFvxcgS!0+H?V2)zXsPph&+ zwS73?q07z-O$Y50SkJE@2C?({h?-u9MK(inPPGuikaEVErG9qpD4)_FT2do7o6nfd z06BT^AZRt{+WgA=8j5TLzBbQrz?oToiBu^&M|!UNqN+we*P>a*yg;hlu(A6 zZsO8SG33`~&_%{-z)fs?QtfeUkDNoS1r$Zrn(lSC!$sX>K$DU*WfDkEsUDQm-cLA< zn&453K@huyd1~6B*0%F(>DeCkiun*HWYM@h6R!9k!=< zx6A6DeRo2e-a5zV30pI$L|jU^GAP%dlXbHuK#ci3v0!MjZ`BCpr#t2J&{H zLCC}KKKf#9vu73dIo@Qxws9zD)IhSI?IRDOmwJ1iUNo|rE9?H+JiOZCSrVBq6?7KE zB!$H`9?pGBl^|YS9dcNl>@uB7$`44G)O0T=`Hi$gX`)Ra$Fxe^0EhymS$1TOLCZn# zo<-gxwDN}&i~P77=LPSD_xR4UZ{d25ICHX1s@P6+nS_`gixPPX(HvS*Yec`xlv|xI z=^ls`vnHyoRrTi0`{aqyQDv1K=Voryq={bCTXB%E0W6u>D=z=5ym|N3JBh8^beE3= z@}qQwJqQVt&!3J=+7g|74di3ML%u^z4pNJ(HP2kNTbfp>;FftmKv%5>gH6DrrseEP zE(~YQ29vc`hudAHo74dU;oXIOQ80i+fhQE`v3||-iTM1byNuzln!aogikxp{Tb?z- zxnC}SIG+8yY`&Z_KMBK)Dn6YjdoX=#D%+jdzNfL2A$V!byyq~}S9f&H2zf$bb*L$G zI*IIO#gKEZs@7RD$4n)u4D~R5r5%tZKJ`*z7S3$|Fa2B;ougdE7Z3S2(vhj5lAUUkR@SD7&1_sBb!lQnT;pvAco zo3X|Bz`7Wxm;l%2x6HG^^JT-OF)iX+^2jWJ%deEfw1#L-?060UiJFQ+S;Sb7`X_ss z#;E*52Sf84DoLccq_$DT@HaueCwR2^kNNS>Kg6X&LaKY1iPik|b&0I=XP<2Yw?blR zU5V6NCaI>Xsita^*1-uek@M^qt{Mg1pFykkxMB11+<5~;P+p6XC7`4Xk=fN*CvaJ@ zcz0Y0G5$*GKyyH-!EkMo&aiXt&2o_MtG6h~96(FUFHk~4tsx>;%$b-uoHk!s2%+5^ zx`G(3?a8IQGI7g3v!<0`fN;wOAIdC{a5$km=Qj*;h;1|O{Z#Z~p zI@=uuA?TwQC!bryhz1rW@Sdb$Wf|XZO*NxIo@%X1FV0nFqy17VO^6unrmnKAnx4oq zRAT|trC-ile$g;6tFU)ER3j8`gg}V_OaWYbUbPOoT}7qC@vN&xmRSz+fWjvaGh;1= z{DxwxO{|HsT`<=eNb?-)xtMbm8m4#?T%Ol-detzH=;(?z?yVlu13yyy(-uIWkI%W@ zPMrGUOwMAR54=S=FDfPz-t-s-Q01yC0I^{G*f-{D0=FmUr* z0;lFZ7cb@u4Ahf$b{1n6_UbG$vOR2MhvHWnyJ~wt@CHveU-atx(CpzEa8fUG5#~9f zh>dAMXaRN#F)!XXC5U(BqD=u^xNp%eZ@$Tsh*bmy`UV2BZ_|@oUWxupx?OIAF=O76 z?a=1nDo9r}1F%P`35iVTNZc^tF3lOj_YD2>W%M^&Gj3(jw`(AWi_Y_%>YCZ|N7hYo zk>jb!A_!7T+*!E|8|fHaB$zNr0v$KJVl;E646l)6&-S#_-5JBKdYaZ?K4IVrO;sgI2xzufb8l2{CQ zZ5M_DST);Fvb-GDddqw+p~z3yx8{~(R`snu1^1Z#0*gkF+w}XMyqIC;^gh~WkacT? zMl1eG3bG2DGunq}MpVHMWug*m=Tzo;7F#6etGi4`3(Nw0Bs3fH33rC#bso>%CfLMS zu4Mwo-Kc2|J{R{{-ntt<&OM&O8FDwOdEPf|JbZ62bq;}1nd^VLxaMH8sJU1>v^eqJ!+I{p99uH)^Au2?xU5BlK?}(o90OrU=6d8R zC#o>ytl@|gxG8;9ng3KT<&?YOs7aHrw35$io>s~p_iT4<#Qwg;$@ftZ+MV)f&B6p& zr~x3D;BHlX&;-|ut91G8Z+k_KwRn!Yy;@SMH>LkRKdu3FZr2Sz&i8r;4lZX~nFcRB z)A0LY>zbil&GRED1T zi0fa>BL%GmD$5EJOW$doaEDjosZ5o$;HX|8l_%s%Cy1S_fXC-zgoDha#e@f;JWGyfzxXV+bEBrLk=kT%3hN$OH&C3-@We`S0Nr4%GL}o{I-TQb_A*4L^ z3c{?Y1@jIgGJe1|h;cv#x#6AvOrxL>z2XVI;9pR>PZg2(Dpya*PJbLH-}JqfdBrXB zNWX7ouL9k7$OjCM47?oZwwl)Li77I1PZ1`US0WCT$0w9b^*hHWtN=n@#ysN-I6UrO zA~jJ%3IE@~ZI!P(-R5qZ`o}2mWd8D0ySbNEM1K!HZ+;3~(B~-kMt%=`@4mYz=6m3$ zQ#OlqwpI142=06RcSZR2{>N3?z{dD5{l8bfChflhY7o7d{w;9(J^kYo%WiwcFWs{x zfB90IOB$=U`xSS5Dyw@kweED?lCRg+`mPL~K7HS*nni2w-FjLY8C$;P+tS#(@iW~u zwKGrZXU>iP_WI+gx+%bWfcm3G@0XmVH~!X+L(Uo0-3SpV!`?Yws4%jlaJB z^)U-zgSjp??)mlKOZ{H%p6gb*yUtQC_w*cZVBxp)e$etQxyvtZTNgcj`{(0TG1pgr zzg>I0(6;VM@7iU&2qUU6I}SNU#O`S0rY2|w?Zz3<&zXE~c;!Suz;b+Of~kJSYDm6C6ZF@)Hi zklU^)0Umt$Ce?VbeNyQj|482S^@=Cdcm3UKe(v7i^88Tua~2Zejn5`N-j@H^YTH3j`!pe6T(ZFhzk*Z&@k#l ztr^VN;u+m_jdH+Y%&cm+lMDmn2Ff=n|_d{NV>>@VgxvvR^=lo48w? zB~EcO(7$y%xSnB)7L-5-8Mgp5!(n?U6YUZ>>^3cs2aQV}4mDuMQv9L^4)AC{&@u}_ zKdhVKF)a8CTv)q8eqEC#mQENVGGTst5eQ5I{ROkIjJ#k`OvEe*qGdXo%+X^KoXkg) zHget>P1@+$YzUX&qe*)-X``2U$hG)r(uP&LuuMPNAVIVjAbDrBL4sU{fN~S9+uft3 hHgbrQ*dX~(&mdo=t|Oq>_KE=rJYD@<);T3K0RTz-|2zNy literal 0 HcmV?d00001 diff --git a/docs/images/tutorial-ilm-modify-default-warm-phase-rollover.png b/docs/images/tutorial-ilm-modify-default-warm-phase-rollover.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f1e9b40e9777450420d36d1dbe5122466ea36f GIT binary patch literal 455134 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≤HxUyZFe%r=|9)j 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

Zy?<$S#a~QZiZ(-`)Ddt^i(@r#-kxn==YtvXz z6#e0J^NV?>fjZRdlF81`dBxIX)^7Q%qc#w1d~ReJ$G)Wcom-bPf%Y>-X6WWjr7ub9SO*Qrqk;Gr!rHx)U*mcJxIoVAmC3|OaElPhTXOQ1ESX;{r~^~ literal 0 HcmV?d00001 diff --git a/docs/management/index-lifecycle-policies/example-index-lifecycle-policy.asciidoc b/docs/management/index-lifecycle-policies/example-index-lifecycle-policy.asciidoc index f68708f1b6394b..e6d94e9ca61a33 100644 --- a/docs/management/index-lifecycle-policies/example-index-lifecycle-policy.asciidoc +++ b/docs/management/index-lifecycle-policies/example-index-lifecycle-policy.asciidoc @@ -1,23 +1,179 @@ [role="xpack"] + [[example-using-index-lifecycle-policy]] -=== Example of using an index lifecycle policy +=== Tutorial: Use {ilm-init} to manage {filebeat} time-based indices + +With {ilm} ({ilm-init}), you can create policies that perform actions automatically +on indices as they age and grow. {ilm-init} policies help you to manage +performance, resilience, and retention of your data during its lifecycle. This tutorial shows +you how to use {kib}’s *Index Lifecycle Policies* to modify and create {ilm-init} +policies. You can learn more about all of the actions, benefits, and lifecycle +phases in the {ref}/overview-index-lifecycle-management.html[{ilm-init} overview]. + + +[discrete] +[[example-using-index-lifecycle-policy-scenario]] +==== Scenario + +You’re tasked with sending syslog files to an {es} cluster. This +log data has the following data retention guidelines: + +* Keep logs on hot data nodes for 30 days +* Roll over to a new index if the size reaches 50GB +* After 30 days: +** Move the logs to warm data nodes +** Set {ref}/glossary.html#glossary-replica-shard[replica shards] to 1 +** {ref}/indices-forcemerge.html[Force merge] multiple index segments to free up the space used by deleted documents +* Delete logs after 90 days + + +[discrete] +[[example-using-index-lifecycle-policy-prerequisites]] +==== Prerequisites + +To complete this tutorial, you'll need: + +* An {es} cluster with hot and warm nodes configured for shard allocation +awareness. If you’re using {cloud}/ec-getting-started-templates-hot-warm.html[{ess}], +choose the hot-warm architecture deployment template. + ++ +For a self-managed cluster, add node attributes as described for {ref}/shard-allocation-filtering.html[shard allocation filtering] +to label data nodes as hot or warm. This step is required to migrate shards between +nodes configured with specific hardware for the hot or warm phases. ++ +For example, you can set this in your `elasticsearch.yml` for each data node: ++ +[source,yaml] +-------------------------------------------------------------------------------- +node.attr.data: "warm" +-------------------------------------------------------------------------------- + +* A server with {filebeat} installed and configured to send logs to the `elasticsearch` +output as described in {filebeat-ref}/filebeat-getting-started.html[Getting Started with {filebeat}]. + +[discrete] +[[example-using-index-lifecycle-policy-view-fb-ilm-policy]] +==== View the {filebeat} {ilm-init} policy + +{filebeat} includes a default {ilm-init} policy that enables rollover. {ilm-init} +is enabled automatically if you’re using the default `filebeat.yml` and index template. + +To view the default policy in {kib}, go to *Management > Index Lifecycle Policies*, +search for _filebeat_, and choose the _filebeat-version_ policy. + +This policy initiates the rollover action when the index size reaches 50GB or +becomes 30 days old. + +[role="screenshot"] +image::images/tutorial-ilm-hotphaserollover-default.png["Default policy"] + + +[float] +==== Modify the policy + +The default policy is enough to prevent the creation of many tiny daily indices. +You can modify the policy to meet more complex requirements. + +. Activate the warm phase. + ++ +. Set either of the following options to control when the index moves to the warm phase: + +** Provide a value for *Timing for warm phase*. Setting this to *15* keeps the +indices on hot nodes for a range of 15-45 days, depending on when the initial +rollover occurred. + +** Enable *Move to warm phase on rollover*. The index might move to the warm phase +more quickly than intended if it reaches the *Maximum index size* before the +the *Maximum age*. + +. In the *Select a node attribute to control shard allocation* dropdown, select +*data:warm(2)* to migrate shards to warm data nodes. + +. Change *Number of replicas* to *1*. + +. Enable *Force merge data* and set *Number of segments* to *1*. ++ +NOTE: When rollover is enabled in the hot phase, action timing in the other phases +is based on the rollover date. + ++ +[role="screenshot"] +image::images/tutorial-ilm-modify-default-warm-phase-rollover.png["Modify to add warm phase"] + +. Activate the delete phase and set *Timing for delete phase* to *90* days. ++ +[role="screenshot"] +image::images/tutorial-ilm-delete-rollover.png["Add a delete phase"] + +[float] +==== Create a custom policy + +If meeting a specific retention time period is most important, you can create a +custom policy. For this option, you will use {filebeat} daily indices without +rollover. + +. Create a custom policy in {kib}, go to *Management > Index Lifecycle Policies > +Create Policy*. + +. Activate the warm phase and configure it as follows: ++ +|=== +|*Setting* |*Value* + +|Timing for warm phase +|30 days from index creation + +|Node attribute +|`data:warm` + +|Number of replicas +|1 + +|Force merge data +|enable + +|Number of segments +|1 +|=== + ++ +[role="screenshot"] +image::images/tutorial-ilm-custom-policy.png["Modify the custom policy to add a warm phase"] + -A common use case for managing index lifecycle policies is when you’re using -{beats-ref}/beats-reference.html[Beats] to continually send time-series data, -such as metrics and log data, to {es}. When you create the Beats packages, an -index template is installed. The template includes a default policy to apply -when new indices are created. ++ +. Activate the delete phase and set the timing. ++ +|=== +|*Setting* |*Value* +|Timing for delete phase +|90 +|=== -You can edit the policy in {kib}'s *Index Lifecycle Policies*. For example, you might: ++ +[role="screenshot"] +image::images/tutorial-ilm-delete-phase-creation.png["Delete phase"] -* Rollover the index when it reaches 50 GB in size or is 30 days old. These -settings are the default for the Beats lifecycle policy. This avoids -having 1000s of tiny indices. When a rollover occurs, a new “hot” index is -created and added to the index alias. +. Configure the index to use the new policy in *{kib} > Management > Index Lifecycle +Policies* -* Move the index into the warm phase, shrink the index down to a single shard, -and force merge to a single segment. +.. Find your {ilm-init} policy. +.. Click the *Actions* link next to your policy name. +.. Choose *Add policy to index template*. +.. Select your {filebeat} index template name from the *Index template* list. For example, `filebeat-7.5.x`. +.. Click *Add Policy* to save the changes. -* After 60 days, move the index into the cold phase and onto less expensive hardware. ++ +NOTE: If you initially used the default {filebeat} {ilm-init} policy, you will +see a notice that the template already has a policy associated with it. Confirm +that you want to overwrite that configuration. -* Delete the index after 90 days. ++ ++ +TIP: When you change the policy associated with the index template, the active +index will continue to use the policy it was associated with at index creation +unless you manually update it. The next new index will use the updated policy. +For more reasons that your {ilm-init} policy changes might be delayed, see +{ref}/update-lifecycle-policy.html#update-lifecycle-policy[Update Lifecycle Policy]. From 25cedbe60c89173900be726a550c2c20c22577ca Mon Sep 17 00:00:00 2001 From: Corey Robertson Date: Mon, 13 Apr 2020 16:26:00 -0400 Subject: [PATCH 23/65] [Canvas] Migrate saved object mappings and migrations to Kibana Platform (#58891) * Move saved object mappings and migratins to kibana platform * Remove ts-ignore Co-authored-by: Elastic Machine --- x-pack/legacy/plugins/canvas/index.js | 4 -- .../legacy/plugins/canvas/migrations.test.js | 37 ------------------ x-pack/plugins/canvas/server/plugin.ts | 4 ++ .../server/saved_objects/custom_element.ts} | 27 ++++--------- .../canvas/server/saved_objects/index.ts} | 14 ++----- .../migrations/remove_attributes_id.test.ts | 39 +++++++++++++++++++ .../migrations/remove_attributes_id.ts | 14 +++++++ .../canvas/server/saved_objects/workpad.ts | 33 ++++++++++++++++ 8 files changed, 101 insertions(+), 71 deletions(-) delete mode 100644 x-pack/legacy/plugins/canvas/migrations.test.js rename x-pack/{legacy/plugins/canvas/server/mappings.ts => plugins/canvas/server/saved_objects/custom_element.ts} (56%) rename x-pack/{legacy/plugins/canvas/migrations.js => plugins/canvas/server/saved_objects/index.ts} (53%) create mode 100644 x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.test.ts create mode 100644 x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.ts create mode 100644 x-pack/plugins/canvas/server/saved_objects/workpad.ts diff --git a/x-pack/legacy/plugins/canvas/index.js b/x-pack/legacy/plugins/canvas/index.js index 489b9600f200ea..a1d4b35826b003 100644 --- a/x-pack/legacy/plugins/canvas/index.js +++ b/x-pack/legacy/plugins/canvas/index.js @@ -7,9 +7,7 @@ import { resolve } from 'path'; import { DEFAULT_APP_CATEGORIES } from '../../../../src/core/utils'; import { init } from './init'; -import { mappings } from './server/mappings'; import { CANVAS_APP, CANVAS_TYPE, CUSTOM_ELEMENT_TYPE } from './common/lib'; -import { migrations } from './migrations'; export function canvas(kibana) { return new kibana.Plugin({ @@ -33,8 +31,6 @@ export function canvas(kibana) { 'plugins/canvas/lib/window_error_handler.js', ], home: ['plugins/canvas/legacy_register_feature'], - mappings, - migrations, savedObjectsManagement: { [CANVAS_TYPE]: { icon: 'canvasApp', diff --git a/x-pack/legacy/plugins/canvas/migrations.test.js b/x-pack/legacy/plugins/canvas/migrations.test.js deleted file mode 100644 index 182ef3b18cce76..00000000000000 --- a/x-pack/legacy/plugins/canvas/migrations.test.js +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { migrations } from './migrations'; -import { CANVAS_TYPE } from './common/lib'; - -describe(`${CANVAS_TYPE}`, () => { - describe('7.0.0', () => { - const migrate = doc => migrations[CANVAS_TYPE]['7.0.0'](doc); - - it('does not throw error on empty object', () => { - const migratedDoc = migrate({}); - expect(migratedDoc).toMatchInlineSnapshot(`Object {}`); - }); - - it('removes id from "attributes"', () => { - const migratedDoc = migrate({ - foo: true, - attributes: { - id: '123', - bar: true, - }, - }); - expect(migratedDoc).toMatchInlineSnapshot(` -Object { - "attributes": Object { - "bar": true, - }, - "foo": true, -} -`); - }); - }); -}); diff --git a/x-pack/plugins/canvas/server/plugin.ts b/x-pack/plugins/canvas/server/plugin.ts index 0325de9cf29e2f..91a56347345597 100644 --- a/x-pack/plugins/canvas/server/plugin.ts +++ b/x-pack/plugins/canvas/server/plugin.ts @@ -14,6 +14,7 @@ import { initRoutes } from './routes'; import { registerCanvasUsageCollector } from './collectors'; import { loadSampleData } from './sample_data'; import { setupInterpreter } from './setup_interpreter'; +import { customElementType, workpadType } from './saved_objects'; interface PluginsSetup { expressions: ExpressionsServerSetup; @@ -29,6 +30,9 @@ export class CanvasPlugin implements Plugin { } public async setup(coreSetup: CoreSetup, plugins: PluginsSetup) { + coreSetup.savedObjects.registerType(customElementType); + coreSetup.savedObjects.registerType(workpadType); + plugins.features.registerFeature({ id: 'canvas', name: 'Canvas', diff --git a/x-pack/legacy/plugins/canvas/server/mappings.ts b/x-pack/plugins/canvas/server/saved_objects/custom_element.ts similarity index 56% rename from x-pack/legacy/plugins/canvas/server/mappings.ts rename to x-pack/plugins/canvas/server/saved_objects/custom_element.ts index bf2be51882b1a7..dadead0263be19 100644 --- a/x-pack/legacy/plugins/canvas/server/mappings.ts +++ b/x-pack/plugins/canvas/server/saved_objects/custom_element.ts @@ -4,26 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -// @ts-ignore converting /libs/constants to TS breaks CI -import { CANVAS_TYPE, CUSTOM_ELEMENT_TYPE } from '../common/lib/constants'; +import { SavedObjectsType } from 'src/core/server'; +import { CUSTOM_ELEMENT_TYPE } from '../../../../legacy/plugins/canvas/common/lib/constants'; -export const mappings = { - [CANVAS_TYPE]: { - dynamic: false, - properties: { - name: { - type: 'text', - fields: { - keyword: { - type: 'keyword', - }, - }, - }, - '@timestamp': { type: 'date' }, - '@created': { type: 'date' }, - }, - }, - [CUSTOM_ELEMENT_TYPE]: { +export const customElementType: SavedObjectsType = { + name: CUSTOM_ELEMENT_TYPE, + hidden: false, + namespaceAgnostic: false, + mappings: { dynamic: false, properties: { name: { @@ -41,4 +29,5 @@ export const mappings = { '@created': { type: 'date' }, }, }, + migrations: {}, }; diff --git a/x-pack/legacy/plugins/canvas/migrations.js b/x-pack/plugins/canvas/server/saved_objects/index.ts similarity index 53% rename from x-pack/legacy/plugins/canvas/migrations.js rename to x-pack/plugins/canvas/server/saved_objects/index.ts index d5b3d3fb1ce2a4..dd7e74b87e2f4c 100644 --- a/x-pack/legacy/plugins/canvas/migrations.js +++ b/x-pack/plugins/canvas/server/saved_objects/index.ts @@ -4,15 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CANVAS_TYPE } from './common/lib'; +import { workpadType } from './workpad'; +import { customElementType } from './custom_element'; -export const migrations = { - [CANVAS_TYPE]: { - '7.0.0': doc => { - if (doc.attributes) { - delete doc.attributes.id; - } - return doc; - }, - }, -}; +export { customElementType, workpadType }; diff --git a/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.test.ts b/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.test.ts new file mode 100644 index 00000000000000..a7112504e99804 --- /dev/null +++ b/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { removeAttributesId } from './remove_attributes_id'; + +const context: any = { + log: jest.fn(), +}; + +describe(`removeAttributesId`, () => { + it('does not throw error on empty object', () => { + const migratedDoc = removeAttributesId({} as any, context); + expect(migratedDoc).toMatchInlineSnapshot(`Object {}`); + }); + + it('removes id from "attributes"', () => { + const migratedDoc = removeAttributesId( + { + foo: true, + attributes: { + id: '123', + bar: true, + }, + } as any, + context + ); + expect(migratedDoc).toMatchInlineSnapshot(` +Object { + "attributes": Object { + "bar": true, + }, + "foo": true, +} +`); + }); +}); diff --git a/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.ts b/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.ts new file mode 100644 index 00000000000000..893a73d7b59130 --- /dev/null +++ b/x-pack/plugins/canvas/server/saved_objects/migrations/remove_attributes_id.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SavedObjectMigrationFn } from 'src/core/server'; + +export const removeAttributesId: SavedObjectMigrationFn = doc => { + if (typeof doc.attributes === 'object' && doc.attributes !== null) { + delete (doc.attributes as any).id; + } + return doc; +}; diff --git a/x-pack/plugins/canvas/server/saved_objects/workpad.ts b/x-pack/plugins/canvas/server/saved_objects/workpad.ts new file mode 100644 index 00000000000000..e83ba9720b43ad --- /dev/null +++ b/x-pack/plugins/canvas/server/saved_objects/workpad.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { SavedObjectsType } from 'src/core/server'; +import { CANVAS_TYPE } from '../../../../legacy/plugins/canvas/common/lib/constants'; +import { removeAttributesId } from './migrations/remove_attributes_id'; + +export const workpadType: SavedObjectsType = { + name: CANVAS_TYPE, + hidden: false, + namespaceAgnostic: false, + mappings: { + dynamic: false, + properties: { + name: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + }, + }, + }, + '@timestamp': { type: 'date' }, + '@created': { type: 'date' }, + }, + }, + migrations: { + '7.0.0': removeAttributesId, + }, +}; From 48fd5c025526e3aa6736ca1db2a1f757c90ea508 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Mon, 13 Apr 2020 16:26:45 -0400 Subject: [PATCH 24/65] [Endpoint] Policy list support for URL pagination state (#63291) * store changes to support pagination via url * Fix storing location when pagination happens * Initial set of tests * Redux spy middleware and async utility * Add better types to `waitForAction` * Add more docs * fix urlSearchParams selector to account for array of values * full set of tests for policy list store concerns * More efficient redux spy middleware (no more sleep()) * Set spy middleware `dispatch` to a `jest.fn` and expose `mock` info. * Fix url param selector to return first param value when it is defined multiple times * Removed PageId and associated hook * clean up TODO items * Fixes post-merge frm `master` * Address code review comments --- .../endpoint/store/policy_list/action.ts | 13 +- .../endpoint/store/policy_list/index.test.ts | 168 +++++++++++++++--- .../endpoint/store/policy_list/middleware.ts | 19 +- .../endpoint/store/policy_list/reducer.ts | 29 +-- .../endpoint/store/policy_list/selectors.ts | 50 +++++- .../store/policy_list/services/ingest.ts | 2 +- .../store/policy_list/test_mock_utils.ts | 151 ++++++++++++++++ .../endpoint/store/routing/action.ts | 14 +- .../public/applications/endpoint/types.ts | 10 ++ .../endpoint/view/policy/policy_list.tsx | 17 +- .../applications/endpoint/view/use_page_id.ts | 28 --- 11 files changed, 384 insertions(+), 117 deletions(-) create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts delete mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/view/use_page_id.ts diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/action.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/action.ts index 3f4f3f39e9be00..3db224f049c059 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/action.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/action.ts @@ -21,15 +21,4 @@ interface ServerFailedToReturnPolicyListData { payload: ServerApiError; } -interface UserPaginatedPolicyListTable { - type: 'userPaginatedPolicyListTable'; - payload: { - pageSize: number; - pageIndex: number; - }; -} - -export type PolicyListAction = - | ServerReturnedPolicyListData - | UserPaginatedPolicyListTable - | ServerFailedToReturnPolicyListData; +export type PolicyListAction = ServerReturnedPolicyListData | ServerFailedToReturnPolicyListData; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/index.test.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/index.test.ts index 0cf0eb8bfa3cdb..4d153b5e03cd24 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/index.test.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/index.test.ts @@ -4,71 +4,106 @@ * you may not use this file except in compliance with the Elastic License. */ -import { PolicyListState } from '../../types'; +import { EndpointAppLocation, PolicyListState } from '../../types'; import { applyMiddleware, createStore, Dispatch, Store } from 'redux'; import { AppAction } from '../action'; import { policyListReducer } from './reducer'; import { policyListMiddlewareFactory } from './middleware'; import { coreMock } from '../../../../../../../../src/core/public/mocks'; -import { CoreStart } from 'kibana/public'; -import { selectIsLoading } from './selectors'; +import { isOnPolicyListPage, selectIsLoading, urlSearchParams } from './selectors'; import { DepsStartMock, depsStartMock } from '../../mocks'; +import { + createSpyMiddleware, + MiddlewareActionSpyHelper, + setPolicyListApiMockImplementation, +} from './test_mock_utils'; +import { INGEST_API_DATASOURCES } from './services/ingest'; describe('policy list store concerns', () => { - const sleep = () => new Promise(resolve => setTimeout(resolve, 1000)); - let fakeCoreStart: jest.Mocked; + let fakeCoreStart: ReturnType; let depsStart: DepsStartMock; let store: Store; let getState: typeof store['getState']; let dispatch: Dispatch; + let waitForAction: MiddlewareActionSpyHelper['waitForAction']; beforeEach(() => { fakeCoreStart = coreMock.createStart({ basePath: '/mock' }); depsStart = depsStartMock(); + setPolicyListApiMockImplementation(fakeCoreStart.http); + let actionSpyMiddleware; + ({ actionSpyMiddleware, waitForAction } = createSpyMiddleware()); + store = createStore( policyListReducer, - applyMiddleware(policyListMiddlewareFactory(fakeCoreStart, depsStart)) + applyMiddleware(policyListMiddlewareFactory(fakeCoreStart, depsStart), actionSpyMiddleware) ); getState = store.getState; dispatch = store.dispatch; }); - // https://github.com/elastic/kibana/issues/58972 - test.skip('it sets `isLoading` when `userNavigatedToPage`', async () => { - expect(selectIsLoading(getState())).toBe(false); - dispatch({ type: 'userNavigatedToPage', payload: 'policyListPage' }); - expect(selectIsLoading(getState())).toBe(true); - await sleep(); - expect(selectIsLoading(getState())).toBe(false); + it('it does nothing on `userChangedUrl` if pathname is NOT `/policy`', async () => { + const state = getState(); + expect(isOnPolicyListPage(state)).toBe(false); + dispatch({ + type: 'userChangedUrl', + payload: { + pathname: '/foo', + search: '', + hash: '', + } as EndpointAppLocation, + }); + expect(getState()).toEqual(state); }); - // https://github.com/elastic/kibana/issues/58896 - test.skip('it sets `isLoading` when `userPaginatedPolicyListTable`', async () => { + it('it reports `isOnPolicyListPage` correctly when router pathname is `/policy`', async () => { + dispatch({ + type: 'userChangedUrl', + payload: { + pathname: '/policy', + search: '', + hash: '', + }, + }); + expect(isOnPolicyListPage(getState())).toBe(true); + }); + + it('it sets `isLoading` when `userChangedUrl`', async () => { expect(selectIsLoading(getState())).toBe(false); dispatch({ - type: 'userPaginatedPolicyListTable', + type: 'userChangedUrl', payload: { - pageSize: 10, - pageIndex: 1, + pathname: '/policy', + search: '', + hash: '', }, }); expect(selectIsLoading(getState())).toBe(true); - await sleep(); + await waitForAction('serverReturnedPolicyListData'); expect(selectIsLoading(getState())).toBe(false); }); - test('it resets state on `userNavigatedFromPage` action', async () => { + it('it resets state on `userChangedUrl` and pathname is NOT `/policy`', async () => { + dispatch({ + type: 'userChangedUrl', + payload: { + pathname: '/policy', + search: '', + hash: '', + }, + }); + await waitForAction('serverReturnedPolicyListData'); dispatch({ - type: 'serverReturnedPolicyListData', + type: 'userChangedUrl', payload: { - policyItems: [], - pageIndex: 20, - pageSize: 50, - total: 200, + pathname: '/foo', + search: '', + hash: '', }, }); - dispatch({ type: 'userNavigatedFromPage', payload: 'policyListPage' }); expect(getState()).toEqual({ + apiError: undefined, + location: undefined, policyItems: [], isLoading: false, pageIndex: 0, @@ -76,4 +111,85 @@ describe('policy list store concerns', () => { total: 0, }); }); + it('uses default pagination params when not included in url', async () => { + dispatch({ + type: 'userChangedUrl', + payload: { + pathname: '/policy', + search: '', + hash: '', + }, + }); + await waitForAction('serverReturnedPolicyListData'); + expect(fakeCoreStart.http.get).toHaveBeenCalledWith(INGEST_API_DATASOURCES, { + query: { kuery: 'datasources.package.name: endpoint', page: 1, perPage: 10 }, + }); + }); + + describe('when url contains search params', () => { + const dispatchUserChangedUrl = (searchParams: string = '') => + dispatch({ + type: 'userChangedUrl', + payload: { + pathname: '/policy', + search: searchParams, + hash: '', + }, + }); + + it('uses pagination params from url', async () => { + dispatchUserChangedUrl('?page_size=50&page_index=0'); + await waitForAction('serverReturnedPolicyListData'); + expect(fakeCoreStart.http.get).toHaveBeenCalledWith(INGEST_API_DATASOURCES, { + query: { kuery: 'datasources.package.name: endpoint', page: 1, perPage: 50 }, + }); + }); + it('uses defaults for params not in url', async () => { + dispatchUserChangedUrl('?page_index=99'); + expect(urlSearchParams(getState())).toEqual({ + page_index: 99, + page_size: 10, + }); + dispatchUserChangedUrl('?page_size=50'); + expect(urlSearchParams(getState())).toEqual({ + page_index: 0, + page_size: 50, + }); + }); + it('accepts only positive numbers for page_index and page_size', async () => { + dispatchUserChangedUrl('?page_size=-50&page_index=-99'); + await waitForAction('serverReturnedPolicyListData'); + expect(fakeCoreStart.http.get).toHaveBeenCalledWith(INGEST_API_DATASOURCES, { + query: { kuery: 'datasources.package.name: endpoint', page: 1, perPage: 10 }, + }); + }); + it('it ignores non-numeric values for page_index and page_size', async () => { + dispatchUserChangedUrl('?page_size=fifty&page_index=ten'); + await waitForAction('serverReturnedPolicyListData'); + expect(fakeCoreStart.http.get).toHaveBeenCalledWith(INGEST_API_DATASOURCES, { + query: { kuery: 'datasources.package.name: endpoint', page: 1, perPage: 10 }, + }); + }); + it('accepts only known values for `page_size`', async () => { + dispatchUserChangedUrl('?page_size=300&page_index=10'); + await waitForAction('serverReturnedPolicyListData'); + expect(fakeCoreStart.http.get).toHaveBeenCalledWith(INGEST_API_DATASOURCES, { + query: { kuery: 'datasources.package.name: endpoint', page: 11, perPage: 10 }, + }); + }); + it(`ignores unknown url search params`, async () => { + dispatchUserChangedUrl('?page_size=20&page_index=10&foo=bar'); + expect(urlSearchParams(getState())).toEqual({ + page_index: 10, + page_size: 20, + }); + }); + it(`uses last param value if param is defined multiple times`, async () => { + dispatchUserChangedUrl('?page_size=20&page_size=50&page_index=20&page_index=40'); + expect(urlSearchParams(getState())).toEqual({ + page_index: 20, + page_size: 20, + }); + }); + }); }); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/middleware.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/middleware.ts index adc176740fb4b3..c073d26a676f08 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/middleware.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/middleware.ts @@ -6,6 +6,7 @@ import { MiddlewareFactory, PolicyListState, GetDatasourcesResponse } from '../../types'; import { sendGetEndpointSpecificDatasources } from './services/ingest'; +import { isOnPolicyListPage, urlSearchParams } from './selectors'; export const policyListMiddlewareFactory: MiddlewareFactory = coreStart => { const http = coreStart.http; @@ -13,22 +14,10 @@ export const policyListMiddlewareFactory: MiddlewareFactory = c return ({ getState, dispatch }) => next => async action => { next(action); - if ( - (action.type === 'userNavigatedToPage' && action.payload === 'policyListPage') || - action.type === 'userPaginatedPolicyListTable' - ) { - const state = getState(); - let pageSize: number; - let pageIndex: number; - - if (action.type === 'userPaginatedPolicyListTable') { - pageSize = action.payload.pageSize; - pageIndex = action.payload.pageIndex; - } else { - pageSize = state.pageSize; - pageIndex = state.pageIndex; - } + const state = getState(); + if (action.type === 'userChangedUrl' && isOnPolicyListPage(state)) { + const { page_index: pageIndex, page_size: pageSize } = urlSearchParams(state); let response: GetDatasourcesResponse; try { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/reducer.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/reducer.ts index b964f4f0238669..30c1deac7f5e18 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/reducer.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/reducer.ts @@ -7,6 +7,7 @@ import { Reducer } from 'redux'; import { PolicyListState } from '../../types'; import { AppAction } from '../action'; +import { isOnPolicyListPage } from './selectors'; const initialPolicyListState = (): PolicyListState => { return { @@ -16,6 +17,7 @@ const initialPolicyListState = (): PolicyListState => { pageIndex: 0, pageSize: 10, total: 0, + location: undefined, }; }; @@ -39,19 +41,26 @@ export const policyListReducer: Reducer = ( }; } - if ( - action.type === 'userPaginatedPolicyListTable' || - (action.type === 'userNavigatedToPage' && action.payload === 'policyListPage') - ) { - return { + if (action.type === 'userChangedUrl') { + const newState = { ...state, - apiError: undefined, - isLoading: true, + location: action.payload, }; - } + const isCurrentlyOnListPage = isOnPolicyListPage(newState); + const wasPreviouslyOnListPage = isOnPolicyListPage(state); - if (action.type === 'userNavigatedFromPage' && action.payload === 'policyListPage') { - return initialPolicyListState(); + // If on the current page, then return new state with location information + // Also adjust some state if user is just entering the policy list view + if (isCurrentlyOnListPage) { + if (!wasPreviouslyOnListPage) { + newState.apiError = undefined; + newState.isLoading = true; + } + return newState; + } + return { + ...initialPolicyListState(), + }; } return state; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/selectors.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/selectors.ts index 7ca25e81ce75a5..ce13d89b2b8c27 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/selectors.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/selectors.ts @@ -4,7 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ -import { PolicyListState } from '../../types'; +import { createSelector } from 'reselect'; +import { parse } from 'query-string'; +import { PolicyListState, PolicyListUrlSearchParams } from '../../types'; + +const PAGE_SIZES = Object.freeze([10, 20, 50]); export const selectPolicyItems = (state: PolicyListState) => state.policyItems; @@ -17,3 +21,47 @@ export const selectTotal = (state: PolicyListState) => state.total; export const selectIsLoading = (state: PolicyListState) => state.isLoading; export const selectApiError = (state: PolicyListState) => state.apiError; + +export const isOnPolicyListPage = (state: PolicyListState) => { + return state.location?.pathname === '/policy'; +}; + +const routeLocation = (state: PolicyListState) => state.location; + +/** + * Returns the supported URL search params, populated with defaults if none where present in the URL + */ +export const urlSearchParams: ( + state: PolicyListState +) => PolicyListUrlSearchParams = createSelector(routeLocation, location => { + const searchParams = { + page_index: 0, + page_size: 10, + }; + if (!location) { + return searchParams; + } + + const query = parse(location.search); + + // Search params can appear multiple times in the URL, in which case the value for them, + // once parsed, would be an array. In these case, we take the first value defined + searchParams.page_index = Number( + (Array.isArray(query.page_index) ? query.page_index[0] : query.page_index) ?? 0 + ); + searchParams.page_size = Number( + (Array.isArray(query.page_size) ? query.page_size[0] : query.page_size) ?? 10 + ); + + // If pageIndex is not a valid positive integer, set it to 0 + if (!Number.isFinite(searchParams.page_index) || searchParams.page_index < 0) { + searchParams.page_index = 0; + } + + // if pageSize is not one of the expected page sizes, reset it to 10 + if (!PAGE_SIZES.includes(searchParams.page_size)) { + searchParams.page_size = 10; + } + + return searchParams; +}); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts index 16c885f26f0a42..bfbb5f94e8950f 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts @@ -17,7 +17,7 @@ import { } from '../../../types'; const INGEST_API_ROOT = `/api/ingest_manager`; -const INGEST_API_DATASOURCES = `${INGEST_API_ROOT}/datasources`; +export const INGEST_API_DATASOURCES = `${INGEST_API_ROOT}/datasources`; const INGEST_API_FLEET = `${INGEST_API_ROOT}/fleet`; const INGEST_API_FLEET_AGENT_STATUS = `${INGEST_API_FLEET}/agent-status`; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts new file mode 100644 index 00000000000000..0d41ae0d76da4d --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { HttpStart } from 'kibana/public'; +import { Dispatch } from 'redux'; +import { INGEST_API_DATASOURCES } from './services/ingest'; +import { EndpointDocGenerator } from '../../../../../common/generate_data'; +import { AppAction, GetDatasourcesResponse, GlobalState, MiddlewareFactory } from '../../types'; + +const generator = new EndpointDocGenerator('policy-list'); + +/** + * It sets the mock implementation on the necessary http methods to support the policy list view + * @param mockedHttpService + * @param responseItems + */ +export const setPolicyListApiMockImplementation = ( + mockedHttpService: jest.Mocked, + responseItems: GetDatasourcesResponse['items'] = [generator.generatePolicyDatasource()] +): void => { + mockedHttpService.get.mockImplementation((...args) => { + const [path] = args; + if (typeof path === 'string') { + if (path === INGEST_API_DATASOURCES) { + return Promise.resolve({ + items: responseItems, + total: 10, + page: 1, + perPage: 10, + success: true, + }); + } + } + return Promise.reject(new Error(`MOCK: unknown policy list api: ${path}`)); + }); +}; + +/** + * Utilities for testing Redux middleware + */ +export interface MiddlewareActionSpyHelper { + /** + * Returns a promise that is fulfilled when the given action is dispatched or a timeout occurs. + * The use of this method instead of a `sleep()` type of delay should avoid test case instability + * especially when run in a CI environment. + * + * @param actionType + */ + waitForAction: (actionType: AppAction['type']) => Promise; + /** + * A property holding the information around the calls that were processed by the internal + * `actionSpyMiddlware`. This property holds the information typically found in Jets's mocked + * function `mock` property - [see here for more information](https://jestjs.io/docs/en/mock-functions#mock-property) + * + * **Note**: this property will only be set **after* the `actionSpyMiddlware` has been + * initialized (ex. via `createStore()`. Attempting to reference this property before that time + * will throw an error. + * Also - do not hold on to references to this property value if `jest.clearAllMocks()` or + * `jest.resetAllMocks()` is called between usages of the value. + */ + dispatchSpy: jest.Mock>['mock']; + /** + * Redux middleware that enables spying on the action that are dispatched through the store + */ + actionSpyMiddleware: ReturnType>; +} + +/** + * Creates a new instance of middleware action helpers + * Note: in most cases (testing concern specific middleware) this function should be given + * the state type definition, else, the global state will be used. + * + * @example + * // Use in Policy List middleware testing + * const middlewareSpyUtils = createSpyMiddleware(); + * store = createStore( + * policyListReducer, + * applyMiddleware( + * policyListMiddlewareFactory(fakeCoreStart, depsStart), + * middlewareSpyUtils.actionSpyMiddleware + * ) + * ); + * // Reference `dispatchSpy` ONLY after creating the store that includes `actionSpyMiddleware` + * const { waitForAction, dispatchSpy } = middlewareSpyUtils; + * // + * // later in test + * // + * it('...', async () => { + * //... + * await waitForAction('serverReturnedPolicyListData'); + * // do assertions + * // or check how action was called + * expect(dispatchSpy.calls.length).toBe(2) + * }); + */ +export const createSpyMiddleware = (): MiddlewareActionSpyHelper => { + type ActionWatcher = (action: AppAction) => void; + + const watchers = new Set(); + let spyDispatch: jest.Mock>; + + return { + waitForAction: async (actionType: string) => { + // Error is defined here so that we get a better stack trace that points to the test from where it was used + const err = new Error(`action '${actionType}' was not dispatched within the allocated time`); + + await new Promise((resolve, reject) => { + const watch: ActionWatcher = action => { + if (action.type === actionType) { + watchers.delete(watch); + clearTimeout(timeout); + resolve(); + } + }; + + // We timeout before jest's default 5s, so that a better error stack is returned + const timeout = setTimeout(() => { + watchers.delete(watch); + reject(err); + }, 4500); + watchers.add(watch); + }); + }, + + get dispatchSpy() { + if (!spyDispatch) { + throw new Error( + 'Spy Middleware has not been initialized. Access this property only after using `actionSpyMiddleware` in a redux store' + ); + } + return spyDispatch.mock; + }, + + actionSpyMiddleware: api => { + return next => { + spyDispatch = jest.fn(action => { + next(action); + // loop through the list of watcher (if any) and call them with this action + for (const watch of watchers) { + watch(action); + } + return action; + }); + return spyDispatch; + }; + }, + }; +}; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/routing/action.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/routing/action.ts index f22272bc682332..fd72a02b33588c 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/routing/action.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/routing/action.ts @@ -5,21 +5,11 @@ */ import { Immutable } from '../../../../../common/types'; -import { EndpointAppLocation, PageId } from '../../types'; - -interface UserNavigatedToPage { - readonly type: 'userNavigatedToPage'; - readonly payload: PageId; -} - -interface UserNavigatedFromPage { - readonly type: 'userNavigatedFromPage'; - readonly payload: PageId; -} +import { EndpointAppLocation } from '../../types'; interface UserChangedUrl { readonly type: 'userChangedUrl'; readonly payload: Immutable; } -export type RoutingAction = UserNavigatedToPage | UserNavigatedFromPage | UserChangedUrl; +export type RoutingAction = UserChangedUrl; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts index f9ad8f6708f6b8..a625c49bf7d5ab 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts @@ -95,6 +95,8 @@ export interface PolicyListState { pageIndex: number; /** data is being retrieved from server */ isLoading: boolean; + /** current location information */ + location?: Immutable; } /** @@ -117,6 +119,14 @@ export interface PolicyDetailsState { }; } +/** + * The URL search params that are supported by the Policy List page view + */ +export interface PolicyListUrlSearchParams { + page_index: number; + page_size: number; +} + /** * Endpoint Policy configuration */ diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_list.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_list.tsx index 06ba74aa467327..295312fff01dd0 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_list.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_list.tsx @@ -9,8 +9,7 @@ import { EuiBasicTable, EuiText, EuiTableFieldDataColumnType, EuiLink } from '@e import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { useDispatch } from 'react-redux'; -import { useHistory } from 'react-router-dom'; -import { usePageId } from '../use_page_id'; +import { useHistory, useLocation } from 'react-router-dom'; import { selectApiError, selectIsLoading, @@ -50,9 +49,9 @@ const renderPolicyNameLink = (value: string, _item: PolicyData) => { }; export const PolicyList = React.memo(() => { - usePageId('policyListPage'); - const { services, notifications } = useKibana(); + const history = useHistory(); + const location = useLocation(); const dispatch = useDispatch<(action: PolicyListAction) => void>(); const policyItems = usePolicyListSelector(selectPolicyItems); @@ -84,15 +83,9 @@ export const PolicyList = React.memo(() => { const handleTableChange = useCallback( ({ page: { index, size } }: TableChangeCallbackArguments) => { - dispatch({ - type: 'userPaginatedPolicyListTable', - payload: { - pageIndex: index, - pageSize: size, - }, - }); + history.push(`${location.pathname}?page_index=${index}&page_size=${size}`); }, - [dispatch] + [history, location.pathname] ); const columns: Array> = useMemo( diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/use_page_id.ts b/x-pack/plugins/endpoint/public/applications/endpoint/view/use_page_id.ts deleted file mode 100644 index 85ed8a39fb386f..00000000000000 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/use_page_id.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { useEffect } from 'react'; -import { useDispatch } from 'react-redux'; -import { RoutingAction } from '../store/routing'; -import { PageId } from '../types'; - -/** - * Dispatches a 'userNavigatedToPage' action with the given 'pageId' as the action payload. - * When the component is un-mounted, a `userNavigatedFromPage` action will be dispatched - * with the given `pageId`. - * - * @param pageId A page id - */ -export function usePageId(pageId: PageId) { - const dispatch: (action: RoutingAction) => unknown = useDispatch(); - useEffect(() => { - dispatch({ type: 'userNavigatedToPage', payload: pageId }); - - return () => { - dispatch({ type: 'userNavigatedFromPage', payload: pageId }); - }; - }, [dispatch, pageId]); -} From 0666dbd35fe3ad8e8cd8824c23ed66c7465c8a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Mon, 13 Apr 2020 16:29:48 -0400 Subject: [PATCH 25/65] Fix task manager query to return tasks to retry (#63360) * Fix task manager query to also return tasks to retry * Fix failing jest tests --- .../server/queries/mark_available_tasks_as_claimed.ts | 7 ++++--- x-pack/plugins/task_manager/server/task_store.test.ts | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/task_manager/server/queries/mark_available_tasks_as_claimed.ts b/x-pack/plugins/task_manager/server/queries/mark_available_tasks_as_claimed.ts index b0d9dc61c96675..8f7cc47f936b2b 100644 --- a/x-pack/plugins/task_manager/server/queries/mark_available_tasks_as_claimed.ts +++ b/x-pack/plugins/task_manager/server/queries/mark_available_tasks_as_claimed.ts @@ -11,7 +11,7 @@ import { RangeFilter, mustBeAllOf, MustCondition, - MustNotCondition, + BoolClauseWithAnyCondition, } from './query_clauses'; export const TaskWithSchedule: ExistsFilter = { @@ -54,15 +54,16 @@ export const IdleTaskWithExpiredRunAt: MustCondition = }, }; -export const InactiveTasks: MustNotCondition = { +// TODO: Fix query clauses to support this +export const InactiveTasks: BoolClauseWithAnyCondition = { bool: { must_not: [ { bool: { should: [{ term: { 'task.status': 'running' } }, { term: { 'task.status': 'claiming' } }], + must: { range: { 'task.retryAt': { gt: 'now' } } }, }, }, - { range: { 'task.retryAt': { gt: 'now' } } }, ], }, }; diff --git a/x-pack/plugins/task_manager/server/task_store.test.ts b/x-pack/plugins/task_manager/server/task_store.test.ts index 97794311fb3d25..4ecefcb7984eb4 100644 --- a/x-pack/plugins/task_manager/server/task_store.test.ts +++ b/x-pack/plugins/task_manager/server/task_store.test.ts @@ -407,9 +407,9 @@ describe('TaskStore', () => { { term: { 'task.status': 'running' } }, { term: { 'task.status': 'claiming' } }, ], + must: { range: { 'task.retryAt': { gt: 'now' } } }, }, }, - { range: { 'task.retryAt': { gt: 'now' } } }, ], }, }, @@ -553,9 +553,9 @@ describe('TaskStore', () => { { term: { 'task.status': 'running' } }, { term: { 'task.status': 'claiming' } }, ], + must: { range: { 'task.retryAt': { gt: 'now' } } }, }, }, - { range: { 'task.retryAt': { gt: 'now' } } }, ], }, }, From 6f46e6b827ce5c35e7195bb32bf0bc6361686189 Mon Sep 17 00:00:00 2001 From: Aaron Caldwell Date: Mon, 13 Apr 2020 14:32:32 -0600 Subject: [PATCH 26/65] Migrate legacy maps service to NP & update refs (#60942) * Get legacy maps into basic NP plugin form. Swap out legacy services for NP * Pull service settings from injected vars. Return new instance of service settings from setup * Use NP service settings in vega maps. Clean up legacy shim * Use NP maps service in region maps. Clean up shim. Add exports to NP service * Pull zoom precision out to separate module since it's dependent on config * Update paths to point to NP resources * More path updates, clean up, use IServiceSettings * Remove dependency on legacy service settings. Add tile_map dependency ng-sanitize * More path cleanup. Use zoomPrecision provided through plugin inteface * Move getPrecision into contract-provided function since it depends on config * Move tests to new service location, remove vis dir * Update test paths. Move origin const declaration into public * Clean up, fixes * Fix type errors. General cleaning * Inject toast service into map when needed * Fix typo in regionmap config * i18n fixes * Update jest test path * Fix karma tests * i18n fixes * Type updates. Add mapsLegacy to np karma mock * Remove html sanitizer * Fix vega test that depends on serviceSettings * Revise xpack license handling to use NP serviceSettings. Remove angular bindings Co-authored-by: Elastic Machine --- .i18nrc.json | 1 + .../core_plugins/kibana/public/index.scss | 2 +- .../__tests__/region_map_visualization.js | 48 +++- .../region_map/public/choropleth_layer.js | 4 +- .../public/components/region_map_options.tsx | 9 +- .../core_plugins/region_map/public/legacy.ts | 9 +- .../core_plugins/region_map/public/plugin.ts | 10 +- .../public/region_map_visualization.js | 12 +- .../public/shim/legacy_dependencies_plugin.ts | 11 - .../core_plugins/region_map/public/types.ts | 2 +- .../core_plugins/region_map/public/util.ts | 2 +- .../coordinate_maps_visualization.js | 55 +++- .../public/__tests__/geohash_layer.js | 2 +- .../public/base_maps_visualization.js | 12 +- .../public/components/wms_options.tsx | 3 +- .../tile_map/public/geohash_layer.js | 3 +- .../core_plugins/tile_map/public/legacy.ts | 1 + .../tile_map/public/markers/scaled_circles.js | 3 +- .../core_plugins/tile_map/public/plugin.ts | 13 +- .../public/shim/legacy_dependencies_plugin.ts | 9 +- .../tile_map/public/tile_map_fn.js | 2 +- .../tile_map/public/tile_map_type.js | 4 +- .../tile_map/public/tile_map_visualization.js | 21 +- .../tile_map/public/tilemap_fn.test.js | 4 +- .../core_plugins/tile_map/public/types.ts | 2 +- .../public/shim/timelion_legacy_module.ts | 1 - .../public/__tests__/vega_visualization.js | 33 ++- .../vis_type_vega/public/legacy.ts | 6 +- .../vis_type_vega/public/plugin.ts | 11 +- .../public/shim/legacy_dependencies_plugin.ts | 49 ---- .../public/vega_view/vega_map_layer.js | 2 +- .../public/vega_view/vega_map_view.js | 27 +- .../public/vega_visualization.js | 3 +- .../new_platform/new_platform.karma_mock.js | 6 + .../ui/public/new_platform/new_platform.ts | 2 + .../ui/public/vis/map/service_settings.js | 256 ------------------ src/plugins/maps_legacy/kibana.json | 6 + .../__tests__/map/ems_mocks/sample_files.json | 0 .../map/ems_mocks/sample_manifest.json | 0 .../map/ems_mocks/sample_style_bright.json | 0 .../ems_mocks/sample_style_bright_vector.json | 0 .../sample_style_bright_vector_source.json | 0 .../map/ems_mocks/sample_style_dark.json | 0 .../ems_mocks/sample_style_desaturated.json | 0 .../__tests__/map/ems_mocks/sample_tiles.json | 0 .../public}/__tests__/map/kibana_map.js | 0 .../public}/__tests__/map/service_settings.js | 2 +- .../maps_legacy/public}/_index.scss | 0 .../maps_legacy/public/common/origin.ts} | 5 +- src/plugins/maps_legacy/public/index.ts | 61 +++++ .../maps_legacy/public/kibana_services.js} | 15 +- .../maps_legacy/public}/map/_index.scss | 0 .../public}/map/_leaflet_overrides.scss | 0 .../maps_legacy/public}/map/_legend.scss | 0 .../maps_legacy/public}/map/color_util.js | 0 .../public}/map/convert_to_geojson.js | 0 .../public}/map/decode_geo_hash.test.ts | 0 .../public}/map/decode_geo_hash.ts | 52 +--- .../public}/map/grid_dimensions.js | 0 .../maps_legacy/public}/map/kibana_map.js | 27 +- .../public}/map/kibana_map_layer.js | 0 .../maps_legacy/public}/map/map_messages.js | 9 +- .../maps_legacy/public/map/precision.ts | 74 +++++ .../public}/map/service_settings.d.ts | 2 +- .../public/map/service_settings.js | 254 +++++++++++++++++ .../public}/map/zoom_to_precision.ts | 0 src/plugins/maps_legacy/public/plugin.ts | 57 ++++ .../update_tilemap_settings.js | 17 +- .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 70 files changed, 733 insertions(+), 492 deletions(-) delete mode 100644 src/legacy/core_plugins/vis_type_vega/public/shim/legacy_dependencies_plugin.ts delete mode 100644 src/legacy/ui/public/vis/map/service_settings.js create mode 100644 src/plugins/maps_legacy/kibana.json rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_files.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_manifest.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_style_bright.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_style_bright_vector.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_style_bright_vector_source.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_style_dark.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_style_desaturated.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/ems_mocks/sample_tiles.json (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/kibana_map.js (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/__tests__/map/service_settings.js (99%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/_index.scss (100%) rename src/{legacy/core_plugins/vis_type_vega/public/shim/index.ts => plugins/maps_legacy/public/common/origin.ts} (90%) create mode 100644 src/plugins/maps_legacy/public/index.ts rename src/{legacy/core_plugins/vis_type_vega/public/legacy_imports.ts => plugins/maps_legacy/public/kibana_services.js} (64%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/_index.scss (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/_leaflet_overrides.scss (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/_legend.scss (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/color_util.js (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/convert_to_geojson.js (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/decode_geo_hash.test.ts (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/decode_geo_hash.ts (79%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/grid_dimensions.js (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/kibana_map.js (96%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/kibana_map_layer.js (100%) rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/map_messages.js (93%) create mode 100644 src/plugins/maps_legacy/public/map/precision.ts rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/service_settings.d.ts (97%) create mode 100644 src/plugins/maps_legacy/public/map/service_settings.js rename src/{legacy/ui/public/vis => plugins/maps_legacy/public}/map/zoom_to_precision.ts (100%) create mode 100644 src/plugins/maps_legacy/public/plugin.ts diff --git a/.i18nrc.json b/.i18nrc.json index 19d361aed93445..e18f529b92ac31 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -24,6 +24,7 @@ "src/legacy/core_plugins/management", "src/plugins/management" ], + "maps_legacy": "src/plugins/maps_legacy", "indexPatternManagement": "src/plugins/index_pattern_management", "advancedSettings": "src/plugins/advanced_settings", "kibana_legacy": "src/plugins/kibana_legacy", diff --git a/src/legacy/core_plugins/kibana/public/index.scss b/src/legacy/core_plugins/kibana/public/index.scss index 9b7d0afcd7e39d..fbfb0a06fabcff 100644 --- a/src/legacy/core_plugins/kibana/public/index.scss +++ b/src/legacy/core_plugins/kibana/public/index.scss @@ -17,7 +17,7 @@ @import './visualize/index'; // Has to come after visualize because of some // bad cascading in the Editor layout -@import 'src/legacy/ui/public/vis/index'; +@import '../../../../plugins/maps_legacy/public/index'; // Home styles @import '../../../../plugins/home/public/application/index'; diff --git a/src/legacy/core_plugins/region_map/public/__tests__/region_map_visualization.js b/src/legacy/core_plugins/region_map/public/__tests__/region_map_visualization.js index 3880f42d52561c..6e1b0b71609417 100644 --- a/src/legacy/core_plugins/region_map/public/__tests__/region_map_visualization.js +++ b/src/legacy/core_plugins/region_map/public/__tests__/region_map_visualization.js @@ -23,12 +23,18 @@ import _ from 'lodash'; import ChoroplethLayer from '../choropleth_layer'; import { ImageComparator } from 'test_utils/image_comparator'; import worldJson from './world.json'; -import EMS_CATALOGUE from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_manifest.json'; -import EMS_FILES from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_files.json'; -import EMS_TILES from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_tiles.json'; -import EMS_STYLE_ROAD_MAP_BRIGHT from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_bright'; -import EMS_STYLE_ROAD_MAP_DESATURATED from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_desaturated'; -import EMS_STYLE_DARK_MAP from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_dark'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_CATALOGUE from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_manifest.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_FILES from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_files.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_TILES from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_tiles.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_ROAD_MAP_BRIGHT from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_ROAD_MAP_DESATURATED from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_desaturated'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_DARK_MAP from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_dark'; import initialPng from './initial.png'; import toiso3Png from './toiso3.png'; @@ -44,6 +50,10 @@ import { createRegionMapTypeDefinition } from '../region_map_type'; import { ExprVis } from '../../../../../plugins/visualizations/public/expressions/vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { BaseVisType } from '../../../../../plugins/visualizations/public/vis_types/base_vis_type'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { setInjectedVarFunc } from '../../../../../plugins/maps_legacy/public/kibana_services'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ServiceSettings } from '../../../../../plugins/maps_legacy/public/map/service_settings'; const THRESHOLD = 0.45; const PIXEL_DIFF = 96; @@ -92,7 +102,31 @@ describe('RegionMapsVisualizationTests', function() { let getManifestStub; beforeEach( ngMock.inject((Private, $injector) => { - const serviceSettings = $injector.get('serviceSettings'); + setInjectedVarFunc(injectedVar => { + switch (injectedVar) { + case 'mapConfig': + return { + emsFileApiUrl: '', + emsTileApiUrl: '', + emsLandingPageUrl: '', + }; + case 'tilemapsConfig': + return { + deprecated: { + config: { + options: { + attribution: '123', + }, + }, + }, + }; + case 'version': + return '123'; + default: + return 'not found'; + } + }); + const serviceSettings = new ServiceSettings(); const uiSettings = $injector.get('config'); const regionmapsConfig = { includeElasticMapsService: true, diff --git a/src/legacy/core_plugins/region_map/public/choropleth_layer.js b/src/legacy/core_plugins/region_map/public/choropleth_layer.js index e637a217bfbc3f..4ea9cc1f7bfbf1 100644 --- a/src/legacy/core_plugins/region_map/public/choropleth_layer.js +++ b/src/legacy/core_plugins/region_map/public/choropleth_layer.js @@ -22,11 +22,9 @@ import L from 'leaflet'; import _ from 'lodash'; import d3 from 'd3'; import { i18n } from '@kbn/i18n'; -import { KibanaMapLayer } from 'ui/vis/map/kibana_map_layer'; import * as topojson from 'topojson-client'; import { toastNotifications } from 'ui/notify'; -import * as colorUtil from 'ui/vis/map/color_util'; - +import { colorUtil, KibanaMapLayer } from '../../../../plugins/maps_legacy/public'; import { truncatedColorMaps } from '../../../../plugins/charts/public'; const EMPTY_STYLE = { diff --git a/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx b/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx index 187b27953830d9..31a27c4da7fcfe 100644 --- a/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx +++ b/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx @@ -21,9 +21,12 @@ import React, { useCallback, useMemo } from 'react'; import { EuiIcon, EuiLink, EuiPanel, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; - -import { FileLayerField, VectorLayer, ServiceSettings } from 'ui/vis/map/service_settings'; import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; +import { + FileLayerField, + VectorLayer, + IServiceSettings, +} from '../../../../../plugins/maps_legacy/public'; import { NumberInputOption, SelectOption, @@ -43,7 +46,7 @@ const mapFieldForOption = ({ description, name }: FileLayerField) => ({ }); export type RegionMapOptionsProps = { - serviceSettings: ServiceSettings; + serviceSettings: IServiceSettings; } & VisOptionsProps; function RegionMapOptions(props: RegionMapOptionsProps) { diff --git a/src/legacy/core_plugins/region_map/public/legacy.ts b/src/legacy/core_plugins/region_map/public/legacy.ts index 08615946affa22..b0cc767a044e88 100644 --- a/src/legacy/core_plugins/region_map/public/legacy.ts +++ b/src/legacy/core_plugins/region_map/public/legacy.ts @@ -20,21 +20,18 @@ import { PluginInitializerContext } from 'kibana/public'; import { npSetup, npStart } from 'ui/new_platform'; -import { RegionMapPluginSetupDependencies, RegionMapsConfig } from './plugin'; +import { RegionMapPluginSetupDependencies } from './plugin'; import { LegacyDependenciesPlugin } from './shim'; import { plugin } from '.'; -const regionmapsConfig = npSetup.core.injectedMetadata.getInjectedVar( - 'regionmap' -) as RegionMapsConfig; - const plugins: Readonly = { expressions: npSetup.plugins.expressions, visualizations: npSetup.plugins.visualizations, + mapsLegacy: npSetup.plugins.mapsLegacy, // Temporary solution // It will be removed when all dependent services are migrated to the new platform. - __LEGACY: new LegacyDependenciesPlugin(regionmapsConfig), + __LEGACY: new LegacyDependenciesPlugin(), }; const pluginInstance = plugin({} as PluginInitializerContext); diff --git a/src/legacy/core_plugins/region_map/public/plugin.ts b/src/legacy/core_plugins/region_map/public/plugin.ts index cae569f8fd26d3..1453c2155e2d6f 100644 --- a/src/legacy/core_plugins/region_map/public/plugin.ts +++ b/src/legacy/core_plugins/region_map/public/plugin.ts @@ -32,10 +32,14 @@ import { LegacyDependenciesPlugin, LegacyDependenciesPluginSetup } from './shim' import { createRegionMapFn } from './region_map_fn'; // @ts-ignore import { createRegionMapTypeDefinition } from './region_map_type'; +import { IServiceSettings, MapsLegacyPluginSetup } from '../../../../plugins/maps_legacy/public'; /** @private */ interface RegionMapVisualizationDependencies extends LegacyDependenciesPluginSetup { uiSettings: IUiSettingsClient; + regionmapsConfig: RegionMapsConfig; + serviceSettings: IServiceSettings; + notificationService: any; } /** @internal */ @@ -43,6 +47,7 @@ export interface RegionMapPluginSetupDependencies { expressions: ReturnType; visualizations: VisualizationsSetup; __LEGACY: LegacyDependenciesPlugin; + mapsLegacy: MapsLegacyPluginSetup; } /** @internal */ @@ -61,10 +66,13 @@ export class RegionMapPlugin implements Plugin, void> { public async setup( core: CoreSetup, - { expressions, visualizations, __LEGACY }: RegionMapPluginSetupDependencies + { expressions, visualizations, mapsLegacy, __LEGACY }: RegionMapPluginSetupDependencies ) { const visualizationDependencies: Readonly = { uiSettings: core.uiSettings, + regionmapsConfig: core.injectedMetadata.getInjectedVar('regionmap') as RegionMapsConfig, + serviceSettings: mapsLegacy.serviceSettings, + notificationService: core.notifications.toasts, ...(await __LEGACY.setup()), }; diff --git a/src/legacy/core_plugins/region_map/public/region_map_visualization.js b/src/legacy/core_plugins/region_map/public/region_map_visualization.js index 72f9d66e7d2bf4..f08d53ee35c8d3 100644 --- a/src/legacy/core_plugins/region_map/public/region_map_visualization.js +++ b/src/legacy/core_plugins/region_map/public/region_map_visualization.js @@ -28,8 +28,16 @@ import { truncatedColorMaps } from '../../../../plugins/charts/public'; // TODO: reference to TILE_MAP plugin should be removed import { BaseMapsVisualizationProvider } from '../../tile_map/public/base_maps_visualization'; -export function createRegionMapVisualization({ serviceSettings, $injector, uiSettings }) { - const BaseMapsVisualization = new BaseMapsVisualizationProvider(serviceSettings); +export function createRegionMapVisualization({ + serviceSettings, + $injector, + uiSettings, + notificationService, +}) { + const BaseMapsVisualization = new BaseMapsVisualizationProvider( + serviceSettings, + notificationService + ); const tooltipFormatter = new TileMapTooltipFormatter($injector); return class RegionMapsVisualization extends BaseMapsVisualization { diff --git a/src/legacy/core_plugins/region_map/public/shim/legacy_dependencies_plugin.ts b/src/legacy/core_plugins/region_map/public/shim/legacy_dependencies_plugin.ts index c47fc40fbacd7e..3a7615e83f2817 100644 --- a/src/legacy/core_plugins/region_map/public/shim/legacy_dependencies_plugin.ts +++ b/src/legacy/core_plugins/region_map/public/shim/legacy_dependencies_plugin.ts @@ -19,31 +19,20 @@ import chrome from 'ui/chrome'; import { CoreStart, Plugin } from 'kibana/public'; -import 'ui/vis/map/service_settings'; -import { RegionMapsConfig } from '../plugin'; /** @internal */ export interface LegacyDependenciesPluginSetup { $injector: any; serviceSettings: any; - regionmapsConfig: RegionMapsConfig; } export class LegacyDependenciesPlugin implements Plugin, void> { - constructor(private readonly regionmapsConfig: RegionMapsConfig) {} - public async setup() { const $injector = await chrome.dangerouslyGetActiveInjector(); return { $injector, - regionmapsConfig: this.regionmapsConfig, - // Settings for EMSClient. - // EMSClient, which currently lives in the tile_map vis, - // will probably end up being exposed from the future vis_type_maps plugin, - // which would register both the tile_map and the region_map vis plugins. - serviceSettings: $injector.get('serviceSettings'), } as LegacyDependenciesPluginSetup; } diff --git a/src/legacy/core_plugins/region_map/public/types.ts b/src/legacy/core_plugins/region_map/public/types.ts index 2097aebd27ce00..8585bf720e0cf7 100644 --- a/src/legacy/core_plugins/region_map/public/types.ts +++ b/src/legacy/core_plugins/region_map/public/types.ts @@ -17,7 +17,7 @@ * under the License. */ -import { VectorLayer, FileLayerField } from 'ui/vis/map/service_settings'; +import { VectorLayer, FileLayerField } from '../../../../plugins/maps_legacy/public'; import { WMSOptions } from '../../tile_map/public/types'; export interface RegionMapVisParams { diff --git a/src/legacy/core_plugins/region_map/public/util.ts b/src/legacy/core_plugins/region_map/public/util.ts index 69a7a1815bc8e5..24c721da1f31ac 100644 --- a/src/legacy/core_plugins/region_map/public/util.ts +++ b/src/legacy/core_plugins/region_map/public/util.ts @@ -17,7 +17,7 @@ * under the License. */ -import { FileLayer, VectorLayer } from 'ui/vis/map/service_settings'; +import { FileLayer, VectorLayer } from '../../../../plugins/maps_legacy/public'; // TODO: reference to TILE_MAP plugin should be removed import { ORIGIN } from '../../../../legacy/core_plugins/tile_map/common/origin'; diff --git a/src/legacy/core_plugins/tile_map/public/__tests__/coordinate_maps_visualization.js b/src/legacy/core_plugins/tile_map/public/__tests__/coordinate_maps_visualization.js index 2c142b19d90961..3904c43707906b 100644 --- a/src/legacy/core_plugins/tile_map/public/__tests__/coordinate_maps_visualization.js +++ b/src/legacy/core_plugins/tile_map/public/__tests__/coordinate_maps_visualization.js @@ -25,12 +25,18 @@ import initial from './initial.png'; import blues from './blues.png'; import shadedGeohashGrid from './shadedGeohashGrid.png'; import heatmapRaw from './heatmap_raw.png'; -import EMS_CATALOGUE from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_manifest.json'; -import EMS_FILES from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_files.json'; -import EMS_TILES from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_tiles.json'; -import EMS_STYLE_ROAD_MAP_BRIGHT from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_bright'; -import EMS_STYLE_ROAD_MAP_DESATURATED from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_desaturated'; -import EMS_STYLE_DARK_MAP from '../../../../ui/public/vis/__tests__/map/ems_mocks/sample_style_dark'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_CATALOGUE from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_manifest.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_FILES from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_files.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_TILES from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_tiles.json'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_ROAD_MAP_BRIGHT from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_ROAD_MAP_DESATURATED from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_desaturated'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import EMS_STYLE_DARK_MAP from '../../../../../plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_dark'; import { createTileMapVisualization } from '../tile_map_visualization'; import { createTileMapTypeDefinition } from '../tile_map_type'; @@ -38,6 +44,15 @@ import { createTileMapTypeDefinition } from '../tile_map_type'; import { ExprVis } from '../../../../../plugins/visualizations/public/expressions/vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { BaseVisType } from '../../../../../plugins/visualizations/public/vis_types/base_vis_type'; +import { + getPrecision, + getZoomPrecision, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../plugins/maps_legacy/public/map/precision'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ServiceSettings } from '../../../../../plugins/maps_legacy/public/map/service_settings'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { setInjectedVarFunc } from '../../../../../plugins/maps_legacy/public/kibana_services'; function mockRawData() { const stack = [dummyESResponse]; @@ -75,13 +90,39 @@ describe('CoordinateMapsVisualizationTest', function() { beforeEach(ngMock.module('kibana')); beforeEach( ngMock.inject((Private, $injector) => { - const serviceSettings = $injector.get('serviceSettings'); + setInjectedVarFunc(injectedVar => { + switch (injectedVar) { + case 'mapConfig': + return { + emsFileApiUrl: '', + emsTileApiUrl: '', + emsLandingPageUrl: '', + }; + case 'tilemapsConfig': + return { + deprecated: { + config: { + options: { + attribution: '123', + }, + }, + }, + }; + case 'version': + return '123'; + default: + return 'not found'; + } + }); + const serviceSettings = new ServiceSettings(); const uiSettings = $injector.get('config'); dependencies = { serviceSettings, uiSettings, $injector, + getPrecision, + getZoomPrecision, }; visType = new BaseVisType(createTileMapTypeDefinition(dependencies)); diff --git a/src/legacy/core_plugins/tile_map/public/__tests__/geohash_layer.js b/src/legacy/core_plugins/tile_map/public/__tests__/geohash_layer.js index 857432079e3768..fc029d6bccb6e6 100644 --- a/src/legacy/core_plugins/tile_map/public/__tests__/geohash_layer.js +++ b/src/legacy/core_plugins/tile_map/public/__tests__/geohash_layer.js @@ -18,13 +18,13 @@ */ import expect from '@kbn/expect'; -import { KibanaMap } from 'ui/vis/map/kibana_map'; import { GeohashLayer } from '../geohash_layer'; // import heatmapPng from './heatmap.png'; import scaledCircleMarkersPng from './scaledCircleMarkers.png'; // import shadedCircleMarkersPng from './shadedCircleMarkers.png'; import { ImageComparator } from 'test_utils/image_comparator'; import GeoHashSampleData from './dummy_es_response.json'; +import { KibanaMap } from '../../../../../plugins/maps_legacy/public'; describe('geohash_layer', function() { let domNode; diff --git a/src/legacy/core_plugins/tile_map/public/base_maps_visualization.js b/src/legacy/core_plugins/tile_map/public/base_maps_visualization.js index d38159c91ef9f9..1dac4607280cc7 100644 --- a/src/legacy/core_plugins/tile_map/public/base_maps_visualization.js +++ b/src/legacy/core_plugins/tile_map/public/base_maps_visualization.js @@ -19,22 +19,25 @@ import _ from 'lodash'; import { i18n } from '@kbn/i18n'; -import { KibanaMap } from 'ui/vis/map/kibana_map'; +import { KibanaMap } from '../../../../plugins/maps_legacy/public'; import * as Rx from 'rxjs'; import { filter, first } from 'rxjs/operators'; -import 'ui/vis/map/service_settings'; import { toastNotifications } from 'ui/notify'; import chrome from 'ui/chrome'; const WMS_MINZOOM = 0; const WMS_MAXZOOM = 22; //increase this to 22. Better for WMS -export function BaseMapsVisualizationProvider(serviceSettings) { +export function BaseMapsVisualizationProvider(mapServiceSettings, notificationService) { /** * Abstract base class for a visualization consisting of a map with a single baselayer. * @class BaseMapsVisualization * @constructor */ + + const serviceSettings = mapServiceSettings; + const toastService = notificationService; + return class BaseMapsVisualization { constructor(element, vis) { this.vis = vis; @@ -94,8 +97,9 @@ export function BaseMapsVisualizationProvider(serviceSettings) { const centerFromUIState = uiState.get('mapCenter'); options.zoom = !isNaN(zoomFromUiState) ? zoomFromUiState : this.vis.params.mapZoom; options.center = centerFromUIState ? centerFromUIState : this.vis.params.mapCenter; + const services = { toastService }; - this._kibanaMap = new KibanaMap(this._container, options); + this._kibanaMap = new KibanaMap(this._container, options, services); this._kibanaMap.setMinZoom(WMS_MINZOOM); //use a default this._kibanaMap.setMaxZoom(WMS_MAXZOOM); //use a default diff --git a/src/legacy/core_plugins/tile_map/public/components/wms_options.tsx b/src/legacy/core_plugins/tile_map/public/components/wms_options.tsx index b8535e72e88185..e74c260d3b8e5c 100644 --- a/src/legacy/core_plugins/tile_map/public/components/wms_options.tsx +++ b/src/legacy/core_plugins/tile_map/public/components/wms_options.tsx @@ -21,8 +21,7 @@ import React, { useMemo } from 'react'; import { EuiPanel, EuiSpacer, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; - -import { TmsLayer } from 'ui/vis/map/service_settings'; +import { TmsLayer } from '../../../../../plugins/maps_legacy/public'; import { Vis } from '../../../../../plugins/visualizations/public'; import { RegionMapVisParams } from '../../../region_map/public/types'; import { SelectOption, SwitchOption } from '../../../../../plugins/charts/public'; diff --git a/src/legacy/core_plugins/tile_map/public/geohash_layer.js b/src/legacy/core_plugins/tile_map/public/geohash_layer.js index a604e02be7c8c4..b9acf1a15208f7 100644 --- a/src/legacy/core_plugins/tile_map/public/geohash_layer.js +++ b/src/legacy/core_plugins/tile_map/public/geohash_layer.js @@ -20,8 +20,7 @@ import L from 'leaflet'; import { min, isEqual } from 'lodash'; import { i18n } from '@kbn/i18n'; - -import { KibanaMapLayer } from 'ui/vis/map/kibana_map_layer'; +import { KibanaMapLayer } from '../../../../plugins/maps_legacy/public'; import { HeatmapMarkers } from './markers/heatmap'; import { ScaledCirclesMarkers } from './markers/scaled_circles'; import { ShadedCirclesMarkers } from './markers/shaded_circles'; diff --git a/src/legacy/core_plugins/tile_map/public/legacy.ts b/src/legacy/core_plugins/tile_map/public/legacy.ts index 7b1f916076f614..741e118750f320 100644 --- a/src/legacy/core_plugins/tile_map/public/legacy.ts +++ b/src/legacy/core_plugins/tile_map/public/legacy.ts @@ -27,6 +27,7 @@ import { plugin } from '.'; const plugins: Readonly = { expressions: npSetup.plugins.expressions, visualizations: npSetup.plugins.visualizations, + mapsLegacy: npSetup.plugins.mapsLegacy, // Temporary solution // It will be removed when all dependent services are migrated to the new platform. diff --git a/src/legacy/core_plugins/tile_map/public/markers/scaled_circles.js b/src/legacy/core_plugins/tile_map/public/markers/scaled_circles.js index 88d6db82946c79..f39de6ca7d1797 100644 --- a/src/legacy/core_plugins/tile_map/public/markers/scaled_circles.js +++ b/src/legacy/core_plugins/tile_map/public/markers/scaled_circles.js @@ -22,8 +22,7 @@ import _ from 'lodash'; import d3 from 'd3'; import $ from 'jquery'; import { EventEmitter } from 'events'; -import * as colorUtil from 'ui/vis/map/color_util'; - +import { colorUtil } from '../../../../../plugins/maps_legacy/public'; import { truncatedColorMaps } from '../../../../../plugins/charts/public'; export class ScaledCirclesMarkers extends EventEmitter { diff --git a/src/legacy/core_plugins/tile_map/public/plugin.ts b/src/legacy/core_plugins/tile_map/public/plugin.ts index f2addbe3ab8729..2b97407b17b38c 100644 --- a/src/legacy/core_plugins/tile_map/public/plugin.ts +++ b/src/legacy/core_plugins/tile_map/public/plugin.ts @@ -32,16 +32,22 @@ import { LegacyDependenciesPlugin, LegacyDependenciesPluginSetup } from './shim' import { createTileMapFn } from './tile_map_fn'; // @ts-ignore import { createTileMapTypeDefinition } from './tile_map_type'; +import { IServiceSettings, MapsLegacyPluginSetup } from '../../../../plugins/maps_legacy/public'; /** @private */ interface TileMapVisualizationDependencies extends LegacyDependenciesPluginSetup { + serviceSettings: IServiceSettings; uiSettings: IUiSettingsClient; + getZoomPrecision: any; + getPrecision: any; + notificationService: any; } /** @internal */ export interface TileMapPluginSetupDependencies { expressions: ReturnType; visualizations: VisualizationsSetup; + mapsLegacy: MapsLegacyPluginSetup; __LEGACY: LegacyDependenciesPlugin; } @@ -55,9 +61,14 @@ export class TileMapPlugin implements Plugin, void> { public async setup( core: CoreSetup, - { expressions, visualizations, __LEGACY }: TileMapPluginSetupDependencies + { expressions, visualizations, mapsLegacy, __LEGACY }: TileMapPluginSetupDependencies ) { + const { getZoomPrecision, getPrecision, serviceSettings } = mapsLegacy; const visualizationDependencies: Readonly = { + serviceSettings, + getZoomPrecision, + getPrecision, + notificationService: core.notifications.toasts, uiSettings: core.uiSettings, ...(await __LEGACY.setup()), }; diff --git a/src/legacy/core_plugins/tile_map/public/shim/legacy_dependencies_plugin.ts b/src/legacy/core_plugins/tile_map/public/shim/legacy_dependencies_plugin.ts index 063b12bf0a2db8..5296e98b09efe8 100644 --- a/src/legacy/core_plugins/tile_map/public/shim/legacy_dependencies_plugin.ts +++ b/src/legacy/core_plugins/tile_map/public/shim/legacy_dependencies_plugin.ts @@ -18,12 +18,12 @@ */ import chrome from 'ui/chrome'; -import 'ui/vis/map/service_settings'; import { CoreStart, Plugin } from 'kibana/public'; +// TODO: Determine why visualizations don't populate without this +import 'angular-sanitize'; /** @internal */ export interface LegacyDependenciesPluginSetup { - serviceSettings: any; $injector: any; } @@ -34,11 +34,6 @@ export class LegacyDependenciesPlugin return { $injector, - // Settings for EMSClient. - // EMSClient, which currently lives in the tile_map vis, - // will probably end up being exposed from the future vis_type_maps plugin, - // which would register both the tile_map and the region_map vis plugins. - serviceSettings: $injector.get('serviceSettings'), } as LegacyDependenciesPluginSetup; } diff --git a/src/legacy/core_plugins/tile_map/public/tile_map_fn.js b/src/legacy/core_plugins/tile_map/public/tile_map_fn.js index 2f54d23590c334..5ad4a2c33db256 100644 --- a/src/legacy/core_plugins/tile_map/public/tile_map_fn.js +++ b/src/legacy/core_plugins/tile_map/public/tile_map_fn.js @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { convertToGeoJson } from 'ui/vis/map/convert_to_geojson'; +import { convertToGeoJson } from '../../../../plugins/maps_legacy/public'; import { i18n } from '@kbn/i18n'; export const createTileMapFn = () => ({ diff --git a/src/legacy/core_plugins/tile_map/public/tile_map_type.js b/src/legacy/core_plugins/tile_map/public/tile_map_type.js index fe82ad5c7352b2..ae3a839b600e94 100644 --- a/src/legacy/core_plugins/tile_map/public/tile_map_type.js +++ b/src/legacy/core_plugins/tile_map/public/tile_map_type.js @@ -19,9 +19,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; - -import { convertToGeoJson } from 'ui/vis/map/convert_to_geojson'; - +import { convertToGeoJson } from '../../../../plugins/maps_legacy/public'; import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { createTileMapVisualization } from './tile_map_visualization'; import { TileMapOptions } from './components/tile_map_options'; diff --git a/src/legacy/core_plugins/tile_map/public/tile_map_visualization.js b/src/legacy/core_plugins/tile_map/public/tile_map_visualization.js index 910def8a0c78e8..fdce8bc51fe869 100644 --- a/src/legacy/core_plugins/tile_map/public/tile_map_visualization.js +++ b/src/legacy/core_plugins/tile_map/public/tile_map_visualization.js @@ -23,15 +23,19 @@ import { BaseMapsVisualizationProvider } from './base_maps_visualization'; import { TileMapTooltipFormatterProvider } from './editors/_tooltip_formatter'; import { npStart } from 'ui/new_platform'; import { getFormat } from '../../../ui/public/visualize/loader/pipeline_helpers/utilities'; -import { - scaleBounds, - zoomPrecision, - getPrecision, - geoContains, -} from '../../../ui/public/vis/map/decode_geo_hash'; +import { scaleBounds, geoContains } from '../../../../plugins/maps_legacy/public'; -export const createTileMapVisualization = ({ serviceSettings, $injector }) => { - const BaseMapsVisualization = new BaseMapsVisualizationProvider(serviceSettings); +export const createTileMapVisualization = ({ + serviceSettings, + $injector, + getZoomPrecision, + getPrecision, + notificationService, +}) => { + const BaseMapsVisualization = new BaseMapsVisualizationProvider( + serviceSettings, + notificationService + ); const tooltipFormatter = new TileMapTooltipFormatterProvider($injector); return class CoordinateMapsVisualization extends BaseMapsVisualization { @@ -59,6 +63,7 @@ export const createTileMapVisualization = ({ serviceSettings, $injector }) => { updateVarsObject.data.boundingBox = geohashAgg.aggConfigParams.boundingBox; } // todo: autoPrecision should be vis parameter, not aggConfig one + const zoomPrecision = getZoomPrecision(); updateVarsObject.data.precision = geohashAgg.aggConfigParams.autoPrecision ? zoomPrecision[this.vis.getUiState().get('mapZoom')] : getPrecision(geohashAgg.aggConfigParams.precision); diff --git a/src/legacy/core_plugins/tile_map/public/tilemap_fn.test.js b/src/legacy/core_plugins/tile_map/public/tilemap_fn.test.js index 0913d6fc92e8a7..6da37f4c5ef86c 100644 --- a/src/legacy/core_plugins/tile_map/public/tilemap_fn.test.js +++ b/src/legacy/core_plugins/tile_map/public/tilemap_fn.test.js @@ -22,7 +22,7 @@ import { functionWrapper } from '../../../../plugins/expressions/common/expressi import { createTileMapFn } from './tile_map_fn'; jest.mock('ui/new_platform'); -jest.mock('ui/vis/map/convert_to_geojson', () => ({ +jest.mock('../../../../plugins/maps_legacy/public', () => ({ convertToGeoJson: jest.fn().mockReturnValue({ featureCollection: { type: 'FeatureCollection', @@ -37,7 +37,7 @@ jest.mock('ui/vis/map/convert_to_geojson', () => ({ }), })); -import { convertToGeoJson } from 'ui/vis/map/convert_to_geojson'; +import { convertToGeoJson } from '../../../../plugins/maps_legacy/public'; describe('interpreter/functions#tilemap', () => { const fn = functionWrapper(createTileMapFn()); diff --git a/src/legacy/core_plugins/tile_map/public/types.ts b/src/legacy/core_plugins/tile_map/public/types.ts index 5f1c3f9b03c9e3..e1b4c27319123a 100644 --- a/src/legacy/core_plugins/tile_map/public/types.ts +++ b/src/legacy/core_plugins/tile_map/public/types.ts @@ -17,7 +17,7 @@ * under the License. */ -import { TmsLayer } from 'ui/vis/map/service_settings'; +import { TmsLayer } from '../../../../plugins/maps_legacy/public'; import { MapTypes } from './map_types'; export interface WMSOptions { diff --git a/src/legacy/core_plugins/timelion/public/shim/timelion_legacy_module.ts b/src/legacy/core_plugins/timelion/public/shim/timelion_legacy_module.ts index 9de8477e3978c0..8fadf223e18076 100644 --- a/src/legacy/core_plugins/timelion/public/shim/timelion_legacy_module.ts +++ b/src/legacy/core_plugins/timelion/public/shim/timelion_legacy_module.ts @@ -21,7 +21,6 @@ import 'ngreact'; import 'brace/mode/hjson'; import 'brace/ext/searchbox'; import 'ui/accessibility/kbn_ui_ace_keyboard_mode'; -import 'ui/vis/map/service_settings'; import { once } from 'lodash'; // @ts-ignore diff --git a/src/legacy/core_plugins/vis_type_vega/public/__tests__/vega_visualization.js b/src/legacy/core_plugins/vis_type_vega/public/__tests__/vega_visualization.js index c7fbc0815b07c4..6412d8a569b2a4 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/__tests__/vega_visualization.js +++ b/src/legacy/core_plugins/vis_type_vega/public/__tests__/vega_visualization.js @@ -49,6 +49,10 @@ import { BaseVisType } from '../../../../../plugins/visualizations/public/vis_ty // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { ExprVis } from '../../../../../plugins/visualizations/public/expressions/vis'; import { setInjectedVars } from '../services'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { setInjectedVarFunc } from '../../../../../plugins/maps_legacy/public/kibana_services'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ServiceSettings } from '../../../../../plugins/maps_legacy/public/map/service_settings'; const THRESHOLD = 0.1; const PIXEL_DIFF = 30; @@ -69,9 +73,34 @@ describe('VegaVisualizations', () => { beforeEach(ngMock.module('kibana')); beforeEach( - ngMock.inject($injector => { + ngMock.inject(() => { + setInjectedVarFunc(injectedVar => { + switch (injectedVar) { + case 'mapConfig': + return { + emsFileApiUrl: '', + emsTileApiUrl: '', + emsLandingPageUrl: '', + }; + case 'tilemapsConfig': + return { + deprecated: { + config: { + options: { + attribution: '123', + }, + }, + }, + }; + case 'version': + return '123'; + default: + return 'not found'; + } + }); + const serviceSettings = new ServiceSettings(); vegaVisualizationDependencies = { - serviceSettings: $injector.get('serviceSettings'), + serviceSettings, core: { uiSettings: npStart.core.uiSettings, }, diff --git a/src/legacy/core_plugins/vis_type_vega/public/legacy.ts b/src/legacy/core_plugins/vis_type_vega/public/legacy.ts index b2c73894d978d4..450af4a6f253ea 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/legacy.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/legacy.ts @@ -20,16 +20,12 @@ import { PluginInitializerContext } from 'kibana/public'; import { npSetup, npStart } from 'ui/new_platform'; import { VegaPluginSetupDependencies, VegaPluginStartDependencies } from './plugin'; -import { LegacyDependenciesPlugin } from './shim'; import { plugin } from '.'; const setupPlugins: Readonly = { ...npSetup.plugins, visualizations: npSetup.plugins.visualizations, - - // Temporary solution - // It will be removed when all dependent services are migrated to the new platform. - __LEGACY: new LegacyDependenciesPlugin(), + mapsLegacy: npSetup.plugins.mapsLegacy, }; const startPlugins: Readonly = { diff --git a/src/legacy/core_plugins/vis_type_vega/public/plugin.ts b/src/legacy/core_plugins/vis_type_vega/public/plugin.ts index 38b92a40cd99a9..9fa77d28fbbfa8 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/plugin.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/plugin.ts @@ -17,7 +17,6 @@ * under the License. */ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../../core/public'; -import { LegacyDependenciesPlugin, LegacyDependenciesPluginSetup } from './shim'; import { Plugin as ExpressionsPublicPlugin } from '../../../../plugins/expressions/public'; import { Plugin as DataPublicPlugin } from '../../../../plugins/data/public'; import { VisualizationsSetup } from '../../../../plugins/visualizations/public'; @@ -32,13 +31,15 @@ import { import { createVegaFn } from './vega_fn'; import { createVegaTypeDefinition } from './vega_type'; import { VisTypeVegaSetup } from '../../../../plugins/vis_type_vega/public'; +import { IServiceSettings } from '../../../../plugins/maps_legacy/public'; /** @internal */ -export interface VegaVisualizationDependencies extends LegacyDependenciesPluginSetup { +export interface VegaVisualizationDependencies { core: CoreSetup; plugins: { data: ReturnType; }; + serviceSettings: IServiceSettings; } /** @internal */ @@ -47,7 +48,7 @@ export interface VegaPluginSetupDependencies { visualizations: VisualizationsSetup; data: ReturnType; visTypeVega: VisTypeVegaSetup; - __LEGACY: LegacyDependenciesPlugin; + mapsLegacy: any; } /** @internal */ @@ -65,7 +66,7 @@ export class VegaPlugin implements Plugin, void> { public async setup( core: CoreSetup, - { data, expressions, visualizations, visTypeVega, __LEGACY }: VegaPluginSetupDependencies + { data, expressions, visualizations, visTypeVega, mapsLegacy }: VegaPluginSetupDependencies ) { setInjectedVars({ enableExternalUrls: visTypeVega.config.enableExternalUrls, @@ -79,7 +80,7 @@ export class VegaPlugin implements Plugin, void> { plugins: { data, }, - ...(await __LEGACY.setup()), + serviceSettings: mapsLegacy.serviceSettings, }; expressions.registerFunction(() => createVegaFn(visualizationDependencies)); diff --git a/src/legacy/core_plugins/vis_type_vega/public/shim/legacy_dependencies_plugin.ts b/src/legacy/core_plugins/vis_type_vega/public/shim/legacy_dependencies_plugin.ts deleted file mode 100644 index 8925f76cffa43c..00000000000000 --- a/src/legacy/core_plugins/vis_type_vega/public/shim/legacy_dependencies_plugin.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// TODO remove this file as soon as serviceSettings is exposed in the new platform -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import chrome from 'ui/chrome'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import 'ui/vis/map/service_settings'; -import { CoreStart, Plugin } from 'kibana/public'; - -/** @internal */ -export interface LegacyDependenciesPluginSetup { - serviceSettings: any; -} - -export class LegacyDependenciesPlugin - implements Plugin, void> { - public async setup() { - const $injector = await chrome.dangerouslyGetActiveInjector(); - - return { - // Settings for EMSClient. - // EMSClient, which currently lives in the tile_map vis, - // will probably end up being exposed from the future vis_type_maps plugin, - // which would register both the tile_map and the region_map vis plugins. - serviceSettings: $injector.get('serviceSettings'), - } as LegacyDependenciesPluginSetup; - } - - public start(core: CoreStart) { - // nothing to do here yet - } -} diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_layer.js b/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_layer.js index 38540e9f218fbd..d43eb9c3351eaf 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_layer.js +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_layer.js @@ -19,7 +19,7 @@ import L from 'leaflet'; import 'leaflet-vega'; -import { KibanaMapLayer } from '../legacy_imports'; +import { KibanaMapLayer } from '../../../../../plugins/maps_legacy/public'; export class VegaMapLayer extends KibanaMapLayer { constructor(spec, options) { diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_view.js b/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_view.js index 487c90d01ada35..03aef29dc5739f 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_view.js +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_view/vega_map_view.js @@ -21,10 +21,15 @@ import * as vega from 'vega-lib'; import { i18n } from '@kbn/i18n'; import { VegaBaseView } from './vega_base_view'; import { VegaMapLayer } from './vega_map_layer'; -import { KibanaMap } from '../legacy_imports'; +import { KibanaMap } from '../../../../../plugins/maps_legacy/public'; import { getEmsTileLayerId, getUISettings } from '../services'; export class VegaMapView extends VegaBaseView { + constructor(opts, services) { + super(opts); + this.services = services; + } + async _initViewCustomizations() { const mapConfig = this._parser.mapConfig; let baseMapOpts; @@ -102,14 +107,18 @@ export class VegaMapView extends VegaBaseView { // maxBounds = L.latLngBounds(L.latLng(b[1], b[0]), L.latLng(b[3], b[2])); // } - this._kibanaMap = new KibanaMap(this._$container.get(0), { - zoom, - minZoom, - maxZoom, - center: [mapConfig.latitude, mapConfig.longitude], - zoomControl: mapConfig.zoomControl, - scrollWheelZoom: mapConfig.scrollWheelZoom, - }); + this._kibanaMap = new KibanaMap( + this._$container.get(0), + { + zoom, + minZoom, + maxZoom, + center: [mapConfig.latitude, mapConfig.longitude], + zoomControl: mapConfig.zoomControl, + scrollWheelZoom: mapConfig.scrollWheelZoom, + }, + this.services + ); if (baseMapOpts) { this._kibanaMap.setBaseLayer({ diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_visualization.js b/src/legacy/core_plugins/vis_type_vega/public/vega_visualization.js index 96835ef3b10bcd..a6e911de7f0cb0 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_visualization.js +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_visualization.js @@ -116,7 +116,8 @@ export const createVegaVisualization = ({ serviceSettings }) => }; if (vegaParser.useMap) { - this._vegaView = new VegaMapView(vegaViewParams); + const services = { toastService: getNotifications().toasts }; + this._vegaView = new VegaMapView(vegaViewParams, services); } else { this._vegaView = new VegaView(vegaViewParams); } diff --git a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js index 0779d6472671cb..33a7fdad065b45 100644 --- a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js +++ b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js @@ -309,6 +309,12 @@ export const npSetup = { registerAlias: sinon.fake(), hideTypes: sinon.fake(), }, + + mapsLegacy: { + serviceSettings: sinon.fake(), + getPrecision: sinon.fake(), + getZoomPrecision: sinon.fake(), + }, }, }; diff --git a/src/legacy/ui/public/new_platform/new_platform.ts b/src/legacy/ui/public/new_platform/new_platform.ts index cdd7e1a9949127..21b80e827e4c25 100644 --- a/src/legacy/ui/public/new_platform/new_platform.ts +++ b/src/legacy/ui/public/new_platform/new_platform.ts @@ -68,6 +68,7 @@ import { VisualizationsSetup, VisualizationsStart, } from '../../../../plugins/visualizations/public'; +import { MapsLegacyPluginSetup } from '../../../../plugins/maps_legacy/public'; export interface PluginsSetup { bfetch: BfetchPublicSetup; @@ -90,6 +91,7 @@ export interface PluginsSetup { visualizations: VisualizationsSetup; telemetry?: TelemetryPluginSetup; savedObjectsManagement: SavedObjectsManagementPluginSetup; + mapsLegacy: MapsLegacyPluginSetup; indexPatternManagement: IndexPatternManagementSetup; } diff --git a/src/legacy/ui/public/vis/map/service_settings.js b/src/legacy/ui/public/vis/map/service_settings.js deleted file mode 100644 index a014aeb182c673..00000000000000 --- a/src/legacy/ui/public/vis/map/service_settings.js +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { uiModules } from '../../modules'; -import _ from 'lodash'; -import MarkdownIt from 'markdown-it'; -import { ORIGIN } from '../../../../core_plugins/tile_map/common/origin'; -import { EMSClient } from '@elastic/ems-client'; -import { i18n } from '@kbn/i18n'; -import 'angular-sanitize'; - -const markdownIt = new MarkdownIt({ - html: false, - linkify: true, -}); - -const TMS_IN_YML_ID = 'TMS in config/kibana.yml'; - -uiModules - .get('kibana', ['ngSanitize']) - .service('serviceSettings', function($sanitize, mapConfig, tilemapsConfig, kbnVersion) { - const attributionFromConfig = $sanitize( - markdownIt.render(tilemapsConfig.deprecated.config.options.attribution || '') - ); - const tmsOptionsFromConfig = _.assign({}, tilemapsConfig.deprecated.config.options, { - attribution: attributionFromConfig, - }); - - class ServiceSettings { - constructor() { - this._showZoomMessage = true; - this._emsClient = new EMSClient({ - language: i18n.getLocale(), - appVersion: kbnVersion, - appName: 'kibana', - fileApiUrl: mapConfig.emsFileApiUrl, - tileApiUrl: mapConfig.emsTileApiUrl, - htmlSanitizer: $sanitize, - landingPageUrl: mapConfig.emsLandingPageUrl, - // Wrap to avoid errors passing window fetch - fetchFunction: function(...args) { - return fetch(...args); - }, - }); - } - - shouldShowZoomMessage({ origin }) { - return origin === ORIGIN.EMS && this._showZoomMessage; - } - - disableZoomMessage() { - this._showZoomMessage = false; - } - - __debugStubManifestCalls(manifestRetrieval) { - const oldGetManifest = this._emsClient.getManifest; - this._emsClient.getManifest = manifestRetrieval; - return { - removeStub: () => { - delete this._emsClient.getManifest; - //not strictly necessary since this is prototype method - if (this._emsClient.getManifest !== oldGetManifest) { - this._emsClient.getManifest = oldGetManifest; - } - }, - }; - } - - async getFileLayers() { - if (!mapConfig.includeElasticMapsService) { - return []; - } - - const fileLayers = await this._emsClient.getFileLayers(); - return fileLayers.map(fileLayer => { - //backfill to older settings - const format = fileLayer.getDefaultFormatType(); - const meta = fileLayer.getDefaultFormatMeta(); - - return { - name: fileLayer.getDisplayName(), - origin: fileLayer.getOrigin(), - id: fileLayer.getId(), - created_at: fileLayer.getCreatedAt(), - attribution: fileLayer.getHTMLAttribution(), - fields: fileLayer.getFieldsInLanguage(), - format: format, //legacy: format and meta are split up - meta: meta, //legacy, format and meta are split up - }; - }); - } - - /** - * Returns all the services published by EMS (if configures) - * It also includes the service configured in tilemap (override) - */ - async getTMSServices() { - let allServices = []; - if (tilemapsConfig.deprecated.isOverridden) { - //use tilemap.* settings from yml - const tmsService = _.cloneDeep(tmsOptionsFromConfig); - tmsService.id = TMS_IN_YML_ID; - tmsService.origin = ORIGIN.KIBANA_YML; - allServices.push(tmsService); - } - - if (mapConfig.includeElasticMapsService) { - const servicesFromManifest = await this._emsClient.getTMSServices(); - const strippedServiceFromManifest = await Promise.all( - servicesFromManifest - .filter(tmsService => tmsService.getId() === mapConfig.emsTileLayerId.bright) - .map(async tmsService => { - //shim for compatibility - const shim = { - origin: tmsService.getOrigin(), - id: tmsService.getId(), - minZoom: await tmsService.getMinZoom(), - maxZoom: await tmsService.getMaxZoom(), - attribution: tmsService.getHTMLAttribution(), - }; - return shim; - }) - ); - allServices = allServices.concat(strippedServiceFromManifest); - } - - return allServices; - } - - /** - * Add optional query-parameters to all requests - * - * @param additionalQueryParams - */ - addQueryParams(additionalQueryParams) { - this._emsClient.addQueryParams(additionalQueryParams); - } - - async getEMSHotLink(fileLayerConfig) { - const fileLayers = await this._emsClient.getFileLayers(); - const layer = fileLayers.find(fileLayer => { - const hasIdByName = fileLayer.hasId(fileLayerConfig.name); //legacy - const hasIdById = fileLayer.hasId(fileLayerConfig.id); - return hasIdByName || hasIdById; - }); - return layer ? layer.getEMSHotLink() : null; - } - - async _getAttributesForEMSTMSLayer(isDesaturated, isDarkMode) { - const tmsServices = await this._emsClient.getTMSServices(); - const emsTileLayerId = mapConfig.emsTileLayerId; - let serviceId; - if (isDarkMode) { - serviceId = emsTileLayerId.dark; - } else { - if (isDesaturated) { - serviceId = emsTileLayerId.desaturated; - } else { - serviceId = emsTileLayerId.bright; - } - } - const tmsService = tmsServices.find(service => { - return service.getId() === serviceId; - }); - return { - url: await tmsService.getUrlTemplate(), - minZoom: await tmsService.getMinZoom(), - maxZoom: await tmsService.getMaxZoom(), - attribution: await tmsService.getHTMLAttribution(), - origin: ORIGIN.EMS, - }; - } - - async getAttributesForTMSLayer(tmsServiceConfig, isDesaturated, isDarkMode) { - if (tmsServiceConfig.origin === ORIGIN.EMS) { - return this._getAttributesForEMSTMSLayer(isDesaturated, isDarkMode); - } else if (tmsServiceConfig.origin === ORIGIN.KIBANA_YML) { - const config = tilemapsConfig.deprecated.config; - const attrs = _.pick(config, ['url', 'minzoom', 'maxzoom', 'attribution']); - return { ...attrs, ...{ origin: ORIGIN.KIBANA_YML } }; - } else { - //this is an older config. need to resolve this dynamically. - if (tmsServiceConfig.id === TMS_IN_YML_ID) { - const config = tilemapsConfig.deprecated.config; - const attrs = _.pick(config, ['url', 'minzoom', 'maxzoom', 'attribution']); - return { ...attrs, ...{ origin: ORIGIN.KIBANA_YML } }; - } else { - //assume ems - return this._getAttributesForEMSTMSLayer(isDesaturated, isDarkMode); - } - } - } - - async _getFileUrlFromEMS(fileLayerConfig) { - const fileLayers = await this._emsClient.getFileLayers(); - const layer = fileLayers.find(fileLayer => { - const hasIdByName = fileLayer.hasId(fileLayerConfig.name); //legacy - const hasIdById = fileLayer.hasId(fileLayerConfig.id); - return hasIdByName || hasIdById; - }); - - if (layer) { - return layer.getDefaultFormatUrl(); - } else { - throw new Error(`File ${fileLayerConfig.name} not recognized`); - } - } - - async getUrlForRegionLayer(fileLayerConfig) { - let url; - if (fileLayerConfig.origin === ORIGIN.EMS) { - url = this._getFileUrlFromEMS(fileLayerConfig); - } else if ( - fileLayerConfig.layerId && - fileLayerConfig.layerId.startsWith(`${ORIGIN.EMS}.`) - ) { - //fallback for older saved objects - url = this._getFileUrlFromEMS(fileLayerConfig); - } else if ( - fileLayerConfig.layerId && - fileLayerConfig.layerId.startsWith(`${ORIGIN.KIBANA_YML}.`) - ) { - //fallback for older saved objects - url = fileLayerConfig.url; - } else { - //generic fallback - url = fileLayerConfig.url; - } - return url; - } - - async getJsonForRegionLayer(fileLayerConfig) { - const url = await this.getUrlForRegionLayer(fileLayerConfig); - const response = await fetch(url); - return await response.json(); - } - } - - return new ServiceSettings(); - }); diff --git a/src/plugins/maps_legacy/kibana.json b/src/plugins/maps_legacy/kibana.json new file mode 100644 index 00000000000000..d66be2b156bb92 --- /dev/null +++ b/src/plugins/maps_legacy/kibana.json @@ -0,0 +1,6 @@ +{ + "id": "mapsLegacy", + "version": "8.0.0", + "kibanaVersion": "kibana", + "ui": true +} diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_files.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_files.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_files.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_files.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_manifest.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_manifest.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_manifest.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_manifest.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright_vector.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright_vector.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright_vector.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright_vector.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright_vector_source.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright_vector_source.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_bright_vector_source.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_bright_vector_source.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_dark.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_dark.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_dark.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_dark.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_desaturated.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_desaturated.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_style_desaturated.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_style_desaturated.json diff --git a/src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_tiles.json b/src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_tiles.json similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/ems_mocks/sample_tiles.json rename to src/plugins/maps_legacy/public/__tests__/map/ems_mocks/sample_tiles.json diff --git a/src/legacy/ui/public/vis/__tests__/map/kibana_map.js b/src/plugins/maps_legacy/public/__tests__/map/kibana_map.js similarity index 100% rename from src/legacy/ui/public/vis/__tests__/map/kibana_map.js rename to src/plugins/maps_legacy/public/__tests__/map/kibana_map.js diff --git a/src/legacy/ui/public/vis/__tests__/map/service_settings.js b/src/plugins/maps_legacy/public/__tests__/map/service_settings.js similarity index 99% rename from src/legacy/ui/public/vis/__tests__/map/service_settings.js rename to src/plugins/maps_legacy/public/__tests__/map/service_settings.js index 61925760457c65..a9272ea3966397 100644 --- a/src/legacy/ui/public/vis/__tests__/map/service_settings.js +++ b/src/plugins/maps_legacy/public/__tests__/map/service_settings.js @@ -26,7 +26,7 @@ import EMS_TILES from './ems_mocks/sample_tiles.json'; import EMS_STYLE_ROAD_MAP_BRIGHT from './ems_mocks/sample_style_bright'; import EMS_STYLE_ROAD_MAP_DESATURATED from './ems_mocks/sample_style_desaturated'; import EMS_STYLE_DARK_MAP from './ems_mocks/sample_style_dark'; -import { ORIGIN } from '../../../../../core_plugins/tile_map/common/origin'; +import { ORIGIN } from '../../common/origin'; describe('service_settings (FKA tilemaptest)', function() { let serviceSettings; diff --git a/src/legacy/ui/public/vis/_index.scss b/src/plugins/maps_legacy/public/_index.scss similarity index 100% rename from src/legacy/ui/public/vis/_index.scss rename to src/plugins/maps_legacy/public/_index.scss diff --git a/src/legacy/core_plugins/vis_type_vega/public/shim/index.ts b/src/plugins/maps_legacy/public/common/origin.ts similarity index 90% rename from src/legacy/core_plugins/vis_type_vega/public/shim/index.ts rename to src/plugins/maps_legacy/public/common/origin.ts index cfc7b62ff4f86d..fdf74cae4ba687 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/shim/index.ts +++ b/src/plugins/maps_legacy/public/common/origin.ts @@ -17,4 +17,7 @@ * under the License. */ -export * from './legacy_dependencies_plugin'; +export const ORIGIN = { + EMS: 'elastic_maps_service', + KIBANA_YML: 'self_hosted', +}; diff --git a/src/plugins/maps_legacy/public/index.ts b/src/plugins/maps_legacy/public/index.ts new file mode 100644 index 00000000000000..861f67006ad838 --- /dev/null +++ b/src/plugins/maps_legacy/public/index.ts @@ -0,0 +1,61 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { MapsLegacyPlugin } from './plugin'; +// @ts-ignore +import * as colorUtil from './map/color_util'; +// @ts-ignore +import { KibanaMap } from './map/kibana_map'; +// @ts-ignore +import { KibanaMapLayer } from './map/kibana_map_layer'; +// @ts-ignore +import { convertToGeoJson } from './map/convert_to_geojson'; +// @ts-ignore +import { scaleBounds, getPrecision, geoContains } from './map/decode_geo_hash'; +// @ts-ignore +import { + VectorLayer, + FileLayerField, + FileLayer, + TmsLayer, + IServiceSettings, +} from './map/service_settings'; + +export function plugin() { + return new MapsLegacyPlugin(); +} + +/** @public */ +export { + scaleBounds, + getPrecision, + geoContains, + colorUtil, + convertToGeoJson, + IServiceSettings, + KibanaMap, + KibanaMapLayer, + VectorLayer, + FileLayerField, + FileLayer, + TmsLayer, +}; + +export type MapsLegacyPluginSetup = ReturnType; +export type MapsLegacyPluginStart = ReturnType; diff --git a/src/legacy/core_plugins/vis_type_vega/public/legacy_imports.ts b/src/plugins/maps_legacy/public/kibana_services.js similarity index 64% rename from src/legacy/core_plugins/vis_type_vega/public/legacy_imports.ts rename to src/plugins/maps_legacy/public/kibana_services.js index b868321d6310f2..815c6f9e5651f9 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/legacy_imports.ts +++ b/src/plugins/maps_legacy/public/kibana_services.js @@ -17,7 +17,14 @@ * under the License. */ -// @ts-ignore -export { KibanaMapLayer } from 'ui/vis/map/kibana_map_layer'; -// @ts-ignore -export { KibanaMap } from 'ui/vis/map/kibana_map'; +let toast; +export const setToasts = notificationToast => (toast = notificationToast); +export const getToasts = () => toast; + +let uiSettings; +export const setUiSettings = coreUiSettings => (uiSettings = coreUiSettings); +export const getUiSettings = () => uiSettings; + +let getInjectedVar; +export const setInjectedVarFunc = getInjectedVarFunc => (getInjectedVar = getInjectedVarFunc); +export const getInjectedVarFunc = () => getInjectedVar; diff --git a/src/legacy/ui/public/vis/map/_index.scss b/src/plugins/maps_legacy/public/map/_index.scss similarity index 100% rename from src/legacy/ui/public/vis/map/_index.scss rename to src/plugins/maps_legacy/public/map/_index.scss diff --git a/src/legacy/ui/public/vis/map/_leaflet_overrides.scss b/src/plugins/maps_legacy/public/map/_leaflet_overrides.scss similarity index 100% rename from src/legacy/ui/public/vis/map/_leaflet_overrides.scss rename to src/plugins/maps_legacy/public/map/_leaflet_overrides.scss diff --git a/src/legacy/ui/public/vis/map/_legend.scss b/src/plugins/maps_legacy/public/map/_legend.scss similarity index 100% rename from src/legacy/ui/public/vis/map/_legend.scss rename to src/plugins/maps_legacy/public/map/_legend.scss diff --git a/src/legacy/ui/public/vis/map/color_util.js b/src/plugins/maps_legacy/public/map/color_util.js similarity index 100% rename from src/legacy/ui/public/vis/map/color_util.js rename to src/plugins/maps_legacy/public/map/color_util.js diff --git a/src/legacy/ui/public/vis/map/convert_to_geojson.js b/src/plugins/maps_legacy/public/map/convert_to_geojson.js similarity index 100% rename from src/legacy/ui/public/vis/map/convert_to_geojson.js rename to src/plugins/maps_legacy/public/map/convert_to_geojson.js diff --git a/src/legacy/ui/public/vis/map/decode_geo_hash.test.ts b/src/plugins/maps_legacy/public/map/decode_geo_hash.test.ts similarity index 100% rename from src/legacy/ui/public/vis/map/decode_geo_hash.test.ts rename to src/plugins/maps_legacy/public/map/decode_geo_hash.test.ts diff --git a/src/legacy/ui/public/vis/map/decode_geo_hash.ts b/src/plugins/maps_legacy/public/map/decode_geo_hash.ts similarity index 79% rename from src/legacy/ui/public/vis/map/decode_geo_hash.ts rename to src/plugins/maps_legacy/public/map/decode_geo_hash.ts index 3f8430b8628d79..8c39ada03a46b4 100644 --- a/src/legacy/ui/public/vis/map/decode_geo_hash.ts +++ b/src/plugins/maps_legacy/public/map/decode_geo_hash.ts @@ -17,11 +17,8 @@ * under the License. */ -import chrome from 'ui/chrome'; import _ from 'lodash'; -const config = chrome.getUiSettingsClient(); - interface DecodedGeoHash { latitude: number[]; longitude: number[]; @@ -74,6 +71,10 @@ function refineInterval(interval: number[], cd: number, mask: number) { } } +export function geohashColumns(precision: number): number { + return geohashCells(precision, 0); +} + /** * Get the number of geohash cells for a given precision * @@ -90,51 +91,6 @@ function geohashCells(precision: number, axis: number) { return cells; } -/** - * Get the number of geohash columns (world-wide) for a given precision - * @param precision the geohash precision - * @returns {number} the number of columns - */ -export function geohashColumns(precision: number): number { - return geohashCells(precision, 0); -} - -const defaultPrecision = 2; -const maxPrecision = parseInt(config.get('visualization:tileMap:maxPrecision'), 10) || 12; -/** - * Map Leaflet zoom levels to geohash precision levels. - * The size of a geohash column-width on the map should be at least `minGeohashPixels` pixels wide. - */ -export const zoomPrecision: any = {}; -const minGeohashPixels = 16; - -for (let zoom = 0; zoom <= 21; zoom += 1) { - const worldPixels = 256 * Math.pow(2, zoom); - zoomPrecision[zoom] = 1; - for (let precision = 2; precision <= maxPrecision; precision += 1) { - const columns = geohashColumns(precision); - if (worldPixels / columns >= minGeohashPixels) { - zoomPrecision[zoom] = precision; - } else { - break; - } - } -} - -export function getPrecision(val: string) { - let precision = parseInt(val, 10); - - if (Number.isNaN(precision)) { - precision = defaultPrecision; - } - - if (precision > maxPrecision) { - return maxPrecision; - } - - return precision; -} - interface GeoBoundingBoxCoordinate { lat: number; lon: number; diff --git a/src/legacy/ui/public/vis/map/grid_dimensions.js b/src/plugins/maps_legacy/public/map/grid_dimensions.js similarity index 100% rename from src/legacy/ui/public/vis/map/grid_dimensions.js rename to src/plugins/maps_legacy/public/map/grid_dimensions.js diff --git a/src/legacy/ui/public/vis/map/kibana_map.js b/src/plugins/maps_legacy/public/map/kibana_map.js similarity index 96% rename from src/legacy/ui/public/vis/map/kibana_map.js rename to src/plugins/maps_legacy/public/map/kibana_map.js index bc581b1a8fbaf8..1c4d0882cb7da4 100644 --- a/src/legacy/ui/public/vis/map/kibana_map.js +++ b/src/plugins/maps_legacy/public/map/kibana_map.js @@ -24,7 +24,7 @@ import $ from 'jquery'; import _ from 'lodash'; import { zoomToPrecision } from './zoom_to_precision'; import { i18n } from '@kbn/i18n'; -import { ORIGIN } from '../../../../core_plugins/tile_map/common/origin'; +import { ORIGIN } from '../common/origin'; function makeFitControl(fitContainer, kibanaMap) { const FitControl = L.Control.extend({ @@ -39,7 +39,7 @@ function makeFitControl(fitContainer, kibanaMap) { onAdd: function(leafletMap) { this._leafletMap = leafletMap; const fitDatBoundsLabel = i18n.translate( - 'common.ui.vis.kibanaMap.leaflet.fitDataBoundsAriaLabel', + 'maps_legacy.kibanaMap.leaflet.fitDataBoundsAriaLabel', { defaultMessage: 'Fit Data Bounds' } ); $(this._fitContainer) @@ -101,7 +101,7 @@ function makeLegendControl(container, kibanaMap, position) { * Serves as simple abstraction for leaflet as well. */ export class KibanaMap extends EventEmitter { - constructor(containerNode, options) { + constructor(containerNode, options, services) { super(); this._containerNode = containerNode; this._leafletBaseLayer = null; @@ -116,6 +116,7 @@ export class KibanaMap extends EventEmitter { this._layers = []; this._listeners = []; this._showTooltip = false; + this.toastService = services ? services.toastService : null; const leafletOptions = { minZoom: options.minZoom, @@ -482,15 +483,21 @@ export class KibanaMap extends EventEmitter { } _addMaxZoomMessage = layer => { - const zoomWarningMsg = createZoomWarningMsg(this.getZoomLevel, this.getMaxZoomLevel); + if (this.toastService) { + const zoomWarningMsg = createZoomWarningMsg( + this.toastService, + this.getZoomLevel, + this.getMaxZoomLevel + ); - this._leafletMap.on('zoomend', zoomWarningMsg); - this._containerNode.setAttribute('data-test-subj', 'zoomWarningEnabled'); + this._leafletMap.on('zoomend', zoomWarningMsg); + this._containerNode.setAttribute('data-test-subj', 'zoomWarningEnabled'); - layer.on('remove', () => { - this._leafletMap.off('zoomend', zoomWarningMsg); - this._containerNode.removeAttribute('data-test-subj'); - }); + layer.on('remove', () => { + this._leafletMap.off('zoomend', zoomWarningMsg); + this._containerNode.removeAttribute('data-test-subj'); + }); + } }; setLegendPosition(position) { diff --git a/src/legacy/ui/public/vis/map/kibana_map_layer.js b/src/plugins/maps_legacy/public/map/kibana_map_layer.js similarity index 100% rename from src/legacy/ui/public/vis/map/kibana_map_layer.js rename to src/plugins/maps_legacy/public/map/kibana_map_layer.js diff --git a/src/legacy/ui/public/vis/map/map_messages.js b/src/plugins/maps_legacy/public/map/map_messages.js similarity index 93% rename from src/legacy/ui/public/vis/map/map_messages.js rename to src/plugins/maps_legacy/public/map/map_messages.js index 211796d7349580..7422fa71280fb3 100644 --- a/src/legacy/ui/public/vis/map/map_messages.js +++ b/src/plugins/maps_legacy/public/map/map_messages.js @@ -17,11 +17,10 @@ * under the License. */ -import { toastNotifications } from 'ui/notify'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiSpacer, EuiButtonEmpty } from '@elastic/eui'; -import { toMountPoint } from '../../../../../plugins/kibana_react/public'; +import { toMountPoint } from '../../../kibana_react/public'; export const createZoomWarningMsg = (function() { let disableZoomMsg = false; @@ -40,7 +39,7 @@ export const createZoomWarningMsg = (function() {

= minGeohashPixels) { + zoomPrecision[zoom] = precision; + } else { + break; + } + } + } + return zoomPrecision; +} + +export function getPrecision(val: string) { + let precision = parseInt(val, 10); + const maxPrecision = getMaxPrecision(); + + if (Number.isNaN(precision)) { + precision = DEFAULT_PRECISION; + } + + if (precision > maxPrecision) { + return maxPrecision; + } + + return precision; +} diff --git a/src/legacy/ui/public/vis/map/service_settings.d.ts b/src/plugins/maps_legacy/public/map/service_settings.d.ts similarity index 97% rename from src/legacy/ui/public/vis/map/service_settings.d.ts rename to src/plugins/maps_legacy/public/map/service_settings.d.ts index 6766000861e47c..e265accaeb8fd0 100644 --- a/src/legacy/ui/public/vis/map/service_settings.d.ts +++ b/src/plugins/maps_legacy/public/map/service_settings.d.ts @@ -44,7 +44,7 @@ export interface VectorLayer extends FileLayer { isEMS: boolean; } -export interface ServiceSettings { +export interface IServiceSettings { getEMSHotLink(layer: FileLayer): Promise; getTMSServices(): Promise; getFileLayers(): Promise; diff --git a/src/plugins/maps_legacy/public/map/service_settings.js b/src/plugins/maps_legacy/public/map/service_settings.js new file mode 100644 index 00000000000000..11c853d39e1072 --- /dev/null +++ b/src/plugins/maps_legacy/public/map/service_settings.js @@ -0,0 +1,254 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import _ from 'lodash'; +import MarkdownIt from 'markdown-it'; +import { EMSClient } from '@elastic/ems-client'; +import { i18n } from '@kbn/i18n'; +import { getInjectedVarFunc } from '../kibana_services'; +import { ORIGIN } from '../common/origin'; + +const TMS_IN_YML_ID = 'TMS in config/kibana.yml'; + +export class ServiceSettings { + constructor() { + const getInjectedVar = getInjectedVarFunc(); + this.mapConfig = getInjectedVar('mapConfig'); + this.tilemapsConfig = getInjectedVar('tilemapsConfig'); + const kbnVersion = getInjectedVar('version'); + + this._showZoomMessage = true; + this._emsClient = new EMSClient({ + language: i18n.getLocale(), + appVersion: kbnVersion, + appName: 'kibana', + fileApiUrl: this.mapConfig.emsFileApiUrl, + tileApiUrl: this.mapConfig.emsTileApiUrl, + landingPageUrl: this.mapConfig.emsLandingPageUrl, + // Wrap to avoid errors passing window fetch + fetchFunction: function(...args) { + return fetch(...args); + }, + }); + this.getTMSOptions(); + } + + getTMSOptions() { + const markdownIt = new MarkdownIt({ + html: false, + linkify: true, + }); + + // TMS attribution + const attributionFromConfig = _.escape( + markdownIt.render(this.tilemapsConfig.deprecated.config.options.attribution || '') + ); + // TMS Options + this.tmsOptionsFromConfig = _.assign({}, this.tilemapsConfig.deprecated.config.options, { + attribution: attributionFromConfig, + }); + } + + shouldShowZoomMessage({ origin }) { + return origin === ORIGIN.EMS && this._showZoomMessage; + } + + disableZoomMessage() { + this._showZoomMessage = false; + } + + __debugStubManifestCalls(manifestRetrieval) { + const oldGetManifest = this._emsClient.getManifest; + this._emsClient.getManifest = manifestRetrieval; + return { + removeStub: () => { + delete this._emsClient.getManifest; + //not strictly necessary since this is prototype method + if (this._emsClient.getManifest !== oldGetManifest) { + this._emsClient.getManifest = oldGetManifest; + } + }, + }; + } + + async getFileLayers() { + if (!this.mapConfig.includeElasticMapsService) { + return []; + } + + const fileLayers = await this._emsClient.getFileLayers(); + return fileLayers.map(fileLayer => { + //backfill to older settings + const format = fileLayer.getDefaultFormatType(); + const meta = fileLayer.getDefaultFormatMeta(); + + return { + name: fileLayer.getDisplayName(), + origin: fileLayer.getOrigin(), + id: fileLayer.getId(), + created_at: fileLayer.getCreatedAt(), + attribution: fileLayer.getHTMLAttribution(), + fields: fileLayer.getFieldsInLanguage(), + format: format, //legacy: format and meta are split up + meta: meta, //legacy, format and meta are split up + }; + }); + } + + /** + * Returns all the services published by EMS (if configures) + * It also includes the service configured in tilemap (override) + */ + async getTMSServices() { + let allServices = []; + if (this.tilemapsConfig.deprecated.isOverridden) { + //use tilemap.* settings from yml + const tmsService = _.cloneDeep(this.tmsOptionsFromConfig); + tmsService.id = TMS_IN_YML_ID; + tmsService.origin = ORIGIN.KIBANA_YML; + allServices.push(tmsService); + } + + if (this.mapConfig.includeElasticMapsService) { + const servicesFromManifest = await this._emsClient.getTMSServices(); + const strippedServiceFromManifest = await Promise.all( + servicesFromManifest + .filter(tmsService => tmsService.getId() === this.mapConfig.emsTileLayerId.bright) + .map(async tmsService => { + //shim for compatibility + return { + origin: tmsService.getOrigin(), + id: tmsService.getId(), + minZoom: await tmsService.getMinZoom(), + maxZoom: await tmsService.getMaxZoom(), + attribution: tmsService.getHTMLAttribution(), + }; + }) + ); + allServices = allServices.concat(strippedServiceFromManifest); + } + + return allServices; + } + + /** + * Add optional query-parameters to all requests + * + * @param additionalQueryParams + */ + addQueryParams(additionalQueryParams) { + this._emsClient.addQueryParams(additionalQueryParams); + } + + async getEMSHotLink(fileLayerConfig) { + const fileLayers = await this._emsClient.getFileLayers(); + const layer = fileLayers.find(fileLayer => { + const hasIdByName = fileLayer.hasId(fileLayerConfig.name); //legacy + const hasIdById = fileLayer.hasId(fileLayerConfig.id); + return hasIdByName || hasIdById; + }); + return layer ? layer.getEMSHotLink() : null; + } + + async _getAttributesForEMSTMSLayer(isDesaturated, isDarkMode) { + const tmsServices = await this._emsClient.getTMSServices(); + const emsTileLayerId = this.mapConfig.emsTileLayerId; + let serviceId; + if (isDarkMode) { + serviceId = emsTileLayerId.dark; + } else { + if (isDesaturated) { + serviceId = emsTileLayerId.desaturated; + } else { + serviceId = emsTileLayerId.bright; + } + } + const tmsService = tmsServices.find(service => { + return service.getId() === serviceId; + }); + return { + url: await tmsService.getUrlTemplate(), + minZoom: await tmsService.getMinZoom(), + maxZoom: await tmsService.getMaxZoom(), + attribution: await tmsService.getHTMLAttribution(), + origin: ORIGIN.EMS, + }; + } + + async getAttributesForTMSLayer(tmsServiceConfig, isDesaturated, isDarkMode) { + if (tmsServiceConfig.origin === ORIGIN.EMS) { + return this._getAttributesForEMSTMSLayer(isDesaturated, isDarkMode); + } else if (tmsServiceConfig.origin === ORIGIN.KIBANA_YML) { + const config = this.tilemapsConfig.deprecated.config; + const attrs = _.pick(config, ['url', 'minzoom', 'maxzoom', 'attribution']); + return { ...attrs, ...{ origin: ORIGIN.KIBANA_YML } }; + } else { + //this is an older config. need to resolve this dynamically. + if (tmsServiceConfig.id === TMS_IN_YML_ID) { + const config = this.tilemapsConfig.deprecated.config; + const attrs = _.pick(config, ['url', 'minzoom', 'maxzoom', 'attribution']); + return { ...attrs, ...{ origin: ORIGIN.KIBANA_YML } }; + } else { + //assume ems + return this._getAttributesForEMSTMSLayer(isDesaturated, isDarkMode); + } + } + } + + async _getFileUrlFromEMS(fileLayerConfig) { + const fileLayers = await this._emsClient.getFileLayers(); + const layer = fileLayers.find(fileLayer => { + const hasIdByName = fileLayer.hasId(fileLayerConfig.name); //legacy + const hasIdById = fileLayer.hasId(fileLayerConfig.id); + return hasIdByName || hasIdById; + }); + + if (layer) { + return layer.getDefaultFormatUrl(); + } else { + throw new Error(`File ${fileLayerConfig.name} not recognized`); + } + } + + async getUrlForRegionLayer(fileLayerConfig) { + let url; + if (fileLayerConfig.origin === ORIGIN.EMS) { + url = this._getFileUrlFromEMS(fileLayerConfig); + } else if (fileLayerConfig.layerId && fileLayerConfig.layerId.startsWith(`${ORIGIN.EMS}.`)) { + //fallback for older saved objects + url = this._getFileUrlFromEMS(fileLayerConfig); + } else if ( + fileLayerConfig.layerId && + fileLayerConfig.layerId.startsWith(`${ORIGIN.KIBANA_YML}.`) + ) { + //fallback for older saved objects + url = fileLayerConfig.url; + } else { + //generic fallback + url = fileLayerConfig.url; + } + return url; + } + + async getJsonForRegionLayer(fileLayerConfig) { + const url = await this.getUrlForRegionLayer(fileLayerConfig); + const response = await fetch(url); + return await response.json(); + } +} diff --git a/src/legacy/ui/public/vis/map/zoom_to_precision.ts b/src/plugins/maps_legacy/public/map/zoom_to_precision.ts similarity index 100% rename from src/legacy/ui/public/vis/map/zoom_to_precision.ts rename to src/plugins/maps_legacy/public/map/zoom_to_precision.ts diff --git a/src/plugins/maps_legacy/public/plugin.ts b/src/plugins/maps_legacy/public/plugin.ts new file mode 100644 index 00000000000000..751be65e1dbf6e --- /dev/null +++ b/src/plugins/maps_legacy/public/plugin.ts @@ -0,0 +1,57 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// @ts-ignore +import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; +// @ts-ignore +import { setToasts, setUiSettings, setInjectedVarFunc } from './kibana_services'; +// @ts-ignore +import { ServiceSettings } from './map/service_settings'; +// @ts-ignore +import { getPrecision, getZoomPrecision } from './map/precision'; +import { MapsLegacyPluginSetup, MapsLegacyPluginStart } from './index'; + +/** + * These are the interfaces with your public contracts. You should export these + * for other plugins to use in _their_ `SetupDeps`/`StartDeps` interfaces. + * @public + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface MapsLegacySetupDependencies {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface MapsLegacyStartDependencies {} + +export class MapsLegacyPlugin implements Plugin { + constructor() {} + + public setup(core: CoreSetup, plugins: MapsLegacySetupDependencies) { + setToasts(core.notifications.toasts); + setUiSettings(core.uiSettings); + setInjectedVarFunc(core.injectedMetadata.getInjectedVar); + + return { + serviceSettings: new ServiceSettings(), + getZoomPrecision, + getPrecision, + }; + } + + public start(core: CoreStart, plugins: MapsLegacyStartDependencies) {} +} diff --git a/x-pack/legacy/plugins/tilemap/public/vis_type_enhancers/update_tilemap_settings.js b/x-pack/legacy/plugins/tilemap/public/vis_type_enhancers/update_tilemap_settings.js index 45764016f0311f..294bc31e3893e9 100644 --- a/x-pack/legacy/plugins/tilemap/public/vis_type_enhancers/update_tilemap_settings.js +++ b/x-pack/legacy/plugins/tilemap/public/vis_type_enhancers/update_tilemap_settings.js @@ -4,20 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ -import uiRoutes from 'ui/routes'; import { xpackInfo } from 'plugins/xpack_main/services/xpack_info'; -import 'ui/vis/map/service_settings'; +import { npSetup } from 'ui/new_platform'; -uiRoutes.addSetupWork(function($injector, serviceSettings) { - const tileMapPluginInfo = xpackInfo.get('features.tilemap'); +const tileMapPluginInfo = xpackInfo.get('features.tilemap'); - if (!tileMapPluginInfo) { - return; - } - - if (!tileMapPluginInfo.license.active || !tileMapPluginInfo.license.valid) { - return; - } +if (tileMapPluginInfo && (tileMapPluginInfo.license.active || tileMapPluginInfo.license.valid)) { + const { serviceSettings } = npSetup.plugins.mapsLegacy; serviceSettings.addQueryParams({ license: tileMapPluginInfo.license.uid }); serviceSettings.disableZoomMessage(); -}); +} diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 3cebde793a085b..a8574971426f5c 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -319,8 +319,6 @@ "common.ui.stateManagement.unableToStoreHistoryInSessionErrorMessage": "セッションがいっぱいで安全に削除できるアイテムが見つからないため、Kibana は履歴アイテムを保存できません。\n\nこれは大抵新規タブに移動することで解決されますが、より大きな問題が原因である可能性もあります。このメッセージが定期的に表示される場合は、{gitHubIssuesUrl} で問題を報告してください。", "common.ui.url.replacementFailedErrorMessage": "置換に失敗、未解決の表現式: {expr}", "common.ui.url.savedObjectIsMissingNotificationMessage": "保存されたオブジェクトがありません", - "common.ui.vis.kibanaMap.leaflet.fitDataBoundsAriaLabel": "データバウンドを合わせる", - "common.ui.vis.kibanaMap.zoomWarning": "ズームレベルが最大に達しました。完全にズームインするには、Elasticsearch と Kibana の {defaultDistribution} にアップグレードしてください。{ems} でより多くのズームレベルが利用できます。または、独自のマップサーバーを構成できます。詳細は { wms } または { configSettings} をご覧ください。", "console.autocomplete.addMethodMetaText": "メソド", "console.consoleDisplayName": "コンソール", "console.consoleMenu.copyAsCurlMessage": "リクエストが URL としてコピーされました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 1daf66117e948c..df5cccf1a9b97d 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -319,8 +319,6 @@ "common.ui.stateManagement.unableToStoreHistoryInSessionErrorMessage": "Kibana 无法将历史记录项存储在您的会话中,因为其已满,并且似乎没有任何可安全删除的项。\n\n通常可通过移至新的标签页来解决此问题,但这会导致更大的问题。如果您有规律地看到此消息,请在 {gitHubIssuesUrl} 提交问题。", "common.ui.url.replacementFailedErrorMessage": "替换失败,未解析的表达式:{expr}", "common.ui.url.savedObjectIsMissingNotificationMessage": "已保存对象缺失", - "common.ui.vis.kibanaMap.leaflet.fitDataBoundsAriaLabel": "适应数据边界", - "common.ui.vis.kibanaMap.zoomWarning": "已达到缩放级别最大数目。要一直放大,请升级到 Elasticsearch 和 Kibana 的 {defaultDistribution}。您可以通过 {ems} 免费使用其他缩放级别。或者,您可以配置自己的地图服务器。请前往 { wms } 或 { configSettings} 以获取详细信息。", "console.autocomplete.addMethodMetaText": "方法", "console.consoleDisplayName": "控制台", "console.consoleMenu.copyAsCurlMessage": "请求已复制为 cURL", From 5bc233f3c733323834b669cc7ef4be809d12ddc6 Mon Sep 17 00:00:00 2001 From: Ahmad Bamieh Date: Mon, 13 Apr 2020 23:45:13 +0300 Subject: [PATCH 27/65] [Telemetry] force staging urls in tests (#63356) * specify telemetry url configs * opt out by default except where we are testing telemetry --- test/common/config.js | 4 ++++ x-pack/test/api_integration/config.js | 2 ++ x-pack/test/functional/config.js | 1 - x-pack/test/functional/config_security_basic.js | 1 - 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/test/common/config.js b/test/common/config.js index faf8cef0271709..ca80dfb01012f2 100644 --- a/test/common/config.js +++ b/test/common/config.js @@ -56,6 +56,10 @@ export default function() { `--elasticsearch.password=${kibanaServerTestUser.password}`, `--home.disableWelcomeScreen=true`, '--telemetry.banner=false', + '--telemetry.optIn=false', + // These are *very* important to have them pointing to staging + '--telemetry.url=https://telemetry-staging.elastic.co/xpack/v2/send', + '--telemetry.optInStatusUrl=https://telemetry-staging.elastic.co/opt_in_status/v2/send', `--server.maxPayloadBytes=1679958`, // newsfeed mock service `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'newsfeed')}`, diff --git a/x-pack/test/api_integration/config.js b/x-pack/test/api_integration/config.js index b62368bf2d6083..0eac7c58044e65 100644 --- a/x-pack/test/api_integration/config.js +++ b/x-pack/test/api_integration/config.js @@ -27,6 +27,8 @@ export async function getApiIntegrationConfig({ readConfigFile }) { '--xpack.security.session.idleTimeout=3600000', // 1 hour '--optimize.enabled=false', '--xpack.endpoint.enabled=true', + '--telemetry.optIn=true', + '--xpack.endpoint.enabled=true', '--xpack.ingestManager.enabled=true', '--xpack.ingestManager.fleet.enabled=true', '--xpack.endpoint.alertResultListDefaultDateRange.from=2018-01-10T00:00:00.000Z', diff --git a/x-pack/test/functional/config.js b/x-pack/test/functional/config.js index bc9a67da731ccb..f26110513a9b33 100644 --- a/x-pack/test/functional/config.js +++ b/x-pack/test/functional/config.js @@ -85,7 +85,6 @@ export default async function({ readConfigFile }) { '--stats.maximumWaitTimeForAllCollectorsInS=1', '--xpack.security.encryptionKey="wuGNaIhoMpk5sO4UBxgr3NyW1sFcLgIf"', // server restarts should not invalidate active sessions '--xpack.encryptedSavedObjects.encryptionKey="DkdXazszSCYexXqz4YktBGHCRkV6hyNK"', - '--telemetry.banner=false', '--timelion.ui.enabled=true', ], }, diff --git a/x-pack/test/functional/config_security_basic.js b/x-pack/test/functional/config_security_basic.js index 12d94e922a97c7..2bb59796b55179 100644 --- a/x-pack/test/functional/config_security_basic.js +++ b/x-pack/test/functional/config_security_basic.js @@ -42,7 +42,6 @@ export default async function({ readConfigFile }) { ...kibanaCommonConfig.get('kbnTestServer.serverArgs'), '--server.uuid=5b2de169-2785-441b-ae8c-186a1936b17d', '--xpack.security.encryptionKey="wuGNaIhoMpk5sO4UBxgr3NyW1sFcLgIf"', // server restarts should not invalidate active sessions - '--telemetry.banner=false', ], }, uiSettings: { From 500b069efd2e344147169163983c4535b21fed8f Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Mon, 13 Apr 2020 17:41:22 -0400 Subject: [PATCH 28/65] [Alerting] set correct parameter for unauthented email action (#63086) PR https://github.com/elastic/kibana/pull/60839 added support for unauthenticated emails, but didn't actually do enough to make it work. This PR completes that support, and adds some tests. You can do manual testing now with [maildev](http://maildev.github.io/maildev/). --- .../server/builtin_action_types/email.test.ts | 107 ++++++++++- .../server/builtin_action_types/email.ts | 11 +- .../lib/send_email.test.ts | 175 ++++++++++++++++++ .../builtin_action_types/lib/send_email.ts | 22 ++- 4 files changed, 299 insertions(+), 16 deletions(-) create mode 100644 x-pack/plugins/actions/server/builtin_action_types/lib/send_email.test.ts diff --git a/x-pack/plugins/actions/server/builtin_action_types/email.test.ts b/x-pack/plugins/actions/server/builtin_action_types/email.test.ts index 469df4fd86e2ce..658f8f3fd8cf9c 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/email.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/email.test.ts @@ -255,7 +255,14 @@ describe('execute()', () => { services, }; sendEmailMock.mockReset(); - await actionType.executor(executorOptions); + const result = await actionType.executor(executorOptions); + expect(result).toMatchInlineSnapshot(` + Object { + "actionId": "some-id", + "data": undefined, + "status": "ok", + } + `); expect(sendEmailMock.mock.calls[0][1]).toMatchInlineSnapshot(` Object { "content": Object { @@ -282,4 +289,102 @@ describe('execute()', () => { } `); }); + + test('parameters are as expected with no auth', async () => { + const config: ActionTypeConfigType = { + service: null, + host: 'a host', + port: 42, + secure: true, + from: 'bob@example.com', + }; + const secrets: ActionTypeSecretsType = { + user: null, + password: null, + }; + const params: ActionParamsType = { + to: ['jim@example.com'], + cc: ['james@example.com'], + bcc: ['jimmy@example.com'], + subject: 'the subject', + message: 'a message to you', + }; + + const actionId = 'some-id'; + const executorOptions: ActionTypeExecutorOptions = { + actionId, + config, + params, + secrets, + services, + }; + sendEmailMock.mockReset(); + await actionType.executor(executorOptions); + expect(sendEmailMock.mock.calls[0][1]).toMatchInlineSnapshot(` + Object { + "content": Object { + "message": "a message to you", + "subject": "the subject", + }, + "routing": Object { + "bcc": Array [ + "jimmy@example.com", + ], + "cc": Array [ + "james@example.com", + ], + "from": "bob@example.com", + "to": Array [ + "jim@example.com", + ], + }, + "transport": Object { + "host": "a host", + "port": 42, + "secure": true, + }, + } + `); + }); + + test('returns expected result when an error is thrown', async () => { + const config: ActionTypeConfigType = { + service: null, + host: 'a host', + port: 42, + secure: true, + from: 'bob@example.com', + }; + const secrets: ActionTypeSecretsType = { + user: null, + password: null, + }; + const params: ActionParamsType = { + to: ['jim@example.com'], + cc: ['james@example.com'], + bcc: ['jimmy@example.com'], + subject: 'the subject', + message: 'a message to you', + }; + + const actionId = 'some-id'; + const executorOptions: ActionTypeExecutorOptions = { + actionId, + config, + params, + secrets, + services, + }; + sendEmailMock.mockReset(); + sendEmailMock.mockRejectedValue(new Error('wops')); + const result = await actionType.executor(executorOptions); + expect(result).toMatchInlineSnapshot(` + Object { + "actionId": "some-id", + "message": "error sending email", + "serviceMessage": "wops", + "status": "error", + } + `); + }); }); diff --git a/x-pack/plugins/actions/server/builtin_action_types/email.ts b/x-pack/plugins/actions/server/builtin_action_types/email.ts index 7992920fdfcb4e..ca8d089ad2946c 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/email.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/email.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { schema, TypeOf } from '@kbn/config-schema'; import nodemailerGetService from 'nodemailer/lib/well-known'; -import { sendEmail, JSON_TRANSPORT_SERVICE } from './lib/send_email'; +import { sendEmail, JSON_TRANSPORT_SERVICE, SendEmailOptions, Transport } from './lib/send_email'; import { portSchema } from './lib/schemas'; import { Logger } from '../../../../../src/core/server'; import { ActionType, ActionTypeExecutorOptions, ActionTypeExecutorResult } from '../types'; @@ -143,7 +143,7 @@ async function executor( const secrets = execOptions.secrets as ActionTypeSecretsType; const params = execOptions.params as ActionParamsType; - const transport: any = {}; + const transport: Transport = {}; if (secrets.user != null) { transport.user = secrets.user; @@ -155,12 +155,13 @@ async function executor( if (config.service !== null) { transport.service = config.service; } else { - transport.host = config.host; - transport.port = config.port; + // already validated service or host/port is not null ... + transport.host = config.host!; + transport.port = config.port!; transport.secure = getSecureValue(config.secure, config.port); } - const sendEmailOptions = { + const sendEmailOptions: SendEmailOptions = { transport, routing: { from: config.from, diff --git a/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.test.ts b/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.test.ts new file mode 100644 index 00000000000000..42160dc2fc22bc --- /dev/null +++ b/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.test.ts @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +jest.mock('nodemailer', () => ({ + createTransport: jest.fn(), +})); + +import { Logger } from '../../../../../../src/core/server'; +import { sendEmail } from './send_email'; +import { loggingServiceMock } from '../../../../../../src/core/server/mocks'; +import nodemailer from 'nodemailer'; + +const createTransportMock = nodemailer.createTransport as jest.Mock; +const sendMailMockResult = { result: 'does not matter' }; +const sendMailMock = jest.fn(); + +const mockLogger = loggingServiceMock.create().get() as jest.Mocked; + +describe('send_email module', () => { + beforeEach(() => { + jest.resetAllMocks(); + createTransportMock.mockReturnValue({ sendMail: sendMailMock }); + sendMailMock.mockResolvedValue(sendMailMockResult); + }); + + test('handles authenticated email using service', async () => { + const sendEmailOptions = getSendEmailOptions(); + const result = await sendEmail(mockLogger, sendEmailOptions); + expect(result).toBe(sendMailMockResult); + expect(createTransportMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "auth": Object { + "pass": "changeme", + "user": "elastic", + }, + "service": "whatever", + }, + ] + `); + expect(sendMailMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "bcc": Array [], + "cc": Array [ + "bob@example.com", + "robert@example.com", + ], + "from": "fred@example.com", + "html": "

a message

+ ", + "subject": "a subject", + "text": "a message", + "to": Array [ + "jim@example.com", + ], + }, + ] + `); + }); + + test('handles unauthenticated email using not secure host/port', async () => { + const sendEmailOptions = getSendEmailOptions(); + delete sendEmailOptions.transport.service; + delete sendEmailOptions.transport.user; + delete sendEmailOptions.transport.password; + sendEmailOptions.transport.host = 'example.com'; + sendEmailOptions.transport.port = 1025; + const result = await sendEmail(mockLogger, sendEmailOptions); + expect(result).toBe(sendMailMockResult); + expect(createTransportMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "host": "example.com", + "port": 1025, + "secure": false, + "tls": Object { + "rejectUnauthorized": false, + }, + }, + ] + `); + expect(sendMailMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "bcc": Array [], + "cc": Array [ + "bob@example.com", + "robert@example.com", + ], + "from": "fred@example.com", + "html": "

a message

+ ", + "subject": "a subject", + "text": "a message", + "to": Array [ + "jim@example.com", + ], + }, + ] + `); + }); + + test('handles unauthenticated email using secure host/port', async () => { + const sendEmailOptions = getSendEmailOptions(); + delete sendEmailOptions.transport.service; + delete sendEmailOptions.transport.user; + delete sendEmailOptions.transport.password; + sendEmailOptions.transport.host = 'example.com'; + sendEmailOptions.transport.port = 1025; + sendEmailOptions.transport.secure = true; + const result = await sendEmail(mockLogger, sendEmailOptions); + expect(result).toBe(sendMailMockResult); + expect(createTransportMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "host": "example.com", + "port": 1025, + "secure": true, + }, + ] + `); + expect(sendMailMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "bcc": Array [], + "cc": Array [ + "bob@example.com", + "robert@example.com", + ], + "from": "fred@example.com", + "html": "

a message

+ ", + "subject": "a subject", + "text": "a message", + "to": Array [ + "jim@example.com", + ], + }, + ] + `); + }); + + test('passes nodemailer exceptions to caller', async () => { + const sendEmailOptions = getSendEmailOptions(); + + sendMailMock.mockReset(); + sendMailMock.mockRejectedValue(new Error('wops')); + + await expect(sendEmail(mockLogger, sendEmailOptions)).rejects.toThrow('wops'); + }); +}); + +function getSendEmailOptions(): any { + return { + content: { + message: 'a message', + subject: 'a subject', + }, + routing: { + from: 'fred@example.com', + to: ['jim@example.com'], + cc: ['bob@example.com', 'robert@example.com'], + bcc: [], + }, + transport: { + service: 'whatever', + user: 'elastic', + password: 'changeme', + }, + }; +} diff --git a/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.ts b/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.ts index 47d7aff8022ce6..ffbf7485a8b0b9 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/lib/send_email.ts @@ -14,30 +14,30 @@ import { Logger } from '../../../../../../src/core/server'; // an email "service" which doesn't actually send, just returns what it would send export const JSON_TRANSPORT_SERVICE = '__json'; -interface SendEmailOptions { +export interface SendEmailOptions { transport: Transport; routing: Routing; content: Content; } // config validation ensures either service is set or host/port are set -interface Transport { - user: string; - password: string; +export interface Transport { + user?: string; + password?: string; service?: string; // see: https://nodemailer.com/smtp/well-known/ host?: string; port?: number; secure?: boolean; // see: https://nodemailer.com/smtp/#tls-options } -interface Routing { +export interface Routing { from: string; to: string[]; cc: string[]; bcc: string[]; } -interface Content { +export interface Content { subject: string; message: string; } @@ -49,12 +49,14 @@ export async function sendEmail(logger: Logger, options: SendEmailOptions): Prom const { from, to, cc, bcc } = routing; const { subject, message } = content; - const transportConfig: Record = { - auth: { + const transportConfig: Record = {}; + + if (user != null && password != null) { + transportConfig.auth = { user, pass: password, - }, - }; + }; + } if (service === JSON_TRANSPORT_SERVICE) { transportConfig.jsonTransport = true; From 3623875175720d867e1c37bb10e20d4e4aacb1d9 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 13 Apr 2020 15:53:07 -0600 Subject: [PATCH 29/65] [Maps] fix bug where toggling Scaling type does not re-fetch data (#63326) * [Maps] fix bug where toggling Scaling type does not re-fetch data * reset to empty array instead of deleting * move setting of layer type to action creator instead of side effect of UPDATE_SOURCE_PROP * review feedback --- .../maps/public/actions/map_actions.js | 38 +++++++++++++++++-- x-pack/plugins/maps/public/reducers/map.js | 13 +------ 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/x-pack/legacy/plugins/maps/public/actions/map_actions.js b/x-pack/legacy/plugins/maps/public/actions/map_actions.js index aa55cf0808ef21..7bfbf5761c5b8c 100644 --- a/x-pack/legacy/plugins/maps/public/actions/map_actions.js +++ b/x-pack/legacy/plugins/maps/public/actions/map_actions.js @@ -125,9 +125,21 @@ async function syncDataForAllLayers(dispatch, getState, dataFilters) { export function cancelAllInFlightRequests() { return (dispatch, getState) => { getLayerList(getState()).forEach(layer => { - layer.getInFlightRequestTokens().forEach(requestToken => { - dispatch(cancelRequest(requestToken)); - }); + dispatch(clearDataRequests(layer)); + }); + }; +} + +function clearDataRequests(layer) { + return dispatch => { + layer.getInFlightRequestTokens().forEach(requestToken => { + dispatch(cancelRequest(requestToken)); + }); + dispatch({ + type: UPDATE_LAYER_PROP, + id: layer.getId(), + propName: '__dataRequests', + newValue: [], }); }; } @@ -663,13 +675,31 @@ export function updateSourceProp(layerId, propName, value, newLayerType) { layerId, propName, value, - newLayerType, }); + if (newLayerType) { + dispatch(updateLayerType(layerId, newLayerType)); + } await dispatch(clearMissingStyleProperties(layerId)); dispatch(syncDataForLayer(layerId)); }; } +function updateLayerType(layerId, newLayerType) { + return (dispatch, getState) => { + const layer = getLayerById(layerId, getState()); + if (!layer || layer.getType() === newLayerType) { + return; + } + dispatch(clearDataRequests(layer)); + dispatch({ + type: UPDATE_LAYER_PROP, + id: layerId, + propName: 'type', + newValue: newLayerType, + }); + }; +} + export function syncDataForLayer(layerId) { return async (dispatch, getState) => { const targetLayer = getLayerById(layerId, getState()); diff --git a/x-pack/plugins/maps/public/reducers/map.js b/x-pack/plugins/maps/public/reducers/map.js index 1e20df89c8fad0..7e07569b44b830 100644 --- a/x-pack/plugins/maps/public/reducers/map.js +++ b/x-pack/plugins/maps/public/reducers/map.js @@ -74,7 +74,7 @@ const updateLayerInList = (state, layerId, attribute, newValue) => { return { ...state, layerList: updatedList }; }; -const updateLayerSourceDescriptorProp = (state, layerId, propName, value, newLayerType) => { +const updateLayerSourceDescriptorProp = (state, layerId, propName, value) => { const { layerList } = state; const layerIdx = getLayerIndex(layerList, layerId); const updatedLayer = { @@ -84,9 +84,6 @@ const updateLayerSourceDescriptorProp = (state, layerId, propName, value, newLay [propName]: value, }, }; - if (newLayerType) { - updatedLayer.type = newLayerType; - } const updatedList = [ ...layerList.slice(0, layerIdx), updatedLayer, @@ -261,13 +258,7 @@ export function map(state = INITIAL_STATE, action) { case UPDATE_LAYER_PROP: return updateLayerInList(state, action.id, action.propName, action.newValue); case UPDATE_SOURCE_PROP: - return updateLayerSourceDescriptorProp( - state, - action.layerId, - action.propName, - action.value, - action.newLayerType - ); + return updateLayerSourceDescriptorProp(state, action.layerId, action.propName, action.value); case SET_JOINS: const layerDescriptor = state.layerList.find( descriptor => descriptor.id === action.layer.getId() From b54388746dedfadd8f5432f9005c063271afc129 Mon Sep 17 00:00:00 2001 From: The SpaceCake Project Date: Mon, 13 Apr 2020 18:42:10 -0400 Subject: [PATCH 30/65] investigation notes field (documentation / metadata) (#63386) * notes field added text to the "investigation notes" field in md which the field supports. * Revert "notes field" This reverts commit dae6ffc683150b9c471f3591073427ae62949a6e. * Revert "Revert "notes field"" This reverts commit f9de4bfc920217740fde316d3462cba409afa654. * Update linux_anomalous_network_activity.json * text change change to "Signals from this rule indicate" --- .../prepackaged_rules/linux_anomalous_network_activity.json | 3 ++- .../prepackaged_rules/linux_anomalous_process_all_hosts.json | 3 ++- .../rules/prepackaged_rules/linux_anomalous_user_name.json | 3 ++- .../rules/prepackaged_rules/rare_process_by_host_linux.json | 3 ++- .../rules/prepackaged_rules/rare_process_by_host_windows.json | 3 ++- .../prepackaged_rules/windows_anomalous_network_activity.json | 3 ++- .../prepackaged_rules/windows_anomalous_process_all_hosts.json | 3 ++- .../rules/prepackaged_rules/windows_anomalous_user_name.json | 3 ++- .../windows_rare_user_type10_remote_login.json | 3 ++- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_network_activity.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_network_activity.json index fe248a6c1e23ea..41f38173dba33b 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_network_activity.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_network_activity.json @@ -20,5 +20,6 @@ "ML" ], "type": "machine_learning", + "note": "### Investigating Unusual Network Activity ###\nSignals from this rule indicate the presence of network activity from a Linux process for which network activity is rare and unusual. Here are some possible avenues of investigation:\n- Consider the IP addresses and ports. Are these used by normal but infrequent network workflows? Are they expected or unexpected? \n- If the destination IP address is remote or external, does it associate with an expected domain, organization or geography? Note: avoid interacting directly with suspected malicious IP addresses.\n- Consider the user as identified by the username field. Is this network activity part of an expected workflow for the user who ran the program?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business or maintenance process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_process_all_hosts.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_process_all_hosts.json index d15c4fc7943782..103171bcdfe501 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_process_all_hosts.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_process_all_hosts.json @@ -20,5 +20,6 @@ "ML" ], "type": "machine_learning", + "note": "### Investigating an Unusual Linux Process ###\nSignals from this rule indicate the presence of a Linux process that is rare and unusual for all of the monitored Linux hosts for which Auditbeat data is available. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_user_name.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_user_name.json index 2f33948b0a93e4..6642bb5d73fbdd 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_user_name.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/linux_anomalous_user_name.json @@ -20,5 +20,6 @@ "ML" ], "type": "machine_learning", + "note": "### Investigating an Unusual Linux User ###\nSignals from this rule indicate activity for a Linux user name that is rare and unusual. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host? Could this be related to troubleshooting or debugging activity by a developer or site reliability engineer?\n- Examine the history of user activity. If this user manifested only very recently, it might be a service account for a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks that the user is performing.", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_linux.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_linux.json index f071677ae8d330..8ae1b84aaf1997 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_linux.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_linux.json @@ -20,5 +20,6 @@ "ML" ], "type": "machine_learning", + "note": "### Investigating an Unusual Linux Process ###\nSignals from this rule indicate the presence of a Linux process that is rare and unusual for the host it ran on. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_windows.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_windows.json index 5e0050c6c25ec9..879cee388f5ddf 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_windows.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/rare_process_by_host_windows.json @@ -20,5 +20,6 @@ "Windows" ], "type": "machine_learning", + "note": "### Investigating an Unusual Windows Process ###\nSignals from this rule indicate the presence of a Windows process that is rare and unusual for the host it ran on. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process metadata like the values of the Company, Description and Product fields which may indicate whether the program is associated with an expected software vendor or package. \n- Examine arguments and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.\n- Consider the same for the parent process. If the parent process is a legitimate system utility or service, this could be related to software updates or system management. If the parent process is something user-facing like an Office application, this process could be more suspicious.\n- If you have file hash values in the event data, and you suspect malware, you can optionally run a search for the file hash to see if the file is identified as malware by anti-malware tools. ", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_network_activity.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_network_activity.json index ca18fe95b1fc1a..1092bcb20bcc35 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_network_activity.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_network_activity.json @@ -20,5 +20,6 @@ "Windows" ], "type": "machine_learning", + "note": "### Investigating Unusual Network Activity ###\nSignals from this rule indicate the presence of network activity from a Windows process for which network activity is very unusual. Here are some possible avenues of investigation:\n- Consider the IP addresses, protocol and ports. Are these used by normal but infrequent network workflows? Are they expected or unexpected? \n- If the destination IP address is remote or external, does it associate with an expected domain, organization or geography? Note: avoid interacting directly with suspected malicious IP addresses.\n- Consider the user as identified by the username field. Is this network activity part of an expected workflow for the user who ran the program?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.\n- Consider the same for the parent process. If the parent process is a legitimate system utility or service, this could be related to software updates or system management. If the parent process is something user-facing like an Office application, this process could be more suspicious.\n- If you have file hash values in the event data, and you suspect malware, you can optionally run a search for the file hash to see if the file is identified as malware by anti-malware tools. ", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_process_all_hosts.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_process_all_hosts.json index 1229c4a52b97d8..f9adfeb830618a 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_process_all_hosts.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_process_all_hosts.json @@ -20,5 +20,6 @@ "Windows" ], "type": "machine_learning", + "note": "### Investigating an Unusual Windows Process ###\nSignals from this rule indicate the presence of a Windows process that is rare and unusual for all of the Windows hosts for which Winlogbeat data is available. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host?\n- Examine the history of execution. If this process manifested only very recently, it might be part of a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process metadata like the values of the Company, Description and Product fields which may indicate whether the program is associated with an expected software vendor or package. \n- Examine arguments and working directory. These may provide indications as to the source of the program or the nature of the tasks it is performing.\n- Consider the same for the parent process. If the parent process is a legitimate system utility or service, this could be related to software updates or system management. If the parent process is something user-facing like an Office application, this process could be more suspicious.\n- If you have file hash values in the event data, and you suspect malware, you can optionally run a search for the file hash to see if the file is identified as malware by anti-malware tools. ", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_user_name.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_user_name.json index 703dc1a1dc6338..a0c6ff5c938f1c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_user_name.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_anomalous_user_name.json @@ -20,5 +20,6 @@ "Windows" ], "type": "machine_learning", + "note": "### Investigating an Unusual Windows User ###\nSignals from this rule indicate activity for a Windows user name that is rare and unusual. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is this program part of an expected workflow for the user who ran this program on this host? Could this be related to occasional troubleshooting or support activity?\n- Examine the history of user activity. If this user manifested only very recently, it might be a service account for a new software package. If it has a consistent cadence - for example if it runs monthly or quarterly - it might be part of a monthly or quarterly business process.\n- Examine the process arguments, title and working directory. These may provide indications as to the source of the program or the nature of the tasks that the user is performing.\n- Consider the same for the parent process. If the parent process is a legitimate system utility or service, this could be related to software updates or system management. If the parent process is something user-facing like an Office application, this process could be more suspicious.", "version": 1 -} \ No newline at end of file +} diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_rare_user_type10_remote_login.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_rare_user_type10_remote_login.json index 946cdb95b8e702..7318364c3aac27 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_rare_user_type10_remote_login.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules/windows_rare_user_type10_remote_login.json @@ -20,5 +20,6 @@ "Windows" ], "type": "machine_learning", + "note": "### Investigating an Unusual Windows User ###\nSignals from this rule indicate activity for a rare and unusual Windows RDP (remote desktop) user. Here are some possible avenues of investigation:\n- Consider the user as identified by the username field. Is the user part of a group who normally logs into Windows hosts using RDP (remote desktop protocol)? Is this logon activity part of an expected workflow for the user? \n- Consider the source of the login. If the source is remote, could this be related to occasional troubleshooting or support activity by a vendor or an employee working remotely?", "version": 1 -} \ No newline at end of file +} From 5bc539c6db8c1f735876e0f16adb7bbd5d4b41eb Mon Sep 17 00:00:00 2001 From: Gil Raphaelli Date: Mon, 13 Apr 2020 22:06:09 -0400 Subject: [PATCH 31/65] update in-app links to metricbeat configuration docs (#63295) --- .../flyout/__snapshots__/flyout.test.js.snap | 24 +++++++++---------- .../apm/enable_metricbeat_instructions.js | 6 ++--- .../beats/enable_metricbeat_instructions.js | 2 +- .../kibana/enable_metricbeat_instructions.js | 2 +- .../enable_metricbeat_instructions.js | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/x-pack/legacy/plugins/monitoring/public/components/metricbeat_migration/flyout/__snapshots__/flyout.test.js.snap b/x-pack/legacy/plugins/monitoring/public/components/metricbeat_migration/flyout/__snapshots__/flyout.test.js.snap index eb1c65c6a696da..4a7537166bd8af 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/metricbeat_migration/flyout/__snapshots__/flyout.test.js.snap +++ b/x-pack/legacy/plugins/monitoring/public/components/metricbeat_migration/flyout/__snapshots__/flyout.test.js.snap @@ -161,7 +161,7 @@ exports[`Flyout apm part two should show instructions to migrate to metricbeat 1 "children":

Date: Tue, 14 Apr 2020 02:05:06 -0400 Subject: [PATCH 32/65] [Endpoint] Update cli mapping to match endpoint package (#63372) * Update cli mapping to match endpoint package --- x-pack/plugins/endpoint/scripts/alert_mapping.json | 3 ++- x-pack/plugins/endpoint/scripts/event_mapping.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/endpoint/scripts/alert_mapping.json b/x-pack/plugins/endpoint/scripts/alert_mapping.json index a21e48b4bc95fc..2e0041d0af9867 100644 --- a/x-pack/plugins/endpoint/scripts/alert_mapping.json +++ b/x-pack/plugins/endpoint/scripts/alert_mapping.json @@ -394,7 +394,8 @@ "type": "nested" }, "file_extension": { - "type": "long" + "ignore_above": 1024, + "type": "keyword" }, "project_file": { "properties": { diff --git a/x-pack/plugins/endpoint/scripts/event_mapping.json b/x-pack/plugins/endpoint/scripts/event_mapping.json index 59d1ed17852b16..f410edc7abe5ef 100644 --- a/x-pack/plugins/endpoint/scripts/event_mapping.json +++ b/x-pack/plugins/endpoint/scripts/event_mapping.json @@ -386,7 +386,8 @@ "type": "nested" }, "file_extension": { - "type": "long" + "ignore_above": 1024, + "type": "keyword" }, "project_file": { "properties": { From f4abaabaee04ed78cb38f32defed37ac969834a5 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 14 Apr 2020 08:47:23 +0200 Subject: [PATCH 33/65] Escape single quotes surrounded by double quotes (#63229) Co-authored-by: Elastic Machine --- .../models/sense_editor/__tests__/editor_input1.txt | 6 ++++++ .../sense_editor/__tests__/sense_editor.test.js | 12 ++++++++++++ .../application/models/sense_editor/sense_editor.ts | 5 +++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt b/src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt index f9a4bcb85034d1..398a0fdeab61f1 100644 --- a/src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt +++ b/src/plugins/console/public/application/models/sense_editor/__tests__/editor_input1.txt @@ -25,3 +25,9 @@ GET index_1/type1/1/_source?_source_include=f DELETE index_2 + +POST /_sql?format=txt +{ + "query": "SELECT prenom FROM claude_index WHERE prenom = 'claude' ", + "fetch_size": 1 +} diff --git a/src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js b/src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js index 6afc03df13b4cd..34b4cad7fbb6bb 100644 --- a/src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js +++ b/src/plugins/console/public/application/models/sense_editor/__tests__/sense_editor.test.js @@ -470,6 +470,18 @@ curl -XGET "http://localhost:9200/_stats?level=shards" curl -XPUT "http://localhost:9200/index_1/type1/1" -H 'Content-Type: application/json' -d' { "f": 1 +}'`.trim() + ); + + multiReqCopyAsCurlTest( + 'with single quotes', + editorInput1, + { start: { lineNumber: 29 }, end: { lineNumber: 33 } }, + ` +curl -XPOST "http://localhost:9200/_sql?format=txt" -H 'Content-Type: application/json' -d' +{ + "query": "SELECT prenom FROM claude_index WHERE prenom = '\\''claude'\\'' ", + "fetch_size": 1 }'`.trim() ); }); diff --git a/src/plugins/console/public/application/models/sense_editor/sense_editor.ts b/src/plugins/console/public/application/models/sense_editor/sense_editor.ts index 9bcd3a68721968..d326543bbe00bb 100644 --- a/src/plugins/console/public/application/models/sense_editor/sense_editor.ts +++ b/src/plugins/console/public/application/models/sense_editor/sense_editor.ts @@ -484,8 +484,9 @@ export class SenseEditor { if (esData && esData.length) { ret += " -H 'Content-Type: application/json' -d'\n"; const dataAsString = collapseLiteralStrings(esData.join('\n')); - // since Sense doesn't allow single quote json string any single qoute is within a string. - ret += dataAsString.replace(/'/g, '\\"'); + + // We escape single quoted strings that that are wrapped in single quoted strings + ret += dataAsString.replace(/'/g, "'\\''"); if (esData.length > 1) { ret += '\n'; } // end with a new line From f44d951300169f7fefeb621e5642f42131dae9fc Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Tue, 14 Apr 2020 09:11:03 +0200 Subject: [PATCH 34/65] document code splitting for client code (#62593) * add lazy loading section for client bundles * add Pierres suggestion --- src/core/MIGRATION.md | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/core/MIGRATION.md b/src/core/MIGRATION.md index 5d7b467052029e..368d1f47e9c3fa 100644 --- a/src/core/MIGRATION.md +++ b/src/core/MIGRATION.md @@ -24,6 +24,7 @@ - [7. Switch to new platform services](#7-switch-to-new-platform-services) - [8. Migrate to the new plugin system](#8-migrate-to-the-new-plugin-system) - [Bonus: Tips for complex migration scenarios](#bonus-tips-for-complex-migration-scenarios) + - [Keep Kibana fast](#keep-kibana-fast) - [Frequently asked questions](#frequently-asked-questions) - [Is migrating a plugin an all-or-nothing thing?](#is-migrating-a-plugin-an-all-or-nothing-thing) - [Do plugins need to be converted to TypeScript?](#do-plugins-need-to-be-converted-to-typescript) @@ -933,6 +934,66 @@ For a few plugins, some of these steps (such as angular removal) could be a mont One convention that is useful for this is creating a dedicated `public/np_ready` directory to house the code that is ready to migrate, and gradually move more and more code into it until the rest of your plugin is essentially empty. At that point, you'll be able to copy your `index.ts`, `plugin.ts`, and the contents of `./np_ready` over into your plugin in the new platform, leaving your legacy shim behind. This carries the added benefit of providing a way for us to introduce helpful tooling in the future, such as [custom eslint rules](https://github.com/elastic/kibana/pull/40537), which could be run against that specific directory to ensure your code is ready to migrate. +## Keep Kibana fast +**tl;dr**: Load as much code lazily as possible. +Everyone loves snappy applications with responsive UI and hates spinners. Users deserve the best user experiences regardless of whether they run Kibana locally or in the cloud, regardless of their hardware & environment. +There are 2 main aspects of the perceived speed of an application: loading time and responsiveness to user actions. +New platform loads and bootstraps **all** the plugins whenever a user lands on any page. It means that adding every new application affects overall **loading performance** in the new platform, as plugin code is loaded **eagerly** to initialize the plugin and provide plugin API to dependent plugins. +However, it's usually not necessary that the whole plugin code should be loaded and initialized at once. The plugin could keep on loading code covering API functionality on Kibana bootstrap but load UI related code lazily on-demand, when an application page or management section is mounted. +Always prefer to require UI root components lazily when possible (such as in mount handlers). Even if their size may seem negligible, they are likely using some heavy-weight libraries that will also be removed from the initial plugin bundle, therefore, reducing its size by a significant amount. + +```typescript +import { Plugin, CoreSetup, AppMountParameters } from 'src/core/public'; +export class MyPlugin implements Plugin { + setup(core: CoreSetup, plugins: SetupDeps){ + core.application.register({ + id: 'app', + title: 'My app', + async mount(params: AppMountParameters) { + const { mountApp } = await import('./app/mount_app'); + return mountApp(await core.getStartServices(), params); + }, + }); + plugins.management.sections.getSection('another').registerApp({ + id: 'app', + title: 'My app', + order: 1, + async mount(params) { + const { mountManagementSection } = await import('./app/mount_management_section'); + return mountManagementSection(coreSetup, params); + }, + }) + return { + doSomething(){} + } + } +} +``` + +#### How to understand how big the bundle size of my plugin is? +New platform plugins are distributed as a pre-built with `@kbn/optimizer` package artifacts. It allows us to get rid of the shipping of `optimizer` in the distributable version of Kibana. +Every NP plugin artifact contains all plugin dependencies required to run the plugin, except some stateful dependencies shared across plugin bundles via `@kbn/ui-shared-deps`. +It means that NP plugin artifacts tend to have a bigger size than the legacy platform version. +To understand the current size of your plugin artifact, run `@kbn/optimizer` as +```bash +node scripts/build_kibana_platform_plugins.js --dist --no-examples +``` +and check the output in the `target` sub-folder of your plugin folder +```bash +ls -lh plugins/my_plugin/target/public/ +# output +# an async chunk loaded on demand +... 262K 0.plugin.js +# eagerly loaded chunk +... 50K my_plugin.plugin.js +``` +you might see at least one js bundle - `my_plugin.plugin.js`. This is the only artifact loaded by the platform during bootstrap in the browser. The rule of thumb is to keep its size as small as possible. +Other lazily loaded parts of your plugin present in the same folder as separate chunks under `{number}.plugin.js` names. +If you want to investigate what your plugin bundle consists of you need to run `@kbn/optimizer` with `--profile` flag to get generated [webpack stats file](https://webpack.js.org/api/stats/). +Many OSS tools are allowing you to analyze generated stats file +- [an official tool](http://webpack.github.io/analyse/#modules) from webpack authors +- [webpack-visualizer](https://chrisbateman.github.io/webpack-visualizer/) + ## Frequently asked questions ### Is migrating a plugin an all-or-nothing thing? From 1f732ad29ac7f386d9255d016f80c51367abd685 Mon Sep 17 00:00:00 2001 From: Gidi Meir Morris Date: Tue, 14 Apr 2020 10:57:46 +0100 Subject: [PATCH 35/65] [Event Log] Adds namespace into save objects (#62974) Adds a namespace attribute to the saved object object within the Event Log so that each Saved Object can have its own. This change also removes the existing kibana.namespace field. As Event Log is not yet in use, this does not include a migration. --- .../plugins/actions/server/lib/action_executor.ts | 9 ++++----- .../task_runner/create_execution_handler.test.ts | 1 - .../task_runner/create_execution_handler.ts | 7 ++++--- .../server/task_runner/task_runner.test.ts | 15 ++++++++------- .../alerting/server/task_runner/task_runner.ts | 5 ++--- x-pack/plugins/event_log/README.md | 1 - x-pack/plugins/event_log/generated/mappings.json | 6 +----- x-pack/plugins/event_log/generated/schemas.ts | 3 +-- x-pack/plugins/event_log/scripts/mappings.js | 12 +++--------- .../server/routes/_mock_handler_arguments.ts | 2 +- .../event_log/public_api_integration.ts | 2 +- 11 files changed, 25 insertions(+), 38 deletions(-) diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index af0353247d99f1..ba8bb79170c63b 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -75,7 +75,8 @@ export class ActionExecutor { } = this.actionExecutorContext!; const services = getServices(request); - const namespace = spaces && spaces.getSpaceId(request); + const spaceId = spaces && spaces.getSpaceId(request); + const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; // Ensure user can read the action before processing const { @@ -91,9 +92,7 @@ export class ActionExecutor { } = await encryptedSavedObjectsPlugin.getDecryptedAsInternalUser( 'action', actionId, - { - namespace: namespace === 'default' ? undefined : namespace, - } + namespace ); const actionType = actionTypeRegistry.get(actionTypeId); @@ -112,7 +111,7 @@ export class ActionExecutor { const actionLabel = `${actionTypeId}:${actionId}: ${name}`; const event: IEvent = { event: { action: EVENT_LOG_ACTIONS.execute }, - kibana: { namespace, saved_objects: [{ type: 'action', id: actionId }] }, + kibana: { saved_objects: [{ type: 'action', id: actionId, ...namespace }] }, }; eventLogger.startTiming(event); diff --git a/x-pack/plugins/alerting/server/task_runner/create_execution_handler.test.ts b/x-pack/plugins/alerting/server/task_runner/create_execution_handler.test.ts index 8d037a1ecee913..756080baba6266 100644 --- a/x-pack/plugins/alerting/server/task_runner/create_execution_handler.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/create_execution_handler.test.ts @@ -91,7 +91,6 @@ test('calls actionsPlugin.execute per selected action', async () => { "alerting": Object { "instance_id": "2", }, - "namespace": "default", "saved_objects": Array [ Object { "id": "1", diff --git a/x-pack/plugins/alerting/server/task_runner/create_execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/create_execution_handler.ts index de06c8bbb374a8..72f9e70905dc28 100644 --- a/x-pack/plugins/alerting/server/task_runner/create_execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/create_execution_handler.ts @@ -87,16 +87,17 @@ export function createExecutionHandler({ apiKey, }); + const namespace = spaceId === 'default' ? {} : { namespace: spaceId }; + const event: IEvent = { event: { action: EVENT_LOG_ACTIONS.executeAction }, kibana: { alerting: { instance_id: alertInstanceId, }, - namespace: spaceId, saved_objects: [ - { type: 'alert', id: alertId }, - { type: 'action', id: action.id }, + { type: 'alert', id: alertId, ...namespace }, + { type: 'action', id: action.id, ...namespace }, ], }, }; diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts index 520f8d5c99b16d..4e6d959f0ce602 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.test.ts @@ -169,10 +169,10 @@ describe('Task Runner', () => { "action": "execute", }, "kibana": Object { - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], @@ -229,10 +229,10 @@ describe('Task Runner', () => { "action": "execute", }, "kibana": Object { - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], @@ -249,10 +249,10 @@ describe('Task Runner', () => { "alerting": Object { "instance_id": "1", }, - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], @@ -269,14 +269,15 @@ describe('Task Runner', () => { "alerting": Object { "instance_id": "1", }, - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, Object { "id": "1", + "namespace": undefined, "type": "action", }, ], @@ -344,10 +345,10 @@ describe('Task Runner', () => { "action": "execute", }, "kibana": Object { - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], @@ -364,10 +365,10 @@ describe('Task Runner', () => { "alerting": Object { "instance_id": "2", }, - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], @@ -560,10 +561,10 @@ describe('Task Runner', () => { "action": "execute", }, "kibana": Object { - "namespace": undefined, "saved_objects": Array [ Object { "id": "1", + "namespace": undefined, "type": "alert", }, ], diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index 2ba56396279ea2..190cdc184930ce 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -173,7 +173,7 @@ export class TaskRunner { const alertLabel = `${this.alertType.id}:${alertId}: '${name}'`; const event: IEvent = { event: { action: EVENT_LOG_ACTIONS.execute }, - kibana: { namespace, saved_objects: [{ type: 'alert', id: alertId }] }, + kibana: { saved_objects: [{ type: 'alert', id: alertId, namespace }] }, }; eventLogger.startTiming(event); @@ -378,11 +378,10 @@ function generateNewAndResolvedInstanceEvents(params: GenerateNewAndResolvedInst action, }, kibana: { - namespace: params.namespace, alerting: { instance_id: id, }, - saved_objects: [{ type: 'alert', id: params.alertId }], + saved_objects: [{ type: 'alert', id: params.alertId, namespace: params.namespace }], }, message, }; diff --git a/x-pack/plugins/event_log/README.md b/x-pack/plugins/event_log/README.md index 027bbc694801f6..38364033cb70be 100644 --- a/x-pack/plugins/event_log/README.md +++ b/x-pack/plugins/event_log/README.md @@ -125,7 +125,6 @@ Here's the event written to the event log index: "duration": 1000000 }, "kibana": { - "namespace": "default", "saved_objects": [ { "type": "action", diff --git a/x-pack/plugins/event_log/generated/mappings.json b/x-pack/plugins/event_log/generated/mappings.json index ab1b4096d17f2c..9c1dff60f9727a 100644 --- a/x-pack/plugins/event_log/generated/mappings.json +++ b/x-pack/plugins/event_log/generated/mappings.json @@ -72,10 +72,6 @@ "type": "keyword", "ignore_above": 1024 }, - "namespace": { - "type": "keyword", - "ignore_above": 1024 - }, "alerting": { "properties": { "instance_id": { @@ -86,7 +82,7 @@ }, "saved_objects": { "properties": { - "store": { + "namespace": { "type": "keyword", "ignore_above": 1024 }, diff --git a/x-pack/plugins/event_log/generated/schemas.ts b/x-pack/plugins/event_log/generated/schemas.ts index b731093b33b06e..5e93f320c009f2 100644 --- a/x-pack/plugins/event_log/generated/schemas.ts +++ b/x-pack/plugins/event_log/generated/schemas.ts @@ -56,7 +56,6 @@ export const EventSchema = schema.maybe( kibana: schema.maybe( schema.object({ server_uuid: ecsString(), - namespace: ecsString(), alerting: schema.maybe( schema.object({ instance_id: ecsString(), @@ -65,7 +64,7 @@ export const EventSchema = schema.maybe( saved_objects: schema.maybe( schema.arrayOf( schema.object({ - store: ecsString(), + namespace: ecsString(), id: ecsString(), type: ecsString(), }) diff --git a/x-pack/plugins/event_log/scripts/mappings.js b/x-pack/plugins/event_log/scripts/mappings.js index 9e721b06ec3351..de3c9d631fbca6 100644 --- a/x-pack/plugins/event_log/scripts/mappings.js +++ b/x-pack/plugins/event_log/scripts/mappings.js @@ -20,17 +20,12 @@ exports.EcsKibanaExtensionsMappings = { }, }, }, - // relevant kibana space - namespace: { - type: 'keyword', - ignore_above: 1024, - }, // array of saved object references, for "linking" via search saved_objects: { type: 'nested', properties: { - // 'kibana' for typical saved object, 'task_manager' for TM, etc - store: { + // relevant kibana space + namespace: { type: 'keyword', ignore_above: 1024, }, @@ -61,9 +56,8 @@ exports.EcsEventLogProperties = [ 'error.message', 'user.name', 'kibana.server_uuid', - 'kibana.namespace', 'kibana.alerting.instance_id', - 'kibana.saved_objects.store', + 'kibana.saved_objects.namespace', 'kibana.saved_objects.id', 'kibana.saved_objects.name', 'kibana.saved_objects.type', diff --git a/x-pack/plugins/event_log/server/routes/_mock_handler_arguments.ts b/x-pack/plugins/event_log/server/routes/_mock_handler_arguments.ts index 6640683bf6005e..19933649277aa3 100644 --- a/x-pack/plugins/event_log/server/routes/_mock_handler_arguments.ts +++ b/x-pack/plugins/event_log/server/routes/_mock_handler_arguments.ts @@ -50,9 +50,9 @@ export function fakeEvent(overrides = {}) { duration: 1000000, }, kibana: { - namespace: 'default', saved_objects: [ { + namespace: 'default', type: 'action', id: '968f1b82-0414-4a10-becc-56b6473e4a29', }, diff --git a/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts b/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts index c440971225d78f..d664357c3ba126 100644 --- a/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts +++ b/x-pack/test/plugin_api_integration/test_suites/event_log/public_api_integration.ts @@ -220,9 +220,9 @@ export default function({ getService }: FtrProviderContext) { duration: 1000000, }, kibana: { - namespace: 'default', saved_objects: [ { + namespace: 'default', type: 'event_log_test', id, }, From 637a9e11a2d713b8aa82d134ebf0c3d09abeace7 Mon Sep 17 00:00:00 2001 From: Dmitry Lemeshko Date: Tue, 14 Apr 2020 14:25:26 +0300 Subject: [PATCH 36/65] Revert FTR: add chromium-based Edge browser support (#61684) (#63448) --- package.json | 5 +- packages/kbn-pm/dist/index.js | 1105 ++++++++++++++--- .../lib/config/schema.ts | 2 +- test/functional/config.edge.js | 34 - test/functional/services/browser.ts | 4 +- .../web_element_wrapper.ts | 9 +- test/functional/services/remote/browsers.ts | 1 - test/functional/services/remote/remote.ts | 17 +- test/functional/services/remote/webdriver.ts | 50 +- x-pack/test/functional/config.edge.js | 21 - yarn.lock | 322 +---- 11 files changed, 1013 insertions(+), 557 deletions(-) delete mode 100644 test/functional/config.edge.js delete mode 100644 x-pack/test/functional/config.edge.js diff --git a/package.json b/package.json index 2bad3116c9ef2b..388e46aedf37d2 100644 --- a/package.json +++ b/package.json @@ -376,7 +376,7 @@ "@types/recompose": "^0.30.6", "@types/redux-actions": "^2.6.1", "@types/request": "^2.48.2", - "@types/selenium-webdriver": "4.0.9", + "@types/selenium-webdriver": "^4.0.5", "@types/semver": "^5.5.0", "@types/sinon": "^7.0.13", "@types/strip-ansi": "^3.0.0", @@ -462,7 +462,6 @@ "load-grunt-config": "^3.0.1", "mocha": "^7.1.1", "mock-http-server": "1.3.0", - "ms-chromium-edge-driver": "^0.2.0", "multistream": "^2.1.1", "murmurhash3js": "3.0.1", "mutation-observer": "^1.0.3", @@ -481,7 +480,7 @@ "react-textarea-autosize": "^7.1.2", "regenerate": "^1.4.0", "sass-lint": "^1.12.1", - "selenium-webdriver": "^4.0.0-alpha.7", + "selenium-webdriver": "^4.0.0-alpha.5", "simple-git": "1.116.0", "simplebar-react": "^2.1.0", "sinon": "^7.4.2", diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index 399720f310f67f..fa8884e2ece758 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -79185,7 +79185,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(704); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _build_production_projects__WEBPACK_IMPORTED_MODULE_0__["buildProductionProjects"]; }); -/* harmony import */ var _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(922); +/* harmony import */ var _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(927); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "prepareExternalProjectDependencies", function() { return _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__["prepareExternalProjectDependencies"]; }); /* @@ -79370,9 +79370,9 @@ const pAll = __webpack_require__(706); const arrify = __webpack_require__(708); const globby = __webpack_require__(709); const isGlob = __webpack_require__(603); -const cpFile = __webpack_require__(907); -const junk = __webpack_require__(919); -const CpyError = __webpack_require__(920); +const cpFile = __webpack_require__(912); +const junk = __webpack_require__(924); +const CpyError = __webpack_require__(925); const defaultOptions = { ignoreJunk: true @@ -79622,8 +79622,8 @@ const fs = __webpack_require__(23); const arrayUnion = __webpack_require__(710); const glob = __webpack_require__(712); const fastGlob = __webpack_require__(717); -const dirGlob = __webpack_require__(900); -const gitignore = __webpack_require__(903); +const dirGlob = __webpack_require__(905); +const gitignore = __webpack_require__(908); const DEFAULT_FILTER = () => false; @@ -81456,11 +81456,11 @@ module.exports.generateTasks = pkg.generateTasks; Object.defineProperty(exports, "__esModule", { value: true }); var optionsManager = __webpack_require__(719); var taskManager = __webpack_require__(720); -var reader_async_1 = __webpack_require__(871); -var reader_stream_1 = __webpack_require__(895); -var reader_sync_1 = __webpack_require__(896); -var arrayUtils = __webpack_require__(898); -var streamUtils = __webpack_require__(899); +var reader_async_1 = __webpack_require__(876); +var reader_stream_1 = __webpack_require__(900); +var reader_sync_1 = __webpack_require__(901); +var arrayUtils = __webpack_require__(903); +var streamUtils = __webpack_require__(904); /** * Synchronous API. */ @@ -82100,9 +82100,9 @@ var extend = __webpack_require__(837); */ var compilers = __webpack_require__(840); -var parsers = __webpack_require__(867); -var cache = __webpack_require__(868); -var utils = __webpack_require__(869); +var parsers = __webpack_require__(872); +var cache = __webpack_require__(873); +var utils = __webpack_require__(874); var MAX_LENGTH = 1024 * 64; /** @@ -100635,9 +100635,9 @@ var toRegex = __webpack_require__(728); */ var compilers = __webpack_require__(857); -var parsers = __webpack_require__(863); -var Extglob = __webpack_require__(866); -var utils = __webpack_require__(865); +var parsers = __webpack_require__(868); +var Extglob = __webpack_require__(871); +var utils = __webpack_require__(870); var MAX_LENGTH = 1024 * 64; /** @@ -101147,7 +101147,7 @@ var parsers = __webpack_require__(861); * Module dependencies */ -var debug = __webpack_require__(800)('expand-brackets'); +var debug = __webpack_require__(863)('expand-brackets'); var extend = __webpack_require__(737); var Snapdragon = __webpack_require__(767); var toRegex = __webpack_require__(728); @@ -101741,12 +101741,839 @@ exports.createRegex = function(pattern, include) { /* 863 */ /***/ (function(module, exports, __webpack_require__) { +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = __webpack_require__(864); +} else { + module.exports = __webpack_require__(867); +} + + +/***/ }), +/* 864 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = __webpack_require__(865); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + + +/***/ }), +/* 865 */ +/***/ (function(module, exports, __webpack_require__) { + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = __webpack_require__(866); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + + +/***/ }), +/* 866 */ +/***/ (function(module, exports) { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + + +/***/ }), +/* 867 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Module dependencies. + */ + +var tty = __webpack_require__(478); +var util = __webpack_require__(29); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = __webpack_require__(865); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = __webpack_require__(23); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = __webpack_require__(805); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); + + +/***/ }), +/* 868 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; var brackets = __webpack_require__(858); -var define = __webpack_require__(864); -var utils = __webpack_require__(865); +var define = __webpack_require__(869); +var utils = __webpack_require__(870); /** * Characters to use in text regex (we want to "not" match @@ -101901,7 +102728,7 @@ module.exports = parsers; /***/ }), -/* 864 */ +/* 869 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -101939,7 +102766,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 865 */ +/* 870 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102015,7 +102842,7 @@ utils.createRegex = function(str) { /***/ }), -/* 866 */ +/* 871 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102026,7 +102853,7 @@ utils.createRegex = function(str) { */ var Snapdragon = __webpack_require__(767); -var define = __webpack_require__(864); +var define = __webpack_require__(869); var extend = __webpack_require__(737); /** @@ -102034,7 +102861,7 @@ var extend = __webpack_require__(737); */ var compilers = __webpack_require__(857); -var parsers = __webpack_require__(863); +var parsers = __webpack_require__(868); /** * Customize Snapdragon parser and renderer @@ -102100,7 +102927,7 @@ module.exports = Extglob; /***/ }), -/* 867 */ +/* 872 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102190,14 +103017,14 @@ function textRegex(pattern) { /***/ }), -/* 868 */ +/* 873 */ /***/ (function(module, exports, __webpack_require__) { module.exports = new (__webpack_require__(849))(); /***/ }), -/* 869 */ +/* 874 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102215,7 +103042,7 @@ utils.define = __webpack_require__(836); utils.diff = __webpack_require__(853); utils.extend = __webpack_require__(837); utils.pick = __webpack_require__(854); -utils.typeOf = __webpack_require__(870); +utils.typeOf = __webpack_require__(875); utils.unique = __webpack_require__(740); /** @@ -102513,7 +103340,7 @@ utils.unixify = function(options) { /***/ }), -/* 870 */ +/* 875 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -102648,7 +103475,7 @@ function isBuffer(val) { /***/ }), -/* 871 */ +/* 876 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102667,9 +103494,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(872); -var reader_1 = __webpack_require__(885); -var fs_stream_1 = __webpack_require__(889); +var readdir = __webpack_require__(877); +var reader_1 = __webpack_require__(890); +var fs_stream_1 = __webpack_require__(894); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -102730,15 +103557,15 @@ exports.default = ReaderAsync; /***/ }), -/* 872 */ +/* 877 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(873); -const readdirAsync = __webpack_require__(881); -const readdirStream = __webpack_require__(884); +const readdirSync = __webpack_require__(878); +const readdirAsync = __webpack_require__(886); +const readdirStream = __webpack_require__(889); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -102822,7 +103649,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 873 */ +/* 878 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102830,11 +103657,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(874); +const DirectoryReader = __webpack_require__(879); let syncFacade = { - fs: __webpack_require__(879), - forEach: __webpack_require__(880), + fs: __webpack_require__(884), + forEach: __webpack_require__(885), sync: true }; @@ -102863,7 +103690,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 874 */ +/* 879 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102872,9 +103699,9 @@ function readdirSync (dir, options, internalOptions) { const Readable = __webpack_require__(27).Readable; const EventEmitter = __webpack_require__(379).EventEmitter; const path = __webpack_require__(16); -const normalizeOptions = __webpack_require__(875); -const stat = __webpack_require__(877); -const call = __webpack_require__(878); +const normalizeOptions = __webpack_require__(880); +const stat = __webpack_require__(882); +const call = __webpack_require__(883); /** * Asynchronously reads the contents of a directory and streams the results @@ -103250,14 +104077,14 @@ module.exports = DirectoryReader; /***/ }), -/* 875 */ +/* 880 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); -const globToRegExp = __webpack_require__(876); +const globToRegExp = __webpack_require__(881); module.exports = normalizeOptions; @@ -103434,7 +104261,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 876 */ +/* 881 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -103571,13 +104398,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 877 */ +/* 882 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(878); +const call = __webpack_require__(883); module.exports = stat; @@ -103652,7 +104479,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 878 */ +/* 883 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103713,14 +104540,14 @@ function callOnce (fn) { /***/ }), -/* 879 */ +/* 884 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(23); -const call = __webpack_require__(878); +const call = __webpack_require__(883); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -103784,7 +104611,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 880 */ +/* 885 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103813,7 +104640,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 881 */ +/* 886 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103821,12 +104648,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(882); -const DirectoryReader = __webpack_require__(874); +const maybe = __webpack_require__(887); +const DirectoryReader = __webpack_require__(879); let asyncFacade = { fs: __webpack_require__(23), - forEach: __webpack_require__(883), + forEach: __webpack_require__(888), async: true }; @@ -103868,7 +104695,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 882 */ +/* 887 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103895,7 +104722,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 883 */ +/* 888 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103931,7 +104758,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 884 */ +/* 889 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103939,11 +104766,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(874); +const DirectoryReader = __webpack_require__(879); let streamFacade = { fs: __webpack_require__(23), - forEach: __webpack_require__(883), + forEach: __webpack_require__(888), async: true }; @@ -103963,16 +104790,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 885 */ +/* 890 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(16); -var deep_1 = __webpack_require__(886); -var entry_1 = __webpack_require__(888); -var pathUtil = __webpack_require__(887); +var deep_1 = __webpack_require__(891); +var entry_1 = __webpack_require__(893); +var pathUtil = __webpack_require__(892); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -104038,13 +104865,13 @@ exports.default = Reader; /***/ }), -/* 886 */ +/* 891 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(887); +var pathUtils = __webpack_require__(892); var patternUtils = __webpack_require__(721); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { @@ -104128,7 +104955,7 @@ exports.default = DeepFilter; /***/ }), -/* 887 */ +/* 892 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104159,13 +104986,13 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 888 */ +/* 893 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(887); +var pathUtils = __webpack_require__(892); var patternUtils = __webpack_require__(721); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { @@ -104251,7 +105078,7 @@ exports.default = EntryFilter; /***/ }), -/* 889 */ +/* 894 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104271,8 +105098,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(27); -var fsStat = __webpack_require__(890); -var fs_1 = __webpack_require__(894); +var fsStat = __webpack_require__(895); +var fs_1 = __webpack_require__(899); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -104322,14 +105149,14 @@ exports.default = FileSystemStream; /***/ }), -/* 890 */ +/* 895 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(891); -const statProvider = __webpack_require__(893); +const optionsManager = __webpack_require__(896); +const statProvider = __webpack_require__(898); /** * Asynchronous API. */ @@ -104360,13 +105187,13 @@ exports.statSync = statSync; /***/ }), -/* 891 */ +/* 896 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(892); +const fsAdapter = __webpack_require__(897); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -104379,7 +105206,7 @@ exports.prepare = prepare; /***/ }), -/* 892 */ +/* 897 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104402,7 +105229,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 893 */ +/* 898 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104454,7 +105281,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 894 */ +/* 899 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104485,7 +105312,7 @@ exports.default = FileSystem; /***/ }), -/* 895 */ +/* 900 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104505,9 +105332,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(27); -var readdir = __webpack_require__(872); -var reader_1 = __webpack_require__(885); -var fs_stream_1 = __webpack_require__(889); +var readdir = __webpack_require__(877); +var reader_1 = __webpack_require__(890); +var fs_stream_1 = __webpack_require__(894); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -104575,7 +105402,7 @@ exports.default = ReaderStream; /***/ }), -/* 896 */ +/* 901 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104594,9 +105421,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(872); -var reader_1 = __webpack_require__(885); -var fs_sync_1 = __webpack_require__(897); +var readdir = __webpack_require__(877); +var reader_1 = __webpack_require__(890); +var fs_sync_1 = __webpack_require__(902); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -104656,7 +105483,7 @@ exports.default = ReaderSync; /***/ }), -/* 897 */ +/* 902 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104675,8 +105502,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(890); -var fs_1 = __webpack_require__(894); +var fsStat = __webpack_require__(895); +var fs_1 = __webpack_require__(899); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -104722,7 +105549,7 @@ exports.default = FileSystemSync; /***/ }), -/* 898 */ +/* 903 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104738,7 +105565,7 @@ exports.flatten = flatten; /***/ }), -/* 899 */ +/* 904 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104759,13 +105586,13 @@ exports.merge = merge; /***/ }), -/* 900 */ +/* 905 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); -const pathType = __webpack_require__(901); +const pathType = __webpack_require__(906); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -104831,13 +105658,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 901 */ +/* 906 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(23); -const pify = __webpack_require__(902); +const pify = __webpack_require__(907); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -104880,7 +105707,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 902 */ +/* 907 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104971,7 +105798,7 @@ module.exports = (obj, opts) => { /***/ }), -/* 903 */ +/* 908 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104979,9 +105806,9 @@ module.exports = (obj, opts) => { const fs = __webpack_require__(23); const path = __webpack_require__(16); const fastGlob = __webpack_require__(717); -const gitIgnore = __webpack_require__(904); -const pify = __webpack_require__(905); -const slash = __webpack_require__(906); +const gitIgnore = __webpack_require__(909); +const pify = __webpack_require__(910); +const slash = __webpack_require__(911); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -105079,7 +105906,7 @@ module.exports.sync = options => { /***/ }), -/* 904 */ +/* 909 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -105548,7 +106375,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 905 */ +/* 910 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105623,7 +106450,7 @@ module.exports = (input, options) => { /***/ }), -/* 906 */ +/* 911 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105641,17 +106468,17 @@ module.exports = input => { /***/ }), -/* 907 */ +/* 912 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); const {constants: fsConstants} = __webpack_require__(23); -const pEvent = __webpack_require__(908); -const CpFileError = __webpack_require__(911); -const fs = __webpack_require__(915); -const ProgressEmitter = __webpack_require__(918); +const pEvent = __webpack_require__(913); +const CpFileError = __webpack_require__(916); +const fs = __webpack_require__(920); +const ProgressEmitter = __webpack_require__(923); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -105765,12 +106592,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 908 */ +/* 913 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(909); +const pTimeout = __webpack_require__(914); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -106061,12 +106888,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 909 */ +/* 914 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(910); +const pFinally = __webpack_require__(915); class TimeoutError extends Error { constructor(message) { @@ -106112,7 +106939,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 910 */ +/* 915 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -106134,12 +106961,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 911 */ +/* 916 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(912); +const NestedError = __webpack_require__(917); class CpFileError extends NestedError { constructor(message, nested) { @@ -106153,10 +106980,10 @@ module.exports = CpFileError; /***/ }), -/* 912 */ +/* 917 */ /***/ (function(module, exports, __webpack_require__) { -var inherits = __webpack_require__(913); +var inherits = __webpack_require__(918); var NestedError = function (message, nested) { this.nested = nested; @@ -106207,7 +107034,7 @@ module.exports = NestedError; /***/ }), -/* 913 */ +/* 918 */ /***/ (function(module, exports, __webpack_require__) { try { @@ -106215,12 +107042,12 @@ try { if (typeof util.inherits !== 'function') throw ''; module.exports = util.inherits; } catch (e) { - module.exports = __webpack_require__(914); + module.exports = __webpack_require__(919); } /***/ }), -/* 914 */ +/* 919 */ /***/ (function(module, exports) { if (typeof Object.create === 'function') { @@ -106249,16 +107076,16 @@ if (typeof Object.create === 'function') { /***/ }), -/* 915 */ +/* 920 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(29); const fs = __webpack_require__(22); -const makeDir = __webpack_require__(916); -const pEvent = __webpack_require__(908); -const CpFileError = __webpack_require__(911); +const makeDir = __webpack_require__(921); +const pEvent = __webpack_require__(913); +const CpFileError = __webpack_require__(916); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -106355,7 +107182,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 916 */ +/* 921 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -106363,7 +107190,7 @@ exports.copyFileSync = (source, destination, flags) => { const fs = __webpack_require__(23); const path = __webpack_require__(16); const {promisify} = __webpack_require__(29); -const semver = __webpack_require__(917); +const semver = __webpack_require__(922); const defaults = { mode: 0o777 & (~process.umask()), @@ -106512,7 +107339,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 917 */ +/* 922 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -108114,7 +108941,7 @@ function coerce (version, options) { /***/ }), -/* 918 */ +/* 923 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -108155,7 +108982,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 919 */ +/* 924 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -108201,12 +109028,12 @@ exports.default = module.exports; /***/ }), -/* 920 */ +/* 925 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(921); +const NestedError = __webpack_require__(926); class CpyError extends NestedError { constructor(message, nested) { @@ -108220,7 +109047,7 @@ module.exports = CpyError; /***/ }), -/* 921 */ +/* 926 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(29).inherits; @@ -108276,7 +109103,7 @@ module.exports = NestedError; /***/ }), -/* 922 */ +/* 927 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts index f4b91d154cbb88..66f17ab579ec39 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts @@ -136,7 +136,7 @@ export const schema = Joi.object() browser: Joi.object() .keys({ type: Joi.string() - .valid('chrome', 'firefox', 'ie', 'msedge') + .valid('chrome', 'firefox', 'ie') .default('chrome'), logPollingMs: Joi.number().default(100), diff --git a/test/functional/config.edge.js b/test/functional/config.edge.js deleted file mode 100644 index ed68b41e8c89ab..00000000000000 --- a/test/functional/config.edge.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export default async function({ readConfigFile }) { - const defaultConfig = await readConfigFile(require.resolve('./config')); - - return { - ...defaultConfig.getAll(), - - browser: { - type: 'msedge', - }, - - junit: { - reportName: 'MS Chromium Edge UI Functional Tests', - }, - }; -} diff --git a/test/functional/services/browser.ts b/test/functional/services/browser.ts index 13d2365c07191b..5017947e95d03b 100644 --- a/test/functional/services/browser.ts +++ b/test/functional/services/browser.ts @@ -47,9 +47,7 @@ export async function BrowserProvider({ getService }: FtrProviderContext) { */ public readonly browserType: string = browserType; - public readonly isChromium: boolean = [Browsers.Chrome, Browsers.ChromiumEdge].includes( - browserType - ); + public readonly isChrome: boolean = browserType === Browsers.Chrome; public readonly isFirefox: boolean = browserType === Browsers.Firefox; diff --git a/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts b/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts index 8b57ecd3c82350..157918df874c82 100644 --- a/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts +++ b/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts @@ -55,7 +55,6 @@ export class WebElementWrapper { private driver: WebDriver = this.webDriver.driver; private Keys = Key; public isW3CEnabled: boolean = (this.webDriver.driver as any).executor_.w3c === true; - public isChromium: boolean = [Browsers.Chrome, Browsers.ChromiumEdge].includes(this.browserType); public static create( webElement: WebElement | WebElementWrapper, @@ -64,7 +63,7 @@ export class WebElementWrapper { timeout: number, fixedHeaderHeight: number, logger: ToolingLog, - browserType: Browsers + browserType: string ): WebElementWrapper { if (webElement instanceof WebElementWrapper) { return webElement; @@ -88,7 +87,7 @@ export class WebElementWrapper { private timeout: number, private fixedHeaderHeight: number, private logger: ToolingLog, - private browserType: Browsers + private browserType: string ) {} private async _findWithCustomTimeout( @@ -244,7 +243,7 @@ export class WebElementWrapper { return this.clearValueWithKeyboard(); } await this.retryCall(async function clearValue(wrapper) { - if (wrapper.isChromium || options.withJS) { + if (wrapper.browserType === Browsers.Chrome || options.withJS) { // https://bugs.chromium.org/p/chromedriver/issues/detail?id=2702 await wrapper.driver.executeScript(`arguments[0].value=''`, wrapper._webElement); } else { @@ -276,7 +275,7 @@ export class WebElementWrapper { await delay(100); } } else { - if (this.isChromium) { + if (this.browserType === Browsers.Chrome) { // https://bugs.chromium.org/p/chromedriver/issues/detail?id=30 await this.retryCall(async function clearValueWithKeyboard(wrapper) { await wrapper.driver.executeScript(`arguments[0].select();`, wrapper._webElement); diff --git a/test/functional/services/remote/browsers.ts b/test/functional/services/remote/browsers.ts index aa6e364d0a09d0..46d81f1737a55f 100644 --- a/test/functional/services/remote/browsers.ts +++ b/test/functional/services/remote/browsers.ts @@ -21,5 +21,4 @@ export enum Browsers { Chrome = 'chrome', Firefox = 'firefox', InternetExplorer = 'ie', - ChromiumEdge = 'msedge', } diff --git a/test/functional/services/remote/remote.ts b/test/functional/services/remote/remote.ts index b0724488cb5db8..e571a1a7e55512 100644 --- a/test/functional/services/remote/remote.ts +++ b/test/functional/services/remote/remote.ts @@ -64,23 +64,18 @@ export async function RemoteProvider({ getService }: FtrProviderContext) { lifecycle, config.get('browser.logPollingMs') ); - const isW3CEnabled = (driver as any).executor_.w3c; const caps = await driver.getCapabilities(); - const browserVersion = caps.get( - isW3CEnabled || browserType === Browsers.ChromiumEdge ? 'browserVersion' : 'version' - ); + const browserVersion = caps.get(isW3CEnabled ? 'browserVersion' : 'version'); - log.info( - `Remote initialized: ${caps.get( - 'browserName' - )} ${browserVersion}, w3c compliance=${isW3CEnabled}, collectingCoverage=${collectCoverage}` - ); + log.info(`Remote initialized: ${caps.get('browserName')} ${browserVersion}`); - if ([Browsers.Chrome, Browsers.ChromiumEdge].includes(browserType)) { + if (browserType === Browsers.Chrome) { log.info( - `${browserType}driver version: ${caps.get(browserType)[`${browserType}driverVersion`]}` + `Chromedriver version: ${ + caps.get('chrome').chromedriverVersion + }, w3c=${isW3CEnabled}, codeCoverage=${collectCoverage}` ); } diff --git a/test/functional/services/remote/webdriver.ts b/test/functional/services/remote/webdriver.ts index fc0b5bbb787c81..3bf5b865aa7ba5 100644 --- a/test/functional/services/remote/webdriver.ts +++ b/test/functional/services/remote/webdriver.ts @@ -31,12 +31,10 @@ import { Builder, Capabilities, By, logging, until } from 'selenium-webdriver'; import chrome from 'selenium-webdriver/chrome'; import firefox from 'selenium-webdriver/firefox'; // @ts-ignore internal modules are not typed -import edge from 'selenium-webdriver/edge'; -import { installDriver } from 'ms-chromium-edge-driver'; -// @ts-ignore internal modules are not typed import { Executor } from 'selenium-webdriver/lib/http'; // @ts-ignore internal modules are not typed import { getLogger } from 'selenium-webdriver/lib/logging'; + import { pollForLogEntry$ } from './poll_for_log_entry'; import { createStdoutSocket } from './create_stdout_stream'; import { preventParallelCalls } from './prevent_parallel_calls'; @@ -65,7 +63,6 @@ Executor.prototype.execute = preventParallelCalls( ); let attemptCounter = 0; -let edgePaths: { driverPath: string | undefined; browserPath: string | undefined }; async function attemptToCreateCommand( log: ToolingLog, browserType: Browsers, @@ -77,46 +74,6 @@ async function attemptToCreateCommand( const buildDriverInstance = async () => { switch (browserType) { - case 'msedge': { - if (edgePaths && edgePaths.browserPath && edgePaths.driverPath) { - const edgeOptions = new edge.Options(); - if (headlessBrowser === '1') { - // @ts-ignore internal modules are not typed - edgeOptions.headless(); - } - // @ts-ignore internal modules are not typed - edgeOptions.setEdgeChromium(true); - // @ts-ignore internal modules are not typed - edgeOptions.setBinaryPath(edgePaths.browserPath); - const session = await new Builder() - .forBrowser('MicrosoftEdge') - .setEdgeOptions(edgeOptions) - .setEdgeService(new edge.ServiceBuilder(edgePaths.driverPath)) - .build(); - return { - session, - consoleLog$: pollForLogEntry$( - session, - logging.Type.BROWSER, - logPollingMs, - lifecycle.cleanup.after$ - ).pipe( - takeUntil(lifecycle.cleanup.after$), - map(({ message, level: { name: level } }) => ({ - message: message.replace(/\\n/g, '\n'), - level, - })) - ), - }; - } else { - throw new Error( - `Chromium Edge session requires browser or driver path to be defined: ${JSON.stringify( - edgePaths - )}` - ); - } - } - case 'chrome': { const chromeCapabilities = Capabilities.chrome(); const chromeOptions = [ @@ -308,11 +265,6 @@ export async function initWebDriver( log.verbose(entry.message); }); - // download Edge driver only in case of usage - if (browserType === Browsers.ChromiumEdge) { - edgePaths = await installDriver(); - } - return await Promise.race([ (async () => { await delay(2 * MINUTE); diff --git a/x-pack/test/functional/config.edge.js b/x-pack/test/functional/config.edge.js deleted file mode 100644 index 882fb6fea36861..00000000000000 --- a/x-pack/test/functional/config.edge.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export default async function({ readConfigFile }) { - const chromeConfig = await readConfigFile(require.resolve('./config')); - - return { - ...chromeConfig.getAll(), - - browser: { - type: 'msedge', - }, - - junit: { - reportName: 'MS Chromium Edge XPack UI Functional Tests', - }, - }; -} diff --git a/yarn.lock b/yarn.lock index 8ca25cc18a8a29..fdfdcada62e2cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2562,11 +2562,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@sindresorhus/is@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.0.tgz#6ad4ca610f696098e92954ab431ff83bea0ce13f" - integrity sha512-lXKXfypKo644k4Da4yXkPCrwcvn6SlUW2X2zFbuflKHNjf0w9htru01bo26uMhleMXsDmnZ12eJLdrAZa9MANg== - "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393" @@ -3466,13 +3461,6 @@ "@svgr/plugin-svgo" "^4.2.0" loader-utils "^1.2.3" -"@szmarczak/http-timer@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" - integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== - dependencies: - defer-to-connect "^2.0.0" - "@testim/chrome-version@^1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.0.7.tgz#0cd915785ec4190f08a3a6acc9b61fc38fb5f1a9" @@ -3721,16 +3709,6 @@ resolved "https://registry.yarnpkg.com/@types/browserslist-useragent/-/browserslist-useragent-3.0.0.tgz#d425c9818182ce71ce53866798cee9c7d41d6e53" integrity sha512-ZBvKzg3yyWNYEkwxAzdmUzp27sFvw+1m080/+2lwrt+eltNefn1f4fnpMyrjOla31p8zLleCYqQXw+3EETfn0w== -"@types/cacheable-request@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" - integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - "@types/caseless@*": version "0.12.2" resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" @@ -4100,11 +4078,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/http-cache-semantics@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" - integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== - "@types/indent-string@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/indent-string/-/indent-string-3.0.0.tgz#9ebb391ceda548926f5819ad16405349641b999f" @@ -4236,13 +4209,6 @@ dependencies: "@types/node" "*" -"@types/keyv@*": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" - integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== - dependencies: - "@types/node" "*" - "@types/license-checker@15.0.0": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/license-checker/-/license-checker-15.0.0.tgz#685d69e2cf61ffd862320434601f51c85e28bba1" @@ -4714,13 +4680,6 @@ "@types/tough-cookie" "*" form-data "^2.5.0" -"@types/responselike@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -4736,10 +4695,10 @@ resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" integrity sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA== -"@types/selenium-webdriver@4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.9.tgz#12621e55b2ef8f6c98bd17fe23fa720c6cba16bd" - integrity sha512-HopIwBE7GUXsscmt/J0DhnFXLSmO04AfxT6b8HAprknwka7pqEWquWDMXxCjd+NUHK9MkCe1SDKKsMiNmCItbQ== +"@types/selenium-webdriver@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.5.tgz#23041a4948c82daf2df9836e4d2358fec10d3e24" + integrity sha512-ma1aL1znI3ptEbSQgbywgadrRCJouPIACSfOl/bPwu/TPNSyyE/+o9jZ6+bpDVTtIdksZuVKpq4SR1ip3DRduw== "@types/semver@^5.5.0": version "5.5.0" @@ -7470,18 +7429,13 @@ binaryextensions@2: resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" integrity sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA== -bindings@1, bindings@^1.5.0: +bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bindings@~1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= - bit-twiddle@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" @@ -8015,7 +7969,7 @@ buffer@^5.1.0, buffer@^5.2.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= @@ -8162,13 +8116,6 @@ cache-loader@^4.1.0: neo-async "^2.6.1" schema-utils "^2.0.0" -cacheable-lookup@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.0.tgz#33b1e56f17507f5cf9bb46075112d65473fb7713" - integrity sha512-s2piO6LvA7xnL1AR03wuEdSx3BZT3tIJpZ56/lcJwzO/6DTJZlTs7X3lrvPxk6d1PlDe6PrVe2TjlUIZNFglAQ== - dependencies: - keyv "^4.0.0" - cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" @@ -8182,19 +8129,6 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -cacheable-request@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" - integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^2.0.0" - cachedir@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -9023,7 +8957,7 @@ clone-regexp@^1.0.0: is-regexp "^1.0.0" is-supported-regexp-flag "^1.0.0" -clone-response@1.0.2, clone-response@^1.0.2: +clone-response@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= @@ -9287,16 +9221,16 @@ commander@4.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== -commander@^2.12.1, commander@^2.20.0, commander@^2.7.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^2.13.0, commander@^2.15.1, commander@^2.16.0, commander@^2.19.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.20.0, commander@^2.7.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^2.8.1: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -10701,7 +10635,7 @@ debug-fabulous@1.X: memoizee "0.4.X" object-assign "4.X" -debug@2, debug@2.6.9, debug@^2.0.0, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.0.0, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -10773,13 +10707,6 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" -decompress-response@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" - integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== - dependencies: - mimic-response "^2.0.0" - decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" @@ -10931,11 +10858,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" - integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== - define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -13158,7 +13080,7 @@ extract-zip@1.6.7: mkdirp "0.5.1" yauzl "2.4.1" -extract-zip@^1.6.6, extract-zip@^1.6.7, extract-zip@^1.7.0: +extract-zip@^1.6.6, extract-zip@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== @@ -13388,17 +13310,6 @@ fetch-mock@^7.3.9: path-to-regexp "^2.2.1" whatwg-url "^6.5.0" -ffi@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ffi/-/ffi-2.3.0.tgz#fa1a7b3d85c0fa8c83d96947a64b5192bc47f858" - integrity sha512-vkPA9Hf9CVuQ5HeMZykYvrZF2QNJ/iKGLkyDkisBnoOOFeFXZQhUPxBARPBIZMJVulvBI2R+jgofW03gyPpJcQ== - dependencies: - bindings "~1.2.0" - debug "2" - nan "2" - ref "1" - ref-struct "1" - figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -14881,27 +14792,6 @@ got@5.6.0: unzip-response "^1.0.0" url-parse-lax "^1.0.0" -got@^10.6.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.6.0.tgz#ac3876261a4d8e5fc4f81186f79955ce7b0501dc" - integrity sha512-3LIdJNTdCFbbJc+h/EH0V5lpNpbJ6Bfwykk21lcQvQsEcrzdi/ltCyQehFHLzJ/ka0UMH4Slg0hkYvAZN9qUDg== - dependencies: - "@sindresorhus/is" "^2.0.0" - "@szmarczak/http-timer" "^4.0.0" - "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^2.0.0" - cacheable-request "^7.0.1" - decompress-response "^5.0.0" - duplexer3 "^0.1.4" - get-stream "^5.0.0" - lowercase-keys "^2.0.0" - mimic-response "^2.1.0" - p-cancelable "^2.0.0" - p-event "^4.0.0" - responselike "^2.0.0" - to-readable-stream "^2.0.0" - type-fest "^0.10.0" - got@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca" @@ -16008,11 +15898,6 @@ http-cache-semantics@3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -17051,11 +16936,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-generator-function@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" - integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== - is-glob@4.0.0, is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" @@ -18345,11 +18225,6 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -18585,7 +18460,7 @@ jsx-to-string@^1.4.0: json-stringify-pretty-compact "^1.0.1" react "^0.14.0" -jszip@^3.2.2: +jszip@^3.1.5: version "3.2.2" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== @@ -18761,13 +18636,6 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" -keyv@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.0.tgz#2d1dab694926b2d427e4c74804a10850be44c12f" - integrity sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog== - dependencies: - json-buffer "3.0.1" - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -19736,11 +19604,6 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lowlight@~1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.1.tgz#ed7c3dffc36f8c1f263735c0fe0c907847c11250" @@ -20394,11 +20257,6 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== -mimic-response@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - mimos@4.x.x: version "4.0.0" resolved "https://registry.yarnpkg.com/mimos/-/mimos-4.0.0.tgz#76e3d27128431cb6482fd15b20475719ad626a5a" @@ -20827,19 +20685,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms-chromium-edge-driver@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ms-chromium-edge-driver/-/ms-chromium-edge-driver-0.2.0.tgz#0e0c6fd9fd1d1d36db97b2b3d7e9d4ba4d2de456" - integrity sha512-RkDsBPnMLjRna7q4LlvtLb+CHPei9gZapnlxm3ayWKk3Ab6HmDsz/17xG2eyqkKX5UcKeo04YlLZ345tO7OolA== - dependencies: - extract-zip "^1.6.7" - got "^10.6.0" - lodash "4.17.15" - tslint "^6.1.0" - tslint-config-prettier "^1.18.0" - util "^0.12.2" - windows-registry "^0.1.5" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -20952,7 +20797,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@2, nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1, nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -21462,11 +21307,6 @@ normalize-url@^3.3.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - now-and-later@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" @@ -22153,11 +21993,6 @@ p-cancelable@^0.4.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== -p-cancelable@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" - integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -22170,7 +22005,7 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-event@^4.0.0, p-event@^4.1.0: +p-event@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.1.0.tgz#e92bb866d7e8e5b732293b1c8269d38e9982bf8e" integrity sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA== @@ -25226,31 +25061,6 @@ redux@^4.0.5: loose-envify "^1.4.0" symbol-observable "^1.2.0" -ref-struct@1, ref-struct@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ref-struct/-/ref-struct-1.1.0.tgz#5d5ee65ad41cefc3a5c5feb40587261e479edc13" - integrity sha1-XV7mWtQc78Olxf60BYcmHkee3BM= - dependencies: - debug "2" - ref "1" - -ref-union@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ref-union/-/ref-union-1.0.1.tgz#3a2397f862f1e75171d687268f43b3f17729f120" - integrity sha1-OiOX+GLx51Fx1ocmj0Oz8Xcp8SA= - dependencies: - debug "2" - ref "1" - -ref@1, ref@^1.2.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ref/-/ref-1.3.5.tgz#0e33f080cdb94a3d95312b2b3b1fd0f82044ca0f" - integrity sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA== - dependencies: - bindings "1" - debug "2" - nan "2" - reflect.ownkeys@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" @@ -25990,13 +25800,6 @@ responselike@1.0.2: dependencies: lowercase-keys "^1.0.0" -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -26555,14 +26358,15 @@ select@^1.1.2: resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= -selenium-webdriver@^4.0.0-alpha.7: - version "4.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz#e3879d8457fd7ad8e4424094b7dc0540d99e6797" - integrity sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw== +selenium-webdriver@^4.0.0-alpha.5: + version "4.0.0-alpha.5" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.5.tgz#e4683b3dbf827d70df09a7e43bf02ebad20fa7c1" + integrity sha512-hktl3DSrhzM59yLhWzDGHIX9o56DvA+cVK7Dw6FcJR6qQ4CGzkaHeXQPcdrslkWMTeq0Ci9AmCxq0EMOvm2Rkg== dependencies: - jszip "^3.2.2" - rimraf "^2.7.1" + jszip "^3.1.5" + rimraf "^2.6.3" tmp "0.0.30" + xml2js "^0.4.19" selfsigned@^1.10.7: version "1.10.7" @@ -28962,11 +28766,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" - integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -29246,37 +29045,6 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" - integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.10.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -29781,11 +29549,6 @@ type-detect@^1.0.0: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" integrity sha1-diIXzAbbJY7EiQihKY6LlRIejqI= -type-fest@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" - integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== - type-fest@^0.3.0, type-fest@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -30483,16 +30246,6 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@^0.12.2: - version "0.12.2" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" - integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - safe-buffer "^5.1.2" - utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -31654,17 +31407,6 @@ window-size@^0.2.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= -windows-registry@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/windows-registry/-/windows-registry-0.1.5.tgz#92c25c960884b0d215e69395f52d8dfaa0ba4ad0" - integrity sha512-gMN3ets1fbdP+TApEbbX2TIfBK3MIH5+p9GMvIFS3CNLr7U0Khe5mRj/T5zvwo/pKdhJgDrCLYyaNSs7HYiBCw== - dependencies: - debug "^2.2.0" - ffi "^2.0.0" - ref "^1.2.0" - ref-struct "^1.0.2" - ref-union "^1.0.0" - windows-release@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" @@ -31973,6 +31715,14 @@ xml-parse-from-string@^1.0.0: resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= +xml2js@^0.4.19, xml2js@^0.4.5: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml2js@^0.4.22: version "0.4.22" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" @@ -31982,14 +31732,6 @@ xml2js@^0.4.22: util.promisify "~1.0.0" xmlbuilder "~11.0.0" -xml2js@^0.4.5: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - xml@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" From 040e7b464edfe58de4612278fbb33f21a99c62d1 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Tue, 14 Apr 2020 07:33:14 -0400 Subject: [PATCH 37/65] Adjust API authorization logging (#63350) --- .../security/server/authorization/api_authorization.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/security/server/authorization/api_authorization.ts b/x-pack/plugins/security/server/authorization/api_authorization.ts index cc672fbc69e068..88b3f2c6f71554 100644 --- a/x-pack/plugins/security/server/authorization/api_authorization.ts +++ b/x-pack/plugins/security/server/authorization/api_authorization.ts @@ -24,7 +24,6 @@ export function initAPIAuthorization( // if there are no tags starting with "access:", just continue if (actionTags.length === 0) { - logger.debug('API endpoint is not marked with "access:" tags, skipping.'); return toolkit.next(); } @@ -34,11 +33,11 @@ export function initAPIAuthorization( // we've actually authorized the request if (checkPrivilegesResponse.hasAllRequested) { - logger.debug(`authorized for "${request.url.path}"`); + logger.debug(`User authorized for "${request.url.path}"`); return toolkit.next(); } - logger.debug(`not authorized for "${request.url.path}"`); + logger.warn(`User not authorized for "${request.url.path}": responding with 404`); return response.notFound(); }); } From 1a6398b983ee3645b175009f150c92dc1a8b70cd Mon Sep 17 00:00:00 2001 From: Sandra Gonzales Date: Tue, 14 Apr 2020 07:56:24 -0400 Subject: [PATCH 38/65] [EPM] add/remove package in package settings page (#63389) * fix bug where assets were not being returned, use archive info for assets * add settings page, add install/remove button and text * check existence of datasources associated with this package * add package title variable to text * update modal text and rename to uninstall --- .../ingest_manager/common/types/models/epm.ts | 2 +- .../common/types/rest_spec/datasource.ts | 15 ++- .../hooks/use_request/datasource.ts | 12 +- .../sections/epm/hooks/index.tsx | 2 +- .../epm/hooks/use_package_install.tsx | 101 +++++++++------ .../screens/detail/confirm_package_delete.tsx | 32 ----- .../detail/confirm_package_install.tsx | 41 +++++- .../detail/confirm_package_uninstall.tsx | 73 +++++++++++ .../sections/epm/screens/detail/content.tsx | 5 +- .../screens/detail/installation_button.tsx | 83 ++++++++---- .../epm/screens/detail/settings_panel.tsx | 118 ++++++++++++++++++ .../epm/screens/detail/side_nav_links.tsx | 1 + .../server/services/epm/packages/get.ts | 4 +- 13 files changed, 381 insertions(+), 108 deletions(-) delete mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_delete.tsx create mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_uninstall.tsx create mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/settings_panel.tsx diff --git a/x-pack/plugins/ingest_manager/common/types/models/epm.ts b/x-pack/plugins/ingest_manager/common/types/models/epm.ts index 5524e7505d74b3..064341c68a97a1 100644 --- a/x-pack/plugins/ingest_manager/common/types/models/epm.ts +++ b/x-pack/plugins/ingest_manager/common/types/models/epm.ts @@ -19,7 +19,7 @@ export enum InstallStatus { uninstalling = 'uninstalling', } -export type DetailViewPanelName = 'overview' | 'data-sources'; +export type DetailViewPanelName = 'overview' | 'data-sources' | 'settings'; export type ServiceName = 'kibana' | 'elasticsearch'; export type AssetType = KibanaAssetType | ElasticsearchAssetType | AgentAssetType; diff --git a/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts b/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts index f630602503f0af..66f734b904cfcb 100644 --- a/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts +++ b/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts @@ -4,10 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ import { Datasource, NewDatasource } from '../models'; -import { ListWithKuery } from './common'; export interface GetDatasourcesRequest { - query: ListWithKuery; + query: { + page: number; + perPage: number; + kuery?: string; + }; } export interface GetOneDatasourceRequest { @@ -16,6 +19,14 @@ export interface GetOneDatasourceRequest { }; } +export interface GetDatasourcesResponse { + items: Datasource[]; + total: number; + page: number; + perPage: number; + success: boolean; +} + export interface CreateDatasourceRequest { body: NewDatasource; } diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_request/datasource.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_request/datasource.ts index d0072f03559932..0d19ecd0cb7351 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_request/datasource.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_request/datasource.ts @@ -3,12 +3,14 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { sendRequest } from './use_request'; +import { sendRequest, useRequest } from './use_request'; import { datasourceRouteService } from '../../services'; import { CreateDatasourceRequest, CreateDatasourceResponse } from '../../types'; import { DeleteDatasourcesRequest, DeleteDatasourcesResponse, + GetDatasourcesRequest, + GetDatasourcesResponse, } from '../../../../../common/types/rest_spec'; export const sendCreateDatasource = (body: CreateDatasourceRequest['body']) => { @@ -26,3 +28,11 @@ export const sendDeleteDatasource = (body: DeleteDatasourcesRequest['body']) => body: JSON.stringify(body), }); }; + +export function useGetDatasources(query: GetDatasourcesRequest['query']) { + return useRequest({ + method: 'get', + path: datasourceRouteService.getListPath(), + query, + }); +} diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/index.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/index.tsx index 48986481b6061a..fbc00fbadcfaad 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/index.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/index.tsx @@ -7,7 +7,7 @@ export { useLinks } from './use_links'; export { useLocalSearch, searchIdField } from './use_local_search'; export { PackageInstallProvider, - useDeletePackage, + useUninstallPackage, useGetPackageInstallStatus, useInstallPackage, useSetPackageInstallStatus, diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/use_package_install.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/use_package_install.tsx index 537a2616f17862..0c5f45cdc47a71 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/use_package_install.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/hooks/use_package_install.tsx @@ -6,8 +6,8 @@ import createContainer from 'constate'; import React, { useCallback, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { NotificationsStart } from 'src/core/public'; -import { useLinks } from '.'; import { toMountPoint } from '../../../../../../../../../src/plugins/kibana_react/public'; import { PackageInfo } from '../../../types'; import { sendInstallPackage, sendRemovePackage } from '../../../hooks'; @@ -25,7 +25,6 @@ type InstallPackageProps = Pick; function usePackageInstall({ notifications }: { notifications: NotificationsStart }) { const [packages, setPackage] = useState({}); - const { toDetailView } = useLinks(); const setPackageInstallStatus = useCallback( ({ name, status }: { name: PackageInfo['name']; status: InstallStatus }) => { @@ -46,34 +45,43 @@ function usePackageInstall({ notifications }: { notifications: NotificationsStar if (res.error) { setPackageInstallStatus({ name, status: InstallStatus.notInstalled }); notifications.toasts.addWarning({ - title: `Failed to install ${title} package`, - text: - 'Something went wrong while trying to install this package. Please try again later.', + title: toMountPoint( + + ), + text: toMountPoint( + + ), iconType: 'alert', }); } else { setPackageInstallStatus({ name, status: InstallStatus.installed }); - const SuccessMsg =

Successfully installed {name}

; notifications.toasts.addSuccess({ - title: `Installed ${title} package`, - text: toMountPoint(SuccessMsg), + title: toMountPoint( + + ), + text: toMountPoint( + + ), }); - - // TODO: this should probably live somewhere else and use , - // this hook could return the request state and a component could - // use that state. the component should be able to unsubscribe to prevent memory leaks - const packageUrl = toDetailView({ name, version }); - const dataSourcesUrl = toDetailView({ - name, - version, - panel: 'data-sources', - withAppRoot: false, - }); - if (window.location.href.includes(packageUrl)) window.location.hash = dataSourcesUrl; } }, - [notifications.toasts, setPackageInstallStatus, toDetailView] + [notifications.toasts, setPackageInstallStatus] ); const getPackageInstallStatus = useCallback( @@ -83,7 +91,7 @@ function usePackageInstall({ notifications }: { notifications: NotificationsStar [packages] ); - const deletePackage = useCallback( + const uninstallPackage = useCallback( async ({ name, version, title }: Pick) => { setPackageInstallStatus({ name, status: InstallStatus.uninstalling }); const pkgkey = `${name}-${version}`; @@ -92,30 +100,43 @@ function usePackageInstall({ notifications }: { notifications: NotificationsStar if (res.error) { setPackageInstallStatus({ name, status: InstallStatus.installed }); notifications.toasts.addWarning({ - title: `Failed to delete ${title} package`, - text: 'Something went wrong while trying to delete this package. Please try again later.', + title: toMountPoint( + + ), + text: toMountPoint( + + ), iconType: 'alert', }); } else { setPackageInstallStatus({ name, status: InstallStatus.notInstalled }); - const SuccessMsg =

Successfully deleted {title}

; - notifications.toasts.addSuccess({ - title: `Deleted ${title} package`, - text: toMountPoint(SuccessMsg), - }); - - const packageUrl = toDetailView({ name, version }); - const dataSourcesUrl = toDetailView({ - name, - version, - panel: 'data-sources', + title: toMountPoint( + + ), + text: toMountPoint( + + ), }); - if (window.location.href.includes(packageUrl)) window.location.href = dataSourcesUrl; } }, - [notifications.toasts, setPackageInstallStatus, toDetailView] + [notifications.toasts, setPackageInstallStatus] ); return { @@ -123,7 +144,7 @@ function usePackageInstall({ notifications }: { notifications: NotificationsStar installPackage, setPackageInstallStatus, getPackageInstallStatus, - deletePackage, + uninstallPackage, }; } @@ -132,11 +153,11 @@ export const [ useInstallPackage, useSetPackageInstallStatus, useGetPackageInstallStatus, - useDeletePackage, + useUninstallPackage, ] = createContainer( usePackageInstall, value => value.installPackage, value => value.setPackageInstallStatus, value => value.getPackageInstallStatus, - value => value.deletePackage + value => value.uninstallPackage ); diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_delete.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_delete.tsx deleted file mode 100644 index 2b3be04ac476b4..00000000000000 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_delete.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import { EuiCallOut, EuiConfirmModal, EuiOverlayMask } from '@elastic/eui'; -import React from 'react'; - -interface ConfirmPackageDeleteProps { - onCancel: () => void; - onConfirm: () => void; - packageName: string; - numOfAssets: number; -} -export const ConfirmPackageDelete = (props: ConfirmPackageDeleteProps) => { - const { onCancel, onConfirm, packageName, numOfAssets } = props; - return ( - - - - - - ); -}; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_install.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_install.tsx index 137d9cf226b4d2..ac30815a941ee7 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_install.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_install.tsx @@ -5,6 +5,7 @@ */ import { EuiCallOut, EuiConfirmModal, EuiOverlayMask, EuiSpacer } from '@elastic/eui'; import React from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; interface ConfirmPackageInstallProps { onCancel: () => void; @@ -17,18 +18,46 @@ export const ConfirmPackageInstall = (props: ConfirmPackageInstallProps) => { return ( + } onCancel={onCancel} onConfirm={onConfirm} - cancelButtonText="Cancel" - confirmButtonText="Install package" + cancelButtonText={ + + } + confirmButtonText={ + + } defaultFocusedButton="confirm" > - + + } + />

- and will only be accessible to users who have permission to view this Space. Elasticsearch - assets are installed globally and will be accessible to all Kibana users. +

diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_uninstall.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_uninstall.tsx new file mode 100644 index 00000000000000..14b9bf77c3a007 --- /dev/null +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/confirm_package_uninstall.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { EuiCallOut, EuiConfirmModal, EuiOverlayMask, EuiSpacer } from '@elastic/eui'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; + +interface ConfirmPackageUninstallProps { + onCancel: () => void; + onConfirm: () => void; + packageName: string; + numOfAssets: number; +} +export const ConfirmPackageUninstall = (props: ConfirmPackageUninstallProps) => { + const { onCancel, onConfirm, packageName, numOfAssets } = props; + return ( + + + } + onCancel={onCancel} + onConfirm={onConfirm} + cancelButtonText={ + + } + confirmButtonText={ + + } + defaultFocusedButton="confirm" + buttonColor="danger" + > + + } + > +

+ +

+
+ +

+ +

+
+
+ ); +}; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/content.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/content.tsx index 384cbbeed378e7..0d4b3958953225 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/content.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/content.tsx @@ -15,6 +15,7 @@ import { CenterColumn, LeftColumn, RightColumn } from './layout'; import { OverviewPanel } from './overview_panel'; import { SideNavLinks } from './side_nav_links'; import { DataSourcesPanel } from './data_sources_panel'; +import { SettingsPanel } from './settings_panel'; type ContentProps = PackageInfo & Pick & { hasIconPanel: boolean }; export function Content(props: ContentProps) { @@ -49,8 +50,10 @@ export function Content(props: ContentProps) { type ContentPanelProps = PackageInfo & Pick; export function ContentPanel(props: ContentPanelProps) { - const { panel, name, version } = props; + const { panel, name, version, assets, title } = props; switch (panel) { + case 'settings': + return ; case 'data-sources': return ; case 'overview': diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/installation_button.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/installation_button.tsx index 8a8afed5570ed9..cbbf1ce53c4ea3 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/installation_button.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/installation_button.tsx @@ -5,21 +5,21 @@ */ import { EuiButton } from '@elastic/eui'; import React, { Fragment, useCallback, useMemo, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; import { PackageInfo, InstallStatus } from '../../../../types'; import { useCapabilities } from '../../../../hooks'; -import { useDeletePackage, useGetPackageInstallStatus, useInstallPackage } from '../../hooks'; -import { ConfirmPackageDelete } from './confirm_package_delete'; +import { useUninstallPackage, useGetPackageInstallStatus, useInstallPackage } from '../../hooks'; +import { ConfirmPackageUninstall } from './confirm_package_uninstall'; import { ConfirmPackageInstall } from './confirm_package_install'; -interface InstallationButtonProps { - package: PackageInfo; -} - +type InstallationButtonProps = Pick & { + disabled: boolean; +}; export function InstallationButton(props: InstallationButtonProps) { - const { assets, name, title, version } = props.package; + const { assets, name, title, version, disabled = true } = props; const hasWriteCapabilites = useCapabilities().write; const installPackage = useInstallPackage(); - const deletePackage = useDeletePackage(); + const uninstallPackage = useUninstallPackage(); const getPackageInstallStatus = useGetPackageInstallStatus(); const installationStatus = getPackageInstallStatus(name); @@ -36,11 +36,12 @@ export function InstallationButton(props: InstallationButtonProps) { toggleModal(); }, [installPackage, name, title, toggleModal, version]); - const handleClickDelete = useCallback(() => { - deletePackage({ name, version, title }); + const handleClickUninstall = useCallback(() => { + uninstallPackage({ name, version, title }); toggleModal(); - }, [deletePackage, name, title, toggleModal, version]); + }, [uninstallPackage, name, title, toggleModal, version]); + // counts the number of assets in the package const numOfAssets = useMemo( () => Object.entries(assets).reduce( @@ -56,30 +57,68 @@ export function InstallationButton(props: InstallationButtonProps) { ); const installButton = ( - - {isInstalling ? 'Installing' : 'Install package'} + + {isInstalling ? ( + + ) : ( + + )} ); - const installedButton = ( - - {isInstalling ? 'Deleting' : 'Delete package'} + const uninstallButton = ( + + {isRemoving ? ( + + ) : ( + + )} ); - const deletionModal = ( - ); - const installationModal = ( + const installModal = ( - {isInstalled ? installedButton : installButton} - {isModalVisible && (isInstalled ? deletionModal : installationModal)} + {isInstalled || isRemoving ? uninstallButton : installButton} + {isModalVisible && (isInstalled ? uninstallModal : installModal)} ) : null; } diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/settings_panel.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/settings_panel.tsx new file mode 100644 index 00000000000000..ff7ecf97714b6b --- /dev/null +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/settings_panel.tsx @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { EuiTitle, EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import { EuiSpacer } from '@elastic/eui'; +import { useGetPackageInstallStatus } from '../../hooks'; +import { InstallStatus, PackageInfo } from '../../../../types'; +import { InstallationButton } from './installation_button'; +import { useGetDatasources } from '../../../../hooks'; + +export const SettingsPanel = ( + props: Pick +) => { + const getPackageInstallStatus = useGetPackageInstallStatus(); + const { data: datasourcesData } = useGetDatasources({ + perPage: 0, + page: 1, + kuery: `datasources.package.name:${props.name}`, + }); + const { name, title } = props; + const packageInstallStatus = getPackageInstallStatus(name); + const packageHasDatasources = !!datasourcesData?.total; + + return ( + + +

+ +

+
+ + {packageInstallStatus === InstallStatus.notInstalled || + packageInstallStatus === InstallStatus.installing ? ( +
+ +

+ +

+
+ +

+ +

+
+ ) : ( +
+ +

+ +

+
+ +

+ +

+
+ )} + + +

+ +

+
+
+ {packageHasDatasources && ( +

+ + + + ), + }} + /> +

+ )} +
+ ); +}; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/side_nav_links.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/side_nav_links.tsx index 39a6fca2e43180..05729ccfc1af42 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/side_nav_links.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/epm/screens/detail/side_nav_links.tsx @@ -17,6 +17,7 @@ export type NavLinkProps = Pick & { const PanelDisplayNames: Record = { overview: 'Overview', 'data-sources': 'Data Sources', + settings: 'Settings', }; export function SideNavLinks({ name, version, active }: NavLinkProps) { diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/get.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/get.ts index 0e2c2a3d260736..d76584225877c2 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/get.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/get.ts @@ -67,7 +67,7 @@ export async function getPackageInfo(options: { pkgVersion: string; }): Promise { const { savedObjectsClient, pkgName, pkgVersion } = options; - const [item, savedObject] = await Promise.all([ + const [item, savedObject, assets] = await Promise.all([ Registry.fetchInfo(pkgName, pkgVersion), getInstallationObject({ savedObjectsClient, pkgName }), Registry.getArchiveInfo(pkgName, pkgVersion), @@ -80,7 +80,7 @@ export async function getPackageInfo(options: { const updated = { ...item, title: item.title || nameAsTitle(item.name), - assets: Registry.groupPathsByService(item?.assets || []), + assets: Registry.groupPathsByService(assets || []), }; return createInstallableFrom(updated, savedObject); } From 69ed664dd93a2825679a3d1ff920dd7ccc7823d4 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Tue, 14 Apr 2020 06:58:56 -0500 Subject: [PATCH 39/65] Index Pattern Field class - factor out copy_field code for future typescripting (#63083) * Index Pattern Field class - factor out copy_field code for future typescripting --- ...n-plugins-data-public.indexpatternfield.md | 1 - ...ns-data-public.indexpatternfield.routes.md | 11 --- ...ugins-data-public.indexpatternfieldlist.md | 2 +- ...ata-public.indexpatternfieldlist.update.md | 2 +- .../create_edit_field/create_edit_field.js | 1 - .../edit_index_pattern/edit_index_pattern.js | 10 ++- .../indexed_fields_table.test.js.snap | 5 -- .../indexed_fields_table.js | 3 +- .../scripted_fields_table.tsx | 2 +- .../ui/public/field_editor/field_editor.js | 13 +-- .../lib/__tests__/copy_field.test.js | 48 ----------- .../ui/public/field_editor/lib/copy_field.js | 82 ------------------- .../ui/public/field_editor/lib/index.js | 1 - .../public/index_patterns/fields/field.ts | 7 -- .../index_patterns/fields/field_list.ts | 13 +-- src/plugins/data/public/public.api.md | 4 +- 16 files changed, 22 insertions(+), 183 deletions(-) delete mode 100644 docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md delete mode 100644 src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js delete mode 100644 src/legacy/ui/public/field_editor/lib/copy_field.js diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md index 430590c7a25058..121ae80734dfd3 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md @@ -29,7 +29,6 @@ export declare class Field implements IFieldType | [format](./kibana-plugin-plugins-data-public.indexpatternfield.format.md) | | any | | | [lang](./kibana-plugin-plugins-data-public.indexpatternfield.lang.md) | | string | | | [name](./kibana-plugin-plugins-data-public.indexpatternfield.name.md) | | string | | -| [routes](./kibana-plugin-plugins-data-public.indexpatternfield.routes.md) | | Record<string, string> | | | [script](./kibana-plugin-plugins-data-public.indexpatternfield.script.md) | | string | | | [scripted](./kibana-plugin-plugins-data-public.indexpatternfield.scripted.md) | | boolean | | | [searchable](./kibana-plugin-plugins-data-public.indexpatternfield.searchable.md) | | boolean | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md deleted file mode 100644 index 664a7b7b7ca0e5..00000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md +++ /dev/null @@ -1,11 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternField](./kibana-plugin-plugins-data-public.indexpatternfield.md) > [routes](./kibana-plugin-plugins-data-public.indexpatternfield.routes.md) - -## IndexPatternField.routes property - -Signature: - -```typescript -routes: Record; -``` diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md index 4b7184b7dc151e..478b73f5f85813 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md @@ -24,5 +24,5 @@ export declare class FieldList extends Array implements IFieldList | [getByName](./kibana-plugin-plugins-data-public.indexpatternfieldlist.getbyname.md) | | (name: string) => Field | undefined | | | [getByType](./kibana-plugin-plugins-data-public.indexpatternfieldlist.getbytype.md) | | (type: string) => any[] | | | [remove](./kibana-plugin-plugins-data-public.indexpatternfieldlist.remove.md) | | (field: IFieldType) => void | | -| [update](./kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md) | | (field: Field) => void | | +| [update](./kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md) | | (field: Record<string, any>) => void | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md index ca03ec4b728932..d5156ed41e493e 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md @@ -7,5 +7,5 @@ Signature: ```typescript -update: (field: Field) => void; +update: (field: Record) => void; ``` diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js index 0dcf778a5a6629..3569e9caf4e275 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js @@ -53,7 +53,6 @@ const renderFieldEditor = ( indexPattern={indexPattern} field={field} helpers={{ - Field: IndexPatternField, getConfig, $http, fieldFormatEditors, diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js index 594430ca01f4ce..c65054f583ef2d 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js @@ -49,6 +49,8 @@ const TAB_INDEXED_FIELDS = 'indexedFields'; const TAB_SCRIPTED_FIELDS = 'scriptedFields'; const TAB_SOURCE_FILTERS = 'sourceFilters'; +const EDIT_FIELD_PATH = '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}'; + function updateSourceFiltersTable($scope) { $scope.$$postDigest(() => { const node = document.getElementById(REACT_SOURCE_FILTERS_DOM_ELEMENT_ID); @@ -97,8 +99,8 @@ function updateScriptedFieldsTable($scope) { fieldFilter={$scope.fieldFilter} scriptedFieldLanguageFilter={$scope.scriptedFieldLanguageFilter} helpers={{ - redirectToRoute: (obj, route) => { - $scope.kbnUrl.changeToRoute(obj, route); + redirectToRoute: field => { + $scope.kbnUrl.changePath(EDIT_FIELD_PATH, field); $scope.$apply(); }, getRouteHref: (obj, route) => $scope.kbnUrl.getRouteHref(obj, route), @@ -140,8 +142,8 @@ function updateIndexedFieldsTable($scope) { fieldWildcardMatcher={$scope.fieldWildcardMatcher} indexedFieldTypeFilter={$scope.indexedFieldTypeFilter} helpers={{ - redirectToRoute: (obj, route) => { - $scope.kbnUrl.changeToRoute(obj, route); + redirectToRoute: field => { + $scope.kbnUrl.changePath(EDIT_FIELD_PATH, field); $scope.$apply(); }, getFieldInfo: $scope.getFieldInfo, diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap index dc77fe6c8a69d6..b38036a0c2bf0f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap @@ -18,7 +18,6 @@ exports[`IndexedFieldsTable should filter based on the query bar 1`] = ` "indexPattern": undefined, "info": undefined, "name": "Elastic", - "routes": undefined, "searchable": true, }, ] @@ -45,7 +44,6 @@ exports[`IndexedFieldsTable should filter based on the type filter 1`] = ` "indexPattern": undefined, "info": undefined, "name": "timestamp", - "routes": undefined, "type": "date", }, ] @@ -72,7 +70,6 @@ exports[`IndexedFieldsTable should render normally 1`] = ` "indexPattern": undefined, "info": undefined, "name": "Elastic", - "routes": undefined, "searchable": true, }, Object { @@ -82,7 +79,6 @@ exports[`IndexedFieldsTable should render normally 1`] = ` "indexPattern": undefined, "info": undefined, "name": "timestamp", - "routes": undefined, "type": "date", }, Object { @@ -92,7 +88,6 @@ exports[`IndexedFieldsTable should render normally 1`] = ` "indexPattern": undefined, "info": undefined, "name": "conflictingField", - "routes": undefined, "type": "conflict", }, ] diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js index 652efbe98067f1..074e5784f3dae6 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js @@ -65,7 +65,6 @@ export class IndexedFieldsTable extends Component { return { ...field, displayName: field.displayName, - routes: field.routes, indexPattern: field.indexPattern, format: getFieldFormat(indexPattern, field.name), excluded: fieldWildcardMatch ? fieldWildcardMatch(field.name) : false, @@ -104,7 +103,7 @@ export class IndexedFieldsTable extends Component {
Agx76FP9;`RP8p>K-?oo3n9pJ#u0OjUSlXV|w=RBOyYslxmK1NZ6afR{ z3WG)lXe@N$?ULXqOQo>@Jiym)u~jrj#!sN}s?h)8_Glo+ucpS&MAi2hjWJz&!;Ria zB|*AbO2m3(*Q0z^Nk;(zisoKH1o_tu!*?bDyfzx_-)+H)5kdc;I`n82ZNNe(l|$&C zfidHl`rIA^l!ZiG;{%8%d8>MobEz7gKUToO_F62{Vrz{}qLFY}Ef1?Gt;0~o@PfvL z_uLRvzP)60-k*`F)6e{3y~fvcPrfI7kc$@QDN`*5OMn=({S^}iK)g+RTmkw zvexuT1_Z(@P?7_^vS%)ta4ju2u6%Mqyt6gy(Ydghjc}_yghSZKGm`(wgDm{(25z}~ zdQG)y-_sgoJq)9khU|`|Z;b8vSYD)+%LkbAl(J!hD_9buOKXb``?eV|)EVHdm@eV_ zbF+1mGvKO?rcMBK%($|Dcza)Cc(!c^B@9?Lj)YGdUtQSm?}v?RHp1^N^vmE^4~^}@ zYWsyU8(|mAwB-4kMnYqh|HT9a==Sd&(Qy#YyDkJh&)RNib8y;jSlERC)~GZd9=_RT zs(Y;}C*p3deJP&*%*g=R=$L*@>*h4NvFB^15=-}9zn@KPj##!E`=N_>ev7}rP9kf5 zWrRnNn7*?bQ>GL9;JO-RsPx?XCDzUd0@>dqrX?3@G~yvO&+o%!Yrp+he$~AeU{-fq zA-KD|Dx9DWDgeZ*pyZkE(O~P9vzRyt_4}g%3DgcN?YfTw zcKNReS>u0VZu5r#T%*T#EX}*3*|~zepR%qEc-L t@YYzZ@LJHYo(PFyG&&7$X@ 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/ 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%0Ajk^cTBDf5MIV^*xGnX-IyK;!to& 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%0A-u)(+JN=&jSQVuGgHz2})5-77DS$to$x%-)x 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�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%0DH-hF}t}(70MP^-9;d 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%0D%&VtwN{!(}%v>Y78`( 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

kBOwEJO4SY`G-@*33&gHmg)HqT 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

this.props.helpers.redirectToRoute(field, 'edit')} + editField={field => this.props.helpers.redirectToRoute(field)} /> ); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx index ba044296a693a9..e8dfbd6496057f 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx @@ -155,7 +155,7 @@ export class ScriptedFieldsTable extends Component<
this.props.helpers.redirectToRoute(field, 'edit')} + editField={field => this.props.helpers.redirectToRoute(field)} deleteField={this.startDeleteField} /> diff --git a/src/legacy/ui/public/field_editor/field_editor.js b/src/legacy/ui/public/field_editor/field_editor.js index 43461c4c689be6..e90cb110ac3048 100644 --- a/src/legacy/ui/public/field_editor/field_editor.js +++ b/src/legacy/ui/public/field_editor/field_editor.js @@ -66,7 +66,7 @@ import { ScriptingHelpFlyout } from './components/scripting_help'; import { FieldFormatEditor } from './components/field_format_editor'; import { FIELD_TYPES_BY_LANG, DEFAULT_FIELD_TYPES } from './constants'; -import { copyField, executeScript, isScriptValid } from './lib'; +import { executeScript, isScriptValid } from './lib'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; @@ -100,7 +100,6 @@ export class FieldEditor extends PureComponent { indexPattern: PropTypes.object.isRequired, field: PropTypes.object.isRequired, helpers: PropTypes.shape({ - Field: PropTypes.func.isRequired, getConfig: PropTypes.func.isRequired, $http: PropTypes.func.isRequired, fieldFormatEditors: PropTypes.object.isRequired, @@ -111,11 +110,7 @@ export class FieldEditor extends PureComponent { constructor(props) { super(props); - const { - field, - indexPattern, - helpers: { Field }, - } = props; + const { field, indexPattern } = props; this.state = { isReady: false, @@ -125,7 +120,7 @@ export class FieldEditor extends PureComponent { fieldTypes: [], fieldTypeFormats: [], existingFieldNames: indexPattern.fields.map(f => f.name), - field: copyField(field, indexPattern, Field), + field: { ...field, format: field.format }, fieldFormatId: undefined, fieldFormatParams: {}, showScriptingHelp: false, @@ -730,7 +725,7 @@ export class FieldEditor extends PureComponent { }; saveField = async () => { - const field = this.state.field.toActualField(); + const field = this.state.field; const { indexPattern } = this.props; const { fieldFormatId } = this.state; diff --git a/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js b/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js deleted file mode 100644 index 2cee45742ab81d..00000000000000 --- a/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { copyField } from '../copy_field'; - -const field = { - name: 'test_field', - scripted: true, - type: 'number', - lang: 'painless', -}; - -describe('copyField', () => { - it('should copy a field', () => { - const copiedField = copyField(field, {}, {}); - copiedField.name = 'test_name_change'; - - // Check that copied field has `toActualField()` method - expect(typeof copiedField.toActualField).toEqual('function'); - - // Check that we did not modify the original field object when - // modifying copied field - expect(field.toActualField).toEqual(undefined); - expect(field.name).toEqual('test_field'); - - expect(copiedField).not.toEqual(field); - expect(copiedField.name).toEqual('test_name_change'); - expect(copiedField.scripted).toEqual(field.scripted); - expect(copiedField.type).toEqual(field.type); - expect(copiedField.lang).toEqual(field.lang); - }); -}); diff --git a/src/legacy/ui/public/field_editor/lib/copy_field.js b/src/legacy/ui/public/field_editor/lib/copy_field.js deleted file mode 100644 index bfc1cb8480d5d4..00000000000000 --- a/src/legacy/ui/public/field_editor/lib/copy_field.js +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { has } from 'lodash'; - -/** - * Fully clones a Field object, so that modifications can be performed on - * the copy without affecting original field. Field objects contain - * enumerable and non-eumerable properties that may or may not be writable. - * The function copies all properties as property descriptors into - * `newFieldProps`, overrides getter and setter, and returns a new object - * created from that. - * - * @param {object} field - Field object to copy - * @param {object} indexPattern - index pattern object the field belongs to - * @param {object} Field - Field object type - * @return {object} the cloned object - */ -export const copyField = (field, indexPattern, Field) => { - const changes = {}; - const newFieldProps = { - // When we are ready to save the copied field back into the index pattern, - // we use `toActualField()` to retrieve an actual `Field` type object, using - // its original properties with our "changes" applied. - toActualField: { - value: () => { - return new Field(indexPattern, { - ...field.$$spec, - ...changes, - }); - }, - }, - }; - - // Index pattern `Field` objects are created with custom property - // descriptors using `ObjDefine`. - // - // Each property of a `Field` type object could be enumerable/non-enumerable, - // writable/not writable, configurable/not configurable, and have custom - // getter and setter. We can't use the original `field` object directly for - // creating a new field or editing a new field, since we need all the - // properties to be editable. - // - // A normal copy of `field` (i.e. `const newField = { ...field }`) will only - // copy enumerable properties and copy each property's descriptors (not - // writable, etc). - // - // So we copy `field`'s **property descriptors** into `newFieldProps` - // and modify them so that they are "writable" with a getter/setter that - // stores and retrieves changes into/from another object (`changes`). - Object.getOwnPropertyNames(field).forEach(function(prop) { - const desc = Object.getOwnPropertyDescriptor(field, prop); - - newFieldProps[prop] = { - enumerable: desc.enumerable, - get: function() { - return has(changes, prop) ? changes[prop] : field[prop]; - }, - set: function(v) { - changes[prop] = v; - }, - }; - }); - - return Object.create(null, newFieldProps); -}; diff --git a/src/legacy/ui/public/field_editor/lib/index.js b/src/legacy/ui/public/field_editor/lib/index.js index c74bb0cc2ef8ab..c9dd9d03b74f7b 100644 --- a/src/legacy/ui/public/field_editor/lib/index.js +++ b/src/legacy/ui/public/field_editor/lib/index.js @@ -17,5 +17,4 @@ * under the License. */ -export { copyField } from './copy_field'; export { executeScript, isScriptValid } from './validate_script'; diff --git a/src/plugins/data/public/index_patterns/fields/field.ts b/src/plugins/data/public/index_patterns/fields/field.ts index 1554565d1403ee..6370dcdf2db6f4 100644 --- a/src/plugins/data/public/index_patterns/fields/field.ts +++ b/src/plugins/data/public/index_patterns/fields/field.ts @@ -45,9 +45,6 @@ export class Field implements IFieldType { subType?: IFieldSubType; displayName?: string; format: any; - routes: Record = { - edit: '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}', - }; $$spec: FieldSpec; constructor( @@ -146,7 +143,3 @@ export class Field implements IFieldType { return obj.create(); } } - -Field.prototype.routes = { - edit: '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}', -}; diff --git a/src/plugins/data/public/index_patterns/fields/field_list.ts b/src/plugins/data/public/index_patterns/fields/field_list.ts index 03214a8c96427a..d6067280fd7b67 100644 --- a/src/plugins/data/public/index_patterns/fields/field_list.ts +++ b/src/plugins/data/public/index_patterns/fields/field_list.ts @@ -70,11 +70,12 @@ export class FieldList extends Array implements IFieldList { this.splice(fieldIndex, 1); }; - update = (field: Field) => { - const index = this.findIndex(f => f.name === field.name); - this.splice(index, 1, field); - this.setByName(field); - this.removeByGroup(field); - this.setByGroup(field); + update = (field: FieldSpec) => { + const newField = new Field(this.indexPattern, field, this.shortDotsEnable); + const index = this.findIndex(f => f.name === newField.name); + this.splice(index, 1, newField); + this.setByName(newField); + this.removeByGroup(newField); + this.setByGroup(newField); }; } diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index cef82b27b1b5bc..62967a7071d825 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -947,8 +947,6 @@ export class IndexPatternField implements IFieldType { // (undocumented) name: string; // (undocumented) - routes: Record; - // (undocumented) script?: string; // (undocumented) scripted?: boolean; @@ -978,7 +976,7 @@ export class IndexPatternFieldList extends Array implements I // (undocumented) remove: (field: IFieldType) => void; // (undocumented) - update: (field: IndexPatternField) => void; + update: (field: Record) => void; } // Warning: (ae-missing-release-tag) "indexPatterns" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) From e6095fcd03120b62c6d65dcdd23ea7a0ba6d3aab Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Tue, 14 Apr 2020 08:35:31 -0400 Subject: [PATCH 40/65] [Uptime] Remove pings graphql (#59392) * WIP replacing GQL with redux/rest. * Finish implementing migration. * Introduce new connected component for ping list. * Replace GraphQL type with io-ts. * Update some broken tests. * Add test for new helper function. * Write test snapshots. * Migrate api tests from graphql to rest. * Update fixtures that rely on pings. * Move ping types to runtime_types folder with rest of io-ts files. * Update Ping type location and imports, type checking. * Remove reliance on fixtures for ping functional API tests. * Fix broken unit tests. * Fix broken types. * Remove local state storage from parent components. * Add functional test to cover Ping List functionality. * Fix monitor page functional test that was broken by merge conflicts. * Fix broken tests. * Fix broken API test. * Replace a test with a describe block that will pre-navigate all tests. * Delete unused reducer keys. * Re-introduce loading to ping list reducer. * Inroduce code that will cause PingList to re-fetch when refresh button is pressed. * Update expanded rows to support multiple concurrent expanded rows. * Modify pingList reducer to have singular optional error field. * Delete unnecessary helper code. * Delete unused interface. * Add runtime_type to parse getPings params, fix pagination index. * Add dedicated monitor type to runtime_types. * Fix broken tests. * Fix broken tests. * Rename '@timestamp' property to 'timestamp' on Ping type. * Fix broken type and key pings list table on document ID instead of timestamp. * Fix broken unit tests. * Fix broken tests and types. * Fix broken functional test. --- .../plugins/uptime/common/graphql/types.ts | 340 ---- .../uptime/common/runtime_types/common.ts | 6 + .../uptime/common/runtime_types/index.ts | 1 + .../ping/histogram.ts | 12 + .../runtime_types/ping}/index.ts | 3 +- .../uptime/common/runtime_types/ping/ping.ts | 181 ++ .../plugins/uptime/common/types/index.ts | 2 - .../connected/charts/ping_histogram.tsx | 2 +- .../public/components/connected/index.ts | 1 + .../monitor/status_bar_container.tsx | 2 +- .../components/connected/pings/index.ts | 7 + .../components/connected/pings/ping_list.tsx | 52 + .../functional/charts/ping_histogram.tsx | 2 +- .../public/components/functional/index.ts | 2 +- .../__test__/monitor_ssl_certificate.test.tsx | 4 +- .../__test__/monitor_status.bar.test.tsx | 6 +- .../monitor_ssl_certificate.tsx | 5 +- .../monitor_status_bar/monitor_status_bar.tsx | 2 +- .../__snapshots__/ping_list.test.tsx.snap | 665 ++++--- .../ping_list/__tests__/expanded_row.test.tsx | 14 +- .../ping_list/__tests__/ping_list.test.tsx | 418 +++-- .../functional/ping_list/expanded_row.tsx | 4 +- .../components/functional/ping_list/index.tsx | 2 +- .../functional/ping_list/ping_list.tsx | 343 ++-- .../plugins/uptime/public/hooks/index.ts | 1 + .../plugins/uptime/public/pages/monitor.tsx | 46 +- .../uptime/public/queries/pings_query.ts | 73 - .../public/state/actions/monitor_status.ts | 2 +- .../uptime/public/state/actions/ping.ts | 11 +- .../uptime/public/state/api/monitor_status.ts | 4 +- .../plugins/uptime/public/state/api/ping.ts | 19 +- .../public/state/effects/fetch_effect.ts | 2 +- .../uptime/public/state/effects/index.ts | 3 +- .../uptime/public/state/effects/ping.ts | 15 +- .../uptime/public/state/reducers/index.ts | 2 + .../public/state/reducers/monitor_status.ts | 2 +- .../uptime/public/state/reducers/ping.ts | 2 +- .../uptime/public/state/reducers/ping_list.ts | 48 + .../state/selectors/__tests__/index.test.ts | 8 + .../uptime/public/state/selectors/index.ts | 5 + x-pack/plugins/uptime/server/graphql/index.ts | 3 +- .../graphql/monitor_states/schema.gql.ts | 2 +- .../uptime/server/graphql/pings/index.ts | 1 - .../uptime/server/graphql/pings/resolvers.ts | 59 - .../uptime/server/graphql/pings/schema.gql.ts | 26 - .../__tests__/get_latest_monitor.test.ts | 25 +- .../lib/requests/__tests__/get_pings.test.ts | 273 ++- .../server/lib/requests/get_latest_monitor.ts | 12 +- .../server/lib/requests/get_ping_histogram.ts | 6 +- .../uptime/server/lib/requests/get_pings.ts | 65 +- .../uptime/server/lib/requests/index.ts | 2 +- .../uptime/server/lib/requests/types.ts | 72 - .../server/lib/requests/uptime_requests.ts | 13 +- .../plugins/uptime/server/rest_api/index.ts | 4 +- .../uptime/server/rest_api/pings/get_all.ts | 47 - .../uptime/server/rest_api/pings/get_pings.ts | 24 +- .../uptime/server/rest_api/pings/index.ts | 1 + .../apis/uptime/feature_controls.ts | 2 +- .../apis/uptime/get_all_pings.ts | 18 +- .../uptime/graphql/fixtures/ping_list.json | 320 ---- .../graphql/fixtures/ping_list_count.json | 1569 ----------------- .../fixtures/ping_list_monitor_id.json | 475 ----- .../graphql/fixtures/ping_list_sort.json | 165 -- .../apis/uptime/graphql/index.ts | 1 - .../apis/uptime/graphql/ping_list.ts | 116 -- .../test/api_integration/apis/uptime/index.ts | 11 +- .../rest/fixtures/monitor_latest_status.json | 15 +- .../api_integration/apis/uptime/rest/index.ts | 5 +- .../apis/uptime/rest/ping_list.ts | 178 ++ x-pack/test/functional/apps/uptime/monitor.ts | 29 +- .../functional/page_objects/uptime_page.ts | 16 +- .../functional/services/uptime/monitor.ts | 17 + 72 files changed, 1695 insertions(+), 4196 deletions(-) rename x-pack/legacy/plugins/uptime/common/{types => runtime_types}/ping/histogram.ts (77%) rename x-pack/legacy/plugins/uptime/{public/queries => common/runtime_types/ping}/index.ts (79%) create mode 100644 x-pack/legacy/plugins/uptime/common/runtime_types/ping/ping.ts create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/pings/index.ts create mode 100644 x-pack/legacy/plugins/uptime/public/components/connected/pings/ping_list.tsx delete mode 100644 x-pack/legacy/plugins/uptime/public/queries/pings_query.ts create mode 100644 x-pack/legacy/plugins/uptime/public/state/reducers/ping_list.ts delete mode 100644 x-pack/plugins/uptime/server/graphql/pings/resolvers.ts delete mode 100644 x-pack/plugins/uptime/server/lib/requests/types.ts delete mode 100644 x-pack/plugins/uptime/server/rest_api/pings/get_all.ts delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_count.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_monitor_id.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_sort.json delete mode 100644 x-pack/test/api_integration/apis/uptime/graphql/ping_list.ts create mode 100644 x-pack/test/api_integration/apis/uptime/rest/ping_list.ts diff --git a/x-pack/legacy/plugins/uptime/common/graphql/types.ts b/x-pack/legacy/plugins/uptime/common/graphql/types.ts index c8beb91d807d56..506966ec6b5c9c 100644 --- a/x-pack/legacy/plugins/uptime/common/graphql/types.ts +++ b/x-pack/legacy/plugins/uptime/common/graphql/types.ts @@ -15,294 +15,15 @@ export type UnsignedInteger = any; // ==================================================== export interface Query { - /** Get a list of all recorded pings for all monitors */ - allPings: PingResults; - /** Fetches the current state of Uptime monitors for the given parameters. */ getMonitorStates?: MonitorSummaryResult | null; } -export interface PingResults { - /** Total number of matching pings */ - total: UnsignedInteger; - /** Unique list of all locations the query matched */ - locations: string[]; - /** List of pings */ - pings: Ping[]; -} -/** A request sent from a monitor to a host */ -export interface Ping { - /** unique ID for this ping */ - id: string; - /** The timestamp of the ping's creation */ - timestamp: string; - /** The agent that recorded the ping */ - beat?: Beat | null; - - container?: Container | null; - - docker?: Docker | null; - - ecs?: Ecs | null; - - error?: Error | null; - - host?: Host | null; - - http?: Http | null; - - icmp?: Icmp | null; - - kubernetes?: Kubernetes | null; - - meta?: Meta | null; - - monitor?: Monitor | null; - - observer?: Observer | null; - - resolve?: Resolve | null; - - socks5?: Socks5 | null; - - summary?: Summary | null; - - tags?: string | null; - - tcp?: Tcp | null; - - tls?: PingTls | null; - - url?: Url | null; -} -/** An agent for recording a beat */ -export interface Beat { - hostname?: string | null; - - name?: string | null; - - timezone?: string | null; - - type?: string | null; -} - -export interface Container { - id?: string | null; - - image?: ContainerImage | null; - - name?: string | null; - - runtime?: string | null; -} - -export interface ContainerImage { - name?: string | null; - - tag?: string | null; -} - -export interface Docker { - id?: string | null; - - image?: string | null; - - name?: string | null; -} - -export interface Ecs { - version?: string | null; -} - -export interface Error { - code?: number | null; - - message?: string | null; - - type?: string | null; -} - -export interface Host { - architecture?: string | null; - - id?: string | null; - - hostname?: string | null; - - ip?: string | null; - - mac?: string | null; - - name?: string | null; - - os?: Os | null; -} - -export interface Os { - family?: string | null; - - kernel?: string | null; - - platform?: string | null; - - version?: string | null; - - name?: string | null; - - build?: string | null; -} - -export interface Http { - response?: HttpResponse | null; - - rtt?: HttpRtt | null; - - url?: string | null; -} - -export interface HttpResponse { - status_code?: UnsignedInteger | null; - - body?: HttpBody | null; -} - -export interface HttpBody { - /** Size of HTTP response body in bytes */ - bytes?: UnsignedInteger | null; - /** Hash of the HTTP response body */ - hash?: string | null; - /** Response body of the HTTP Response. May be truncated based on client settings. */ - content?: string | null; - /** Byte length of the content string, taking into account multibyte chars. */ - content_bytes?: UnsignedInteger | null; -} - -export interface HttpRtt { - content?: Duration | null; - - response_header?: Duration | null; - - total?: Duration | null; - - validate?: Duration | null; - - validate_body?: Duration | null; - - write_request?: Duration | null; -} /** The monitor's status for a ping */ export interface Duration { us?: UnsignedInteger | null; } -export interface Icmp { - requests?: number | null; - - rtt?: number | null; -} - -export interface Kubernetes { - container?: KubernetesContainer | null; - - namespace?: string | null; - - node?: KubernetesNode | null; - - pod?: KubernetesPod | null; -} - -export interface KubernetesContainer { - image?: string | null; - - name?: string | null; -} - -export interface KubernetesNode { - name?: string | null; -} - -export interface KubernetesPod { - name?: string | null; - - uid?: string | null; -} - -export interface Meta { - cloud?: MetaCloud | null; -} - -export interface MetaCloud { - availability_zone?: string | null; - - instance_id?: string | null; - - instance_name?: string | null; - - machine_type?: string | null; - - project_id?: string | null; - - provider?: string | null; - - region?: string | null; -} - -export interface Monitor { - duration?: Duration | null; - - host?: string | null; - /** The id of the monitor */ - id?: string | null; - /** The IP pinged by the monitor */ - ip?: string | null; - /** The name of the protocol being monitored */ - name?: string | null; - /** The protocol scheme of the monitored host */ - scheme?: string | null; - /** The status of the monitored host */ - status?: string | null; - /** The type of host being monitored */ - type?: string | null; - - check_group?: string | null; -} -/** Metadata added by a proccessor, which is specified in its configuration. */ -export interface Observer { - /** Geolocation data for the agent. */ - geo?: Geo | null; -} -/** Geolocation data added via processors to enrich events. */ -export interface Geo { - /** Name of the city in which the agent is running. */ - city_name?: string | null; - /** The name of the continent on which the agent is running. */ - continent_name?: string | null; - /** ISO designation for the agent's country. */ - country_iso_code?: string | null; - /** The name of the agent's country. */ - country_name?: string | null; - /** The lat/long of the agent. */ - location?: string | null; - /** A name for the host's location, e.g. 'us-east-1' or 'LAX'. */ - name?: string | null; - /** ISO designation of the agent's region. */ - region_iso_code?: string | null; - /** Name of the region hosting the agent. */ - region_name?: string | null; -} - -export interface Resolve { - host?: string | null; - - ip?: string | null; - - rtt?: Duration | null; -} - -export interface Socks5 { - rtt?: Rtt | null; -} - export interface Rtt { connect?: Duration | null; @@ -331,53 +52,10 @@ export interface Location { lon?: number | null; } -export interface Tcp { - port?: number | null; - - rtt?: Rtt | null; -} -/** Contains monitor transmission encryption information. */ -export interface PingTls { - /** The date and time after which the certificate is invalid. */ - certificate_not_valid_after?: string | null; - - certificate_not_valid_before?: string | null; - - certificates?: string | null; - - rtt?: Rtt | null; -} - -export interface Url { - full?: string | null; - - scheme?: string | null; - - domain?: string | null; - - port?: number | null; - - path?: string | null; - - query?: string | null; -} - export interface DocCount { count: UnsignedInteger; } -export interface Snapshot { - counts: SnapshotCount; -} - -export interface SnapshotCount { - up: number; - - down: number; - - total: number; -} - /** The primary object returned for monitor states. */ export interface MonitorSummaryResult { /** Used to go to the next page of results */ @@ -521,24 +199,6 @@ export interface SummaryHistogramPoint { down: number; } -export interface AllPingsQueryArgs { - /** Optional: the direction to sort by. Accepts 'asc' and 'desc'. Defaults to 'desc'. */ - sort?: string | null; - /** Optional: the number of results to return. */ - size?: number | null; - /** Optional: the monitor ID filter. */ - monitorId?: string | null; - /** Optional: the check status to filter by. */ - status?: string | null; - /** The lower limit of the date range. */ - dateRangeStart: string; - /** The upper limit of the date range. */ - dateRangeEnd: string; - /** Optional: agent location to filter by. */ - location?: string | null; - page?: number; -} - export interface GetMonitorStatesQueryArgs { dateRangeStart: string; diff --git a/x-pack/legacy/plugins/uptime/common/runtime_types/common.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/common.ts index 37101b5b46fd2b..9018f4acaa3204 100644 --- a/x-pack/legacy/plugins/uptime/common/runtime_types/common.ts +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/common.ts @@ -27,7 +27,13 @@ export const StatesIndexStatusType = t.type({ docCount: t.number, }); +export const DateRangeType = t.type({ + from: t.string, + to: t.string, +}); + export type Summary = t.TypeOf; export type CheckGeo = t.TypeOf; export type Location = t.TypeOf; export type StatesIndexStatus = t.TypeOf; +export type DateRange = t.TypeOf; diff --git a/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts index 5e3fb2326bdb97..652d60cbe304de 100644 --- a/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/index.ts @@ -8,5 +8,6 @@ export * from './alerts'; export * from './common'; export * from './monitor'; export * from './overview_filters'; +export * from './ping'; export * from './snapshot'; export * from './dynamic_settings'; diff --git a/x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/histogram.ts similarity index 77% rename from x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts rename to x-pack/legacy/plugins/uptime/common/runtime_types/ping/histogram.ts index 3ae32e15ca55ca..2c3b52051be0fc 100644 --- a/x-pack/legacy/plugins/uptime/common/types/ping/histogram.ts +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/histogram.ts @@ -28,3 +28,15 @@ export interface HistogramResult { histogram: HistogramDataPoint[]; interval: string; } + +export interface HistogramQueryResult { + key: number; + key_as_string: string; + doc_count: number; + down: { + doc_count: number; + }; + up: { + doc_count: number; + }; +} diff --git a/x-pack/legacy/plugins/uptime/public/queries/index.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/index.ts similarity index 79% rename from x-pack/legacy/plugins/uptime/public/queries/index.ts rename to x-pack/legacy/plugins/uptime/common/runtime_types/ping/index.ts index 283382ec1b7baa..a2fc7c1b243ba6 100644 --- a/x-pack/legacy/plugins/uptime/public/queries/index.ts +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/index.ts @@ -4,4 +4,5 @@ * you may not use this file except in compliance with the Elastic License. */ -export { pingsQuery, pingsQueryString } from './pings_query'; +export * from './histogram'; +export * from './ping'; diff --git a/x-pack/legacy/plugins/uptime/common/runtime_types/ping/ping.ts b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/ping.ts new file mode 100644 index 00000000000000..ee14b298f38104 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/common/runtime_types/ping/ping.ts @@ -0,0 +1,181 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import * as t from 'io-ts'; +import { DateRangeType } from '../common'; + +export const HttpResponseBodyType = t.partial({ + bytes: t.number, + content: t.string, + content_bytes: t.number, + hash: t.string, +}); + +export type HttpResponseBody = t.TypeOf; + +export const TlsType = t.partial({ + certificate_not_valid_after: t.string, + certificate_not_valid_before: t.string, +}); + +export type Tls = t.TypeOf; + +export const MonitorType = t.intersection([ + t.type({ + duration: t.type({ + us: t.number, + }), + id: t.string, + status: t.string, + type: t.string, + }), + t.partial({ + check_group: t.string, + ip: t.string, + name: t.string, + timespan: t.partial({ + gte: t.string, + lte: t.string, + }), + }), +]); + +export type Monitor = t.TypeOf; + +export const PingType = t.intersection([ + t.type({ + timestamp: t.string, + monitor: MonitorType, + docId: t.string, + }), + t.partial({ + agent: t.intersection([ + t.type({ + ephemeral_id: t.string, + hostname: t.string, + id: t.string, + type: t.string, + version: t.string, + }), + t.partial({ + name: t.string, + }), + ]), + container: t.partial({ + id: t.string, + image: t.partial({ + name: t.string, + tag: t.string, + }), + name: t.string, + runtime: t.string, + }), + ecs: t.partial({ + version: t.string, + }), + error: t.intersection([ + t.partial({ + code: t.string, + id: t.string, + stack_trace: t.string, + type: t.string, + }), + t.type({ + // this is _always_ on the error field + message: t.string, + }), + ]), + http: t.partial({ + request: t.partial({ + body: t.partial({ + bytes: t.number, + content: t.partial({ + text: t.string, + }), + }), + bytes: t.number, + method: t.string, + referrer: t.string, + }), + response: t.partial({ + body: HttpResponseBodyType, + bytes: t.number, + redirects: t.string, + status_code: t.number, + }), + version: t.string, + }), + icmp: t.partial({ + requests: t.number, + rtt: t.partial({ + us: t.number, + }), + }), + kubernetes: t.partial({ + pod: t.partial({ + name: t.string, + uid: t.string, + }), + }), + observer: t.partial({ + geo: t.partial({ + name: t.string, + }), + }), + resolve: t.partial({ + ip: t.string, + rtt: t.partial({ + us: t.number, + }), + }), + summary: t.partial({ + down: t.number, + up: t.number, + }), + tags: t.array(t.string), + tcp: t.partial({ + rtt: t.partial({ + connect: t.partial({ + us: t.number, + }), + }), + }), + tls: TlsType, + // should this be partial? + url: t.partial({ + domain: t.string, + full: t.string, + port: t.number, + scheme: t.string, + }), + }), +]); + +export type Ping = t.TypeOf; + +export const PingsResponseType = t.type({ + total: t.number, + locations: t.array(t.string), + pings: t.array(PingType), +}); + +export type PingsResponse = t.TypeOf; + +export const GetPingsParamsType = t.intersection([ + t.type({ + dateRange: DateRangeType, + }), + t.partial({ + index: t.number, + size: t.number, + location: t.string, + monitorId: t.string, + sort: t.string, + status: t.string, + }), +]); + +export type GetPingsParams = t.TypeOf; diff --git a/x-pack/legacy/plugins/uptime/common/types/index.ts b/x-pack/legacy/plugins/uptime/common/types/index.ts index 2c39f2a3b73147..1d0003addd7618 100644 --- a/x-pack/legacy/plugins/uptime/common/types/index.ts +++ b/x-pack/legacy/plugins/uptime/common/types/index.ts @@ -41,5 +41,3 @@ export interface MonitorDurationResult { /** The maximum duration value in this chart. */ durationMaxValue: number; } - -export * from './ping/histogram'; diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx index 6428ddfd10f8c5..cf35dbf4e5206e 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/charts/ping_histogram.tsx @@ -14,7 +14,7 @@ import { import { getPingHistogram } from '../../../state/actions'; import { selectPingHistogram } from '../../../state/selectors'; import { withResponsiveWrapper, ResponsiveWrapperProps } from '../../higher_order'; -import { GetPingHistogramParams, HistogramResult } from '../../../../common/types'; +import { GetPingHistogramParams, HistogramResult } from '../../../../common/runtime_types'; import { useGetUrlParams } from '../../../hooks'; type Props = ResponsiveWrapperProps & diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/index.ts b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts index 7e442cbe850baa..be3cc5b65aa0ee 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/connected/index.ts @@ -13,5 +13,6 @@ export { MonitorStatusDetails } from './monitor/status_details_container'; export { MonitorStatusBar } from './monitor/status_bar_container'; export { MonitorListDrawer } from './monitor/list_drawer_container'; export { MonitorListActionsPopover } from './monitor/drawer_popover_container'; +export { PingList, PingListProps } from './pings'; export { DurationChart } from './charts/monitor_duration'; export { EmptyState } from './empty_state/empty_state'; diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx index 00cfd02d8dc326..3a96aa7c0275b7 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/monitor/status_bar_container.tsx @@ -12,7 +12,7 @@ import { monitorLocationsSelector, monitorStatusSelector } from '../../../state/ import { MonitorStatusBarComponent } from '../../functional/monitor_status_details/monitor_status_bar'; import { getMonitorStatusAction } from '../../../state/actions'; import { useGetUrlParams } from '../../../hooks'; -import { Ping } from '../../../../common/graphql/types'; +import { Ping } from '../../../../common/runtime_types'; import { MonitorLocations } from '../../../../common/runtime_types/monitor'; import { UptimeRefreshContext } from '../../../contexts'; diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/pings/index.ts b/x-pack/legacy/plugins/uptime/public/components/connected/pings/index.ts new file mode 100644 index 00000000000000..95ced104e51882 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/pings/index.ts @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { PingList, PingListProps } from './ping_list'; diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/pings/ping_list.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/pings/ping_list.tsx new file mode 100644 index 00000000000000..5b32a623495f16 --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/components/connected/pings/ping_list.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useSelector, useDispatch } from 'react-redux'; +import React, { useContext, useCallback } from 'react'; +import { selectPingList } from '../../../state/selectors'; +import { getPings } from '../../../state/actions'; +import { GetPingsParams } from '../../../../common/runtime_types'; +import { UptimeSettingsContext } from '../../../contexts'; +import { PingListComponent } from '../../functional'; + +export interface PingListProps { + monitorId: string; +} + +export const PingList = (props: PingListProps) => { + const { + lastRefresh, + pings: { + error, + loading, + pingList: { locations, pings, total }, + }, + } = useSelector(selectPingList); + + const { dateRangeStart: drs, dateRangeEnd: dre } = useContext(UptimeSettingsContext); + + const dispatch = useDispatch(); + const getPingsCallback = useCallback((params: GetPingsParams) => dispatch(getPings(params)), [ + dispatch, + ]); + + return ( + + ); +}; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx index f988afc7fc84df..66e86d67312360 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/charts/ping_histogram.tsx @@ -13,7 +13,7 @@ import moment from 'moment'; import { getChartDateLabel } from '../../../lib/helper'; import { ChartWrapper } from './chart_wrapper'; import { UptimeThemeContext } from '../../../contexts'; -import { HistogramResult } from '../../../../common/types'; +import { HistogramResult } from '../../../../common/runtime_types'; import { useUrlParams } from '../../../hooks'; import { ChartEmptyState } from './chart_empty_state'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts index 8d0352e01d40ed..d82912a6216e86 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/index.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/index.ts @@ -15,6 +15,6 @@ export { KueryBarComponent } from './kuery_bar/kuery_bar'; export { MonitorCharts } from './monitor_charts'; export { MonitorList } from './monitor_list'; export { OverviewPageParsingErrorCallout } from './overview_page_parsing_error_callout'; -export { PingList } from './ping_list'; +export { PingListComponent } from './ping_list'; export { PingHistogramComponent } from './charts'; export { StatusPanel } from './status_panel'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_ssl_certificate.test.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_ssl_certificate.test.tsx index 2eae14301fd4d9..57ed09cc30ef15 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_ssl_certificate.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_ssl_certificate.test.tsx @@ -9,11 +9,11 @@ import moment from 'moment'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { EuiBadge } from '@elastic/eui'; import { renderWithIntl } from 'test_utils/enzyme_helpers'; -import { PingTls } from '../../../../../common/graphql/types'; +import { Tls } from '../../../../../common/runtime_types'; import { MonitorSSLCertificate } from '../monitor_status_bar'; describe('MonitorStatusBar component', () => { - let monitorTls: PingTls; + let monitorTls: Tls; beforeEach(() => { const dateInTwoMonths = moment() diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_status.bar.test.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_status.bar.test.tsx index 0a53eeb89d793f..5fd32c808da42c 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_status.bar.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/__test__/monitor_status.bar.test.tsx @@ -8,7 +8,7 @@ import moment from 'moment'; import React from 'react'; import { renderWithIntl } from 'test_utils/enzyme_helpers'; import { MonitorStatusBarComponent } from '../monitor_status_bar'; -import { Ping } from '../../../../../common/graphql/types'; +import { Ping } from '../../../../../common/runtime_types'; describe('MonitorStatusBar component', () => { let monitorStatus: Ping; @@ -16,7 +16,7 @@ describe('MonitorStatusBar component', () => { beforeEach(() => { monitorStatus = { - id: 'id1', + docId: 'few213kl', timestamp: moment(new Date()) .subtract(15, 'm') .toString(), @@ -24,7 +24,9 @@ describe('MonitorStatusBar component', () => { duration: { us: 1234567, }, + id: 'id1', status: 'up', + type: 'http', }, url: { full: 'https://www.example.com/', diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_ssl_certificate.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_ssl_certificate.tsx index c57348c4ab4cd4..d92534aecd1754 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_ssl_certificate.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_ssl_certificate.tsx @@ -9,14 +9,13 @@ import moment from 'moment'; import { EuiSpacer, EuiText, EuiBadge } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; - -import { PingTls } from '../../../../../common/graphql/types'; +import { Tls } from '../../../../../common/runtime_types'; interface Props { /** * TLS information coming from monitor in ES heartbeat index */ - tls: PingTls | null | undefined; + tls: Tls | null | undefined; } export const MonitorSSLCertificate = ({ tls }: Props) => { diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_status_bar.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_status_bar.tsx index 22e4377944be13..ac3cedc5179956 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_status_bar.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/monitor_status_details/monitor_status_bar/monitor_status_bar.tsx @@ -17,7 +17,7 @@ import { import { MonitorSSLCertificate } from './monitor_ssl_certificate'; import * as labels from './translations'; import { StatusByLocations } from './status_by_location'; -import { Ping } from '../../../../../common/graphql/types'; +import { Ping } from '../../../../../common/runtime_types'; import { MonitorLocations } from '../../../../../common/runtime_types'; interface MonitorStatusBarProps { diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/__snapshots__/ping_list.test.tsx.snap b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/__snapshots__/ping_list.test.tsx.snap index 2e59ec5e57337b..154ab6399452d6 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/__snapshots__/ping_list.test.tsx.snap +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/__snapshots__/ping_list.test.tsx.snap @@ -1,384 +1,349 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`PingList component renders sorted list without errors 1`] = ` - - - + +

+ +

+
+ + + -

- + -

-
- - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + Response code + , + "render": [Function], + }, + Object { + "align": "right", + "isExpander": true, + "render": [Function], + "width": "24px", + }, + ] + } + hasActions={true} + isExpandable={true} + itemId="docId" + itemIdToExpandedRowMap={Object {}} + items={ + Array [ + Object { + "docId": "fewjio21", + "error": Object { + "message": "dial tcp 127.0.0.1:9200: connect: connection refused", + "type": "io", }, - Object { - "align": "right", - "dataType": "number", - "field": "monitor.ip", - "name": "IP", + "monitor": Object { + "duration": Object { + "us": 1430, + }, + "id": "auto-tcp-0X81440A68E839814F", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "tcp", }, - Object { - "align": "right", - "field": "monitor.duration.us", - "name": "Duration", - "render": [Function], + "timestamp": "2019-01-28T17:47:08.078Z", + }, + Object { + "docId": "fewjoo21", + "error": Object { + "message": "dial tcp 127.0.0.1:9200: connect: connection refused", + "type": "io", }, - Object { - "align": "right", - "field": "error.type", - "name": "Error type", - "render": [Function], + "monitor": Object { + "duration": Object { + "us": 1370, + }, + "id": "auto-tcp-0X81440A68E839814D", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "tcp", }, - Object { - "align": "right", - "field": "http.response.status_code", - "name": - Response code - , - "render": [Function], + "timestamp": "2019-01-28T17:47:09.075Z", + }, + Object { + "docId": "fejjio21", + "monitor": Object { + "duration": Object { + "us": 1452, + }, + "id": "auto-tcp-0X81440A68E839814D", + "ip": "127.0.0.1", + "name": "", + "status": "up", + "type": "tcp", }, - Object { - "align": "right", - "isExpander": true, - "render": [Function], - "width": "24px", + "timestamp": "2019-01-28T17:47:06.077Z", + }, + Object { + "docId": "fewzio21", + "error": Object { + "message": "dial tcp 127.0.0.1:9200: connect: connection refused", + "type": "io", }, - ] - } - hasActions={true} - isExpandable={true} - itemId="id" - itemIdToExpandedRowMap={Object {}} - items={ - Array [ - Object { - "error": Object { - "message": "dial tcp 127.0.0.1:9200: connect: connection refused", - "type": "io", + "monitor": Object { + "duration": Object { + "us": 1094, }, - "http": null, - "id": "id1", - "monitor": Object { - "duration": Object { - "us": 1430, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "tcp", - }, - "timestamp": "2019-01-28T17:47:08.078Z", + "id": "auto-tcp-0X81440A68E839814E", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "tcp", }, - Object { - "error": Object { - "message": "dial tcp 127.0.0.1:9200: connect: connection refused", - "type": "io", - }, - "http": null, - "id": "id2", - "monitor": Object { - "duration": Object { - "us": 1370, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "tcp", - }, - "timestamp": "2019-01-28T17:47:09.075Z", + "timestamp": "2019-01-28T17:47:07.075Z", + }, + Object { + "docId": "fewpi321", + "error": Object { + "message": "Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused", + "type": "io", }, - Object { - "error": null, - "http": null, - "id": "id3", - "monitor": Object { - "duration": Object { - "us": 1452, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "tcp", + "monitor": Object { + "duration": Object { + "us": 1597, }, - "timestamp": "2019-01-28T17:47:06.077Z", + "id": "auto-http-0X3675F89EF061209G", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "http", }, - Object { - "error": Object { - "message": "dial tcp 127.0.0.1:9200: connect: connection refused", - "type": "io", - }, - "http": null, - "id": "id4", - "monitor": Object { - "duration": Object { - "us": 1094, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "tcp", - }, - "timestamp": "2019-01-28T17:47:07.075Z", + "timestamp": "2019-01-28T17:47:07.074Z", + }, + Object { + "docId": "0ewjio21", + "error": Object { + "message": "dial tcp 127.0.0.1:9200: connect: connection refused", + "type": "io", }, - Object { - "error": Object { - "message": "Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused", - "type": "io", + "monitor": Object { + "duration": Object { + "us": 1699, }, - "http": null, - "id": "id5", - "monitor": Object { - "duration": Object { - "us": 1597, - }, - "id": "auto-http-0X3675F89EF0612091", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "http", - }, - "timestamp": "2019-01-28T17:47:07.074Z", + "id": "auto-tcp-0X81440A68E839814H", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "tcp", }, - Object { - "error": Object { - "message": "dial tcp 127.0.0.1:9200: connect: connection refused", - "type": "io", - }, - "http": null, - "id": "id6", - "monitor": Object { - "duration": Object { - "us": 1699, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "tcp", - }, - "timestamp": "2019-01-28T17:47:18.080Z", + "timestamp": "2019-01-28T17:47:18.080Z", + }, + Object { + "docId": "3ewjio21", + "error": Object { + "message": "dial tcp 127.0.0.1:9200: connect: connection refused", + "type": "io", }, - Object { - "error": Object { - "message": "dial tcp 127.0.0.1:9200: connect: connection refused", - "type": "io", - }, - "http": null, - "id": "id7", - "monitor": Object { - "duration": Object { - "us": 5384, - }, - "id": "auto-tcp-0X81440A68E839814C", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "tcp", + "monitor": Object { + "duration": Object { + "us": 5384, }, - "timestamp": "2019-01-28T17:47:19.076Z", + "id": "auto-tcp-0X81440A68E839814I", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "tcp", }, - Object { - "error": Object { - "message": "Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused", - "type": "io", - }, - "http": null, - "id": "id8", - "monitor": Object { - "duration": Object { - "us": 5397, - }, - "id": "auto-http-0X3675F89EF0612091", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "http", + "timestamp": "2019-01-28T17:47:19.076Z", + }, + Object { + "docId": "fewjip21", + "error": Object { + "message": "Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused", + "type": "io", + }, + "monitor": Object { + "duration": Object { + "us": 5397, }, - "timestamp": "2019-01-28T17:47:19.076Z", + "id": "auto-http-0X3675F89EF061209J", + "ip": "127.0.0.1", + "name": "", + "status": "down", + "type": "http", }, - Object { - "error": null, - "http": Object { - "response": Object { - "status_code": 200, - }, + "timestamp": "2019-01-28T17:47:19.076Z", + }, + Object { + "docId": "fewjio21", + "http": Object { + "response": Object { + "status_code": 200, }, - "id": "id9", - "monitor": Object { - "duration": Object { - "us": 127511, - }, - "id": "auto-http-0X131221E73F825974", - "ip": "172.217.7.4", - "name": "", - "scheme": null, - "status": "up", - "type": "http", + }, + "monitor": Object { + "duration": Object { + "us": 127511, }, - "timestamp": "2019-01-28T17:47:19.077Z", + "id": "auto-tcp-0X81440A68E839814C", + "ip": "172.217.7.4", + "name": "", + "status": "up", + "type": "http", }, - Object { - "error": null, - "http": Object { - "response": Object { - "status_code": 200, - }, + "timestamp": "2019-01-28T17:47:19.077Z", + }, + Object { + "docId": "fewjik81", + "http": Object { + "response": Object { + "status_code": 200, }, - "id": "id10", - "monitor": Object { - "duration": Object { - "us": 287543, - }, - "id": "auto-http-0X9CB71300ABD5A2A8", - "ip": "192.30.253.112", - "name": "", - "scheme": null, - "status": "up", - "type": "http", + }, + "monitor": Object { + "duration": Object { + "us": 287543, }, - "timestamp": "2019-01-28T17:47:19.077Z", + "id": "auto-http-0X131221E73F825974", + "ip": "192.30.253.112", + "name": "", + "status": "up", + "type": "http", }, - ] - } - loading={false} - noItemsMessage="No items found" - onChange={[Function]} - pagination={ - Object { - "initialPageSize": 25, - "pageIndex": 0, - "pageSize": 10, - "pageSizeOptions": Array [ - 10, - 25, - 50, - 100, - ], - "totalItemCount": 9231, - } + "timestamp": "2019-01-28T17:47:19.077Z", + }, + ] + } + loading={false} + noItemsMessage="No items found" + onChange={[Function]} + pagination={ + Object { + "initialPageSize": 10, + "pageIndex": 0, + "pageSize": 10, + "pageSizeOptions": Array [ + 10, + 25, + 50, + 100, + ], + "totalItemCount": 10, } - responsive={true} - tableLayout="fixed" - /> -
-
+ } + responsive={true} + tableLayout="fixed" + /> + `; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/expanded_row.test.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/expanded_row.test.tsx index 9dbe48ec5553a0..2c1434cfd64bd5 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/expanded_row.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/expanded_row.test.tsx @@ -7,15 +7,23 @@ import { mountWithIntl, renderWithIntl, shallowWithIntl } from 'test_utils/enzyme_helpers'; import React from 'react'; import { PingListExpandedRowComponent } from '../expanded_row'; -import { Ping } from '../../../../../common/graphql/types'; +import { Ping } from '../../../../../common/runtime_types'; import { DocLinkForBody } from '../doc_link_body'; describe('PingListExpandedRow', () => { let ping: Ping; beforeEach(() => { ping = { - id: '123', + docId: 'fdeio12', timestamp: '19290310', + monitor: { + duration: { + us: 12345, + }, + id: '123', + status: 'down', + type: 'http', + }, http: { response: { body: { @@ -34,7 +42,7 @@ describe('PingListExpandedRow', () => { it('renders error information when an error field is present', () => { ping.error = { - code: 403, + code: '403', message: 'Forbidden', }; expect(shallowWithIntl()).toMatchSnapshot(); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/ping_list.test.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/ping_list.test.tsx index 68d285bd0baf15..ec256a886aa16b 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/ping_list.test.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/__tests__/ping_list.test.tsx @@ -6,211 +6,188 @@ import React from 'react'; import { shallowWithIntl } from 'test_utils/enzyme_helpers'; -import { PingResults, Ping } from '../../../../../common/graphql/types'; -import { PingListComponent, AllLocationOption, toggleDetails } from '../ping_list'; +import { PingListComponent, toggleDetails } from '../ping_list'; import { ExpandedRowMap } from '../../monitor_list/types'; +import { Ping, PingsResponse } from '../../../../../common/runtime_types'; describe('PingList component', () => { - let pingList: { allPings: PingResults }; + let response: PingsResponse; beforeEach(() => { - pingList = { - allPings: { - total: 9231, - pings: [ - { - id: 'id1', - timestamp: '2019-01-28T17:47:08.078Z', - http: null, - error: { - message: 'dial tcp 127.0.0.1:9200: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 1430 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'tcp', - }, - }, - { - id: 'id2', - timestamp: '2019-01-28T17:47:09.075Z', - http: null, - error: { - message: 'dial tcp 127.0.0.1:9200: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 1370 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'tcp', - }, - }, - { - id: 'id3', - timestamp: '2019-01-28T17:47:06.077Z', - http: null, - error: null, - monitor: { - duration: { us: 1452 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'up', - type: 'tcp', - }, - }, - { - id: 'id4', - timestamp: '2019-01-28T17:47:07.075Z', - http: null, - error: { - message: 'dial tcp 127.0.0.1:9200: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 1094 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'tcp', - }, - }, - { - id: 'id5', - timestamp: '2019-01-28T17:47:07.074Z', - http: null, - error: { - message: - 'Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 1597 }, - id: 'auto-http-0X3675F89EF0612091', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'http', - }, - }, - { - id: 'id6', - timestamp: '2019-01-28T17:47:18.080Z', - http: null, - error: { - message: 'dial tcp 127.0.0.1:9200: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 1699 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'tcp', - }, - }, - { - id: 'id7', - timestamp: '2019-01-28T17:47:19.076Z', - http: null, - error: { - message: 'dial tcp 127.0.0.1:9200: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 5384 }, - id: 'auto-tcp-0X81440A68E839814C', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'tcp', - }, - }, - { - id: 'id8', - timestamp: '2019-01-28T17:47:19.076Z', - http: null, - error: { - message: - 'Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused', - type: 'io', - }, - monitor: { - duration: { us: 5397 }, - id: 'auto-http-0X3675F89EF0612091', - ip: '127.0.0.1', - name: '', - scheme: null, - status: 'down', - type: 'http', - }, - }, - { - id: 'id9', - timestamp: '2019-01-28T17:47:19.077Z', - http: { response: { status_code: 200 } }, - error: null, - monitor: { - duration: { us: 127511 }, - id: 'auto-http-0X131221E73F825974', - ip: '172.217.7.4', - name: '', - scheme: null, - status: 'up', - type: 'http', - }, - }, - { - id: 'id10', - timestamp: '2019-01-28T17:47:19.077Z', - http: { response: { status_code: 200 } }, - error: null, - monitor: { - duration: { us: 287543 }, - id: 'auto-http-0X9CB71300ABD5A2A8', - ip: '192.30.253.112', - name: '', - scheme: null, - status: 'up', - type: 'http', - }, - }, - ], - locations: ['nyc'], - }, + response = { + total: 9231, + locations: ['nyc'], + pings: [ + { + docId: 'fewjio21', + timestamp: '2019-01-28T17:47:08.078Z', + error: { + message: 'dial tcp 127.0.0.1:9200: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 1430 }, + id: 'auto-tcp-0X81440A68E839814F', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'tcp', + }, + }, + { + docId: 'fewjoo21', + timestamp: '2019-01-28T17:47:09.075Z', + error: { + message: 'dial tcp 127.0.0.1:9200: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 1370 }, + id: 'auto-tcp-0X81440A68E839814D', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'tcp', + }, + }, + { + docId: 'fejjio21', + timestamp: '2019-01-28T17:47:06.077Z', + monitor: { + duration: { us: 1452 }, + id: 'auto-tcp-0X81440A68E839814D', + ip: '127.0.0.1', + name: '', + status: 'up', + type: 'tcp', + }, + }, + { + docId: 'fewzio21', + timestamp: '2019-01-28T17:47:07.075Z', + error: { + message: 'dial tcp 127.0.0.1:9200: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 1094 }, + id: 'auto-tcp-0X81440A68E839814E', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'tcp', + }, + }, + { + docId: 'fewpi321', + timestamp: '2019-01-28T17:47:07.074Z', + error: { + message: + 'Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 1597 }, + id: 'auto-http-0X3675F89EF061209G', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'http', + }, + }, + { + docId: '0ewjio21', + timestamp: '2019-01-28T17:47:18.080Z', + error: { + message: 'dial tcp 127.0.0.1:9200: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 1699 }, + id: 'auto-tcp-0X81440A68E839814H', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'tcp', + }, + }, + { + docId: '3ewjio21', + timestamp: '2019-01-28T17:47:19.076Z', + error: { + message: 'dial tcp 127.0.0.1:9200: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 5384 }, + id: 'auto-tcp-0X81440A68E839814I', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'tcp', + }, + }, + { + docId: 'fewjip21', + timestamp: '2019-01-28T17:47:19.076Z', + error: { + message: + 'Get http://localhost:12349/: dial tcp 127.0.0.1:12349: connect: connection refused', + type: 'io', + }, + monitor: { + duration: { us: 5397 }, + id: 'auto-http-0X3675F89EF061209J', + ip: '127.0.0.1', + name: '', + status: 'down', + type: 'http', + }, + }, + { + docId: 'fewjio21', + timestamp: '2019-01-28T17:47:19.077Z', + http: { response: { status_code: 200 } }, + monitor: { + duration: { us: 127511 }, + id: 'auto-tcp-0X81440A68E839814C', + ip: '172.217.7.4', + name: '', + status: 'up', + type: 'http', + }, + }, + { + docId: 'fewjik81', + timestamp: '2019-01-28T17:47:19.077Z', + http: { response: { status_code: 200 } }, + monitor: { + duration: { us: 287543 }, + id: 'auto-http-0X131221E73F825974', + ip: '192.30.253.112', + name: '', + status: 'up', + type: 'http', + }, + }, + ], }; }); it('renders sorted list without errors', () => { - const { allPings } = pingList; const component = shallowWithIntl( {}} - onSelectedStatusChange={jest.fn()} - pageIndex={0} - pageSize={10} - selectedOption="down" - selectedLocation={AllLocationOption.value} + locations={[]} + monitorId="foo" + pings={response.pings} + total={10} /> ); expect(component).toMatchSnapshot(); @@ -224,13 +201,38 @@ describe('PingList component', () => { beforeEach(() => { itemIdToExpandedRowMap = {}; - pings = pingList.allPings.pings; + pings = response.pings; }); it('should expand an item if empty', () => { const ping = pings[0]; toggleDetails(ping, itemIdToExpandedRowMap, setItemIdToExpandedRowMap); - expect(itemIdToExpandedRowMap).toHaveProperty(ping.id); + expect(itemIdToExpandedRowMap).toMatchInlineSnapshot(` + Object { + "fewjio21": , + } + `); }); it('should un-expand an item if clicked again', () => { @@ -245,7 +247,31 @@ describe('PingList component', () => { const pingB = pings[1]; toggleDetails(pingA, itemIdToExpandedRowMap, setItemIdToExpandedRowMap); toggleDetails(pingB, itemIdToExpandedRowMap, setItemIdToExpandedRowMap); - expect(itemIdToExpandedRowMap).toHaveProperty(pingB.id); + expect(pingA.docId).not.toEqual(pingB.docId); + expect(itemIdToExpandedRowMap[pingB.docId]).toMatchInlineSnapshot(` + + `); }); }); }); diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/expanded_row.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/expanded_row.tsx index c684235122e34b..28b96fcb1bf7b1 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/expanded_row.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/expanded_row.tsx @@ -16,14 +16,14 @@ import { } from '@elastic/eui'; import React from 'react'; import { i18n } from '@kbn/i18n'; -import { Ping, HttpBody } from '../../../../common/graphql/types'; +import { Ping, HttpResponseBody } from '../../../../common/runtime_types'; import { DocLinkForBody } from './doc_link_body'; interface Props { ping: Ping; } -const BodyDescription = ({ body }: { body: HttpBody }) => { +const BodyDescription = ({ body }: { body: HttpResponseBody }) => { const contentBytes = body.content_bytes || 0; const bodyBytes = body.bytes || 0; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/index.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/index.tsx index e57b229dfd9738..808f3f90ef0150 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/index.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/index.tsx @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export * from './ping_list'; +export { PingListComponent } from './ping_list'; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/ping_list.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/ping_list.tsx index 19768c7104e91d..934dfd961f9e08 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/ping_list.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/ping_list/ping_list.tsx @@ -20,109 +20,127 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { get } from 'lodash'; import moment from 'moment'; -import React, { Fragment, useState } from 'react'; +import React, { useState, useEffect } from 'react'; import styled from 'styled-components'; -import { CriteriaWithPagination } from '@elastic/eui/src/components/basic_table/basic_table'; -import { Ping, PingResults } from '../../../../common/graphql/types'; +import { Ping, GetPingsParams, DateRange } from '../../../../common/runtime_types'; import { convertMicrosecondsToMilliseconds as microsToMillis } from '../../../lib/helper'; -import { UptimeGraphQLQueryProps, withUptimeGraphQL } from '../../higher_order'; -import { pingsQuery } from '../../../queries'; import { LocationName } from './location_name'; import { Pagination } from './../monitor_list'; import { PingListExpandedRowComponent } from './expanded_row'; +import { PingListProps } from '../../connected/pings'; -interface PingListQueryResult { - allPings?: PingResults; -} - -interface PingListProps { - onSelectedStatusChange: (status: string | undefined) => void; - onSelectedLocationChange: (location: any) => void; - onPageCountChange: (itemCount: number) => void; - onPageIndexChange: (index: number) => void; - pageSize: number; - pageIndex: number; - selectedOption: string; - selectedLocation: string | undefined; -} - -type Props = UptimeGraphQLQueryProps & PingListProps; -interface ExpandedRowMap { - [key: string]: JSX.Element; -} - -export const AllLocationOption = { text: 'All', value: '' }; +export const AllLocationOption = { + 'data-test-subj': 'xpack.uptime.pingList.locationOptions.all', + text: 'All', + value: '', +}; export const toggleDetails = ( ping: Ping, - itemIdToExpandedRowMap: ExpandedRowMap, - setItemIdToExpandedRowMap: (update: ExpandedRowMap) => any + expandedRows: Record, + setExpandedRows: (update: Record) => any ) => { - // If the user has clicked on the expanded map, close all expanded rows. - if (itemIdToExpandedRowMap[ping.id]) { - setItemIdToExpandedRowMap({}); + // If already expanded, collapse + if (expandedRows[ping.docId]) { + delete expandedRows[ping.docId]; + setExpandedRows({ ...expandedRows }); return; } // Otherwise expand this row - const newItemIdToExpandedRowMap: ExpandedRowMap = {}; - newItemIdToExpandedRowMap[ping.id] = ; - setItemIdToExpandedRowMap(newItemIdToExpandedRowMap); + setExpandedRows({ + ...expandedRows, + [ping.docId]: , + }); }; const SpanWithMargin = styled.span` margin-right: 16px; `; -export const PingListComponent = ({ - data, - loading, - onPageCountChange, - onPageIndexChange, - onSelectedLocationChange, - onSelectedStatusChange, - pageIndex, - pageSize, - selectedOption, - selectedLocation, -}: Props) => { - const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState({}); +interface Props extends PingListProps { + dateRange: DateRange; + error?: Error; + getPings: (props: GetPingsParams) => void; + lastRefresh: number; + loading: boolean; + locations: string[]; + pings: Ping[]; + total: number; +} + +const DEFAULT_PAGE_SIZE = 10; + +const statusOptions = [ + { + 'data-test-subj': 'xpack.uptime.pingList.statusOptions.all', + text: i18n.translate('xpack.uptime.pingList.statusOptions.allStatusOptionLabel', { + defaultMessage: 'All', + }), + value: '', + }, + { + 'data-test-subj': 'xpack.uptime.pingList.statusOptions.up', + text: i18n.translate('xpack.uptime.pingList.statusOptions.upStatusOptionLabel', { + defaultMessage: 'Up', + }), + value: 'up', + }, + { + 'data-test-subj': 'xpack.uptime.pingList.statusOptions.down', + text: i18n.translate('xpack.uptime.pingList.statusOptions.downStatusOptionLabel', { + defaultMessage: 'Down', + }), + value: 'down', + }, +]; + +export const PingListComponent = (props: Props) => { + const [selectedLocation, setSelectedLocation] = useState(''); + const [status, setStatus] = useState(''); + const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); + const [pageIndex, setPageIndex] = useState(0); + const { + dateRange: { from, to }, + error, + getPings, + lastRefresh, + loading, + locations, + monitorId, + pings, + total, + } = props; + + useEffect(() => { + getPings({ + dateRange: { + from, + to, + }, + location: selectedLocation, + monitorId, + index: pageIndex, + size: pageSize, + status: status !== 'all' ? status : '', + }); + }, [from, to, getPings, monitorId, lastRefresh, selectedLocation, pageIndex, pageSize, status]); + + const [expandedRows, setExpandedRows] = useState>({}); - const statusOptions = [ - { - text: i18n.translate('xpack.uptime.pingList.statusOptions.allStatusOptionLabel', { - defaultMessage: 'All', - }), - value: '', - }, - { - text: i18n.translate('xpack.uptime.pingList.statusOptions.upStatusOptionLabel', { - defaultMessage: 'Up', - }), - value: 'up', - }, - { - text: i18n.translate('xpack.uptime.pingList.statusOptions.downStatusOptionLabel', { - defaultMessage: 'Down', - }), - value: 'down', - }, - ]; - const locations = get(data, 'allPings.locations'); const locationOptions = !locations ? [AllLocationOption] : [AllLocationOption].concat( - locations.map(name => { - return { text: name, value: name }; - }) + locations.map(name => ({ + text: name, + 'data-test-subj': `xpack.uptime.pingList.locationOptions.${name}`, + value: name, + })) ); - const pings: Ping[] = data?.allPings?.pings ?? []; - const hasStatus: boolean = pings.reduce( - (hasHttpStatus: boolean, currentPing: Ping) => + (hasHttpStatus: boolean, currentPing) => hasHttpStatus || !!currentPing.http?.response?.status_code, false ); @@ -134,7 +152,7 @@ export const PingListComponent = ({ defaultMessage: 'Status', }), render: (pingStatus: string, item: Ping) => ( -
+
{pingStatus === 'up' ? i18n.translate('xpack.uptime.pingList.statusColumnHealthUpLabel', { @@ -189,7 +207,7 @@ export const PingListComponent = ({ name: i18n.translate('xpack.uptime.pingList.errorTypeColumnLabel', { defaultMessage: 'Error type', }), - render: (error: string) => error ?? '-', + render: (errorType: string) => errorType ?? '-', }, // Only add this column is there is any status present in list ...(hasStatus @@ -219,16 +237,16 @@ export const PingListComponent = ({ render: (item: Ping) => { return ( toggleDetails(item, itemIdToExpandedRowMap, setItemIdToExpandedRowMap)} - disabled={!item.error && !(item.http?.response?.body?.bytes > 0)} + onClick={() => toggleDetails(item, expandedRows, setExpandedRows)} + disabled={!item.error && !(item.http?.response?.body?.bytes ?? 0 > 0)} aria-label={ - itemIdToExpandedRowMap[item.id] + expandedRows[item.docId] ? i18n.translate('xpack.uptime.pingList.collapseRow', { defaultMessage: 'Collapse', }) : i18n.translate('xpack.uptime.pingList.expandRow', { defaultMessage: 'Expand' }) } - iconType={itemIdToExpandedRowMap[item.id] ? 'arrowUp' : 'arrowDown'} + iconType={expandedRows[item.docId] ? 'arrowUp' : 'arrowDown'} /> ); }, @@ -236,104 +254,83 @@ export const PingListComponent = ({ ]; const pagination: Pagination = { - initialPageSize: 25, + initialPageSize: DEFAULT_PAGE_SIZE, pageIndex, pageSize, pageSizeOptions: [10, 25, 50, 100], - totalItemCount: data?.allPings?.total ?? pageSize, + /** + * we're not currently supporting pagination in this component + * so the first page is the only page + */ + totalItemCount: total, }; return ( - - - -

- + +

+ +

+
+ + + + + { + setStatus(selected.target.value); + }} /> -

-
- - - - - - - - - { - if (typeof selected.target.value === 'string') { - onSelectedStatusChange( - selected.target && selected.target.value !== '' - ? selected.target.value - : undefined - ); - } - }} - /> - - - - - { - onSelectedLocationChange( - selected.target && selected.target.value !== '' - ? selected.target.value - : null - ); - }} - /> - - - - - - - - - ) => { - onPageCountChange(criteria.page!.size); - onPageIndexChange(criteria.page!.index); - }} - /> -
-
+ + + + + { + setSelectedLocation(selected.target.value); + }} + /> + + + + + { + setPageSize(criteria.page!.size); + setPageIndex(criteria.page!.index); + }} + /> + ); }; - -export const PingList = withUptimeGraphQL( - PingListComponent, - pingsQuery -); diff --git a/x-pack/legacy/plugins/uptime/public/hooks/index.ts b/x-pack/legacy/plugins/uptime/public/hooks/index.ts index e022248df407a7..1f50e995eda495 100644 --- a/x-pack/legacy/plugins/uptime/public/hooks/index.ts +++ b/x-pack/legacy/plugins/uptime/public/hooks/index.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +export * from './use_monitor'; export * from './use_url_params'; export * from './use_telemetry'; export * from './update_kuery_string'; diff --git a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx index 5016ccebbab54d..683af81239c992 100644 --- a/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx +++ b/x-pack/legacy/plugins/uptime/public/pages/monitor.tsx @@ -5,39 +5,21 @@ */ import { EuiSpacer } from '@elastic/eui'; -import React, { useContext, useState } from 'react'; +import React from 'react'; import { useSelector } from 'react-redux'; -import { MonitorCharts, PingList } from '../components/functional'; -import { UptimeRefreshContext } from '../contexts'; -import { useUptimeTelemetry, useUrlParams, UptimePage } from '../hooks'; import { useTrackPageview } from '../../../../../plugins/observability/public'; -import { MonitorStatusDetails } from '../components/connected'; +import { MonitorStatusDetails, PingList } from '../components/connected'; import { monitorStatusSelector } from '../state/selectors'; import { PageHeader } from './page_header'; +import { MonitorCharts } from '../components/functional'; import { useBreadcrumbs } from '../hooks/use_breadcrumbs'; -import { useMonitorId } from '../hooks/use_monitor'; +import { useMonitorId, useUptimeTelemetry, UptimePage } from '../hooks'; export const MonitorPage: React.FC = () => { const monitorId = useMonitorId(); - const [pingListPageCount, setPingListPageCount] = useState(10); - const { refreshApp } = useContext(UptimeRefreshContext); - const [getUrlParams, updateUrlParams] = useUrlParams(); - const { absoluteDateRangeStart, absoluteDateRangeEnd, ...params } = getUrlParams(); - const { dateRangeStart, dateRangeEnd, selectedPingStatus } = params; - - const [selectedLocation, setSelectedLocation] = useState(undefined); - const [pingListIndex, setPingListIndex] = useState(0); - const selectedMonitor = useSelector(monitorStatusSelector); - const sharedVariables = { - dateRangeStart, - dateRangeEnd, - monitorId, - location: selectedLocation, - }; - useUptimeTelemetry(UptimePage.Monitor); useTrackPageview({ app: 'uptime', path: 'monitor' }); @@ -53,25 +35,7 @@ export const MonitorPage: React.FC = () => { - { - updateUrlParams({ selectedPingStatus: selectedStatus || '' }); - refreshApp(); - }} - onPageIndexChange={(index: number) => setPingListIndex(index)} - pageIndex={pingListIndex} - pageSize={pingListPageCount} - selectedOption={selectedPingStatus} - selectedLocation={selectedLocation} - variables={{ - ...sharedVariables, - page: pingListIndex, - size: pingListPageCount, - status: selectedPingStatus, - }} - /> + ); }; diff --git a/x-pack/legacy/plugins/uptime/public/queries/pings_query.ts b/x-pack/legacy/plugins/uptime/public/queries/pings_query.ts deleted file mode 100644 index ed20fe8eb2931c..00000000000000 --- a/x-pack/legacy/plugins/uptime/public/queries/pings_query.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import gql from 'graphql-tag'; - -export const pingsQueryString = ` -query PingList( - $dateRangeStart: String! - $dateRangeEnd: String! - $monitorId: String - $status: String - $sort: String - $size: Int - $location: String - $page: Int -) { - allPings( - dateRangeStart: $dateRangeStart - dateRangeEnd: $dateRangeEnd - monitorId: $monitorId - status: $status - sort: $sort - size: $size - location: $location - page: $page - ) { - total - locations - pings { - id - timestamp - http { - response { - status_code - body { - bytes - hash - content - content_bytes - } - } - } - error { - message - type - } - monitor { - duration { - us - } - id - ip - name - scheme - status - type - } - observer { - geo { - name - } - } - } - } - } -`; - -export const pingsQuery = gql` - ${pingsQueryString} -`; diff --git a/x-pack/legacy/plugins/uptime/public/state/actions/monitor_status.ts b/x-pack/legacy/plugins/uptime/public/state/actions/monitor_status.ts index a8f37d38ebae6c..e8c862e209739a 100644 --- a/x-pack/legacy/plugins/uptime/public/state/actions/monitor_status.ts +++ b/x-pack/legacy/plugins/uptime/public/state/actions/monitor_status.ts @@ -5,7 +5,7 @@ */ import { createAction } from 'redux-actions'; import { QueryParams } from './types'; -import { Ping } from '../../../common/graphql/types'; +import { Ping } from '../../../common/runtime_types'; export const getMonitorStatusAction = createAction('GET_MONITOR_STATUS'); export const getMonitorStatusActionSuccess = createAction('GET_MONITOR_STATUS_SUCCESS'); diff --git a/x-pack/legacy/plugins/uptime/public/state/actions/ping.ts b/x-pack/legacy/plugins/uptime/public/state/actions/ping.ts index bb7258d9a54b2f..70918a4cc70e56 100644 --- a/x-pack/legacy/plugins/uptime/public/state/actions/ping.ts +++ b/x-pack/legacy/plugins/uptime/public/state/actions/ping.ts @@ -5,8 +5,17 @@ */ import { createAction } from 'redux-actions'; -import { GetPingHistogramParams, HistogramResult } from '../../../common/types'; +import { + GetPingHistogramParams, + HistogramResult, + PingsResponse, + GetPingsParams, +} from '../../../common/runtime_types'; export const getPingHistogram = createAction('GET_PING_HISTOGRAM'); export const getPingHistogramSuccess = createAction('GET_PING_HISTOGRAM_SUCCESS'); export const getPingHistogramFail = createAction('GET_PING_HISTOGRAM_FAIL'); + +export const getPings = createAction('GET PINGS'); +export const getPingsSuccess = createAction('GET PINGS SUCCESS'); +export const getPingsFail = createAction('GET PINGS FAIL'); diff --git a/x-pack/legacy/plugins/uptime/public/state/api/monitor_status.ts b/x-pack/legacy/plugins/uptime/public/state/api/monitor_status.ts index f9e171adda3348..7c8ab3518b5a07 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/monitor_status.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/monitor_status.ts @@ -5,9 +5,9 @@ */ import { QueryParams } from '../actions/types'; -import { Ping } from '../../../common/graphql/types'; -import { apiService } from './utils'; +import { Ping } from '../../../common/runtime_types'; import { API_URLS } from '../../../common/constants'; +import { apiService } from './utils'; export const fetchMonitorStatus = async ({ monitorId, diff --git a/x-pack/legacy/plugins/uptime/public/state/api/ping.ts b/x-pack/legacy/plugins/uptime/public/state/api/ping.ts index df71cc8d67bd07..bbd3ddf399dcc6 100644 --- a/x-pack/legacy/plugins/uptime/public/state/api/ping.ts +++ b/x-pack/legacy/plugins/uptime/public/state/api/ping.ts @@ -5,10 +5,21 @@ */ import { APIFn } from './types'; -import { GetPingHistogramParams, HistogramResult } from '../../../common/types'; +import { + PingsResponseType, + PingsResponse, + GetPingsParams, + GetPingHistogramParams, + HistogramResult, +} from '../../../common/runtime_types'; import { apiService } from './utils'; import { API_URLS } from '../../../common/constants/rest_api'; +export const fetchPings: APIFn = async ({ + dateRange: { from, to }, + ...optional +}) => await apiService.get(API_URLS.PINGS, { from, to, ...optional }, PingsResponseType); + export const fetchPingHistogram: APIFn = async ({ monitorId, dateStart, @@ -19,9 +30,9 @@ export const fetchPingHistogram: APIFn const queryParams = { dateStart, dateEnd, - ...(monitorId && { monitorId }), - ...(statusFilter && { statusFilter }), - ...(filters && { filters }), + monitorId, + statusFilter, + filters, }; return await apiService.get(API_URLS.PING_HISTOGRAM, queryParams); diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/fetch_effect.ts b/x-pack/legacy/plugins/uptime/public/state/effects/fetch_effect.ts index 49e497952ea44c..b0734cb5ccabbc 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/fetch_effect.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/fetch_effect.ts @@ -16,7 +16,7 @@ import { IHttpFetchError } from '../../../../../../../target/types/core/public/h * @param fail creates a failure action * @template T the action type expected by the fetch action * @template R the type that the API request should return on success - * @template S tye type of the success action + * @template S the type of the success action * @template F the type of the failure action */ export function fetchEffectFactory( diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts index 8d457be1d1c783..8df11312b64550 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/index.ts @@ -11,7 +11,7 @@ import { fetchSnapshotCountEffect } from './snapshot'; import { fetchMonitorStatusEffect } from './monitor_status'; import { fetchDynamicSettingsEffect, setDynamicSettingsEffect } from './dynamic_settings'; import { fetchIndexPatternEffect } from './index_pattern'; -import { fetchPingHistogramEffect } from './ping'; +import { fetchPingsEffect, fetchPingHistogramEffect } from './ping'; import { fetchMonitorDurationEffect } from './monitor_duration'; import { fetchMLJobEffect } from './ml_anomaly'; import { fetchIndexStatusEffect } from './index_status'; @@ -24,6 +24,7 @@ export function* rootEffect() { yield fork(fetchDynamicSettingsEffect); yield fork(setDynamicSettingsEffect); yield fork(fetchIndexPatternEffect); + yield fork(fetchPingsEffect); yield fork(fetchPingHistogramEffect); yield fork(fetchMLJobEffect); yield fork(fetchMonitorDurationEffect); diff --git a/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts b/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts index acb9b31915fa99..dec67ed8cf9794 100644 --- a/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts +++ b/x-pack/legacy/plugins/uptime/public/state/effects/ping.ts @@ -5,10 +5,21 @@ */ import { takeLatest } from 'redux-saga/effects'; -import { getPingHistogram, getPingHistogramSuccess, getPingHistogramFail } from '../actions'; -import { fetchPingHistogram } from '../api'; +import { + getPingHistogram, + getPingHistogramSuccess, + getPingHistogramFail, + getPings, + getPingsSuccess, + getPingsFail, +} from '../actions'; +import { fetchPingHistogram, fetchPings } from '../api'; import { fetchEffectFactory } from './fetch_effect'; +export function* fetchPingsEffect() { + yield takeLatest(String(getPings), fetchEffectFactory(fetchPings, getPingsSuccess, getPingsFail)); +} + export function* fetchPingHistogramEffect() { yield takeLatest( String(getPingHistogram), diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts index 7bf8af5dd4d031..0a3ff35df0599f 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/index.ts @@ -13,6 +13,7 @@ import { monitorStatusReducer } from './monitor_status'; import { dynamicSettingsReducer } from './dynamic_settings'; import { indexPatternReducer } from './index_pattern'; import { pingReducer } from './ping'; +import { pingListReducer } from './ping_list'; import { monitorDurationReducer } from './monitor_duration'; import { indexStatusReducer } from './index_status'; import { mlJobsReducer } from './ml_anomaly'; @@ -26,6 +27,7 @@ export const rootReducer = combineReducers({ dynamicSettings: dynamicSettingsReducer, indexPattern: indexPatternReducer, ping: pingReducer, + pingList: pingListReducer, ml: mlJobsReducer, monitorDuration: monitorDurationReducer, indexStatus: indexStatusReducer, diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/monitor_status.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/monitor_status.ts index 6cfaa9f8f59c1f..fa3e377b5ebf4f 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/monitor_status.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/monitor_status.ts @@ -9,7 +9,7 @@ import { getMonitorStatusActionSuccess, getMonitorStatusActionFail, } from '../actions'; -import { Ping } from '../../../common/graphql/types'; +import { Ping } from '../../../common/runtime_types'; import { QueryParams } from '../actions/types'; export interface MonitorStatusState { diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts index 76775e6a0a3550..4c8715038ce360 100644 --- a/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/ping.ts @@ -6,7 +6,7 @@ import { handleActions, Action } from 'redux-actions'; import { getPingHistogram, getPingHistogramSuccess, getPingHistogramFail } from '../actions'; -import { HistogramResult } from '../../../common/types'; +import { HistogramResult } from '../../../common/runtime_types'; export interface PingState { pingHistogram: HistogramResult | null; diff --git a/x-pack/legacy/plugins/uptime/public/state/reducers/ping_list.ts b/x-pack/legacy/plugins/uptime/public/state/reducers/ping_list.ts new file mode 100644 index 00000000000000..e3ccb1e663edad --- /dev/null +++ b/x-pack/legacy/plugins/uptime/public/state/reducers/ping_list.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { handleActions, Action } from 'redux-actions'; +import { PingsResponse } from '../../../common/runtime_types'; +import { getPings, getPingsSuccess, getPingsFail } from '../actions'; + +export interface PingListState { + pingList: PingsResponse; + error?: Error; + loading: boolean; +} + +const initialState: PingListState = { + pingList: { + total: 0, + locations: [], + pings: [], + }, + loading: false, +}; + +type PingListPayload = PingsResponse & Error; + +export const pingListReducer = handleActions( + { + [String(getPings)]: state => ({ + ...state, + loading: true, + }), + + [String(getPingsSuccess)]: (state, action: Action) => ({ + ...state, + pingList: { ...action.payload }, + loading: false, + }), + + [String(getPingsFail)]: (state, action: Action) => ({ + ...state, + error: action.payload, + loading: false, + }), + }, + initialState +); diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts index 3b4547514a11ec..77902f347f6f93 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/__tests__/index.test.ts @@ -58,6 +58,14 @@ describe('state selectors', () => { loading: false, errors: [], }, + pingList: { + loading: false, + pingList: { + total: 0, + locations: [], + pings: [], + }, + }, monitorDuration: { durationLines: null, loading: false, diff --git a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts index 0fc3c7151cb3b8..37695e42743066 100644 --- a/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts +++ b/x-pack/legacy/plugins/uptime/public/state/selectors/index.ts @@ -41,6 +41,11 @@ export const selectPingHistogram = ({ ping, ui }: AppState) => { }; }; +export const selectPingList = ({ pingList, ui: { lastRefresh } }: AppState) => ({ + pings: pingList, + lastRefresh, +}); + const mlCapabilitiesSelector = (state: AppState) => state.ml.mlCapabilities.data; export const hasMLFeatureAvailable = createSelector( diff --git a/x-pack/plugins/uptime/server/graphql/index.ts b/x-pack/plugins/uptime/server/graphql/index.ts index 49ba5583b417be..a88afd7ac769c8 100644 --- a/x-pack/plugins/uptime/server/graphql/index.ts +++ b/x-pack/plugins/uptime/server/graphql/index.ts @@ -5,14 +5,13 @@ */ import { createMonitorStatesResolvers, monitorStatesSchema } from './monitor_states'; -import { createPingsResolvers, pingsSchema } from './pings'; +import { pingsSchema } from './pings'; import { CreateUMGraphQLResolvers } from './types'; import { unsignedIntegerResolverFunctions, unsignedIntegerSchema } from './unsigned_int_scalar'; export { DEFAULT_GRAPHQL_PATH } from './constants'; export const resolvers: CreateUMGraphQLResolvers[] = [ createMonitorStatesResolvers, - createPingsResolvers, unsignedIntegerResolverFunctions, ]; export const typeDefs: any[] = [pingsSchema, unsignedIntegerSchema, monitorStatesSchema]; diff --git a/x-pack/plugins/uptime/server/graphql/monitor_states/schema.gql.ts b/x-pack/plugins/uptime/server/graphql/monitor_states/schema.gql.ts index 6ab564fdeb532f..040ad99ac0c640 100644 --- a/x-pack/plugins/uptime/server/graphql/monitor_states/schema.gql.ts +++ b/x-pack/plugins/uptime/server/graphql/monitor_states/schema.gql.ts @@ -169,7 +169,7 @@ export const monitorStatesSchema = gql` DESC } - extend type Query { + type Query { "Fetches the current state of Uptime monitors for the given parameters." getMonitorStates( dateRangeStart: String! diff --git a/x-pack/plugins/uptime/server/graphql/pings/index.ts b/x-pack/plugins/uptime/server/graphql/pings/index.ts index 57ec3242a7aa90..100ce29c398ec1 100644 --- a/x-pack/plugins/uptime/server/graphql/pings/index.ts +++ b/x-pack/plugins/uptime/server/graphql/pings/index.ts @@ -4,5 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { createPingsResolvers } from './resolvers'; export { pingsSchema } from './schema.gql'; diff --git a/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts b/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts deleted file mode 100644 index 2bb1e13bc4b1f9..00000000000000 --- a/x-pack/plugins/uptime/server/graphql/pings/resolvers.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { UMResolver } from '../../../../../legacy/plugins/uptime/common/graphql/resolver_types'; -import { - AllPingsQueryArgs, - PingResults, -} from '../../../../../legacy/plugins/uptime/common/graphql/types'; -import { UMServerLibs } from '../../lib/lib'; -import { UMContext } from '../types'; -import { CreateUMGraphQLResolvers } from '../types'; -import { savedObjectsAdapter } from '../../lib/saved_objects'; - -export type UMAllPingsResolver = UMResolver< - PingResults | Promise, - any, - AllPingsQueryArgs, - UMContext ->; - -export interface UMPingResolver { - allPings: () => PingResults; -} - -export const createPingsResolvers: CreateUMGraphQLResolvers = ( - libs: UMServerLibs -): { - Query: { - allPings: UMAllPingsResolver; - }; -} => ({ - Query: { - async allPings( - _resolver, - { monitorId, sort, size, status, dateRangeStart, dateRangeEnd, location, page }, - { APICaller, savedObjectsClient } - ): Promise { - const dynamicSettings = await savedObjectsAdapter.getUptimeDynamicSettings( - savedObjectsClient - ); - - return await libs.requests.getPings({ - callES: APICaller, - dynamicSettings, - dateRangeStart, - dateRangeEnd, - monitorId, - status, - sort, - size, - location, - page, - }); - }, - }, -}); diff --git a/x-pack/plugins/uptime/server/graphql/pings/schema.gql.ts b/x-pack/plugins/uptime/server/graphql/pings/schema.gql.ts index 25767fb5441048..179bca53db1617 100644 --- a/x-pack/plugins/uptime/server/graphql/pings/schema.gql.ts +++ b/x-pack/plugins/uptime/server/graphql/pings/schema.gql.ts @@ -7,10 +7,6 @@ import gql from 'graphql-tag'; export const pingsSchema = gql` - schema { - query: Query - } - type PingResults { "Total number of matching pings" total: UnsignedInteger! @@ -20,28 +16,6 @@ export const pingsSchema = gql` pings: [Ping!]! } - type Query { - "Get a list of all recorded pings for all monitors" - allPings( - "Optional: the direction to sort by. Accepts 'asc' and 'desc'. Defaults to 'desc'." - sort: String - "Optional: the number of results to return." - size: Int - "Optional: the monitor ID filter." - monitorId: String - "Optional: the check status to filter by." - status: String - "The lower limit of the date range." - dateRangeStart: String! - "The upper limit of the date range." - dateRangeEnd: String! - "Optional: agent location to filter by." - location: String - "Optional: current page." - page: Int - ): PingResults! - } - type ContainerImage { name: String tag: String diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts index 112c8e97d4c009..cf8414a3b0a68c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_latest_monitor.test.ts @@ -42,10 +42,16 @@ describe('getLatestMonitor', () => { hits: { hits: [ { + _id: 'fejwio32', _source: { - timestamp: 123456, + '@timestamp': '123456', monitor: { + duration: { + us: 12345, + }, id: 'testMonitor', + status: 'down', + type: 'http', }, }, }, @@ -64,7 +70,22 @@ describe('getLatestMonitor', () => { monitorId: 'testMonitor', }); - expect(result.timestamp).toBe(123456); + expect(result).toMatchInlineSnapshot(` + Object { + "@timestamp": "123456", + "docId": "fejwio32", + "monitor": Object { + "duration": Object { + "us": 12345, + }, + "id": "testMonitor", + "status": "down", + "type": "http", + }, + "timestamp": "123456", + } + `); + expect(result.timestamp).toBe('123456'); expect(result.monitor).not.toBeFalsy(); expect(result?.monitor?.id).toBe('testMonitor'); expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetLatestSearchParams); diff --git a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts index 9145ccca1b6d17..fcf773db23de67 100644 --- a/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts +++ b/x-pack/plugins/uptime/server/lib/requests/__tests__/get_pings.test.ts @@ -17,16 +17,34 @@ describe('getAll', () => { { _source: { '@timestamp': '2018-10-30T18:51:59.792Z', + monitor: { + duration: { us: 2134 }, + id: 'foo', + status: 'up', + type: 'http', + }, }, }, { _source: { '@timestamp': '2018-10-30T18:53:59.792Z', + monitor: { + duration: { us: 2131 }, + id: 'foo', + status: 'up', + type: 'http', + }, }, }, { _source: { '@timestamp': '2018-10-30T18:55:59.792Z', + monitor: { + duration: { us: 2132 }, + id: 'foo', + status: 'up', + type: 'http', + }, }, }, ]; @@ -48,7 +66,7 @@ describe('getAll', () => { body: { query: { bool: { - filter: [{ range: { '@timestamp': { gte: 'now-1h', lte: 'now' } } }], + filter: [{ range: { timestamp: { gte: 'now-1h', lte: 'now' } } }], }, }, aggregations: { @@ -60,8 +78,7 @@ describe('getAll', () => { }, }, }, - sort: [{ '@timestamp': { order: 'desc' } }], - size: 12, + sort: [{ timestamp: { order: 'desc' } }], }, }; }); @@ -72,8 +89,7 @@ describe('getAll', () => { const result = await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, sort: 'asc', size: 12, }); @@ -95,15 +111,54 @@ describe('getAll', () => { await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, sort: 'asc', size: 12, }); - set(expectedGetAllParams, 'body.sort[0]', { '@timestamp': { order: 'asc' } }); + set(expectedGetAllParams, 'body.sort[0]', { timestamp: { order: 'asc' } }); expect(mockEsClient).toHaveBeenCalledTimes(1); - expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetAllParams); + expect(mockEsClient.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "search", + Object { + "body": Object { + "aggregations": Object { + "locations": Object { + "terms": Object { + "field": "observer.geo.name", + "missing": "N/A", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-1h", + "lte": "now", + }, + }, + }, + ], + }, + }, + "size": 12, + "sort": Array [ + Object { + "@timestamp": Object { + "order": "asc", + }, + }, + ], + }, + "index": "heartbeat-8*", + }, + ] + `); }); it('omits the sort param when no sort passed', async () => { @@ -112,12 +167,52 @@ describe('getAll', () => { await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, size: 12, }); - expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetAllParams); + expect(mockEsClient).toHaveBeenCalledTimes(1); + expect(mockEsClient.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "search", + Object { + "body": Object { + "aggregations": Object { + "locations": Object { + "terms": Object { + "field": "observer.geo.name", + "missing": "N/A", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-1h", + "lte": "now", + }, + }, + }, + ], + }, + }, + "size": 12, + "sort": Array [ + Object { + "@timestamp": Object { + "order": "desc", + }, + }, + ], + }, + "index": "heartbeat-8*", + }, + ] + `); }); it('omits the size param when no size passed', async () => { @@ -126,14 +221,52 @@ describe('getAll', () => { await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, sort: 'desc', }); - delete expectedGetAllParams.body.size; - set(expectedGetAllParams, 'body.sort[0].@timestamp.order', 'desc'); - expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetAllParams); + expect(mockEsClient).toHaveBeenCalledTimes(1); + expect(mockEsClient.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "search", + Object { + "body": Object { + "aggregations": Object { + "locations": Object { + "terms": Object { + "field": "observer.geo.name", + "missing": "N/A", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-1h", + "lte": "now", + }, + }, + }, + ], + }, + }, + "size": 25, + "sort": Array [ + Object { + "@timestamp": Object { + "order": "desc", + }, + }, + ], + }, + "index": "heartbeat-8*", + }, + ] + `); }); it('adds a filter for monitor ID', async () => { @@ -142,14 +275,57 @@ describe('getAll', () => { await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, monitorId: 'testmonitorid', }); - delete expectedGetAllParams.body.size; - expectedGetAllParams.body.query.bool.filter.push({ term: { 'monitor.id': 'testmonitorid' } }); - expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetAllParams); + expect(mockEsClient).toHaveBeenCalledTimes(1); + expect(mockEsClient.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "search", + Object { + "body": Object { + "aggregations": Object { + "locations": Object { + "terms": Object { + "field": "observer.geo.name", + "missing": "N/A", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-1h", + "lte": "now", + }, + }, + }, + Object { + "term": Object { + "monitor.id": "testmonitorid", + }, + }, + ], + }, + }, + "size": 25, + "sort": Array [ + Object { + "@timestamp": Object { + "order": "desc", + }, + }, + ], + }, + "index": "heartbeat-8*", + }, + ] + `); }); it('adds a filter for monitor status', async () => { @@ -158,13 +334,56 @@ describe('getAll', () => { await getPings({ callES: mockEsClient, dynamicSettings: defaultDynamicSettings, - dateRangeStart: 'now-1h', - dateRangeEnd: 'now', + dateRange: { from: 'now-1h', to: 'now' }, status: 'down', }); - delete expectedGetAllParams.body.size; - expectedGetAllParams.body.query.bool.filter.push({ term: { 'monitor.status': 'down' } }); - expect(mockEsClient).toHaveBeenCalledWith('search', expectedGetAllParams); + expect(mockEsClient).toHaveBeenCalledTimes(1); + expect(mockEsClient.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "search", + Object { + "body": Object { + "aggregations": Object { + "locations": Object { + "terms": Object { + "field": "observer.geo.name", + "missing": "N/A", + "size": 1000, + }, + }, + }, + "query": Object { + "bool": Object { + "filter": Array [ + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-1h", + "lte": "now", + }, + }, + }, + Object { + "term": Object { + "monitor.status": "down", + }, + }, + ], + }, + }, + "size": 25, + "sort": Array [ + Object { + "@timestamp": Object { + "order": "desc", + }, + }, + ], + }, + "index": "heartbeat-8*", + }, + ] + `); }); }); diff --git a/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts b/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts index 299e3eb6ca3cf9..a8e9ccb875a08c 100644 --- a/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts +++ b/x-pack/plugins/uptime/server/lib/requests/get_latest_monitor.ts @@ -5,7 +5,7 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { Ping } from '../../../../../legacy/plugins/uptime/common/graphql/types'; +import { Ping } from '../../../../../legacy/plugins/uptime/common/runtime_types'; export interface GetLatestMonitorParams { /** @member dateRangeStart timestamp bounds */ @@ -53,11 +53,9 @@ export const getLatestMonitor: UMElasticsearchQueryFn = async ({ +export const getPings: UMElasticsearchQueryFn = async ({ callES, dynamicSettings, - dateRangeStart, - dateRangeEnd, + dateRange: { from, to }, + index, monitorId, status, sort, - size, + size: sizeParam, location, - page, }) => { + const size = sizeParam ?? DEFAULT_PAGE_SIZE; const sortParam = { sort: [{ '@timestamp': { order: sort ?? 'desc' } }] }; - const sizeParam = size ? { size } : undefined; - const filter: any[] = [{ range: { '@timestamp': { gte: dateRangeStart, lte: dateRangeEnd } } }]; + const filter: any[] = [{ range: { '@timestamp': { gte: from, lte: to } } }]; if (monitorId) { filter.push({ term: { 'monitor.id': monitorId } }); } @@ -71,7 +47,7 @@ export const getPings: UMElasticsearchQueryFn = asy ...queryContext, }, ...sortParam, - ...sizeParam, + size, aggregations: { locations: { terms: { @@ -85,8 +61,8 @@ export const getPings: UMElasticsearchQueryFn = asy }, }; - if (page) { - params.body.from = page * (size ?? 25); + if (index) { + params.body.from = index * size; } const { @@ -96,25 +72,22 @@ export const getPings: UMElasticsearchQueryFn = asy const locations = aggs?.locations ?? { buckets: [{ key: 'N/A', doc_count: 0 }] }; - const pings: Ping[] = hits.map(({ _id, _source }: any) => { - const timestamp = _source['@timestamp']; - + const pings: Ping[] = hits.map((doc: any) => { + const { _id, _source } = doc; // Calculate here the length of the content string in bytes, this is easier than in client JS, where // we don't have access to Buffer.byteLength. There are some hacky ways to do this in the // client but this is cleaner. - const httpBody: HttpBody | undefined = _source?.http?.response?.body; + const httpBody: HttpResponseBody | undefined = _source?.http?.response?.body; if (httpBody && httpBody.content) { httpBody.content_bytes = Buffer.byteLength(httpBody.content); } - return { id: _id, timestamp, ..._source }; + return { ..._source, timestamp: _source['@timestamp'], docId: _id }; }); - const results: PingResults = { + return { total: total.value, locations: locations.buckets.map((bucket: { key: string }) => bucket.key), pings, }; - - return results; }; diff --git a/x-pack/plugins/uptime/server/lib/requests/index.ts b/x-pack/plugins/uptime/server/lib/requests/index.ts index 445adc3c15a930..6317f665d377f4 100644 --- a/x-pack/plugins/uptime/server/lib/requests/index.ts +++ b/x-pack/plugins/uptime/server/lib/requests/index.ts @@ -13,7 +13,7 @@ export { getMonitorLocations, GetMonitorLocationsParams } from './get_monitor_lo export { getMonitorStates, GetMonitorStatesParams } from './get_monitor_states'; export { getMonitorStatus, GetMonitorStatusParams } from './get_monitor_status'; export * from './get_monitor_status'; -export { getPings, GetPingsParams } from './get_pings'; +export { getPings } from './get_pings'; export { getPingHistogram, GetPingHistogramParams } from './get_ping_histogram'; export { UptimeRequests } from './uptime_requests'; export { getSnapshotCount, GetSnapshotCountParams } from './get_snapshot_counts'; diff --git a/x-pack/plugins/uptime/server/lib/requests/types.ts b/x-pack/plugins/uptime/server/lib/requests/types.ts deleted file mode 100644 index 53a4e989e37893..00000000000000 --- a/x-pack/plugins/uptime/server/lib/requests/types.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Ping, PingResults } from '../../../../../legacy/plugins/uptime/common/graphql/types'; -import { UMElasticsearchQueryFn } from '../adapters'; -import { - GetPingHistogramParams, - HistogramResult, -} from '../../../../../legacy/plugins/uptime/common/types'; - -export interface GetAllParams { - /** @member dateRangeStart timestamp bounds */ - dateRangeStart: string; - - /** @member dateRangeEnd timestamp bounds */ - dateRangeEnd: string; - - /** @member monitorId optional limit by monitorId */ - monitorId?: string | null; - - /** @member status optional limit by check statuses */ - status?: string | null; - - /** @member sort optional sort by timestamp */ - sort?: string | null; - - /** @member size optional limit query size */ - size?: number | null; - - /** @member location optional location value for use in filtering*/ - location?: string | null; -} - -export interface GetLatestMonitorDocsParams { - /** @member dateRangeStart timestamp bounds */ - dateStart?: string; - - /** @member dateRangeEnd timestamp bounds */ - dateEnd?: string; - - /** @member monitorId optional limit to monitorId */ - monitorId?: string | null; -} - -/** - * Count the number of documents in heartbeat indices - */ -export interface UMPingsAdapter { - getAll: UMElasticsearchQueryFn; - - // Get the monitor meta info regardless of timestamp - getMonitor: UMElasticsearchQueryFn; - - getLatestMonitorStatus: UMElasticsearchQueryFn; - - getPingHistogram: UMElasticsearchQueryFn; -} - -export interface HistogramQueryResult { - key: number; - key_as_string: string; - doc_count: number; - down: { - doc_count: number; - }; - up: { - doc_count: number; - }; -} diff --git a/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts b/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts index 9d3fa5aa08aedb..e9a7aa94dd3aa8 100644 --- a/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts +++ b/x-pack/plugins/uptime/server/lib/requests/uptime_requests.ts @@ -5,7 +5,12 @@ */ import { UMElasticsearchQueryFn } from '../adapters'; -import { Ping, PingResults } from '../../../../../legacy/plugins/uptime/common/graphql/types'; +import { + HistogramResult, + Ping, + PingsResponse as PingResults, + GetPingsParams, +} from '../../../../../legacy/plugins/uptime/common/runtime_types'; import { GetFilterBarParams, GetLatestMonitorParams, @@ -13,7 +18,6 @@ import { GetMonitorDetailsParams, GetMonitorLocationsParams, GetMonitorStatesParams, - GetPingsParams, GetPingHistogramParams, GetMonitorStatusParams, GetMonitorStatusResult, @@ -27,10 +31,7 @@ import { } from '../../../../../legacy/plugins/uptime/common/runtime_types'; import { GetMonitorStatesResult } from './get_monitor_states'; import { GetSnapshotCountParams } from './get_snapshot_counts'; -import { - HistogramResult, - MonitorDurationResult, -} from '../../../../../legacy/plugins/uptime/common/types'; +import { MonitorDurationResult } from '../../../../../legacy/plugins/uptime/common/types'; type ESQ = UMElasticsearchQueryFn; diff --git a/x-pack/plugins/uptime/server/rest_api/index.ts b/x-pack/plugins/uptime/server/rest_api/index.ts index c84ea71037953e..c0412e588fa93a 100644 --- a/x-pack/plugins/uptime/server/rest_api/index.ts +++ b/x-pack/plugins/uptime/server/rest_api/index.ts @@ -5,7 +5,7 @@ */ import { createGetOverviewFilters } from './overview_filters'; -import { createGetPingsRoute } from './pings'; +import { createGetPingHistogramRoute, createGetPingsRoute } from './pings'; import { createGetDynamicSettingsRoute, createPostDynamicSettingsRoute } from './dynamic_settings'; import { createLogPageViewRoute } from './telemetry'; import { createGetSnapshotCount } from './snapshot'; @@ -15,10 +15,8 @@ import { createGetMonitorLocationsRoute, createGetStatusBarRoute, } from './monitors'; -import { createGetPingHistogramRoute } from './pings/get_ping_histogram'; import { createGetMonitorDurationRoute } from './monitors/monitors_durations'; import { createGetIndexPatternRoute, createGetIndexStatusRoute } from './index_state'; - export * from './types'; export { createRouteWithAuth } from './create_route_with_auth'; export { uptimeRouteWrapper } from './uptime_route_wrapper'; diff --git a/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts b/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts deleted file mode 100644 index c76892103da6b7..00000000000000 --- a/x-pack/plugins/uptime/server/rest_api/pings/get_all.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { schema } from '@kbn/config-schema'; -import { UMServerLibs } from '../../lib/lib'; -import { UMRestApiRouteFactory } from '../types'; -import { API_URLS } from '../../../../../legacy/plugins/uptime/common/constants/rest_api'; - -export const createGetAllRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ - method: 'GET', - path: API_URLS.PINGS, - validate: { - query: schema.object({ - dateRangeStart: schema.string(), - dateRangeEnd: schema.string(), - location: schema.maybe(schema.string()), - monitorId: schema.maybe(schema.string()), - size: schema.maybe(schema.number()), - sort: schema.maybe(schema.string()), - status: schema.maybe(schema.string()), - }), - }, - handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { - const { dateRangeStart, dateRangeEnd, location, monitorId, size, sort, status } = request.query; - - const result = await libs.requests.getPings({ - callES, - dynamicSettings, - dateRangeStart, - dateRangeEnd, - monitorId, - status, - sort, - size, - location, - }); - - return response.ok({ - body: { - ...result, - }, - }); - }, -}); diff --git a/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts b/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts index cde9a8c4e47ead..80a887a7f64a9d 100644 --- a/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts +++ b/x-pack/plugins/uptime/server/rest_api/pings/get_pings.ts @@ -5,37 +5,41 @@ */ import { schema } from '@kbn/config-schema'; +import { isLeft } from 'fp-ts/lib/Either'; +import { PathReporter } from 'io-ts/lib/PathReporter'; import { UMServerLibs } from '../../lib/lib'; import { UMRestApiRouteFactory } from '../types'; import { API_URLS } from '../../../../../legacy/plugins/uptime/common/constants/rest_api'; +import { GetPingsParamsType } from '../../../../../legacy/plugins/uptime/common/runtime_types'; export const createGetPingsRoute: UMRestApiRouteFactory = (libs: UMServerLibs) => ({ method: 'GET', path: API_URLS.PINGS, validate: { query: schema.object({ - dateRangeStart: schema.string(), - dateRangeEnd: schema.string(), + from: schema.string(), + to: schema.string(), location: schema.maybe(schema.string()), monitorId: schema.maybe(schema.string()), + index: schema.maybe(schema.number()), size: schema.maybe(schema.number()), sort: schema.maybe(schema.string()), status: schema.maybe(schema.string()), }), }, handler: async ({ callES, dynamicSettings }, _context, request, response): Promise => { - const { dateRangeStart, dateRangeEnd, location, monitorId, size, sort, status } = request.query; + const { from, to, ...optional } = request.query; + const params = GetPingsParamsType.decode({ dateRange: { from, to }, ...optional }); + if (isLeft(params)) { + // eslint-disable-next-line no-console + console.error(new Error(PathReporter.report(params).join(';'))); + return response.badRequest({ body: { message: 'Received invalid request parameters.' } }); + } const result = await libs.requests.getPings({ callES, dynamicSettings, - dateRangeStart, - dateRangeEnd, - monitorId, - status, - sort, - size, - location, + ...params.right, }); return response.ok({ diff --git a/x-pack/plugins/uptime/server/rest_api/pings/index.ts b/x-pack/plugins/uptime/server/rest_api/pings/index.ts index abb7da26f994f0..a10ab435e4b0a3 100644 --- a/x-pack/plugins/uptime/server/rest_api/pings/index.ts +++ b/x-pack/plugins/uptime/server/rest_api/pings/index.ts @@ -5,3 +5,4 @@ */ export { createGetPingsRoute } from './get_pings'; +export { createGetPingHistogramRoute } from './get_ping_histogram'; diff --git a/x-pack/test/api_integration/apis/uptime/feature_controls.ts b/x-pack/test/api_integration/apis/uptime/feature_controls.ts index 4c3b7f97c9544f..8b82735fc38b05 100644 --- a/x-pack/test/api_integration/apis/uptime/feature_controls.ts +++ b/x-pack/test/api_integration/apis/uptime/feature_controls.ts @@ -40,7 +40,7 @@ export default function featureControlsTests({ getService }: FtrProviderContext) const executePingsRequest = async (username: string, password: string, spaceId?: string) => { const basePath = spaceId ? `/s/${spaceId}` : ''; - const url = `${basePath}${API_URLS.PINGS}?sort=desc&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}`; + const url = `${basePath}${API_URLS.PINGS}?sort=desc&from=${PINGS_DATE_RANGE_START}&to=${PINGS_DATE_RANGE_END}`; return await supertest .get(url) .auth(username, password) diff --git a/x-pack/test/api_integration/apis/uptime/get_all_pings.ts b/x-pack/test/api_integration/apis/uptime/get_all_pings.ts index 666986e7008b7c..0b3f5faccb044d 100644 --- a/x-pack/test/api_integration/apis/uptime/get_all_pings.ts +++ b/x-pack/test/api_integration/apis/uptime/get_all_pings.ts @@ -22,7 +22,7 @@ export default function({ getService }: FtrProviderContext) { it('should get all pings stored in index', async () => { const { body: apiResponse } = await supertest .get( - `/api/uptime/pings?sort=desc&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}` + `/api/uptime/pings?sort=desc&from=${PINGS_DATE_RANGE_START}&to=${PINGS_DATE_RANGE_END}` ) .expect(200); @@ -33,21 +33,19 @@ export default function({ getService }: FtrProviderContext) { it('should sort pings according to timestamp', async () => { const { body: apiResponse } = await supertest - .get( - `/api/uptime/pings?sort=asc&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}` - ) + .get(`/api/uptime/pings?sort=asc&from=${PINGS_DATE_RANGE_START}&to=${PINGS_DATE_RANGE_END}`) .expect(200); expect(apiResponse.total).to.be(2); expect(apiResponse.pings.length).to.be(2); - expect(apiResponse.pings[0].timestamp).to.be('2018-10-30T14:49:23.889Z'); - expect(apiResponse.pings[1].timestamp).to.be('2018-10-30T18:51:56.792Z'); + expect(apiResponse.pings[0]['@timestamp']).to.be('2018-10-30T14:49:23.889Z'); + expect(apiResponse.pings[1]['@timestamp']).to.be('2018-10-30T18:51:56.792Z'); }); it('should return results of n length', async () => { const { body: apiResponse } = await supertest .get( - `/api/uptime/pings?sort=desc&size=1&dateRangeStart=${PINGS_DATE_RANGE_START}&dateRangeEnd=${PINGS_DATE_RANGE_END}` + `/api/uptime/pings?sort=desc&size=1&from=${PINGS_DATE_RANGE_START}&to=${PINGS_DATE_RANGE_END}` ) .expect(200); @@ -57,10 +55,10 @@ export default function({ getService }: FtrProviderContext) { }); it('should miss pings outside of date range', async () => { - const dateRangeStart = moment('2002-01-01').valueOf(); - const dateRangeEnd = moment('2002-01-02').valueOf(); + const from = moment('2002-01-01').valueOf(); + const to = moment('2002-01-02').valueOf(); const { body: apiResponse } = await supertest - .get(`/api/uptime/pings?dateRangeStart=${dateRangeStart}&dateRangeEnd=${dateRangeEnd}`) + .get(`/api/uptime/pings?from=${from}&to=${to}`) .expect(200); expect(apiResponse.total).to.be(0); diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list.json deleted file mode 100644 index 330ec83931a62b..00000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - "allPings": { - "total": 2000, - "locations": [ - "mpls" - ], - "pings": [ - { - "timestamp": "2019-09-11T03:40:34.410Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 413 - }, - "id": "0074-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 441 - }, - "id": "0073-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 482 - }, - "id": "0099-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 558 - }, - "id": "0098-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 304 - }, - "id": "0075-intermittent", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.405Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 487 - }, - "id": "0097-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.405Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 602 - }, - "id": "0049-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.390Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 365 - }, - "id": "0047-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.389Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 870 - }, - "id": "0077-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.387Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2808 - }, - "id": "0076-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_count.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_count.json deleted file mode 100644 index 3a619f517626ad..00000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_count.json +++ /dev/null @@ -1,1569 +0,0 @@ -{ - "allPings": { - "total": 2000, - "locations": [ - "mpls" - ], - "pings": [ - { - "timestamp": "2019-09-11T03:40:34.410Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 413 - }, - "id": "0074-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 441 - }, - "id": "0073-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 482 - }, - "id": "0099-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 558 - }, - "id": "0098-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.406Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 304 - }, - "id": "0075-intermittent", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.405Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 487 - }, - "id": "0097-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.405Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 602 - }, - "id": "0049-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.390Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 365 - }, - "id": "0047-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.389Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 870 - }, - "id": "0077-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.387Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2808 - }, - "id": "0076-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.386Z", - "http": { - "response": { - "status_code": 400, - "body": { - "bytes": 3, - "hash": "26d228663f13a88592a12d16cf9587caab0388b262d6d9f126ed62f9333aca94", - "content": "400", - "content_bytes": 3 - } - } - }, - "error": { - "message": "400 Bad Request", - "type": "validate" - }, - "monitor": { - "duration": { - "us": 4258 - }, - "id": "0050-down", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.386Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 4784 - }, - "id": "0048-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.376Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 14580 - }, - "id": "0072-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.376Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 14679 - }, - "id": "0096-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15308 - }, - "id": "0092-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15183 - }, - "id": "0069-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15013 - }, - "id": "0093-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 400, - "body": { - "bytes": 3, - "hash": "26d228663f13a88592a12d16cf9587caab0388b262d6d9f126ed62f9333aca94", - "content": "400", - "content_bytes": 3 - } - } - }, - "error": { - "message": "400 Bad Request", - "type": "validate" - }, - "monitor": { - "duration": { - "us": 15117 - }, - "id": "0070-down", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 14875 - }, - "id": "0071-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 14801 - }, - "id": "0095-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15065 - }, - "id": "0032-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 14911 - }, - "id": "0094-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 16135 - }, - "id": "0046-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15428 - }, - "id": "0091-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15499 - }, - "id": "0067-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15464 - }, - "id": "0068-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 21736 - }, - "id": "0090-intermittent", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 21874 - }, - "id": "0031-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.374Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 36584 - }, - "id": "0066-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 3148 - }, - "id": "0084-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 13442 - }, - "id": "0083-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 13666 - }, - "id": "0041-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 16290 - }, - "id": "0045-intermittent", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 17255 - }, - "id": "0042-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 500, - "body": { - "bytes": 3, - "hash": "0604cd3138feed202ef293e062da2f4720f77a05d25ee036a7a01c9cfcdd1f0a", - "content": "500", - "content_bytes": 3 - } - } - }, - "error": { - "message": "500 Internal Server Error", - "type": "validate" - }, - "monitor": { - "duration": { - "us": 17146 - }, - "id": "0030-intermittent", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "down", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 17770 - }, - "id": "0063-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 18194 - }, - "id": "0061-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 17587 - }, - "id": "0065-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 22666 - }, - "id": "0062-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 33311 - }, - "id": "0026-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 33506 - }, - "id": "0085-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 33974 - }, - "id": "0025-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 33693 - }, - "id": "0088-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 33833 - }, - "id": "0089-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 34600 - }, - "id": "0087-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35573 - }, - "id": "0028-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35830 - }, - "id": "0086-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35698 - }, - "id": "0064-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35594 - }, - "id": "0029-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35652 - }, - "id": "0044-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_monitor_id.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_monitor_id.json deleted file mode 100644 index 5826fd9f3f540d..00000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_monitor_id.json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "allPings": { - "total": 20, - "locations": [ - "mpls" - ], - "pings": [ - { - "timestamp": "2019-09-11T03:40:34.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 35534 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:40:04.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 3080 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:39:34.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 7810 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:39:04.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 1575 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:38:34.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 1787 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:38:04.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 654 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:37:34.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 15915 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:37:04.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2679 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:36:34.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2104 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:36:04.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 5759 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:35:34.373Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 7166 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:35:04.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 26830 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:34:34.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 993 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:34:04.381Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 3880 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:33:34.371Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 1604 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_sort.json b/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_sort.json deleted file mode 100644 index b9b8deae2e564f..00000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/fixtures/ping_list_sort.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "allPings": { - "total": 20, - "locations": [ - "mpls" - ], - "pings": [ - { - "timestamp": "2019-09-11T03:31:04.380Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 56940 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:31:34.366Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 9861 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:32:04.372Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2924 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:32:34.375Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 21665 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - }, - { - "timestamp": "2019-09-11T03:33:04.370Z", - "http": { - "response": { - "status_code": 200, - "body": { - "bytes": 3, - "hash": "27badc983df1780b60c2b3fa9d3a19a00e46aac798451f0febdca52920faaddf", - "content": null, - "content_bytes": null - } - } - }, - "error": null, - "monitor": { - "duration": { - "us": 2128 - }, - "id": "0001-up", - "ip": "127.0.0.1", - "name": "", - "scheme": null, - "status": "up", - "type": "http" - }, - "observer": { - "geo": { - "name": "mpls" - } - } - } - ] - } -} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/uptime/graphql/index.ts b/x-pack/test/api_integration/apis/uptime/graphql/index.ts index 2e0b5e2eea2a5f..862cce47f257a5 100644 --- a/x-pack/test/api_integration/apis/uptime/graphql/index.ts +++ b/x-pack/test/api_integration/apis/uptime/graphql/index.ts @@ -13,6 +13,5 @@ export default function({ loadTestFile }: FtrProviderContext) { // verifying the pre-loaded documents are returned in a way that // matches the snapshots contained in './fixtures' loadTestFile(require.resolve('./monitor_states')); - loadTestFile(require.resolve('./ping_list')); }); } diff --git a/x-pack/test/api_integration/apis/uptime/graphql/ping_list.ts b/x-pack/test/api_integration/apis/uptime/graphql/ping_list.ts deleted file mode 100644 index c84b9c382acddc..00000000000000 --- a/x-pack/test/api_integration/apis/uptime/graphql/ping_list.ts +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { pingsQueryString } from '../../../../../legacy/plugins/uptime/public/queries'; -import { expectFixtureEql } from './helpers/expect_fixture_eql'; -import { Ping, PingResults } from '../../../../../legacy/plugins/uptime/common/graphql/types'; - -const expectPingFixtureEql = (data: { allPings: PingResults }, fixtureName: string) => { - expectFixtureEql(data, fixtureName, d => d.allPings.pings.forEach((p: Ping) => delete p.id)); -}; - -export default function({ getService }: any) { - describe('pingList query', () => { - before('load heartbeat data', () => getService('esArchiver').load('uptime/full_heartbeat')); - after('unload heartbeat index', () => getService('esArchiver').unload('uptime/full_heartbeat')); - - const supertest = getService('supertest'); - - it('returns a list of pings for the given date range and default size', async () => { - const getPingsQuery = { - operationName: 'PingList', - query: pingsQueryString, - variables: { - dateRangeStart: '2019-01-28T17:40:08.078Z', - dateRangeEnd: '2025-01-28T19:00:16.078Z', - }, - }; - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getPingsQuery }); - const { - allPings: { pings }, - } = data; - expect(pings).length(10); - - expectPingFixtureEql(data, 'ping_list'); - }); - - it('returns a list of pings for the date range and given size', async () => { - const SIZE = 50; - const getPingsQuery = { - operationName: 'PingList', - query: pingsQueryString, - variables: { - dateRangeStart: '2019-01-28T17:40:08.078Z', - dateRangeEnd: '2025-01-28T19:00:16.078Z', - size: SIZE, - }, - }; - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getPingsQuery }); - const { - allPings: { pings }, - } = data; - expect(pings).length(SIZE); - expectPingFixtureEql(data, 'ping_list_count'); - }); - - it('returns a list of pings for a monitor ID', async () => { - const SIZE = 15; - const MONITOR_ID = '0001-up'; - const getPingsQuery = { - operationName: 'PingList', - query: pingsQueryString, - variables: { - dateRangeStart: '2019-01-28T17:40:08.078Z', - dateRangeEnd: '2025-01-28T19:00:16.078Z', - monitorId: MONITOR_ID, - size: SIZE, - }, - }; - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getPingsQuery }); - expectPingFixtureEql(data, 'ping_list_monitor_id'); - }); - - it('returns a list of pings sorted ascending', async () => { - const SIZE = 5; - const MONITOR_ID = '0001-up'; - const getPingsQuery = { - operationName: 'PingList', - query: pingsQueryString, - variables: { - dateRangeStart: '2019-01-28T17:40:08.078Z', - dateRangeEnd: '2025-01-28T19:00:16.078Z', - monitorId: MONITOR_ID, - size: SIZE, - sort: 'asc', - }, - }; - const { - body: { data }, - } = await supertest - .post('/api/uptime/graphql') - .set('kbn-xsrf', 'foo') - .send({ ...getPingsQuery }); - - expectPingFixtureEql(data, 'ping_list_sort'); - }); - }); -} diff --git a/x-pack/test/api_integration/apis/uptime/index.ts b/x-pack/test/api_integration/apis/uptime/index.ts index a21db08d58c4d4..8def64b71a110d 100644 --- a/x-pack/test/api_integration/apis/uptime/index.ts +++ b/x-pack/test/api_integration/apis/uptime/index.ts @@ -10,11 +10,12 @@ export default function({ getService, loadTestFile }: FtrProviderContext) { const es = getService('legacyEs'); describe('uptime', () => { - before(() => - es.indices.delete({ - index: 'heartbeat*', - ignore: [404], - }) + before( + async () => + await es.indices.delete({ + index: 'heartbeat*', + ignore: [404], + }) ); loadTestFile(require.resolve('./feature_controls')); diff --git a/x-pack/test/api_integration/apis/uptime/rest/fixtures/monitor_latest_status.json b/x-pack/test/api_integration/apis/uptime/rest/fixtures/monitor_latest_status.json index 2e5854f4d98665..6a832ad8536f7f 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/fixtures/monitor_latest_status.json +++ b/x-pack/test/api_integration/apis/uptime/rest/fixtures/monitor_latest_status.json @@ -1,16 +1,11 @@ { - "timestamp": "2019-09-11T03:40:34.371Z", "observer": { - "geo": { - "name": "mpls", - "location": "37.926868, -78.024902" - }, + "geo": { "name": "mpls", "location": "37.926868, -78.024902" }, "hostname": "avc-x1x" }, + "@timestamp": "2019-09-11T03:40:34.371Z", "monitor": { - "duration": { - "us": 24627 - }, + "duration": { "us": 24627 }, "ip": "127.0.0.1", "name": "", "check_group": "d76f0762-d445-11e9-88e3-3e80641b9c71", @@ -25,5 +20,7 @@ "domain": "localhost", "query": "r=200x1", "full": "http://localhost:5678/pattern?r=200x1" - } + }, + "docId": "h5toHm0B0I9WX_CznN_V", + "timestamp": "2019-09-11T03:40:34.371Z" } diff --git a/x-pack/test/api_integration/apis/uptime/rest/index.ts b/x-pack/test/api_integration/apis/uptime/rest/index.ts index 9b0cd61c224628..3f8df81856f5c9 100644 --- a/x-pack/test/api_integration/apis/uptime/rest/index.ts +++ b/x-pack/test/api_integration/apis/uptime/rest/index.ts @@ -45,10 +45,11 @@ export default function({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./telemetry_collectors')); }); describe('with real-world data', () => { - before('load heartbeat data', async () => await esArchiver.load('uptime/full_heartbeat')); - after('unload', async () => await esArchiver.unload('uptime/full_heartbeat')); + beforeEach('load heartbeat data', async () => await esArchiver.load('uptime/full_heartbeat')); + afterEach('unload', async () => await esArchiver.unload('uptime/full_heartbeat')); loadTestFile(require.resolve('./monitor_latest_status')); loadTestFile(require.resolve('./ping_histogram')); + loadTestFile(require.resolve('./ping_list')); loadTestFile(require.resolve('./monitor_duration')); loadTestFile(require.resolve('./doc_count')); }); diff --git a/x-pack/test/api_integration/apis/uptime/rest/ping_list.ts b/x-pack/test/api_integration/apis/uptime/rest/ping_list.ts new file mode 100644 index 00000000000000..a261763d5991f9 --- /dev/null +++ b/x-pack/test/api_integration/apis/uptime/rest/ping_list.ts @@ -0,0 +1,178 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { isLeft } from 'fp-ts/lib/Either'; +import { PathReporter } from 'io-ts/lib/PathReporter'; +import { PingsResponseType } from '../../../../../legacy/plugins/uptime/common/runtime_types'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +function decodePingsResponseData(response: any) { + const decoded = PingsResponseType.decode(response); + if (isLeft(decoded)) { + throw Error(JSON.stringify(PathReporter.report(decoded), null, 2)); + } + return decoded.right; +} + +export default function({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + describe('pingList query', () => { + before('load heartbeat data', () => getService('esArchiver').load('uptime/full_heartbeat')); + after('unload heartbeat index', () => getService('esArchiver').unload('uptime/full_heartbeat')); + + it('returns a list of pings for the given date range and default size', async () => { + const from = '2019-01-28T17:40:08.078Z'; + const to = '2025-01-28T19:00:16.078Z'; + + const apiResponse = await supertest.get(`/api/uptime/pings?from=${from}&to=${to}&size=10`); + + const { total, locations, pings } = decodePingsResponseData(apiResponse.body); + + expect(total).to.be(2000); + expect(locations).to.eql(['mpls']); + expect(pings).length(10); + expect(pings.map(({ monitor: { id } }) => id)).to.eql([ + '0074-up', + '0073-up', + '0099-up', + '0098-up', + '0075-intermittent', + '0097-up', + '0049-up', + '0047-up', + '0077-up', + '0076-up', + ]); + }); + + it('returns a list of pings for the date range and given size', async () => { + const from = '2019-01-28T17:40:08.078Z'; + const to = '2025-01-28T19:00:16.078Z'; + const size = 50; + + const apiResponse = await supertest.get( + `/api/uptime/pings?from=${from}&to=${to}&size=${size}` + ); + + const { total, locations, pings } = decodePingsResponseData(apiResponse.body); + + expect(total).to.be(2000); + expect(locations).to.eql(['mpls']); + expect(pings).length(50); + expect(pings.map(({ monitor: { id } }) => id)).to.eql([ + '0074-up', + '0073-up', + '0099-up', + '0098-up', + '0075-intermittent', + '0097-up', + '0049-up', + '0047-up', + '0077-up', + '0076-up', + '0050-down', + '0048-up', + '0072-up', + '0096-up', + '0092-up', + '0069-up', + '0093-up', + '0070-down', + '0071-up', + '0095-up', + '0032-up', + '0094-up', + '0046-up', + '0091-up', + '0067-up', + '0068-up', + '0090-intermittent', + '0031-up', + '0066-up', + '0084-up', + '0083-up', + '0041-up', + '0045-intermittent', + '0042-up', + '0030-intermittent', + '0063-up', + '0061-up', + '0065-up', + '0062-up', + '0026-up', + '0085-up', + '0025-up', + '0088-up', + '0089-up', + '0087-up', + '0028-up', + '0086-up', + '0064-up', + '0029-up', + '0044-up', + ]); + }); + + it('returns a list of pings for a monitor ID', async () => { + const from = '2019-01-28T17:40:08.078Z'; + const to = '2025-01-28T19:00:16.078Z'; + const monitorId = '0001-up'; + const size = 15; + + const apiResponse = await supertest.get( + `/api/uptime/pings?from=${from}&to=${to}&monitorId=${monitorId}&size=${size}` + ); + + const { total, locations, pings } = decodePingsResponseData(apiResponse.body); + + expect(total).to.be(20); + expect(locations).to.eql(['mpls']); + pings.forEach(({ monitor: { id } }) => expect(id).to.eql('0001-up')); + expect(pings.map(({ timestamp }) => timestamp)).to.eql([ + '2019-09-11T03:40:34.371Z', + '2019-09-11T03:40:04.370Z', + '2019-09-11T03:39:34.370Z', + '2019-09-11T03:39:04.371Z', + '2019-09-11T03:38:34.370Z', + '2019-09-11T03:38:04.370Z', + '2019-09-11T03:37:34.370Z', + '2019-09-11T03:37:04.370Z', + '2019-09-11T03:36:34.371Z', + '2019-09-11T03:36:04.370Z', + '2019-09-11T03:35:34.373Z', + '2019-09-11T03:35:04.371Z', + '2019-09-11T03:34:34.371Z', + '2019-09-11T03:34:04.381Z', + '2019-09-11T03:33:34.371Z', + ]); + }); + + it('returns a list of pings sorted ascending', async () => { + const from = '2019-01-28T17:40:08.078Z'; + const to = '2025-01-28T19:00:16.078Z'; + const monitorId = '0001-up'; + const size = 5; + const sort = 'asc'; + + const apiResponse = await supertest.get( + `/api/uptime/pings?from=${from}&to=${to}&monitorId=${monitorId}&size=${size}&sort=${sort}` + ); + + const { total, locations, pings } = decodePingsResponseData(apiResponse.body); + + expect(total).to.be(20); + expect(locations).to.eql(['mpls']); + expect(pings.map(({ timestamp }) => timestamp)).to.eql([ + '2019-09-11T03:31:04.380Z', + '2019-09-11T03:31:34.366Z', + '2019-09-11T03:32:04.372Z', + '2019-09-11T03:32:34.375Z', + '2019-09-11T03:33:04.370Z', + ]); + }); + }); +} diff --git a/x-pack/test/functional/apps/uptime/monitor.ts b/x-pack/test/functional/apps/uptime/monitor.ts index 90ad1836c69d31..388d660f21eb3a 100644 --- a/x-pack/test/functional/apps/uptime/monitor.ts +++ b/x-pack/test/functional/apps/uptime/monitor.ts @@ -23,8 +23,33 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await uptimeService.navigation.goToUptime(); }); - it('loads and displays uptime data based on date range', async () => { - await uptime.loadDataAndGoToMonitorPage(dateStart, dateEnd, monitorId); + after(async () => { + await esArchiver.unload(archive); + }); + + describe('navigation to monitor page', () => { + before(async () => { + await uptime.loadDataAndGoToMonitorPage(dateStart, dateEnd, monitorId); + }); + + it('displays ping data as expected', async () => { + await uptime.checkPingListInteractions( + [ + 'XZtoHm0B0I9WX_CznN-6', + '7ZtoHm0B0I9WX_CzJ96M', + 'pptnHm0B0I9WX_Czst5X', + 'I5tnHm0B0I9WX_CzPd46', + 'y5tmHm0B0I9WX_Czx93x', + 'XZtmHm0B0I9WX_CzUt3H', + '-JtlHm0B0I9WX_Cz3dyX', + 'k5tlHm0B0I9WX_CzaNxm', + 'NZtkHm0B0I9WX_Cz89w9', + 'zJtkHm0B0I9WX_CzftsN', + ], + 'mpls', + 'up' + ); + }); }); }); }; diff --git a/x-pack/test/functional/page_objects/uptime_page.ts b/x-pack/test/functional/page_objects/uptime_page.ts index 7157bbfb3811b4..0ebcb5c87deeec 100644 --- a/x-pack/test/functional/page_objects/uptime_page.ts +++ b/x-pack/test/functional/page_objects/uptime_page.ts @@ -9,7 +9,7 @@ import { FtrProviderContext } from '../ftr_provider_context'; export function UptimePageProvider({ getPageObjects, getService }: FtrProviderContext) { const pageObjects = getPageObjects(['common', 'timePicker']); - const { common: commonService, navigation, alerts } = getService('uptime'); + const { alerts, common: commonService, monitor, navigation } = getService('uptime'); const retry = getService('retry'); return new (class UptimePage { @@ -137,6 +137,20 @@ export function UptimePageProvider({ getPageObjects, getService }: FtrProviderCo return commonService.clickPageSizeSelectPopoverItem(size); } + public async checkPingListInteractions( + timestamps: string[], + location?: string, + status?: string + ): Promise { + if (location) { + await monitor.setPingListLocation(location); + } + if (status) { + await monitor.setPingListStatus(status); + } + return monitor.checkForPingListTimestamps(timestamps); + } + public async resetFilters() { await this.inputFilterQuery(''); await commonService.resetStatusFilter(); diff --git a/x-pack/test/functional/services/uptime/monitor.ts b/x-pack/test/functional/services/uptime/monitor.ts index 3bdec4b6749d42..a3e3d953e2eb76 100644 --- a/x-pack/test/functional/services/uptime/monitor.ts +++ b/x-pack/test/functional/services/uptime/monitor.ts @@ -27,5 +27,22 @@ export function UptimeMonitorProvider({ getService }: FtrProviderContext) { await find.descendantExistsByCssSelector('canvas.mapboxgl-canvas', mapPanel); }); }, + async setPingListLocation(location: string) { + await testSubjects.click('xpack.uptime.pingList.locationSelect', 5000); + return testSubjects.click(`xpack.uptime.pingList.locationOptions.${location}`, 5000); + }, + async setPingListStatus(status: string) { + await testSubjects.click('xpack.uptime.pingList.statusSelect', 5000); + return testSubjects.click(`xpack.uptime.pingList.statusOptions.${status}`, 5000); + }, + async checkForPingListTimestamps(timestamps: string[]): Promise { + return retry.tryForTime(10000, async () => { + await Promise.all( + timestamps.map(timestamp => + testSubjects.existOrFail(`xpack.uptime.pingList.ping-${timestamp}`) + ) + ); + }); + }, }; } From b38c98a730f4962910e29acf7d8847346ab67e6d Mon Sep 17 00:00:00 2001 From: Alison Goryachev Date: Tue, 14 Apr 2020 09:13:20 -0400 Subject: [PATCH 41/65] =?UTF-8?q?[Remote=20clusters]=20guard=20against=20u?= =?UTF-8?q?sageCollection=20plugin=20if=20unav=E2=80=A6=20(#63284)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../public/application/services/ui_metric.ts | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/remote_clusters/public/application/services/ui_metric.ts b/x-pack/plugins/remote_clusters/public/application/services/ui_metric.ts index 91354155cacb05..4fc3c438e76d6c 100644 --- a/x-pack/plugins/remote_clusters/public/application/services/ui_metric.ts +++ b/x-pack/plugins/remote_clusters/public/application/services/ui_metric.ts @@ -3,17 +3,24 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - +import { UiStatsMetricType, METRIC_TYPE } from '@kbn/analytics'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/public'; -import { UiStatsMetricType } from '@kbn/analytics'; import { UIM_APP_NAME } from '../constants'; -export let trackUiMetric: (metricType: UiStatsMetricType, eventName: string) => void; -export let METRIC_TYPE: UsageCollectionSetup['METRIC_TYPE']; +export { METRIC_TYPE }; + +export let usageCollection: UsageCollectionSetup | undefined; + +export function init(_usageCollection: UsageCollectionSetup): void { + usageCollection = _usageCollection; +} -export function init(usageCollection: UsageCollectionSetup): void { - trackUiMetric = usageCollection.reportUiStats.bind(usageCollection, UIM_APP_NAME); - METRIC_TYPE = usageCollection.METRIC_TYPE; +export function trackUiMetric(metricType: UiStatsMetricType, name: string) { + if (!usageCollection) { + return; + } + const { reportUiStats } = usageCollection; + reportUiStats(UIM_APP_NAME, metricType, name); } /** From 11e2e0839627dcd00da39165537fc13bc6b46a39 Mon Sep 17 00:00:00 2001 From: Candace Park <56409205+parkiino@users.noreply.github.com> Date: Tue, 14 Apr 2020 10:56:25 -0400 Subject: [PATCH 42/65] Task/linux events (#63400) * linux events for endpoint policy details, additional windows events --- .../applications/endpoint/models/policy.ts | 7 +- .../store/policy_details/index.test.ts | 22 ++++ .../store/policy_details/selectors.ts | 20 ++++ .../public/applications/endpoint/types.ts | 84 +++++++------- .../endpoint/view/policy/policy_details.tsx | 4 +- .../view/policy/policy_forms/events/index.tsx | 1 + .../view/policy/policy_forms/events/linux.tsx | 106 ++++++++++++++++++ .../policy/policy_forms/events/windows.tsx | 41 ++++++- 8 files changed, 240 insertions(+), 45 deletions(-) create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/models/policy.ts b/x-pack/plugins/endpoint/public/applications/endpoint/models/policy.ts index 30f45e54c20056..5269ee72f4039d 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/models/policy.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/models/policy.ts @@ -15,8 +15,13 @@ export const generatePolicy = (): PolicyConfig => { return { windows: { events: { - process: true, + dll_and_driver_load: true, + dns: true, + file: true, network: true, + process: true, + registry: true, + security: true, }, malware: { mode: ProtectionModes.prevent, diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/index.test.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/index.test.ts index e09a62b235e353..f81852d6a074a8 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/index.test.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/index.test.ts @@ -98,4 +98,26 @@ describe('policy details: ', () => { expect(config!.mac.events.file).toEqual(true); }); }); + + describe('when the user has enabled linux process events', () => { + beforeEach(() => { + const config = policyConfig(getState()); + if (!config) { + throw new Error(); + } + + const newPayload1 = clone(config); + newPayload1.linux.events.file = true; + + dispatch({ + type: 'userChangedPolicyConfig', + payload: { policyConfig: newPayload1 }, + }); + }); + + it('linux file events is enabled', () => { + const config = policyConfig(getState()); + expect(config!.linux.events.file).toEqual(true); + }); + }); }); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/selectors.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/selectors.ts index 4b4dc9d9bee43d..a37a06bafcf05d 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/selectors.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/selectors.ts @@ -119,6 +119,26 @@ export const selectedMacEvents = (state: PolicyDetailsState): number => { return 0; }; +/** Returns the total number of possible linux eventing configurations */ +export const totalLinuxEvents = (state: PolicyDetailsState): number => { + const config = policyConfig(state); + if (config) { + return Object.keys(config.linux.events).length; + } + return 0; +}; + +/** Returns the number of selected liinux eventing configurations */ +export const selectedLinuxEvents = (state: PolicyDetailsState): number => { + const config = policyConfig(state); + if (config) { + return Object.values(config.linux.events).reduce((count, event) => { + return event === true ? count + 1 : count; + }, 0); + } + return 0; +}; + /** is there an api call in flight */ export const isLoading = (state: PolicyDetailsState) => state.isLoading; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts index a625c49bf7d5ab..54afbf220944eb 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts @@ -131,21 +131,42 @@ export interface PolicyListUrlSearchParams { * Endpoint Policy configuration */ export interface PolicyConfig { - windows: UIPolicyConfig['windows'] & { + windows: { + events: { + dll_and_driver_load: boolean; + dns: boolean; + file: boolean; + network: boolean; + process: boolean; + registry: boolean; + security: boolean; + }; + malware: MalwareFields; logging: { stdout: string; file: string; }; advanced: PolicyConfigAdvancedOptions; }; - mac: UIPolicyConfig['mac'] & { + mac: { + events: { + file: boolean; + process: boolean; + network: boolean; + }; + malware: MalwareFields; logging: { stdout: string; file: string; }; advanced: PolicyConfigAdvancedOptions; }; - linux: UIPolicyConfig['linux'] & { + linux: { + events: { + file: boolean; + process: boolean; + network: boolean; + }; logging: { stdout: string; file: string; @@ -169,38 +190,28 @@ interface PolicyConfigAdvancedOptions { } /** - * The set of Policy configuration settings that are show/edited via the UI + * Windows-specific policy configuration that is supported via the UI */ -/* eslint-disable @typescript-eslint/consistent-type-definitions */ -export type UIPolicyConfig = { - windows: { - events: { - process: boolean; - network: boolean; - }; - /** malware mode can be off, detect, prevent or prevent and notify user */ - malware: MalwareFields; - }; - mac: { - events: { - file: boolean; - process: boolean; - network: boolean; - }; - malware: MalwareFields; - }; +type WindowsPolicyConfig = Pick; - /** - * Linux-specific policy configuration that is supported via the UI - */ - linux: { - events: { - file: boolean; - process: boolean; - network: boolean; - }; - }; -}; +/** + * Mac-specific policy configuration that is supported via the UI + */ +type MacPolicyConfig = Pick; + +/** + * Linux-specific policy configuration that is supported via the UI + */ +type LinuxPolicyConfig = Pick; + +/** + * The set of Policy configuration settings that are show/edited via the UI + */ +export interface UIPolicyConfig { + windows: WindowsPolicyConfig; + mac: MacPolicyConfig; + linux: LinuxPolicyConfig; +} /** OS used in Policy */ export enum OS { @@ -209,13 +220,6 @@ export enum OS { linux = 'linux', } -/** Used in Policy */ -export enum EventingFields { - process = 'process', - network = 'network', - file = 'file', -} - /** * Returns the keys of an object whose values meet a criteria. * Ex) interface largeNestedObject = { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx index 267077da6598c2..076de7b57b44b4 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx @@ -34,7 +34,7 @@ import { AppAction } from '../../types'; import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public'; import { AgentsSummary } from './agents_summary'; import { VerticalDivider } from './vertical_divider'; -import { WindowsEvents, MacEvents } from './policy_forms/events'; +import { WindowsEvents, MacEvents, LinuxEvents } from './policy_forms/events'; import { MalwareProtections } from './policy_forms/protections/malware'; export const PolicyDetails = React.memo(() => { @@ -208,6 +208,8 @@ export const PolicyDetails = React.memo(() => { + + ); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/index.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/index.tsx index 44716d81830419..927456fb671d8c 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/index.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/index.tsx @@ -6,3 +6,4 @@ export { WindowsEvents } from './windows'; export { MacEvents } from './mac'; +export { LinuxEvents } from './linux'; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx new file mode 100644 index 00000000000000..9d2ce03c204626 --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { EuiTitle, EuiText, EuiSpacer } from '@elastic/eui'; +import { EventsCheckbox } from './checkbox'; +import { OS, UIPolicyConfig } from '../../../../types'; +import { usePolicyDetailsSelector } from '../../policy_hooks'; +import { selectedLinuxEvents, totalLinuxEvents } from '../../../../store/policy_details/selectors'; +import { ConfigForm } from '../config_form'; +import { getIn, setIn } from '../../../../models/policy_details_config'; + +export const LinuxEvents = React.memo(() => { + const selected = usePolicyDetailsSelector(selectedLinuxEvents); + const total = usePolicyDetailsSelector(totalLinuxEvents); + + const checkboxes: Array<{ + name: string; + os: 'linux'; + protectionField: keyof UIPolicyConfig['linux']['events']; + }> = useMemo( + () => [ + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.linux.events.file', { + defaultMessage: 'File', + }), + os: OS.linux, + protectionField: 'file', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.linux.events.process', { + defaultMessage: 'Process', + }), + os: OS.linux, + protectionField: 'process', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.linux.events.network', { + defaultMessage: 'Network', + }), + os: OS.linux, + protectionField: 'network', + }, + ], + [] + ); + + const renderCheckboxes = () => { + return ( + <> + +
+ +
+
+ + {checkboxes.map((item, index) => { + return ( + + setIn(config)(item.os)('events')(item.protectionField)(checked) + } + getter={config => getIn(config)(item.os)('events')(item.protectionField)} + /> + ); + })} + + ); + }; + + const collectionsEnabled = () => { + return ( + + + + ); + }; + + return ( + + ); +}); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx index 63a140912437da..da675dc1e23938 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx @@ -29,11 +29,25 @@ export const WindowsEvents = React.memo(() => { }> = useMemo( () => [ { - name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.process', { - defaultMessage: 'Process', + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.dllDriverLoad', { + defaultMessage: 'DLL and Driver Load', }), os: OS.windows, - protectionField: 'process', + protectionField: 'dll_and_driver_load', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.dns', { + defaultMessage: 'DNS', + }), + os: OS.windows, + protectionField: 'dns', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.file', { + defaultMessage: 'File', + }), + os: OS.windows, + protectionField: 'file', }, { name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.network', { @@ -42,6 +56,27 @@ export const WindowsEvents = React.memo(() => { os: OS.windows, protectionField: 'network', }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.process', { + defaultMessage: 'Process', + }), + os: OS.windows, + protectionField: 'process', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.registry', { + defaultMessage: 'Registry', + }), + os: OS.windows, + protectionField: 'registry', + }, + { + name: i18n.translate('xpack.endpoint.policyDetailsConfig.windows.events.security', { + defaultMessage: 'Security', + }), + os: OS.windows, + protectionField: 'security', + }, ], [] ); From 48d528ff2ea65405456051d8067e3b265e915379 Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 14 Apr 2020 10:59:01 -0400 Subject: [PATCH 43/65] [Lens] Fix bug where suggestions didn't use filters (#63293) Co-authored-by: Elastic Machine --- .../editor_frame/suggestion_panel.test.tsx | 16 ++++++++++++++-- .../editor_frame/suggestion_panel.tsx | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx index b146f2467c46cd..0e32f1f053b9d5 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx @@ -16,6 +16,7 @@ import { } from '../mocks'; import { act } from 'react-dom/test-utils'; import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; +import { esFilters, IFieldType, IIndexPattern } from '../../../../../../../src/plugins/data/public'; import { SuggestionPanel, SuggestionPanelProps } from './suggestion_panel'; import { getSuggestions, Suggestion } from './suggestion_helpers'; import { EuiIcon, EuiPanel, EuiToolTip } from '@elastic/eui'; @@ -243,14 +244,25 @@ describe('suggestion_panel', () => { (mockVisualization.toPreviewExpression as jest.Mock).mockReturnValueOnce('test | expression'); mockDatasource.toExpression.mockReturnValue('datasource_expression'); - mount(); + const indexPattern = ({ id: 'index1' } as unknown) as IIndexPattern; + const field = ({ name: 'myfield' } as unknown) as IFieldType; + + mount( + + ); expect(expressionRendererMock).toHaveBeenCalledTimes(1); const passedExpression = (expressionRendererMock as jest.Mock).mock.calls[0][0].expression; expect(passedExpression).toMatchInlineSnapshot(` "kibana - | kibana_context timeRange=\\"{\\\\\\"from\\\\\\":\\\\\\"now-7d\\\\\\",\\\\\\"to\\\\\\":\\\\\\"now\\\\\\"}\\" query=\\"{\\\\\\"query\\\\\\":\\\\\\"\\\\\\",\\\\\\"language\\\\\\":\\\\\\"lucene\\\\\\"}\\" filters=\\"[]\\" + | kibana_context timeRange=\\"{\\\\\\"from\\\\\\":\\\\\\"now-7d\\\\\\",\\\\\\"to\\\\\\":\\\\\\"now\\\\\\"}\\" query=\\"{\\\\\\"query\\\\\\":\\\\\\"\\\\\\",\\\\\\"language\\\\\\":\\\\\\"lucene\\\\\\"}\\" filters=\\"[{\\\\\\"meta\\\\\\":{\\\\\\"index\\\\\\":\\\\\\"index1\\\\\\"},\\\\\\"exists\\\\\\":{\\\\\\"field\\\\\\":\\\\\\"myfield\\\\\\"}}]\\" | lens_merge_tables layerIds=\\"first\\" tables={datasource_expression} | test | expression" diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx index 93f6ea6ea67acb..76443027ab88a9 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx @@ -235,6 +235,7 @@ export function SuggestionPanel({ const expressionContext = { query: frame.query, + filters: frame.filters, timeRange: { from: frame.dateRange.fromDate, to: frame.dateRange.toDate, From 8489efc034dddfae18913830f50091eb603100ff Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 14 Apr 2020 11:04:47 -0400 Subject: [PATCH 44/65] [Lens] Migration from 7.7 (#62879) * [Lens] Migration from 7.7 * Fix types * Fix types in test * Add docs * Commit forgotten file * Remove extra types Co-authored-by: Elastic Machine --- x-pack/plugins/lens/server/migrations.test.ts | 161 ++++++++++++++++++ x-pack/plugins/lens/server/migrations.ts | 37 ++++ x-pack/plugins/lens/server/saved_objects.ts | 2 + 3 files changed, 200 insertions(+) create mode 100644 x-pack/plugins/lens/server/migrations.test.ts create mode 100644 x-pack/plugins/lens/server/migrations.ts diff --git a/x-pack/plugins/lens/server/migrations.test.ts b/x-pack/plugins/lens/server/migrations.test.ts new file mode 100644 index 00000000000000..e80308cc9acdb0 --- /dev/null +++ b/x-pack/plugins/lens/server/migrations.test.ts @@ -0,0 +1,161 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { migrations } from './migrations'; +import { SavedObjectMigrationContext } from 'src/core/server'; + +describe('Lens migrations', () => { + describe('7.7.0 missing dimensions in XY', () => { + const context = {} as SavedObjectMigrationContext; + + const example = { + type: 'lens', + attributes: { + expression: + 'kibana\n| kibana_context query="{\\"language\\":\\"kuery\\",\\"query\\":\\"\\"}" \n| lens_merge_tables layerIds="c61a8afb-a185-4fae-a064-fb3846f6c451" \n tables={esaggs index="logstash-*" metricsAtAllLevels=false partialRows=false includeFormatHints=true aggConfigs="[{\\"id\\":\\"2cd09808-3915-49f4-b3b0-82767eba23f7\\",\\"enabled\\":true,\\"type\\":\\"max\\",\\"schema\\":\\"metric\\",\\"params\\":{\\"field\\":\\"bytes\\"}}]" | lens_rename_columns idMap="{\\"col-0-2cd09808-3915-49f4-b3b0-82767eba23f7\\":\\"2cd09808-3915-49f4-b3b0-82767eba23f7\\"}"}\n| lens_metric_chart title="Maximum of bytes" accessor="2cd09808-3915-49f4-b3b0-82767eba23f7"', + state: { + datasourceMetaData: { + filterableIndexPatterns: [ + { + id: 'logstash-*', + title: 'logstash-*', + }, + ], + }, + datasourceStates: { + indexpattern: { + currentIndexPatternId: 'logstash-*', + layers: { + 'c61a8afb-a185-4fae-a064-fb3846f6c451': { + columnOrder: ['2cd09808-3915-49f4-b3b0-82767eba23f7'], + columns: { + '2cd09808-3915-49f4-b3b0-82767eba23f7': { + dataType: 'number', + isBucketed: false, + label: 'Maximum of bytes', + operationType: 'max', + scale: 'ratio', + sourceField: 'bytes', + }, + 'd3e62a7a-c259-4fff-a2fc-eebf20b7008a': { + dataType: 'number', + isBucketed: false, + label: 'Minimum of bytes', + operationType: 'min', + scale: 'ratio', + sourceField: 'bytes', + }, + 'd6e40cea-6299-43b4-9c9d-b4ee305a2ce8': { + dataType: 'date', + isBucketed: true, + label: 'Date Histogram of @timestamp', + operationType: 'date_histogram', + params: { + interval: 'auto', + }, + scale: 'interval', + sourceField: '@timestamp', + }, + }, + indexPatternId: 'logstash-*', + }, + }, + }, + }, + filters: [], + query: { + language: 'kuery', + query: '', + }, + visualization: { + accessor: '2cd09808-3915-49f4-b3b0-82767eba23f7', + isHorizontal: false, + layerId: 'c61a8afb-a185-4fae-a064-fb3846f6c451', + layers: [ + { + accessors: [ + 'd3e62a7a-c259-4fff-a2fc-eebf20b7008a', + '26ef70a9-c837-444c-886e-6bd905ee7335', + ], + layerId: 'c61a8afb-a185-4fae-a064-fb3846f6c451', + seriesType: 'area', + splitAccessor: '54cd64ed-2a44-4591-af84-b2624504569a', + xAccessor: 'd6e40cea-6299-43b4-9c9d-b4ee305a2ce8', + }, + ], + legend: { + isVisible: true, + position: 'right', + }, + preferredSeriesType: 'area', + }, + }, + title: 'Artistpreviouslyknownaslens', + visualizationType: 'lnsXY', + }, + }; + + it('should not change anything by XY visualizations', () => { + const target = { + ...example, + attributes: { + ...example.attributes, + visualizationType: 'lnsMetric', + }, + }; + const result = migrations['7.7.0'](target, context); + expect(result).toEqual(target); + }); + + it('should handle missing layers', () => { + const result = migrations['7.7.0']( + { + ...example, + attributes: { + ...example.attributes, + state: { + ...example.attributes.state, + datasourceStates: { + indexpattern: { + layers: [], + }, + }, + }, + }, + }, + context + ); + + expect(result.attributes.state.visualization.layers).toEqual([ + { + layerId: 'c61a8afb-a185-4fae-a064-fb3846f6c451', + seriesType: 'area', + // Removed split accessor + splitAccessor: undefined, + xAccessor: undefined, + // Removed a yAcccessor + accessors: [], + }, + ]); + }); + + it('should remove only missing accessors', () => { + const result = migrations['7.7.0'](example, context); + + expect(result.attributes.state.visualization.layers).toEqual([ + { + layerId: 'c61a8afb-a185-4fae-a064-fb3846f6c451', + seriesType: 'area', + xAccessor: 'd6e40cea-6299-43b4-9c9d-b4ee305a2ce8', + // Removed split accessor + splitAccessor: undefined, + // Removed a yAcccessor + accessors: ['d3e62a7a-c259-4fff-a2fc-eebf20b7008a'], + }, + ]); + }); + }); +}); diff --git a/x-pack/plugins/lens/server/migrations.ts b/x-pack/plugins/lens/server/migrations.ts new file mode 100644 index 00000000000000..3d238723b7438c --- /dev/null +++ b/x-pack/plugins/lens/server/migrations.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { cloneDeep } from 'lodash'; +import { SavedObjectMigrationFn } from 'src/core/server'; + +interface XYLayerPre77 { + layerId: string; + xAccessor: string; + splitAccessor: string; + accessors: string[]; +} + +export const migrations: Record = { + '7.7.0': doc => { + const newDoc = cloneDeep(doc); + if (newDoc.attributes?.visualizationType === 'lnsXY') { + const datasourceState = newDoc.attributes.state?.datasourceStates?.indexpattern; + const datasourceLayers = datasourceState?.layers ?? {}; + const xyState = newDoc.attributes.state?.visualization; + newDoc.attributes.state.visualization.layers = xyState.layers.map((layer: XYLayerPre77) => { + const layerId = layer.layerId; + const datasource = datasourceLayers[layerId]; + return { + ...layer, + xAccessor: datasource?.columns[layer.xAccessor] ? layer.xAccessor : undefined, + splitAccessor: datasource?.columns[layer.splitAccessor] ? layer.splitAccessor : undefined, + accessors: layer.accessors.filter(accessor => !!datasource?.columns[accessor]), + }; + }) as typeof xyState.layers; + } + return newDoc; + }, +}; diff --git a/x-pack/plugins/lens/server/saved_objects.ts b/x-pack/plugins/lens/server/saved_objects.ts index 42dc750878f456..b2eb325c092660 100644 --- a/x-pack/plugins/lens/server/saved_objects.ts +++ b/x-pack/plugins/lens/server/saved_objects.ts @@ -6,6 +6,7 @@ import { CoreSetup } from 'kibana/server'; import { getEditPath } from '../common'; +import { migrations } from './migrations'; export function setupSavedObjects(core: CoreSetup) { core.savedObjects.registerType({ @@ -22,6 +23,7 @@ export function setupSavedObjects(core: CoreSetup) { uiCapabilitiesPath: 'visualize.show', }), }, + migrations, mappings: { properties: { title: { From 4ce2412316624184cb1a3dde3b9e724550fe7659 Mon Sep 17 00:00:00 2001 From: Uladzislau Lasitsa Date: Tue, 14 Apr 2020 18:45:21 +0300 Subject: [PATCH 45/65] Clicking cancel in saved query save modal doesn't close it (#62774) * use validation by clicking on save, added autotrim * Fixes form errors. * Fixed comments Co-authored-by: Elastic Machine --- .../ui/saved_query_form/save_query_form.tsx | 99 +++++++++---------- .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 3 files changed, 48 insertions(+), 55 deletions(-) diff --git a/src/plugins/data/public/ui/saved_query_form/save_query_form.tsx b/src/plugins/data/public/ui/saved_query_form/save_query_form.tsx index 36dcd4a00c05eb..5550ea16c22df3 100644 --- a/src/plugins/data/public/ui/saved_query_form/save_query_form.tsx +++ b/src/plugins/data/public/ui/saved_query_form/save_query_form.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, useCallback } from 'react'; import { EuiButtonEmpty, EuiOverlayMask, @@ -63,6 +63,7 @@ export function SaveQueryForm({ showTimeFilterOption = true, }: Props) { const [title, setTitle] = useState(savedQuery ? savedQuery.title : ''); + const [enabledSaveButton, setEnabledSaveButton] = useState(Boolean(savedQuery)); const [description, setDescription] = useState(savedQuery ? savedQuery.description : ''); const [savedQueries, setSavedQueries] = useState([]); const [shouldIncludeFilters, setShouldIncludeFilters] = useState( @@ -76,49 +77,31 @@ export function SaveQueryForm({ ); const [formErrors, setFormErrors] = useState([]); - useEffect(() => { - const fetchQueries = async () => { - const allSavedQueries = await savedQueryService.getAllSavedQueries(); - const sortedAllSavedQueries = sortBy(allSavedQueries, 'attributes.title') as SavedQuery[]; - setSavedQueries(sortedAllSavedQueries); - }; - fetchQueries(); - }, [savedQueryService]); - - const savedQueryDescriptionText = i18n.translate( - 'data.search.searchBar.savedQueryDescriptionText', - { - defaultMessage: 'Save query text and filters that you want to use again.', - } - ); - const titleConflictErrorText = i18n.translate( 'data.search.searchBar.savedQueryForm.titleConflictText', { defaultMessage: 'Name conflicts with an existing saved query', } ); - const titleMissingErrorText = i18n.translate( - 'data.search.searchBar.savedQueryForm.titleMissingText', - { - defaultMessage: 'Name is required', - } - ); - const whitespaceErrorText = i18n.translate( - 'data.search.searchBar.savedQueryForm.whitespaceErrorText', + + const savedQueryDescriptionText = i18n.translate( + 'data.search.searchBar.savedQueryDescriptionText', { - defaultMessage: 'Name cannot contain leading or trailing whitespace', + defaultMessage: 'Save query text and filters that you want to use again.', } ); - const validate = () => { + useEffect(() => { + const fetchQueries = async () => { + const allSavedQueries = await savedQueryService.getAllSavedQueries(); + const sortedAllSavedQueries = sortBy(allSavedQueries, 'attributes.title') as SavedQuery[]; + setSavedQueries(sortedAllSavedQueries); + }; + fetchQueries(); + }, [savedQueryService]); + + const validate = useCallback(() => { const errors = []; - if (!title.length) { - errors.push(titleMissingErrorText); - } - if (title.length > title.trim().length) { - errors.push(whitespaceErrorText); - } if ( !!savedQueries.find( existingSavedQuery => !savedQuery && existingSavedQuery.attributes.title === title @@ -129,14 +112,37 @@ export function SaveQueryForm({ if (!isEqual(errors, formErrors)) { setFormErrors(errors); + return false; } - }; - const hasErrors = formErrors.length > 0; + return !formErrors.length; + }, [savedQueries, savedQuery, title, titleConflictErrorText, formErrors]); + + const onClickSave = useCallback(() => { + if (validate()) { + onSave({ + title, + description, + shouldIncludeFilters, + shouldIncludeTimefilter, + }); + } + }, [validate, onSave, title, description, shouldIncludeFilters, shouldIncludeTimefilter]); + + const onInputChange = useCallback(event => { + setEnabledSaveButton(Boolean(event.target.value)); + setFormErrors([]); + setTitle(event.target.value); + }, []); + + const autoTrim = useCallback(() => { + const trimmedTitle = title.trim(); + if (title.length > trimmedTitle.length) { + setTitle(trimmedTitle); + } + }, [title]); - if (hasErrors) { - validate(); - } + const hasErrors = formErrors.length > 0; const saveQueryForm = ( @@ -157,12 +163,10 @@ export function SaveQueryForm({ disabled={!!savedQuery} value={title} name="title" - onChange={event => { - setTitle(event.target.value); - }} + onChange={onInputChange} data-test-subj="saveQueryFormTitle" isInvalid={hasErrors} - onBlur={validate} + onBlur={autoTrim} /> @@ -235,17 +239,10 @@ export function SaveQueryForm({ - onSave({ - title, - description, - shouldIncludeFilters, - shouldIncludeTimefilter, - }) - } + onClick={onClickSave} fill data-test-subj="savedQueryFormSaveButton" - disabled={hasErrors} + disabled={hasErrors || !enabledSaveButton} > {i18n.translate('data.search.searchBar.savedQueryFormSaveButtonText', { defaultMessage: 'Save', diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index a8574971426f5c..a5d2c20447ad5a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -798,8 +798,6 @@ "data.search.searchBar.savedQueryDescriptionLabelText": "説明", "data.search.searchBar.savedQueryDescriptionText": "再度使用するクエリテキストとフィルターを保存します。", "data.search.searchBar.savedQueryForm.titleConflictText": "タイトルが既に保存されているクエリに使用されています", - "data.search.searchBar.savedQueryForm.titleMissingText": "名前が必要です", - "data.search.searchBar.savedQueryForm.whitespaceErrorText": "タイトルの始めと終わりにはスペースを使用できません", "data.search.searchBar.savedQueryFormCancelButtonText": "キャンセル", "data.search.searchBar.savedQueryFormSaveButtonText": "保存", "data.search.searchBar.savedQueryFormTitle": "クエリを保存", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index df5cccf1a9b97d..ef749e9218e11a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -799,8 +799,6 @@ "data.search.searchBar.savedQueryDescriptionLabelText": "描述", "data.search.searchBar.savedQueryDescriptionText": "保存想要再次使用的查询文本和筛选。", "data.search.searchBar.savedQueryForm.titleConflictText": "标题与现有已保存查询有冲突", - "data.search.searchBar.savedQueryForm.titleMissingText": "“名称”必填", - "data.search.searchBar.savedQueryForm.whitespaceErrorText": "标题不能包含前导或尾随空格", "data.search.searchBar.savedQueryFormCancelButtonText": "取消", "data.search.searchBar.savedQueryFormSaveButtonText": "保存", "data.search.searchBar.savedQueryFormTitle": "保存查询", From d015c24509d0ed8a2bce5802fea036ae7c910a38 Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Tue, 14 Apr 2020 17:45:40 +0200 Subject: [PATCH 46/65] [NP] Migrate logstash server side code to NP (#63135) * convert api_integration test into TS * create logstash NP plugin and move models * move common/constants to NP * type fetch all from scroll * move route declaration to NP * add licence checker wrapper * register logstash route handlers in NP * track logstash NP i18n * address shaunak comment * fix validation * udpdate security tests since for new mock defaults * address Pierres comments * rename upgrade file route --- x-pack/.i18nrc.json | 2 +- x-pack/legacy/plugins/logstash/index.js | 10 +-- .../pipeline_editor/pipeline_editor.js | 2 +- .../public/lib/register_home_feature.ts | 2 +- .../pipeline_list_item/pipeline_list_item.js | 2 +- .../services/cluster/cluster_service.js | 2 +- .../license/logstash_license_service.js | 2 +- .../services/monitoring/monitoring_service.js | 2 +- .../services/pipeline/pipeline_service.js | 2 +- .../services/pipelines/pipelines_service.js | 2 +- .../services/upgrade/upgrade_service.js | 2 +- .../call_with_request_factory.js | 18 ---- .../__tests__/wrap_custom_error.js | 21 ----- .../error_wrappers/__tests__/wrap_es_error.js | 42 --------- .../__tests__/wrap_unknown_error.js | 19 ---- .../lib/error_wrappers/wrap_custom_error.js | 18 ---- .../lib/error_wrappers/wrap_es_error.js | 27 ------ .../lib/error_wrappers/wrap_unknown_error.js | 17 ---- .../__tests__/fetch_all_from_scroll.js | 88 ------------------- .../fetch_all_from_scroll.js | 28 ------ .../__tests__/license_pre_routing_factory.js | 69 --------------- .../license_pre_routing_factory.js | 27 ------ .../register_license_checker.js | 2 +- .../api/cluster/register_cluster_routes.js | 11 --- .../routes/api/cluster/register_load_route.js | 40 --------- .../api/pipeline/register_delete_route.js | 38 -------- .../api/pipeline/register_load_route.js | 47 ---------- .../api/pipeline/register_pipeline_routes.js | 15 ---- .../api/pipeline/register_save_route.js | 48 ---------- .../server/routes/api/pipelines/index.js | 7 -- .../api/pipelines/register_delete_route.js | 51 ----------- .../api/pipelines/register_list_route.js | 52 ----------- .../pipelines/register_pipelines_routes.js | 13 --- .../server/routes/api/upgrade/index.js | 7 -- .../api/upgrade/register_execute_route.js | 56 ------------ .../api/upgrade/register_upgrade_routes.js | 11 --- .../licensing/common/licensing.mock.ts | 1 + x-pack/plugins/licensing/server/index.ts | 1 + .../wrap_route_with_license_check.test.ts | 71 +++++++++++++++ .../server/wrap_route_with_license_check.ts | 40 +++++++++ .../common/constants/es_scroll_settings.ts} | 0 .../logstash/common/constants/index.ts} | 0 .../logstash/common/constants/index_names.ts} | 0 .../logstash/common/constants/monitoring.ts} | 0 .../logstash/common/constants/pagination.ts} | 0 .../logstash/common/constants/pipeline.ts} | 0 .../logstash/common/constants/plugin.ts} | 0 .../logstash/common/constants/routes.ts} | 0 .../logstash/common/constants/tooltips.ts} | 0 x-pack/plugins/logstash/kibana.json | 12 +++ x-pack/plugins/logstash/server/index.ts | 16 ++++ .../lib/check_license/check_license.test.ts | 60 +++++++++++++ .../server/lib/check_license/check_license.ts | 65 ++++++++++++++ .../server/lib/check_license/index.ts} | 2 +- .../fetch_all_from_scroll.test.ts | 71 +++++++++++++++ .../fetch_all_from_scroll.ts | 34 +++++++ .../lib/fetch_all_from_scroll/index.ts} | 0 .../server/models/cluster/cluster.test.ts} | 5 +- .../server/models/cluster/cluster.ts} | 11 +-- .../logstash/server/models/cluster/index.ts} | 0 .../logstash/server/models/pipeline/index.ts} | 0 .../server/models/pipeline/pipeline.test.ts} | 21 +++-- .../server/models/pipeline/pipeline.ts} | 55 ++++++++---- .../models/pipeline_list_item/index.ts} | 0 .../pipeline_list_item.test.ts} | 16 ++-- .../pipeline_list_item/pipeline_list_item.ts} | 25 +++--- x-pack/plugins/logstash/server/plugin.ts | 51 +++++++++++ .../logstash/server/routes/cluster/index.ts} | 3 +- .../logstash/server/routes/cluster/load.ts | 34 +++++++ .../plugins/logstash/server/routes/index.ts | 28 ++++++ .../logstash/server/routes/pipeline/delete.ts | 38 ++++++++ .../logstash/server/routes/pipeline/index.ts} | 7 +- .../logstash/server/routes/pipeline/load.ts | 46 ++++++++++ .../logstash/server/routes/pipeline/save.ts | 69 +++++++++++++++ .../server/routes/pipelines/delete.ts | 54 ++++++++++++ .../server/routes/pipelines/index.ts} | 4 +- .../logstash/server/routes/pipelines/list.ts | 63 +++++++++++++ .../logstash/server/routes/upgrade/index.ts} | 2 +- .../logstash/server/routes/upgrade/upgrade.ts | 46 ++++++++++ x-pack/plugins/logstash/server/types.ts | 27 ++++++ .../common/licensing/license_service.test.ts | 16 ++-- .../logstash/cluster/{index.js => index.ts} | 3 +- .../logstash/cluster/{load.js => load.ts} | 3 +- .../apis/logstash/{index.js => index.ts} | 3 +- .../pipeline/{delete.js => delete.ts} | 3 +- .../logstash/pipeline/{index.js => index.ts} | 4 +- .../logstash/pipeline/{load.js => load.ts} | 6 +- .../logstash/pipeline/{save.js => save.ts} | 3 +- .../pipelines/{delete.js => delete.ts} | 3 +- .../logstash/pipelines/{index.js => index.ts} | 3 +- .../logstash/pipelines/{list.js => list.ts} | 5 +- 91 files changed, 959 insertions(+), 873 deletions(-) delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/call_with_request_factory.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_custom_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_es_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_unknown_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_custom_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_es_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_unknown_error.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/__tests__/fetch_all_from_scroll.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/__tests__/license_pre_routing_factory.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/license_pre_routing_factory.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_cluster_routes.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_load_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_delete_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_load_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_pipeline_routes.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_save_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipelines/index.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_delete_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_list_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_pipelines_routes.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/upgrade/index.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_execute_route.js delete mode 100755 x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_upgrade_routes.js create mode 100644 x-pack/plugins/licensing/server/wrap_route_with_license_check.test.ts create mode 100644 x-pack/plugins/licensing/server/wrap_route_with_license_check.ts rename x-pack/{legacy/plugins/logstash/common/constants/es_scroll_settings.js => plugins/logstash/common/constants/es_scroll_settings.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/index.js => plugins/logstash/common/constants/index.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/index_names.js => plugins/logstash/common/constants/index_names.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/monitoring.js => plugins/logstash/common/constants/monitoring.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/pagination.js => plugins/logstash/common/constants/pagination.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/pipeline.js => plugins/logstash/common/constants/pipeline.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/plugin.js => plugins/logstash/common/constants/plugin.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/routes.js => plugins/logstash/common/constants/routes.ts} (100%) rename x-pack/{legacy/plugins/logstash/common/constants/tooltips.js => plugins/logstash/common/constants/tooltips.ts} (100%) create mode 100644 x-pack/plugins/logstash/kibana.json create mode 100644 x-pack/plugins/logstash/server/index.ts create mode 100755 x-pack/plugins/logstash/server/lib/check_license/check_license.test.ts create mode 100644 x-pack/plugins/logstash/server/lib/check_license/check_license.ts rename x-pack/{legacy/plugins/logstash/server/lib/call_with_request_factory/index.js => plugins/logstash/server/lib/check_license/index.ts} (77%) mode change 100755 => 100644 create mode 100755 x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.test.ts create mode 100755 x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.ts rename x-pack/{legacy/plugins/logstash/server/lib/fetch_all_from_scroll/index.js => plugins/logstash/server/lib/fetch_all_from_scroll/index.ts} (100%) rename x-pack/{legacy/plugins/logstash/server/models/cluster/__tests__/cluster.js => plugins/logstash/server/models/cluster/cluster.test.ts} (81%) rename x-pack/{legacy/plugins/logstash/server/models/cluster/cluster.js => plugins/logstash/server/models/cluster/cluster.ts} (68%) rename x-pack/{legacy/plugins/logstash/server/models/cluster/index.js => plugins/logstash/server/models/cluster/index.ts} (100%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline/index.js => plugins/logstash/server/models/pipeline/index.ts} (100%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline/__tests__/pipeline.js => plugins/logstash/server/models/pipeline/pipeline.test.ts} (74%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline/pipeline.js => plugins/logstash/server/models/pipeline/pipeline.ts} (59%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline_list_item/index.js => plugins/logstash/server/models/pipeline_list_item/index.ts} (100%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline_list_item/__tests__/pipeline_list_item.js => plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.test.ts} (72%) rename x-pack/{legacy/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.js => plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.ts} (50%) create mode 100644 x-pack/plugins/logstash/server/plugin.ts rename x-pack/{legacy/plugins/logstash/server/routes/api/cluster/index.js => plugins/logstash/server/routes/cluster/index.ts} (76%) mode change 100755 => 100644 create mode 100644 x-pack/plugins/logstash/server/routes/cluster/load.ts create mode 100644 x-pack/plugins/logstash/server/routes/index.ts create mode 100644 x-pack/plugins/logstash/server/routes/pipeline/delete.ts rename x-pack/{legacy/plugins/logstash/server/lib/error_wrappers/index.js => plugins/logstash/server/routes/pipeline/index.ts} (60%) mode change 100755 => 100644 create mode 100644 x-pack/plugins/logstash/server/routes/pipeline/load.ts create mode 100644 x-pack/plugins/logstash/server/routes/pipeline/save.ts create mode 100644 x-pack/plugins/logstash/server/routes/pipelines/delete.ts rename x-pack/{legacy/plugins/logstash/server/routes/api/pipeline/index.js => plugins/logstash/server/routes/pipelines/index.ts} (68%) mode change 100755 => 100644 create mode 100644 x-pack/plugins/logstash/server/routes/pipelines/list.ts rename x-pack/{legacy/plugins/logstash/server/lib/license_pre_routing_factory/index.js => plugins/logstash/server/routes/upgrade/index.ts} (76%) mode change 100755 => 100644 create mode 100644 x-pack/plugins/logstash/server/routes/upgrade/upgrade.ts create mode 100644 x-pack/plugins/logstash/server/types.ts rename x-pack/test/api_integration/apis/logstash/cluster/{index.js => index.ts} (71%) rename x-pack/test/api_integration/apis/logstash/cluster/{load.js => load.ts} (83%) rename x-pack/test/api_integration/apis/logstash/{index.js => index.ts} (76%) rename x-pack/test/api_integration/apis/logstash/pipeline/{delete.js => delete.ts} (90%) rename x-pack/test/api_integration/apis/logstash/pipeline/{index.js => index.ts} (76%) rename x-pack/test/api_integration/apis/logstash/pipeline/{load.js => load.ts} (82%) rename x-pack/test/api_integration/apis/logstash/pipeline/{save.js => save.ts} (90%) rename x-pack/test/api_integration/apis/logstash/pipelines/{delete.js => delete.ts} (90%) rename x-pack/test/api_integration/apis/logstash/pipelines/{index.js => index.ts} (73%) rename x-pack/test/api_integration/apis/logstash/pipelines/{list.js => list.ts} (82%) diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index bbbcc062786b05..b3744f7cf93ab6 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -24,7 +24,7 @@ "xpack.lens": "legacy/plugins/lens", "xpack.licenseMgmt": "plugins/license_management", "xpack.licensing": "plugins/licensing", - "xpack.logstash": "legacy/plugins/logstash", + "xpack.logstash": ["plugins/logstash", "legacy/plugins/logstash"], "xpack.main": "legacy/plugins/xpack_main", "xpack.maps": ["plugins/maps", "legacy/plugins/maps"], "xpack.ml": ["plugins/ml", "legacy/plugins/ml"], diff --git a/x-pack/legacy/plugins/logstash/index.js b/x-pack/legacy/plugins/logstash/index.js index ae8571d1c19c33..29f01032f34131 100755 --- a/x-pack/legacy/plugins/logstash/index.js +++ b/x-pack/legacy/plugins/logstash/index.js @@ -5,12 +5,8 @@ */ import { resolve } from 'path'; -import { registerLogstashPipelinesRoutes } from './server/routes/api/pipelines'; -import { registerLogstashPipelineRoutes } from './server/routes/api/pipeline'; -import { registerLogstashUpgradeRoutes } from './server/routes/api/upgrade'; -import { registerLogstashClusterRoutes } from './server/routes/api/cluster'; import { registerLicenseChecker } from './server/lib/register_license_checker'; -import { PLUGIN } from './common/constants'; +import { PLUGIN } from '../../../plugins/logstash/common/constants'; export const logstash = kibana => new kibana.Plugin({ @@ -32,9 +28,5 @@ export const logstash = kibana => }, init: server => { registerLicenseChecker(server); - registerLogstashPipelinesRoutes(server); - registerLogstashPipelineRoutes(server); - registerLogstashUpgradeRoutes(server); - registerLogstashClusterRoutes(server); }, }); diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js b/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js index 43ca656e0827c6..5e430ccbd8cebc 100644 --- a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js +++ b/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js @@ -13,7 +13,7 @@ import 'brace/mode/plain_text'; import 'brace/theme/github'; import { isEmpty } from 'lodash'; -import { TOOLTIPS } from '../../../common/constants/tooltips'; +import { TOOLTIPS } from '../../../../../../plugins/logstash/common/constants/tooltips'; import { EuiButton, EuiButtonEmpty, diff --git a/x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts b/x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts index e943656120d5e7..2e1ee2afb9ce61 100644 --- a/x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts +++ b/x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts @@ -10,7 +10,7 @@ import { npSetup } from 'ui/new_platform'; import { xpackInfo } from 'plugins/xpack_main/services/xpack_info'; import { FeatureCatalogueCategory } from '../../../../../../src/plugins/home/public'; // @ts-ignore -import { PLUGIN } from '../../common/constants'; +import { PLUGIN } from '../../../../../plugins/logstash/common/constants'; const { plugins: { home }, diff --git a/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js b/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js index 14900fdaa7cdc5..06d01a05bac278 100755 --- a/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js +++ b/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js @@ -8,7 +8,7 @@ import { pick, capitalize } from 'lodash'; import { getSearchValue } from 'plugins/logstash/lib/get_search_value'; import { getMoment } from 'plugins/logstash/../common/lib/get_moment'; -import { PIPELINE } from '../../../common/constants'; +import { PIPELINE } from '../../../../../../plugins/logstash/common/constants'; /** * Represents the model for listing pipelines in the UI diff --git a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js b/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js index 4bad4f48cc61d1..e89c2fe7d11bf9 100755 --- a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js @@ -5,7 +5,7 @@ */ import chrome from 'ui/chrome'; -import { ROUTES } from '../../../common/constants'; +import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; import { Cluster } from 'plugins/logstash/models/cluster'; export class ClusterService { diff --git a/x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js b/x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js index 97b336ec0728bc..69cc8614a6ae26 100755 --- a/x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js @@ -7,7 +7,7 @@ import React from 'react'; import { toastNotifications } from 'ui/notify'; import { MarkdownSimple } from '../../../../../../../src/plugins/kibana_react/public'; -import { PLUGIN } from '../../../common/constants'; +import { PLUGIN } from '../../../../../../plugins/logstash/common/constants'; export class LogstashLicenseService { constructor(xpackInfoService, kbnUrlService, $timeout) { diff --git a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js b/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js index 8a267e38db738f..6103e730c21714 100755 --- a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js @@ -6,7 +6,7 @@ import moment from 'moment'; import chrome from 'ui/chrome'; -import { ROUTES, MONITORING } from '../../../common/constants'; +import { ROUTES, MONITORING } from '../../../../../../plugins/logstash/common/constants'; import { PipelineListItem } from 'plugins/logstash/models/pipeline_list_item'; export class MonitoringService { diff --git a/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.js b/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.js index 0696bf9d832567..b5d0dbeb852d52 100755 --- a/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.js @@ -5,7 +5,7 @@ */ import chrome from 'ui/chrome'; -import { ROUTES } from '../../../common/constants'; +import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; import { Pipeline } from 'plugins/logstash/models/pipeline'; export class PipelineService { diff --git a/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js b/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js index 5a43cf07eba415..d70c8be06fde4d 100755 --- a/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js @@ -5,7 +5,7 @@ */ import chrome from 'ui/chrome'; -import { ROUTES, MONITORING } from '../../../common/constants'; +import { ROUTES, MONITORING } from '../../../../../../plugins/logstash/common/constants'; import { PipelineListItem } from 'plugins/logstash/models/pipeline_list_item'; const RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY = 'xpack.logstash.recentlyDeletedPipelines'; diff --git a/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js b/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js index 7870a495d07a39..2019bdc1bf1aaa 100755 --- a/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js +++ b/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js @@ -5,7 +5,7 @@ */ import chrome from 'ui/chrome'; -import { ROUTES } from '../../../common/constants'; +import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; export class UpgradeService { constructor($http) { diff --git a/x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/call_with_request_factory.js b/x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/call_with_request_factory.js deleted file mode 100755 index 8dc09d394e973f..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/call_with_request_factory.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { once } from 'lodash'; - -const callWithRequest = once(server => { - const cluster = server.plugins.elasticsearch.createCluster('logstash'); - return cluster.callWithRequest; -}); - -export const callWithRequestFactory = (server, request) => { - return (...args) => { - return callWithRequest(server)(request, ...args); - }; -}; diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_custom_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_custom_error.js deleted file mode 100755 index f9c102be7a1ff3..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_custom_error.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { wrapCustomError } from '../wrap_custom_error'; - -describe('wrap_custom_error', () => { - describe('#wrapCustomError', () => { - it('should return a Boom object', () => { - const originalError = new Error('I am an error'); - const statusCode = 404; - const wrappedError = wrapCustomError(originalError, statusCode); - - expect(wrappedError.isBoom).to.be(true); - expect(wrappedError.output.statusCode).to.equal(statusCode); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_es_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_es_error.js deleted file mode 100755 index cab25cd0b1b109..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_es_error.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { wrapEsError } from '../wrap_es_error'; - -describe('wrap_es_error', () => { - describe('#wrapEsError', () => { - let originalError; - beforeEach(() => { - originalError = new Error('I am an error'); - originalError.statusCode = 404; - }); - - it('should return a Boom object', () => { - const wrappedError = wrapEsError(originalError); - - expect(wrappedError.isBoom).to.be(true); - }); - - it('should return the correct Boom object', () => { - const wrappedError = wrapEsError(originalError); - - expect(wrappedError.output.statusCode).to.be(originalError.statusCode); - expect(wrappedError.output.payload.message).to.be(originalError.message); - }); - - it('should return invalid permissions message for 403 errors', () => { - const securityError = new Error('I am an error'); - securityError.statusCode = 403; - const wrappedError = wrapEsError(securityError); - - expect(wrappedError.isBoom).to.be(true); - expect(wrappedError.message).to.be( - 'Insufficient user permissions for managing Logstash pipelines' - ); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_unknown_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_unknown_error.js deleted file mode 100755 index 85e0b2b3033ad4..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/__tests__/wrap_unknown_error.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { wrapUnknownError } from '../wrap_unknown_error'; - -describe('wrap_unknown_error', () => { - describe('#wrapUnknownError', () => { - it('should return a Boom object', () => { - const originalError = new Error('I am an error'); - const wrappedError = wrapUnknownError(originalError); - - expect(wrappedError.isBoom).to.be(true); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_custom_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_custom_error.js deleted file mode 100755 index 3295113d38ee5a..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_custom_error.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import Boom from 'boom'; - -/** - * Wraps a custom error into a Boom error response and returns it - * - * @param err Object error - * @param statusCode Error status code - * @return Object Boom error response - */ -export function wrapCustomError(err, statusCode) { - return Boom.boomify(err, { statusCode }); -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_es_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_es_error.js deleted file mode 100755 index 41819179bde55c..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_es_error.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import Boom from 'boom'; -import { i18n } from '@kbn/i18n'; - -/** - * Wraps ES errors into a Boom error response and returns it - * This also handles the permissions issue gracefully - * - * @param err Object ES error - * @return Object Boom error response - */ -export function wrapEsError(err) { - const statusCode = err.statusCode; - if (statusCode === 403) { - return Boom.forbidden( - i18n.translate('xpack.logstash.insufficientUserPermissionsDescription', { - defaultMessage: 'Insufficient user permissions for managing Logstash pipelines', - }) - ); - } - return Boom.boomify(err, { statusCode: err.statusCode }); -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_unknown_error.js b/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_unknown_error.js deleted file mode 100755 index ffd915c5133626..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/wrap_unknown_error.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import Boom from 'boom'; - -/** - * Wraps an unknown error into a Boom error response and returns it - * - * @param err Object Unknown error - * @return Object Boom error response - */ -export function wrapUnknownError(err) { - return Boom.boomify(err); -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/__tests__/fetch_all_from_scroll.js b/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/__tests__/fetch_all_from_scroll.js deleted file mode 100755 index b1593fb1ba3554..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/__tests__/fetch_all_from_scroll.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import sinon from 'sinon'; -import { fetchAllFromScroll } from '../fetch_all_from_scroll'; -import { set } from 'lodash'; - -describe('fetch_all_from_scroll', () => { - let mockResponse; - let stubCallWithRequest; - - beforeEach(() => { - mockResponse = {}; - - stubCallWithRequest = sinon.stub(); - stubCallWithRequest.onCall(0).returns( - new Promise(resolve => { - const mockInnerResponse = { - hits: { - hits: ['newhit'], - }, - _scroll_id: 'newScrollId', - }; - return resolve(mockInnerResponse); - }) - ); - - stubCallWithRequest.onCall(1).returns( - new Promise(resolve => { - const mockInnerResponse = { - hits: { - hits: [], - }, - }; - return resolve(mockInnerResponse); - }) - ); - }); - - describe('#fetchAllFromScroll', () => { - describe('when the passed-in response has no hits', () => { - beforeEach(() => { - set(mockResponse, 'hits.hits', []); - }); - - it('should return an empty array of hits', () => { - return fetchAllFromScroll(mockResponse).then(hits => { - expect(hits).to.eql([]); - }); - }); - - it('should not call callWithRequest', () => { - return fetchAllFromScroll(mockResponse, stubCallWithRequest).then(() => { - expect(stubCallWithRequest.called).to.be(false); - }); - }); - }); - - describe('when the passed-in response has some hits', () => { - beforeEach(() => { - set(mockResponse, 'hits.hits', ['foo', 'bar']); - set(mockResponse, '_scroll_id', 'originalScrollId'); - }); - - it('should return the hits from the response', () => { - return fetchAllFromScroll(mockResponse, stubCallWithRequest).then(hits => { - expect(hits).to.eql(['foo', 'bar', 'newhit']); - }); - }); - - it('should call callWithRequest', () => { - return fetchAllFromScroll(mockResponse, stubCallWithRequest).then(() => { - expect(stubCallWithRequest.calledTwice).to.be(true); - - const firstCallWithRequestCallArgs = stubCallWithRequest.args[0]; - expect(firstCallWithRequestCallArgs[1].body.scroll_id).to.eql('originalScrollId'); - - const secondCallWithRequestCallArgs = stubCallWithRequest.args[1]; - expect(secondCallWithRequestCallArgs[1].body.scroll_id).to.eql('newScrollId'); - }); - }); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.js b/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.js deleted file mode 100755 index 835ef0090a5d28..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { get } from 'lodash'; -import { ES_SCROLL_SETTINGS } from '../../../common/constants'; - -export function fetchAllFromScroll(response, callWithRequest, hits = []) { - const newHits = get(response, 'hits.hits', []); - const scrollId = get(response, '_scroll_id'); - - if (newHits.length > 0) { - hits.push(...newHits); - - return callWithRequest('scroll', { - body: { - scroll: ES_SCROLL_SETTINGS.KEEPALIVE, - scroll_id: scrollId, - }, - }).then(innerResponse => { - return fetchAllFromScroll(innerResponse, callWithRequest, hits); - }); - } - - return Promise.resolve(hits); -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/__tests__/license_pre_routing_factory.js b/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/__tests__/license_pre_routing_factory.js deleted file mode 100755 index 1dc1df922acf7e..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/__tests__/license_pre_routing_factory.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { licensePreRoutingFactory } from '../license_pre_routing_factory'; - -describe('license_pre_routing_factory', () => { - describe('#logstashFeaturePreRoutingFactory', () => { - let mockServer; - let mockLicenseCheckResults; - - beforeEach(() => { - mockServer = { - plugins: { - xpack_main: { - info: { - feature: () => ({ - getLicenseCheckResults: () => mockLicenseCheckResults, - }), - }, - }, - }, - }; - }); - - it('only instantiates one instance per server', () => { - const firstInstance = licensePreRoutingFactory(mockServer); - const secondInstance = licensePreRoutingFactory(mockServer); - - expect(firstInstance).to.be(secondInstance); - }); - - describe('isAvailable is false', () => { - beforeEach(() => { - mockLicenseCheckResults = { - isAvailable: false, - }; - }); - - it('replies with 403', () => { - const licensePreRouting = licensePreRoutingFactory(mockServer); - const stubRequest = {}; - expect(() => licensePreRouting(stubRequest)).to.throwException(response => { - expect(response).to.be.an(Error); - expect(response.isBoom).to.be(true); - expect(response.output.statusCode).to.be(403); - }); - }); - }); - - describe('isAvailable is true', () => { - beforeEach(() => { - mockLicenseCheckResults = { - isAvailable: true, - }; - }); - - it('replies with nothing', () => { - const licensePreRouting = licensePreRoutingFactory(mockServer); - const stubRequest = {}; - const response = licensePreRouting(stubRequest); - expect(response).to.be(null); - }); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/license_pre_routing_factory.js b/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/license_pre_routing_factory.js deleted file mode 100755 index 05402a56a52d8b..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/license_pre_routing_factory.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { once } from 'lodash'; -import { wrapCustomError } from '../error_wrappers'; -import { PLUGIN } from '../../../common/constants'; - -export const licensePreRoutingFactory = once(server => { - const xpackMainPlugin = server.plugins.xpack_main; - - // License checking and enable/disable logic - function licensePreRouting() { - const licenseCheckResults = xpackMainPlugin.info.feature(PLUGIN.ID).getLicenseCheckResults(); - if (!licenseCheckResults.isAvailable) { - const error = new Error(licenseCheckResults.message); - const statusCode = 403; - throw wrapCustomError(error, statusCode); - } - - return null; - } - - return licensePreRouting; -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.js b/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.js index 8a17fb2eea4970..a0d06e77b410d2 100755 --- a/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.js +++ b/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.js @@ -6,7 +6,7 @@ import { mirrorPluginStatus } from '../../../../../server/lib/mirror_plugin_status'; import { checkLicense } from '../check_license'; -import { PLUGIN } from '../../../common/constants'; +import { PLUGIN } from '../../../../../../plugins/logstash/common/constants'; export function registerLicenseChecker(server) { const xpackMainPlugin = server.plugins.xpack_main; diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_cluster_routes.js b/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_cluster_routes.js deleted file mode 100755 index 86e18b02ddce2d..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_cluster_routes.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { registerLoadRoute } from './register_load_route'; - -export function registerLogstashClusterRoutes(server) { - registerLoadRoute(server); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_load_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_load_route.js deleted file mode 100755 index 663b60cc8c1d12..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/register_load_route.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import Boom from 'boom'; -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { Cluster } from '../../../models/cluster'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function fetchCluster(callWithRequest) { - return callWithRequest('info'); -} - -export function registerLoadRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/cluster', - method: 'GET', - handler: (request, h) => { - const callWithRequest = callWithRequestFactory(server, request); - - return fetchCluster(callWithRequest) - .then(responseFromES => ({ - cluster: Cluster.fromUpstreamJSON(responseFromES).downstreamJSON, - })) - .catch(e => { - if (e.status === 403) { - return h.response(); - } - throw Boom.internal(e); - }); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_delete_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_delete_route.js deleted file mode 100755 index 232ee4207541c9..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_delete_route.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { wrapEsError } from '../../../lib/error_wrappers'; -import { INDEX_NAMES } from '../../../../common/constants'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function deletePipeline(callWithRequest, pipelineId) { - return callWithRequest('delete', { - index: INDEX_NAMES.PIPELINES, - id: pipelineId, - refresh: 'wait_for', - }); -} - -export function registerDeleteRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/pipeline/{id}', - method: 'DELETE', - handler: (request, h) => { - const callWithRequest = callWithRequestFactory(server, request); - const pipelineId = request.params.id; - - return deletePipeline(callWithRequest, pipelineId) - .then(() => h.response().code(204)) - .catch(e => wrapEsError(e)); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_load_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_load_route.js deleted file mode 100755 index 796bf939d747fe..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_load_route.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import Boom from 'boom'; -import { INDEX_NAMES } from '../../../../common/constants'; -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { Pipeline } from '../../../models/pipeline'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function fetchPipeline(callWithRequest, pipelineId) { - return callWithRequest('get', { - index: INDEX_NAMES.PIPELINES, - id: pipelineId, - _source: ['description', 'username', 'pipeline', 'pipeline_settings'], - ignore: [404], - }); -} - -export function registerLoadRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/pipeline/{id}', - method: 'GET', - handler: request => { - const callWithRequest = callWithRequestFactory(server, request); - const pipelineId = request.params.id; - - return fetchPipeline(callWithRequest, pipelineId) - .then(pipelineResponseFromES => { - if (!pipelineResponseFromES.found) { - throw Boom.notFound(); - } - - const pipeline = Pipeline.fromUpstreamJSON(pipelineResponseFromES); - return pipeline.downstreamJSON; - }) - .catch(e => Boom.boomify(e)); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_pipeline_routes.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_pipeline_routes.js deleted file mode 100755 index 9966cd2ca21392..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_pipeline_routes.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { registerLoadRoute } from './register_load_route'; -import { registerDeleteRoute } from './register_delete_route'; -import { registerSaveRoute } from './register_save_route'; - -export function registerLogstashPipelineRoutes(server) { - registerLoadRoute(server); - registerDeleteRoute(server); - registerSaveRoute(server); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_save_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_save_route.js deleted file mode 100755 index 50f62dc0a0ddd8..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/register_save_route.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { get } from 'lodash'; -import { wrapEsError } from '../../../lib/error_wrappers'; -import { INDEX_NAMES } from '../../../../common/constants'; -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { Pipeline } from '../../../models/pipeline'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function savePipeline(callWithRequest, pipelineId, pipelineBody) { - return callWithRequest('index', { - index: INDEX_NAMES.PIPELINES, - id: pipelineId, - body: pipelineBody, - refresh: 'wait_for', - }); -} - -export function registerSaveRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/pipeline/{id}', - method: 'PUT', - handler: async (request, h) => { - let username; - if (server.plugins.security) { - const user = await server.plugins.security.getUser(request); - username = get(user, 'username'); - } - - const callWithRequest = callWithRequestFactory(server, request); - const pipelineId = request.params.id; - - const pipeline = Pipeline.fromDownstreamJSON(request.payload, pipelineId, username); - return savePipeline(callWithRequest, pipeline.id, pipeline.upstreamJSON) - .then(() => h.response().code(204)) - .catch(e => wrapEsError(e)); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/index.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/index.js deleted file mode 100755 index db275b5a3ea799..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { registerLogstashPipelinesRoutes } from './register_pipelines_routes'; diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_delete_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_delete_route.js deleted file mode 100755 index 8ccd792d5a8763..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_delete_route.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { wrapUnknownError } from '../../../lib/error_wrappers'; -import { INDEX_NAMES } from '../../../../common/constants'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function deletePipelines(callWithRequest, pipelineIds) { - const deletePromises = pipelineIds.map(pipelineId => { - return callWithRequest('delete', { - index: INDEX_NAMES.PIPELINES, - id: pipelineId, - refresh: 'wait_for', - }) - .then(success => ({ success })) - .catch(error => ({ error })); - }); - - return Promise.all(deletePromises).then(results => { - const successes = results.filter(result => Boolean(result.success)); - const errors = results.filter(result => Boolean(result.error)); - - return { - numSuccesses: successes.length, - numErrors: errors.length, - }; - }); -} - -export function registerDeleteRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/pipelines/delete', - method: 'POST', - handler: request => { - const callWithRequest = callWithRequestFactory(server, request); - - return deletePipelines(callWithRequest, request.payload.pipelineIds) - .then(results => ({ results })) - .catch(err => wrapUnknownError(err)); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_list_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_list_route.js deleted file mode 100755 index 43ce1c3e8f6f66..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_list_route.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { wrapEsError } from '../../../lib/error_wrappers'; -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { fetchAllFromScroll } from '../../../lib/fetch_all_from_scroll'; -import { INDEX_NAMES, ES_SCROLL_SETTINGS } from '../../../../common/constants'; -import { PipelineListItem } from '../../../models/pipeline_list_item'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function fetchPipelines(callWithRequest) { - const params = { - index: INDEX_NAMES.PIPELINES, - scroll: ES_SCROLL_SETTINGS.KEEPALIVE, - body: { - size: ES_SCROLL_SETTINGS.PAGE_SIZE, - }, - ignore: [404], - }; - - return callWithRequest('search', params).then(response => - fetchAllFromScroll(response, callWithRequest) - ); -} - -export function registerListRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/pipelines', - method: 'GET', - handler: request => { - const callWithRequest = callWithRequestFactory(server, request); - - return fetchPipelines(callWithRequest) - .then((pipelinesHits = []) => { - const pipelines = pipelinesHits.map(pipeline => { - return PipelineListItem.fromUpstreamJSON(pipeline).downstreamJSON; - }); - - return { pipelines }; - }) - .catch(e => wrapEsError(e)); - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_pipelines_routes.js b/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_pipelines_routes.js deleted file mode 100755 index 6d25f3acb9bf90..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipelines/register_pipelines_routes.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { registerListRoute } from './register_list_route'; -import { registerDeleteRoute } from './register_delete_route'; - -export function registerLogstashPipelinesRoutes(server) { - registerListRoute(server); - registerDeleteRoute(server); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/index.js b/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/index.js deleted file mode 100755 index d616349dd65666..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { registerLogstashUpgradeRoutes } from './register_upgrade_routes'; diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_execute_route.js b/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_execute_route.js deleted file mode 100755 index 16f97930ae25e3..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_execute_route.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { callWithRequestFactory } from '../../../lib/call_with_request_factory'; -import { wrapUnknownError } from '../../../lib/error_wrappers'; -import { INDEX_NAMES } from '../../../../common/constants'; -import { licensePreRoutingFactory } from '../../../lib/license_pre_routing_factory'; - -function doesIndexExist(callWithRequest) { - return callWithRequest('indices.exists', { - index: INDEX_NAMES.PIPELINES, - }); -} - -async function executeUpgrade(callWithRequest) { - // If index doesn't exist yet, there is no mapping to upgrade - if (!(await doesIndexExist(callWithRequest))) { - return; - } - - return callWithRequest('indices.putMapping', { - index: INDEX_NAMES.PIPELINES, - body: { - properties: { - pipeline_settings: { - dynamic: false, - type: 'object', - }, - }, - }, - }); -} - -export function registerExecuteRoute(server) { - const licensePreRouting = licensePreRoutingFactory(server); - - server.route({ - path: '/api/logstash/upgrade', - method: 'POST', - handler: async request => { - const callWithRequest = callWithRequestFactory(server, request); - try { - await executeUpgrade(callWithRequest); - return { is_upgraded: true }; - } catch (err) { - throw wrapUnknownError(err); - } - }, - config: { - pre: [licensePreRouting], - }, - }); -} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_upgrade_routes.js b/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_upgrade_routes.js deleted file mode 100755 index a198f82613e373..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/routes/api/upgrade/register_upgrade_routes.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { registerExecuteRoute } from './register_execute_route'; - -export function registerLogstashUpgradeRoutes(server) { - registerExecuteRoute(server); -} diff --git a/x-pack/plugins/licensing/common/licensing.mock.ts b/x-pack/plugins/licensing/common/licensing.mock.ts index bf8b85e3e981b3..4a6b27255587af 100644 --- a/x-pack/plugins/licensing/common/licensing.mock.ts +++ b/x-pack/plugins/licensing/common/licensing.mock.ts @@ -53,6 +53,7 @@ const createLicenseMock = () => { }; mock.check.mockReturnValue({ state: 'valid' }); mock.hasAtLeast.mockReturnValue(true); + mock.getFeature.mockReturnValue({ isAvailable: true, isEnabled: true }); return mock; }; export const licenseMock = { diff --git a/x-pack/plugins/licensing/server/index.ts b/x-pack/plugins/licensing/server/index.ts index 0e14ead7c6c575..76e65afc595c4c 100644 --- a/x-pack/plugins/licensing/server/index.ts +++ b/x-pack/plugins/licensing/server/index.ts @@ -12,3 +12,4 @@ export const plugin = (context: PluginInitializerContext) => new LicensingPlugin export * from '../common/types'; export * from './types'; export { config } from './licensing_config'; +export { CheckLicense, wrapRouteWithLicenseCheck } from './wrap_route_with_license_check'; diff --git a/x-pack/plugins/licensing/server/wrap_route_with_license_check.test.ts b/x-pack/plugins/licensing/server/wrap_route_with_license_check.test.ts new file mode 100644 index 00000000000000..7abdd3f6190ce2 --- /dev/null +++ b/x-pack/plugins/licensing/server/wrap_route_with_license_check.test.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { httpServerMock } from 'src/core/server/mocks'; + +import { wrapRouteWithLicenseCheck, CheckLicense } from './wrap_route_with_license_check'; + +const context = { + licensing: { + license: {}, + }, +} as any; +const request = httpServerMock.createKibanaRequest(); + +describe('wrapRouteWithLicenseCheck', () => { + it('calls route handler if checkLicense returns "valid": true', async () => { + const checkLicense: CheckLicense = () => ({ valid: true, message: null }); + const routeHandler = jest.fn(); + const wrapper = wrapRouteWithLicenseCheck(checkLicense, routeHandler); + const response = httpServerMock.createResponseFactory(); + + await wrapper(context, request, response); + + expect(routeHandler).toHaveBeenCalledTimes(1); + expect(routeHandler).toHaveBeenCalledWith(context, request, response); + }); + + it('does not call route handler if checkLicense returns "valid": false', async () => { + const checkLicense: CheckLicense = () => ({ valid: false, message: 'reason' }); + const routeHandler = jest.fn(); + const wrapper = wrapRouteWithLicenseCheck(checkLicense, routeHandler); + const response = httpServerMock.createResponseFactory(); + + await wrapper(context, request, response); + + expect(routeHandler).toHaveBeenCalledTimes(0); + expect(response.forbidden).toHaveBeenCalledTimes(1); + expect(response.forbidden).toHaveBeenCalledWith({ body: 'reason' }); + }); + + it('allows an exception to bubble up if handler throws', async () => { + const checkLicense: CheckLicense = () => ({ valid: true, message: null }); + const routeHandler = () => { + throw new Error('reason'); + }; + const wrapper = wrapRouteWithLicenseCheck(checkLicense, routeHandler); + const response = httpServerMock.createResponseFactory(); + + await expect(wrapper(context, request, response)).rejects.toThrowErrorMatchingInlineSnapshot( + `"reason"` + ); + }); + + it('allows an exception to bubble up if "checkLicense" throws', async () => { + const checkLicense: CheckLicense = () => { + throw new Error('reason'); + }; + const routeHandler = jest.fn(); + const wrapper = wrapRouteWithLicenseCheck(checkLicense, routeHandler); + const response = httpServerMock.createResponseFactory(); + + await expect(wrapper(context, request, response)).rejects.toThrowErrorMatchingInlineSnapshot( + `"reason"` + ); + + expect(routeHandler).toHaveBeenCalledTimes(0); + }); +}); diff --git a/x-pack/plugins/licensing/server/wrap_route_with_license_check.ts b/x-pack/plugins/licensing/server/wrap_route_with_license_check.ts new file mode 100644 index 00000000000000..e0cac8d9db208c --- /dev/null +++ b/x-pack/plugins/licensing/server/wrap_route_with_license_check.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + RequestHandler, + RequestHandlerContext, + KibanaRequest, + RouteMethod, + KibanaResponseFactory, +} from 'src/core/server'; + +import { ILicense } from '../common/types'; + +export type CheckLicense = ( + license: ILicense +) => { valid: false; message: string } | { valid: true; message: null }; + +export function wrapRouteWithLicenseCheck( + checkLicense: CheckLicense, + handler: RequestHandler +): RequestHandler { + return async ( + context: RequestHandlerContext, + request: KibanaRequest, + response: KibanaResponseFactory + ) => { + const licenseCheckResult = checkLicense(context.licensing.license); + + if (licenseCheckResult.valid) { + return handler(context, request, response); + } else { + return response.forbidden({ + body: licenseCheckResult.message, + }); + } + }; +} diff --git a/x-pack/legacy/plugins/logstash/common/constants/es_scroll_settings.js b/x-pack/plugins/logstash/common/constants/es_scroll_settings.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/es_scroll_settings.js rename to x-pack/plugins/logstash/common/constants/es_scroll_settings.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/index.js b/x-pack/plugins/logstash/common/constants/index.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/index.js rename to x-pack/plugins/logstash/common/constants/index.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/index_names.js b/x-pack/plugins/logstash/common/constants/index_names.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/index_names.js rename to x-pack/plugins/logstash/common/constants/index_names.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/monitoring.js b/x-pack/plugins/logstash/common/constants/monitoring.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/monitoring.js rename to x-pack/plugins/logstash/common/constants/monitoring.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/pagination.js b/x-pack/plugins/logstash/common/constants/pagination.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/pagination.js rename to x-pack/plugins/logstash/common/constants/pagination.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/pipeline.js b/x-pack/plugins/logstash/common/constants/pipeline.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/pipeline.js rename to x-pack/plugins/logstash/common/constants/pipeline.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/plugin.js b/x-pack/plugins/logstash/common/constants/plugin.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/plugin.js rename to x-pack/plugins/logstash/common/constants/plugin.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/routes.js b/x-pack/plugins/logstash/common/constants/routes.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/routes.js rename to x-pack/plugins/logstash/common/constants/routes.ts diff --git a/x-pack/legacy/plugins/logstash/common/constants/tooltips.js b/x-pack/plugins/logstash/common/constants/tooltips.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/common/constants/tooltips.js rename to x-pack/plugins/logstash/common/constants/tooltips.ts diff --git a/x-pack/plugins/logstash/kibana.json b/x-pack/plugins/logstash/kibana.json new file mode 100644 index 00000000000000..bcc926535d3c28 --- /dev/null +++ b/x-pack/plugins/logstash/kibana.json @@ -0,0 +1,12 @@ +{ + "id": "logstash", + "version": "0.0.1", + "kibanaVersion": "kibana", + "configPath": ["xpack", "logstash"], + "requiredPlugins": [ + "licensing" + ], + "optionalPlugins": ["security"], + "server": true, + "ui": false +} diff --git a/x-pack/plugins/logstash/server/index.ts b/x-pack/plugins/logstash/server/index.ts new file mode 100644 index 00000000000000..cc65184a1f3a01 --- /dev/null +++ b/x-pack/plugins/logstash/server/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema } from '@kbn/config-schema'; +import { PluginInitializerContext, PluginConfigDescriptor } from 'src/core/server'; +import { LogstashPlugin } from './plugin'; + +export const plugin = (context: PluginInitializerContext) => new LogstashPlugin(context); + +export const config: PluginConfigDescriptor = { + schema: schema.object({ + enabled: schema.boolean({ defaultValue: true }), + }), +}; diff --git a/x-pack/plugins/logstash/server/lib/check_license/check_license.test.ts b/x-pack/plugins/logstash/server/lib/check_license/check_license.test.ts new file mode 100755 index 00000000000000..324e0a22ff3781 --- /dev/null +++ b/x-pack/plugins/logstash/server/lib/check_license/check_license.test.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { licensingMock } from '../../../../licensing/server/mocks'; +import { checkLicense } from './check_license'; + +describe('check_license', function() { + describe('returns "valid": false & message when', () => { + it('license information is not available', () => { + const license = licensingMock.createLicenseMock(); + license.isAvailable = false; + + const { valid, message } = checkLicense(license); + + expect(valid).toBe(false); + expect(message).toStrictEqual(expect.any(String)); + }); + + it('license level is not enough', () => { + const license = licensingMock.createLicenseMock(); + license.hasAtLeast.mockReturnValue(false); + + const { valid, message } = checkLicense(license); + + expect(valid).toBe(false); + expect(message).toStrictEqual(expect.any(String)); + }); + + it('license is expired', () => { + const license = licensingMock.createLicenseMock(); + license.isActive = false; + + const { valid, message } = checkLicense(license); + + expect(valid).toBe(false); + expect(message).toStrictEqual(expect.any(String)); + }); + + it('elasticsearch security is disabled', () => { + const license = licensingMock.createLicenseMock(); + license.getFeature.mockReturnValue({ isEnabled: false, isAvailable: false }); + + const { valid, message } = checkLicense(license); + + expect(valid).toBe(false); + expect(message).toStrictEqual(expect.any(String)); + }); + }); + + it('returns "valid": true without message otherwise', () => { + const license = licensingMock.createLicenseMock(); + + const { valid, message } = checkLicense(license); + + expect(valid).toBe(true); + expect(message).toBe(null); + }); +}); diff --git a/x-pack/plugins/logstash/server/lib/check_license/check_license.ts b/x-pack/plugins/logstash/server/lib/check_license/check_license.ts new file mode 100644 index 00000000000000..4eef2eb9b06811 --- /dev/null +++ b/x-pack/plugins/logstash/server/lib/check_license/check_license.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; + +import { CheckLicense } from '../../../../licensing/server'; + +export const checkLicense: CheckLicense = license => { + if (!license.isAvailable) { + return { + valid: false, + message: i18n.translate( + 'xpack.logstash.managementSection.notPossibleToManagePipelinesMessage', + { + defaultMessage: + 'You cannot manage Logstash pipelines because license information is not available at this time.', + } + ), + }; + } + + if (!license.hasAtLeast('standard')) { + return { + valid: false, + message: i18n.translate('xpack.logstash.managementSection.licenseDoesNotSupportDescription', { + defaultMessage: + 'Your {licenseType} license does not support Logstash pipeline management features. Please upgrade your license.', + values: { licenseType: license.type }, + }), + }; + } + + if (!license.isActive) { + return { + valid: false, + message: i18n.translate( + 'xpack.logstash.managementSection.pipelineCrudOperationsNotAllowedDescription', + { + defaultMessage: + 'You cannot edit, create, or delete your Logstash pipelines because your {licenseType} license has expired.', + values: { licenseType: license.type }, + } + ), + }; + } + + if (!license.getFeature('security').isEnabled) { + return { + valid: false, + message: i18n.translate('xpack.logstash.managementSection.enableSecurityDescription', { + defaultMessage: + 'Security must be enabled in order to use Logstash pipeline management features.' + + ' Please set xpack.security.enabled: true in your elasticsearch.yml.', + }), + }; + } + + return { + valid: true, + message: null, + }; +}; diff --git a/x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/index.js b/x-pack/plugins/logstash/server/lib/check_license/index.ts old mode 100755 new mode 100644 similarity index 77% rename from x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/index.js rename to x-pack/plugins/logstash/server/lib/check_license/index.ts index 787814d87dff94..f2c070fd44b6e6 --- a/x-pack/legacy/plugins/logstash/server/lib/call_with_request_factory/index.js +++ b/x-pack/plugins/logstash/server/lib/check_license/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { callWithRequestFactory } from './call_with_request_factory'; +export { checkLicense } from './check_license'; diff --git a/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.test.ts b/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.test.ts new file mode 100755 index 00000000000000..8cd6b70d475701 --- /dev/null +++ b/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.test.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { fetchAllFromScroll } from './fetch_all_from_scroll'; + +describe('fetch_all_from_scroll', () => { + let stubCallWithRequest: jest.Mock; + + beforeEach(() => { + stubCallWithRequest = jest.fn(); + stubCallWithRequest + .mockResolvedValueOnce({ + hits: { + hits: ['newhit'], + }, + _scroll_id: 'newScrollId', + }) + .mockResolvedValueOnce({ + hits: { + hits: [], + }, + }); + }); + + describe('#fetchAllFromScroll', () => { + describe('when the passed-in response has no hits', () => { + const mockResponse = { + hits: { + hits: [], + }, + }; + + it('should return an empty array of hits', async () => { + const hits = await fetchAllFromScroll(mockResponse as any, stubCallWithRequest); + expect(hits).toEqual([]); + }); + + it('should not call callWithRequest', async () => { + await fetchAllFromScroll(mockResponse as any, stubCallWithRequest); + expect(stubCallWithRequest).toHaveBeenCalledTimes(0); + }); + }); + + describe('when the passed-in response has some hits', () => { + const mockResponse = { + hits: { + hits: ['foo', 'bar'], + }, + _scroll_id: 'originalScrollId', + }; + + it('should return the hits from the response', async () => { + const hits = await fetchAllFromScroll(mockResponse as any, stubCallWithRequest); + expect(hits).toEqual(['foo', 'bar', 'newhit']); + }); + + it('should call callWithRequest', async () => { + await fetchAllFromScroll(mockResponse as any, stubCallWithRequest); + expect(stubCallWithRequest).toHaveBeenCalledTimes(2); + + const firstCallWithRequestCallArgs = stubCallWithRequest.mock.calls[0]; + expect(firstCallWithRequestCallArgs[1].body.scroll_id).toBe('originalScrollId'); + + const secondCallWithRequestCallArgs = stubCallWithRequest.mock.calls[1]; + expect(secondCallWithRequestCallArgs[1].body.scroll_id).toBe('newScrollId'); + }); + }); + }); +}); diff --git a/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.ts b/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.ts new file mode 100755 index 00000000000000..060cf188a4c60e --- /dev/null +++ b/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/fetch_all_from_scroll.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { APICaller } from 'src/core/server'; +import { SearchResponse } from 'elasticsearch'; + +import { ES_SCROLL_SETTINGS } from '../../../common/constants'; +import { Hits } from '../../types'; + +export async function fetchAllFromScroll( + response: SearchResponse, + callWithRequest: APICaller, + hits: Hits = [] +): Promise { + const newHits = response.hits?.hits || []; + const scrollId = response._scroll_id; + + if (newHits.length > 0) { + hits.push(...newHits); + + const innerResponse = await callWithRequest('scroll', { + body: { + scroll: ES_SCROLL_SETTINGS.KEEPALIVE, + scroll_id: scrollId, + }, + }); + + return await fetchAllFromScroll(innerResponse, callWithRequest, hits); + } + + return hits; +} diff --git a/x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/index.js b/x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/index.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/server/lib/fetch_all_from_scroll/index.js rename to x-pack/plugins/logstash/server/lib/fetch_all_from_scroll/index.ts diff --git a/x-pack/legacy/plugins/logstash/server/models/cluster/__tests__/cluster.js b/x-pack/plugins/logstash/server/models/cluster/cluster.test.ts similarity index 81% rename from x-pack/legacy/plugins/logstash/server/models/cluster/__tests__/cluster.js rename to x-pack/plugins/logstash/server/models/cluster/cluster.test.ts index 08a447a160a1a0..63f9f1e58f6ecb 100755 --- a/x-pack/legacy/plugins/logstash/server/models/cluster/__tests__/cluster.js +++ b/x-pack/plugins/logstash/server/models/cluster/cluster.test.ts @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import expect from '@kbn/expect'; -import { Cluster } from '../cluster'; +import { Cluster } from './cluster'; describe('cluster', () => { describe('Cluster', () => { @@ -16,7 +15,7 @@ describe('cluster', () => { it('returns correct Cluster instance', () => { const cluster = Cluster.fromUpstreamJSON(upstreamJSON); - expect(cluster.uuid).to.be(upstreamJSON.cluster_uuid); + expect(cluster.uuid).toEqual(upstreamJSON.cluster_uuid); }); }); }); diff --git a/x-pack/legacy/plugins/logstash/server/models/cluster/cluster.js b/x-pack/plugins/logstash/server/models/cluster/cluster.ts similarity index 68% rename from x-pack/legacy/plugins/logstash/server/models/cluster/cluster.js rename to x-pack/plugins/logstash/server/models/cluster/cluster.ts index b114162fb0986d..54f03605e14d65 100755 --- a/x-pack/legacy/plugins/logstash/server/models/cluster/cluster.js +++ b/x-pack/plugins/logstash/server/models/cluster/cluster.ts @@ -10,11 +10,12 @@ import { get } from 'lodash'; * This model deals with a cluster object from ES and converts it to Kibana downstream */ export class Cluster { - constructor(props) { - this.uuid = props.uuid; + public readonly uuid: string; + constructor({ uuid }: { uuid: string }) { + this.uuid = uuid; } - get downstreamJSON() { + public get downstreamJSON() { const json = { uuid: this.uuid, }; @@ -23,8 +24,8 @@ export class Cluster { } // generate Pipeline object from elasticsearch response - static fromUpstreamJSON(upstreamCluster) { - const uuid = get(upstreamCluster, 'cluster_uuid'); + static fromUpstreamJSON(upstreamCluster: Record) { + const uuid = get(upstreamCluster, 'cluster_uuid'); return new Cluster({ uuid }); } } diff --git a/x-pack/legacy/plugins/logstash/server/models/cluster/index.js b/x-pack/plugins/logstash/server/models/cluster/index.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/server/models/cluster/index.js rename to x-pack/plugins/logstash/server/models/cluster/index.ts diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline/index.js b/x-pack/plugins/logstash/server/models/pipeline/index.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/server/models/pipeline/index.js rename to x-pack/plugins/logstash/server/models/pipeline/index.ts diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline/__tests__/pipeline.js b/x-pack/plugins/logstash/server/models/pipeline/pipeline.test.ts similarity index 74% rename from x-pack/legacy/plugins/logstash/server/models/pipeline/__tests__/pipeline.js rename to x-pack/plugins/logstash/server/models/pipeline/pipeline.test.ts index 41869c22271f00..82ce0d72e2052c 100755 --- a/x-pack/legacy/plugins/logstash/server/models/pipeline/__tests__/pipeline.js +++ b/x-pack/plugins/logstash/server/models/pipeline/pipeline.test.ts @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import expect from '@kbn/expect'; -import { Pipeline } from '../pipeline'; +import { Pipeline } from './pipeline'; describe('pipeline', () => { describe('Pipeline', () => { @@ -25,10 +24,10 @@ describe('pipeline', () => { it('returns correct Pipeline instance', () => { const pipeline = Pipeline.fromUpstreamJSON(upstreamJSON); - expect(pipeline.id).to.be(upstreamJSON._id); - expect(pipeline.description).to.be(upstreamJSON._source.description); - expect(pipeline.username).to.be(upstreamJSON._source.username); - expect(pipeline.pipeline).to.be(upstreamJSON._source.pipeline); + expect(pipeline.id).toBe(upstreamJSON._id); + expect(pipeline.description).toBe(upstreamJSON._source.description); + expect(pipeline.username).toBe(upstreamJSON._source.username); + expect(pipeline.pipeline).toBe(upstreamJSON._source.pipeline); }); it('throws if pipeline argument does not contain an id property', () => { @@ -39,7 +38,7 @@ describe('pipeline', () => { const testFromUpstreamJsonError = () => { return Pipeline.fromUpstreamJSON(badJSON); }; - expect(testFromUpstreamJsonError).to.throwError( + expect(testFromUpstreamJsonError).toThrowError( /upstreamPipeline argument must contain an id property/i ); }); @@ -64,12 +63,12 @@ describe('pipeline', () => { pipeline: 'input {} filter { grok {} }\n output {}', }; // can't do an object level comparison because modified field is always `now` - expect(pipeline.upstreamJSON.last_modified).to.be.a('string'); - expect(pipeline.upstreamJSON.description).to.be(expectedUpstreamJSON.description); - expect(pipeline.upstreamJSON.pipeline_metadata).to.eql( + expect(pipeline.upstreamJSON.last_modified).toStrictEqual(expect.any(String)); + expect(pipeline.upstreamJSON.description).toBe(expectedUpstreamJSON.description); + expect(pipeline.upstreamJSON.pipeline_metadata).toEqual( expectedUpstreamJSON.pipeline_metadata ); - expect(pipeline.upstreamJSON.pipeline).to.be(expectedUpstreamJSON.pipeline); + expect(pipeline.upstreamJSON.pipeline).toBe(expectedUpstreamJSON.pipeline); }); }); }); diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline/pipeline.js b/x-pack/plugins/logstash/server/models/pipeline/pipeline.ts similarity index 59% rename from x-pack/legacy/plugins/logstash/server/models/pipeline/pipeline.js rename to x-pack/plugins/logstash/server/models/pipeline/pipeline.ts index f02d303cb03809..3f2debeebeb46b 100755 --- a/x-pack/legacy/plugins/logstash/server/models/pipeline/pipeline.js +++ b/x-pack/plugins/logstash/server/models/pipeline/pipeline.ts @@ -9,19 +9,38 @@ import { badRequest } from 'boom'; import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; +interface PipelineOptions { + id: string; + description: string; + pipeline: string; + username?: string; + settings?: Record; +} + +interface DownstreamPipeline { + description: string; + pipeline: string; + settings?: Record; +} /** * This model deals with a pipeline object from ES and converts it to Kibana downstream */ export class Pipeline { - constructor(props) { - this.id = props.id; - this.description = props.description; - this.username = props.username; - this.pipeline = props.pipeline; - this.settings = props.settings || {}; + public readonly id: string; + public readonly description: string; + public readonly username?: string; + public readonly pipeline: string; + private readonly settings: Record; + + constructor(options: PipelineOptions) { + this.id = options.id; + this.description = options.description; + this.username = options.username; + this.pipeline = options.pipeline; + this.settings = options.settings || {}; } - get downstreamJSON() { + public get downstreamJSON() { const json = { id: this.id, description: this.description, @@ -41,7 +60,7 @@ export class Pipeline { * pipeline_metadata.type is the Logstash config type (future: LIR, json, etc) * @return {[JSON]} [Elasticsearch JSON] */ - get upstreamJSON() { + public get upstreamJSON() { return { description: this.description, last_modified: moment().toISOString(), @@ -56,7 +75,11 @@ export class Pipeline { } // generate Pipeline object from kibana response - static fromDownstreamJSON(downstreamPipeline, pipelineId, username) { + static fromDownstreamJSON( + downstreamPipeline: DownstreamPipeline, + pipelineId: string, + username?: string + ) { const opts = { id: pipelineId, description: downstreamPipeline.description, @@ -69,7 +92,7 @@ export class Pipeline { } // generate Pipeline object from elasticsearch response - static fromUpstreamJSON(upstreamPipeline) { + static fromUpstreamJSON(upstreamPipeline: Record) { if (!upstreamPipeline._id) { throw badRequest( i18n.translate( @@ -80,13 +103,13 @@ export class Pipeline { ) ); } - const id = get(upstreamPipeline, '_id'); - const description = get(upstreamPipeline, '_source.description'); - const username = get(upstreamPipeline, '_source.username'); - const pipeline = get(upstreamPipeline, '_source.pipeline'); - const settings = get(upstreamPipeline, '_source.pipeline_settings'); + const id = get(upstreamPipeline, '_id'); + const description = get(upstreamPipeline, '_source.description'); + const username = get(upstreamPipeline, '_source.username'); + const pipeline = get(upstreamPipeline, '_source.pipeline'); + const settings = get>(upstreamPipeline, '_source.pipeline_settings'); - const opts = { id, description, username, pipeline, settings }; + const opts: PipelineOptions = { id, description, username, pipeline, settings }; return new Pipeline(opts); } diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/index.js b/x-pack/plugins/logstash/server/models/pipeline_list_item/index.ts similarity index 100% rename from x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/index.js rename to x-pack/plugins/logstash/server/models/pipeline_list_item/index.ts diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/__tests__/pipeline_list_item.js b/x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.test.ts similarity index 72% rename from x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/__tests__/pipeline_list_item.js rename to x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.test.ts index 4f3a447f030c70..c557e84443b02a 100755 --- a/x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/__tests__/pipeline_list_item.js +++ b/x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.test.ts @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import expect from '@kbn/expect'; -import { PipelineListItem } from '../pipeline_list_item'; +import { PipelineListItem } from './pipeline_list_item'; describe('pipeline_list_item', () => { describe('PipelineListItem', () => { @@ -21,15 +20,18 @@ describe('pipeline_list_item', () => { username: 'elastic', pipeline: 'input {} filter { grok {} }\n output {}', }, + _index: 'index', + _type: 'type', + _score: 100, }; describe('fromUpstreamJSON factory method', () => { it('returns correct PipelineListItem instance', () => { const pipelineListItem = PipelineListItem.fromUpstreamJSON(upstreamJSON); - expect(pipelineListItem.id).to.be(upstreamJSON._id); - expect(pipelineListItem.description).to.be(upstreamJSON._source.description); - expect(pipelineListItem.username).to.be(upstreamJSON._source.username); - expect(pipelineListItem.last_modified).to.be(upstreamJSON._source.last_modified); + expect(pipelineListItem.id).toBe(upstreamJSON._id); + expect(pipelineListItem.description).toBe(upstreamJSON._source.description); + expect(pipelineListItem.username).toBe(upstreamJSON._source.username); + expect(pipelineListItem.last_modified).toBe(upstreamJSON._source.last_modified); }); }); @@ -42,7 +44,7 @@ describe('pipeline_list_item', () => { username: 'elastic', last_modified: '2017-05-14T02:50:51.250Z', }; - expect(pipelineListItem.downstreamJSON).to.eql(expectedDownstreamJSON); + expect(pipelineListItem.downstreamJSON).toEqual(expectedDownstreamJSON); }); }); }); diff --git a/x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.js b/x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.ts similarity index 50% rename from x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.js rename to x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.ts index bbb506766897e1..98c91fca1fcca7 100755 --- a/x-pack/legacy/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.js +++ b/x-pack/plugins/logstash/server/models/pipeline_list_item/pipeline_list_item.ts @@ -5,16 +5,21 @@ */ import { get } from 'lodash'; +import { Hit, PipelineListItemOptions } from '../../types'; export class PipelineListItem { - constructor(props) { - this.id = props.id; - this.description = props.description; - this.last_modified = props.last_modified; - this.username = props.username; + public readonly id: string; + public readonly description: string; + public readonly last_modified: string; + public readonly username: string; + constructor(options: PipelineListItemOptions) { + this.id = options.id; + this.description = options.description; + this.last_modified = options.last_modified; + this.username = options.username; } - get downstreamJSON() { + public get downstreamJSON() { const json = { id: this.id, description: this.description, @@ -29,12 +34,12 @@ export class PipelineListItem { * Takes the json GET response from ES and constructs a pipeline model to be used * in Kibana downstream */ - static fromUpstreamJSON(pipeline) { + static fromUpstreamJSON(pipeline: Hit) { const opts = { id: pipeline._id, - description: get(pipeline, '_source.description'), - last_modified: get(pipeline, '_source.last_modified'), - username: get(pipeline, '_source.username'), + description: get(pipeline, '_source.description'), + last_modified: get(pipeline, '_source.last_modified'), + username: get(pipeline, '_source.username'), }; return new PipelineListItem(opts); diff --git a/x-pack/plugins/logstash/server/plugin.ts b/x-pack/plugins/logstash/server/plugin.ts new file mode 100644 index 00000000000000..c048dd13bfb0cf --- /dev/null +++ b/x-pack/plugins/logstash/server/plugin.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { + CoreSetup, + CoreStart, + ICustomClusterClient, + Logger, + Plugin, + PluginInitializerContext, +} from 'src/core/server'; +import { LicensingPluginSetup } from '../../licensing/server'; +import { SecurityPluginSetup } from '../../security/server'; + +import { registerRoutes } from './routes'; + +interface SetupDeps { + licensing: LicensingPluginSetup; + security?: SecurityPluginSetup; +} + +export class LogstashPlugin implements Plugin { + private readonly logger: Logger; + private esClient?: ICustomClusterClient; + private coreSetup?: CoreSetup; + constructor(context: PluginInitializerContext) { + this.logger = context.logger.get(); + } + + setup(core: CoreSetup, deps: SetupDeps) { + this.logger.debug('Setting up Logstash plugin'); + + this.coreSetup = core; + registerRoutes(core.http.createRouter(), deps.security); + } + + start(core: CoreStart) { + const esClient = core.elasticsearch.legacy.createClient('logstash'); + + this.coreSetup!.http.registerRouteHandlerContext('logstash', async (context, request) => { + return { esClient: esClient.asScoped(request) }; + }); + } + stop() { + if (this.esClient) { + this.esClient.close(); + } + } +} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/index.js b/x-pack/plugins/logstash/server/routes/cluster/index.ts old mode 100755 new mode 100644 similarity index 76% rename from x-pack/legacy/plugins/logstash/server/routes/api/cluster/index.js rename to x-pack/plugins/logstash/server/routes/cluster/index.ts index b129d8524b5731..c43c409cf5a17a --- a/x-pack/legacy/plugins/logstash/server/routes/api/cluster/index.js +++ b/x-pack/plugins/logstash/server/routes/cluster/index.ts @@ -3,5 +3,4 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -export { registerLogstashClusterRoutes } from './register_cluster_routes'; +export { registerClusterLoadRoute } from './load'; diff --git a/x-pack/plugins/logstash/server/routes/cluster/load.ts b/x-pack/plugins/logstash/server/routes/cluster/load.ts new file mode 100644 index 00000000000000..18fe21f3da6756 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/cluster/load.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IRouter } from 'src/core/server'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; +import { Cluster } from '../../models/cluster'; +import { checkLicense } from '../../lib/check_license'; + +export function registerClusterLoadRoute(router: IRouter) { + router.get( + { + path: '/api/logstash/cluster', + validate: false, + }, + wrapRouteWithLicenseCheck(checkLicense, async (context, request, response) => { + try { + const client = context.logstash!.esClient; + const info = await client.callAsCurrentUser('info'); + return response.ok({ + body: { + cluster: Cluster.fromUpstreamJSON(info).downstreamJSON, + }, + }); + } catch (err) { + if (err.status === 403) { + return response.ok(); + } + return response.internalError(); + } + }) + ); +} diff --git a/x-pack/plugins/logstash/server/routes/index.ts b/x-pack/plugins/logstash/server/routes/index.ts new file mode 100644 index 00000000000000..0c7183b4090551 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/index.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IRouter } from 'src/core/server'; +import { SecurityPluginSetup } from '../../../security/server'; +import { registerClusterLoadRoute } from './cluster'; +import { + registerPipelineDeleteRoute, + registerPipelineLoadRoute, + registerPipelineSaveRoute, +} from './pipeline'; +import { registerPipelinesListRoute, registerPipelinesDeleteRoute } from './pipelines'; +import { registerUpgradeRoute } from './upgrade'; + +export function registerRoutes(router: IRouter, security?: SecurityPluginSetup) { + registerClusterLoadRoute(router); + + registerPipelineDeleteRoute(router); + registerPipelineLoadRoute(router); + registerPipelineSaveRoute(router, security); + + registerPipelinesListRoute(router); + registerPipelinesDeleteRoute(router); + + registerUpgradeRoute(router); +} diff --git a/x-pack/plugins/logstash/server/routes/pipeline/delete.ts b/x-pack/plugins/logstash/server/routes/pipeline/delete.ts new file mode 100644 index 00000000000000..4aeae3e0ae2d5c --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/pipeline/delete.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema } from '@kbn/config-schema'; +import { IRouter } from 'src/core/server'; +import { INDEX_NAMES } from '../../../common/constants'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; + +import { checkLicense } from '../../lib/check_license'; + +export function registerPipelineDeleteRoute(router: IRouter) { + router.delete( + { + path: '/api/logstash/pipeline/{id}', + validate: { + params: schema.object({ + id: schema.string(), + }), + }, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + const client = context.logstash!.esClient; + + await client.callAsCurrentUser('delete', { + index: INDEX_NAMES.PIPELINES, + id: request.params.id, + refresh: 'wait_for', + }); + + return response.noContent(); + }) + ) + ); +} diff --git a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/index.js b/x-pack/plugins/logstash/server/routes/pipeline/index.ts old mode 100755 new mode 100644 similarity index 60% rename from x-pack/legacy/plugins/logstash/server/lib/error_wrappers/index.js rename to x-pack/plugins/logstash/server/routes/pipeline/index.ts index f275f156370912..e7db6e18ddaf32 --- a/x-pack/legacy/plugins/logstash/server/lib/error_wrappers/index.js +++ b/x-pack/plugins/logstash/server/routes/pipeline/index.ts @@ -3,7 +3,6 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -export { wrapCustomError } from './wrap_custom_error'; -export { wrapEsError } from './wrap_es_error'; -export { wrapUnknownError } from './wrap_unknown_error'; +export { registerPipelineDeleteRoute } from './delete'; +export { registerPipelineLoadRoute } from './load'; +export { registerPipelineSaveRoute } from './save'; diff --git a/x-pack/plugins/logstash/server/routes/pipeline/load.ts b/x-pack/plugins/logstash/server/routes/pipeline/load.ts new file mode 100644 index 00000000000000..fec9097114d261 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/pipeline/load.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema } from '@kbn/config-schema'; +import { IRouter } from 'src/core/server'; + +import { INDEX_NAMES } from '../../../common/constants'; +import { Pipeline } from '../../models/pipeline'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; +import { checkLicense } from '../../lib/check_license'; + +export function registerPipelineLoadRoute(router: IRouter) { + router.get( + { + path: '/api/logstash/pipeline/{id}', + validate: { + params: schema.object({ + id: schema.string(), + }), + }, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + const client = context.logstash!.esClient; + + const result = await client.callAsCurrentUser('get', { + index: INDEX_NAMES.PIPELINES, + id: request.params.id, + _source: ['description', 'username', 'pipeline', 'pipeline_settings'], + ignore: [404], + }); + + if (!result.found) { + return response.notFound(); + } + + return response.ok({ + body: Pipeline.fromUpstreamJSON(result).downstreamJSON, + }); + }) + ) + ); +} diff --git a/x-pack/plugins/logstash/server/routes/pipeline/save.ts b/x-pack/plugins/logstash/server/routes/pipeline/save.ts new file mode 100644 index 00000000000000..556c281944a856 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/pipeline/save.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema } from '@kbn/config-schema'; +import { i18n } from '@kbn/i18n'; +import { IRouter } from 'src/core/server'; + +import { INDEX_NAMES } from '../../../common/constants'; +import { Pipeline } from '../../models/pipeline'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; +import { SecurityPluginSetup } from '../../../../security/server'; +import { checkLicense } from '../../lib/check_license'; + +export function registerPipelineSaveRoute(router: IRouter, security?: SecurityPluginSetup) { + router.put( + { + path: '/api/logstash/pipeline/{id}', + validate: { + params: schema.object({ + id: schema.string(), + }), + body: schema.object({ + id: schema.string(), + description: schema.string(), + pipeline: schema.string(), + username: schema.string(), + settings: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }), + }, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + try { + let username: string | undefined; + if (security) { + const user = await security.authc.getCurrentUser(request); + username = user?.username; + } + + const client = context.logstash!.esClient; + const pipeline = Pipeline.fromDownstreamJSON(request.body, request.params.id, username); + + await client.callAsCurrentUser('index', { + index: INDEX_NAMES.PIPELINES, + id: pipeline.id, + body: pipeline.upstreamJSON, + refresh: 'wait_for', + }); + + return response.noContent(); + } catch (err) { + const statusCode = err.statusCode; + // handles the permissions issue of Elasticsearch + if (statusCode === 403) { + return response.forbidden({ + body: i18n.translate('xpack.logstash.insufficientUserPermissionsDescription', { + defaultMessage: 'Insufficient user permissions for managing Logstash pipelines', + }), + }); + } + throw err; + } + }) + ) + ); +} diff --git a/x-pack/plugins/logstash/server/routes/pipelines/delete.ts b/x-pack/plugins/logstash/server/routes/pipelines/delete.ts new file mode 100644 index 00000000000000..ac3097ac0424b4 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/pipelines/delete.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { schema } from '@kbn/config-schema'; +import { APICaller, IRouter } from 'src/core/server'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; + +import { INDEX_NAMES } from '../../../common/constants'; +import { checkLicense } from '../../lib/check_license'; + +async function deletePipelines(callWithRequest: APICaller, pipelineIds: string[]) { + const deletePromises = pipelineIds.map(pipelineId => { + return callWithRequest('delete', { + index: INDEX_NAMES.PIPELINES, + id: pipelineId, + refresh: 'wait_for', + }) + .then(success => ({ success })) + .catch(error => ({ error })); + }); + + const results = await Promise.all(deletePromises); + const successes = results.filter(result => Reflect.has(result, 'success')); + const errors = results.filter(result => Reflect.has(result, 'error')); + + return { + numSuccesses: successes.length, + numErrors: errors.length, + }; +} + +export function registerPipelinesDeleteRoute(router: IRouter) { + router.post( + { + path: '/api/logstash/pipelines/delete', + validate: { + body: schema.object({ + pipelineIds: schema.arrayOf(schema.string()), + }), + }, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + const client = context.logstash!.esClient; + const results = await deletePipelines(client.callAsCurrentUser, request.body.pipelineIds); + + return response.ok({ body: { results } }); + }) + ) + ); +} diff --git a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/index.js b/x-pack/plugins/logstash/server/routes/pipelines/index.ts old mode 100755 new mode 100644 similarity index 68% rename from x-pack/legacy/plugins/logstash/server/routes/api/pipeline/index.js rename to x-pack/plugins/logstash/server/routes/pipelines/index.ts index 643a405ced9198..36681502cfc707 --- a/x-pack/legacy/plugins/logstash/server/routes/api/pipeline/index.js +++ b/x-pack/plugins/logstash/server/routes/pipelines/index.ts @@ -3,5 +3,5 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -export { registerLogstashPipelineRoutes } from './register_pipeline_routes'; +export { registerPipelinesListRoute } from './list'; +export { registerPipelinesDeleteRoute } from './delete'; diff --git a/x-pack/plugins/logstash/server/routes/pipelines/list.ts b/x-pack/plugins/logstash/server/routes/pipelines/list.ts new file mode 100644 index 00000000000000..bc477a25a79883 --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/pipelines/list.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { i18n } from '@kbn/i18n'; +import { SearchResponse } from 'elasticsearch'; +import { APICaller, IRouter } from 'src/core/server'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; + +import { INDEX_NAMES, ES_SCROLL_SETTINGS } from '../../../common/constants'; +import { PipelineListItem } from '../../models/pipeline_list_item'; +import { fetchAllFromScroll } from '../../lib/fetch_all_from_scroll'; +import { checkLicense } from '../../lib/check_license'; + +async function fetchPipelines(callWithRequest: APICaller) { + const params = { + index: INDEX_NAMES.PIPELINES, + scroll: ES_SCROLL_SETTINGS.KEEPALIVE, + body: { + size: ES_SCROLL_SETTINGS.PAGE_SIZE, + }, + ignore: [404], + }; + + const response = await callWithRequest>('search', params); + return fetchAllFromScroll(response, callWithRequest); +} + +export function registerPipelinesListRoute(router: IRouter) { + router.get( + { + path: '/api/logstash/pipelines', + validate: false, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + try { + const client = context.logstash!.esClient; + const pipelinesHits = await fetchPipelines(client.callAsCurrentUser); + + const pipelines = pipelinesHits.map(pipeline => { + return PipelineListItem.fromUpstreamJSON(pipeline).downstreamJSON; + }); + + return response.ok({ body: { pipelines } }); + } catch (err) { + const statusCode = err.statusCode; + // handles the permissions issue of Elasticsearch + if (statusCode === 403) { + return response.forbidden({ + body: i18n.translate('xpack.logstash.insufficientUserPermissionsDescription', { + defaultMessage: 'Insufficient user permissions for managing Logstash pipelines', + }), + }); + } + throw err; + } + }) + ) + ); +} diff --git a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/index.js b/x-pack/plugins/logstash/server/routes/upgrade/index.ts old mode 100755 new mode 100644 similarity index 76% rename from x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/index.js rename to x-pack/plugins/logstash/server/routes/upgrade/index.ts index 0743e443955f45..3a5b0868b446b5 --- a/x-pack/legacy/plugins/logstash/server/lib/license_pre_routing_factory/index.js +++ b/x-pack/plugins/logstash/server/routes/upgrade/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { licensePreRoutingFactory } from './license_pre_routing_factory'; +export { registerUpgradeRoute } from './upgrade'; diff --git a/x-pack/plugins/logstash/server/routes/upgrade/upgrade.ts b/x-pack/plugins/logstash/server/routes/upgrade/upgrade.ts new file mode 100644 index 00000000000000..2bd2c0f89e190f --- /dev/null +++ b/x-pack/plugins/logstash/server/routes/upgrade/upgrade.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IRouter } from 'src/core/server'; +import { wrapRouteWithLicenseCheck } from '../../../../licensing/server'; + +import { INDEX_NAMES } from '../../../common/constants'; +import { checkLicense } from '../../lib/check_license'; + +export function registerUpgradeRoute(router: IRouter) { + router.post( + { + path: '/api/logstash/upgrade', + validate: false, + }, + wrapRouteWithLicenseCheck( + checkLicense, + router.handleLegacyErrors(async (context, request, response) => { + const client = context.logstash!.esClient; + + const doesIndexExist = await client.callAsCurrentUser('indices.exists', { + index: INDEX_NAMES.PIPELINES, + }); + + // If index doesn't exist yet, there is no mapping to upgrade + if (doesIndexExist) { + await client.callAsCurrentUser('indices.putMapping', { + index: INDEX_NAMES.PIPELINES, + body: { + properties: { + pipeline_settings: { + dynamic: false, + type: 'object', + }, + }, + }, + }); + } + + return response.ok({ body: { is_upgraded: true } }); + }) + ) + ); +} diff --git a/x-pack/plugins/logstash/server/types.ts b/x-pack/plugins/logstash/server/types.ts new file mode 100644 index 00000000000000..2b266b2f277089 --- /dev/null +++ b/x-pack/plugins/logstash/server/types.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { SearchResponse } from 'elasticsearch'; +import { IScopedClusterClient } from 'src/core/server'; + +type UnwrapArray = T extends Array ? U : never; + +export type Hits = SearchResponse['hits']['hits']; +export type Hit = UnwrapArray; + +export interface PipelineListItemOptions { + id: string; + description: string; + last_modified: string; + username: string; +} + +declare module 'src/core/server' { + interface RequestHandlerContext { + logstash?: { + esClient: IScopedClusterClient; + }; + } +} diff --git a/x-pack/plugins/security/common/licensing/license_service.test.ts b/x-pack/plugins/security/common/licensing/license_service.test.ts index dfc94042ef930d..5bdfa7d4886aac 100644 --- a/x-pack/plugins/security/common/licensing/license_service.test.ts +++ b/x-pack/plugins/security/common/licensing/license_service.test.ts @@ -78,14 +78,14 @@ describe('license features', function() { expect(subscriptionHandler.mock.calls[1]).toMatchInlineSnapshot(` Array [ Object { - "allowLogin": false, - "allowRbac": false, - "allowRoleDocumentLevelSecurity": false, - "allowRoleFieldLevelSecurity": false, - "allowSubFeaturePrivileges": false, - "showLinks": false, - "showLogin": false, - "showRoleMappingsManagement": false, + "allowLogin": true, + "allowRbac": true, + "allowRoleDocumentLevelSecurity": true, + "allowRoleFieldLevelSecurity": true, + "allowSubFeaturePrivileges": true, + "showLinks": true, + "showLogin": true, + "showRoleMappingsManagement": true, }, ] `); diff --git a/x-pack/test/api_integration/apis/logstash/cluster/index.js b/x-pack/test/api_integration/apis/logstash/cluster/index.ts similarity index 71% rename from x-pack/test/api_integration/apis/logstash/cluster/index.js rename to x-pack/test/api_integration/apis/logstash/cluster/index.ts index f016fde97ee4b8..1d4fbd40b252b7 100644 --- a/x-pack/test/api_integration/apis/logstash/cluster/index.js +++ b/x-pack/test/api_integration/apis/logstash/cluster/index.ts @@ -3,8 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ loadTestFile }) { +export default function({ loadTestFile }: FtrProviderContext) { describe('cluster', () => { loadTestFile(require.resolve('./load')); }); diff --git a/x-pack/test/api_integration/apis/logstash/cluster/load.js b/x-pack/test/api_integration/apis/logstash/cluster/load.ts similarity index 83% rename from x-pack/test/api_integration/apis/logstash/cluster/load.js rename to x-pack/test/api_integration/apis/logstash/cluster/load.ts index a348c6e4857b14..0678c5faf82dcf 100644 --- a/x-pack/test/api_integration/apis/logstash/cluster/load.js +++ b/x-pack/test/api_integration/apis/logstash/cluster/load.ts @@ -5,8 +5,9 @@ */ import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ getService }) { +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('legacyEs'); diff --git a/x-pack/test/api_integration/apis/logstash/index.js b/x-pack/test/api_integration/apis/logstash/index.ts similarity index 76% rename from x-pack/test/api_integration/apis/logstash/index.js rename to x-pack/test/api_integration/apis/logstash/index.ts index 53293e5ff94237..582bef5a53bf24 100644 --- a/x-pack/test/api_integration/apis/logstash/index.js +++ b/x-pack/test/api_integration/apis/logstash/index.ts @@ -3,8 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { FtrProviderContext } from '../../ftr_provider_context'; -export default function({ loadTestFile }) { +export default function({ loadTestFile }: FtrProviderContext) { describe('logstash', () => { loadTestFile(require.resolve('./pipelines')); loadTestFile(require.resolve('./pipeline')); diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/delete.js b/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts similarity index 90% rename from x-pack/test/api_integration/apis/logstash/pipeline/delete.js rename to x-pack/test/api_integration/apis/logstash/pipeline/delete.ts index 85813f4ed04d16..cdbf5a3e6a1fea 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/delete.js +++ b/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts @@ -3,8 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ getService }) { +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); describe('delete', () => { diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/index.js b/x-pack/test/api_integration/apis/logstash/pipeline/index.ts similarity index 76% rename from x-pack/test/api_integration/apis/logstash/pipeline/index.js rename to x-pack/test/api_integration/apis/logstash/pipeline/index.ts index dcc8a01378e371..2697f7f428f5f4 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/index.js +++ b/x-pack/test/api_integration/apis/logstash/pipeline/index.ts @@ -3,8 +3,8 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -export default function({ loadTestFile }) { +import { FtrProviderContext } from '../../../ftr_provider_context'; +export default function({ loadTestFile }: FtrProviderContext) { describe('pipeline', () => { loadTestFile(require.resolve('./load')); loadTestFile(require.resolve('./save')); diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/load.js b/x-pack/test/api_integration/apis/logstash/pipeline/load.ts similarity index 82% rename from x-pack/test/api_integration/apis/logstash/pipeline/load.js rename to x-pack/test/api_integration/apis/logstash/pipeline/load.ts index eb2ab6500a9dc6..a892f527a6e61b 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/load.js +++ b/x-pack/test/api_integration/apis/logstash/pipeline/load.ts @@ -5,9 +5,11 @@ */ import expect from '@kbn/expect'; -import pipeline from './fixtures/load'; +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ getService }) { +import pipeline from './fixtures/load.json'; + +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); describe('list', () => { diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/save.js b/x-pack/test/api_integration/apis/logstash/pipeline/save.ts similarity index 90% rename from x-pack/test/api_integration/apis/logstash/pipeline/save.js rename to x-pack/test/api_integration/apis/logstash/pipeline/save.ts index ad35ee21f00fc4..2ca9fbe7d68e00 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/save.js +++ b/x-pack/test/api_integration/apis/logstash/pipeline/save.ts @@ -5,8 +5,9 @@ */ import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ getService }) { +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); describe('save', () => { diff --git a/x-pack/test/api_integration/apis/logstash/pipelines/delete.js b/x-pack/test/api_integration/apis/logstash/pipelines/delete.ts similarity index 90% rename from x-pack/test/api_integration/apis/logstash/pipelines/delete.js rename to x-pack/test/api_integration/apis/logstash/pipelines/delete.ts index 98ff5b99ea7442..e71dc7f08ddc9a 100644 --- a/x-pack/test/api_integration/apis/logstash/pipelines/delete.js +++ b/x-pack/test/api_integration/apis/logstash/pipelines/delete.ts @@ -3,8 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ getService }) { +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); describe('delete', () => { diff --git a/x-pack/test/api_integration/apis/logstash/pipelines/index.js b/x-pack/test/api_integration/apis/logstash/pipelines/index.ts similarity index 73% rename from x-pack/test/api_integration/apis/logstash/pipelines/index.js rename to x-pack/test/api_integration/apis/logstash/pipelines/index.ts index 3abe2ee5ac43df..510bd625b54a07 100644 --- a/x-pack/test/api_integration/apis/logstash/pipelines/index.js +++ b/x-pack/test/api_integration/apis/logstash/pipelines/index.ts @@ -3,8 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { FtrProviderContext } from '../../../ftr_provider_context'; -export default function({ loadTestFile }) { +export default function({ loadTestFile }: FtrProviderContext) { describe('pipelines', () => { loadTestFile(require.resolve('./list')); loadTestFile(require.resolve('./delete')); diff --git a/x-pack/test/api_integration/apis/logstash/pipelines/list.js b/x-pack/test/api_integration/apis/logstash/pipelines/list.ts similarity index 82% rename from x-pack/test/api_integration/apis/logstash/pipelines/list.js rename to x-pack/test/api_integration/apis/logstash/pipelines/list.ts index fe5c3222a2ab14..a4ef52791ab70d 100644 --- a/x-pack/test/api_integration/apis/logstash/pipelines/list.js +++ b/x-pack/test/api_integration/apis/logstash/pipelines/list.ts @@ -5,9 +5,10 @@ */ import expect from '@kbn/expect'; -import pipelineList from './fixtures/list'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import pipelineList from './fixtures/list.json'; -export default function({ getService }) { +export default function({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); describe('list', () => { From c2f2a79acb5037078022d939742ed6630b41cca2 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Tue, 14 Apr 2020 09:01:41 -0700 Subject: [PATCH 47/65] [Metrics UI] Refactor With* containers to hooks (#59503) * [Metrics UI] Refactor containers to hooks * clean up depends; move useInterval out of useWaffleTime; * converting WithWaffleFilters to useWaffleFilters * Removing WithWaffleOptions * Refactor WithWaffleViewState to useWaffleViewState * Removing obsolete files * Fixing race condition with complext state * Adding undefined to RisonValue; unwinding changes trying to work around bad type * Switching to context * Change assertion to ignore the length of the current URL * Fixing test frameork to accept urls longer then 230 characters * Fixes #59395; Refactor WithMetricsTime to hook; Fixes brushing on metric detail page; fixes refresh button on metric detail page * Fixing tests with adding timeRange Co-authored-by: Elastic Machine --- test/functional/page_objects/common_page.ts | 24 +- test/typings/rison_node.d.ts | 2 +- typings/rison_node.d.ts | 2 +- .../infra/common/http_api/metadata_api.ts | 4 + .../inventory_models/aws_ec2/layout.tsx | 3 +- .../inventory_models/aws_rds/layout.tsx | 3 +- .../common/inventory_models/aws_s3/layout.tsx | 3 +- .../inventory_models/aws_sqs/layout.tsx | 3 +- .../inventory_models/container/layout.tsx | 3 +- .../common/inventory_models/host/layout.tsx | 8 +- .../common/inventory_models/pod/layout.tsx | 5 +- .../inventory_models/shared/layouts/aws.tsx | 3 +- .../inventory_models/shared/layouts/nginx.tsx | 9 +- .../common/saved_objects/inventory_view.ts | 10 +- .../plugins/infra/public/apps/start_app.tsx | 33 +-- .../public/components/inventory/layout.tsx | 105 ++++--- .../inventory/toolbars/save_views.tsx | 21 ++ .../components/inventory/toolbars/toolbar.tsx | 42 +-- .../inventory/toolbars/toolbar_wrapper.tsx | 74 +++-- .../components/nodes_overview/index.tsx | 6 +- .../infra/public/components/waffle/legend.tsx | 32 ++- .../waffle/lib/create_uptime_link.test.ts | 8 +- .../components/waffle/lib/type_guards.ts | 12 +- .../waffle/waffle_inventory_switcher.tsx | 35 +-- .../waffle/waffle_time_controls.tsx | 128 ++++----- .../containers/metadata/use_metadata.ts | 6 +- .../infra/public/containers/waffle/index.ts | 7 - .../waffle/waffle_nodes.gql_query.ts | 37 --- .../containers/waffle/with_waffle_filters.tsx | 96 ------- .../containers/waffle/with_waffle_options.tsx | 265 ------------------ .../containers/waffle/with_waffle_time.tsx | 96 ------- .../waffle/with_waffle_view_state.tsx | 145 ---------- .../infra/public/containers/with_options.tsx | 4 +- x-pack/plugins/infra/public/lib/lib.ts | 9 +- .../public/pages/infrastructure/index.tsx | 172 ++++++------ .../pages/infrastructure/snapshot/index.tsx | 11 +- .../infrastructure/snapshot/page_content.tsx | 68 ----- .../pages/infrastructure/snapshot/toolbar.tsx | 76 +---- .../inventory_view/compontents/search_bar.tsx | 40 +++ .../hooks/use_waffle_filters.ts | 93 ++++++ .../hooks/use_waffle_options.ts | 147 ++++++++++ .../inventory_view/hooks/use_waffle_time.ts | 76 +++++ .../hooks/use_waffle_view_state.ts | 95 +++++++ .../redirect_to_host_detail_via_ip.tsx | 2 +- .../pages/link_to/redirect_to_node_detail.tsx | 2 +- .../metrics/components/node_details_page.tsx | 4 +- .../pages/metrics/components/page_body.tsx | 8 +- .../pages/metrics/components/section.tsx | 3 + .../metrics/components/time_controls.test.tsx | 2 +- .../metrics/components/time_controls.tsx | 6 +- .../metrics/containers/metrics.gql_query.ts | 38 --- .../metrics/containers/with_metrics_time.tsx | 201 ------------- .../metrics_time.test.tsx | 2 +- .../pages/metrics/hooks/use_metrics_time.ts | 121 ++++++++ .../infra/public/pages/metrics/index.tsx | 101 ++++--- .../public/pages/metrics/page_providers.tsx | 6 +- .../infra/public/pages/metrics/types.ts | 2 +- x-pack/plugins/infra/public/store/actions.ts | 7 - x-pack/plugins/infra/public/store/epics.ts | 11 - x-pack/plugins/infra/public/store/index.ts | 11 - .../infra/public/store/local/actions.ts | 9 - .../plugins/infra/public/store/local/epic.ts | 11 - .../plugins/infra/public/store/local/index.ts | 10 - .../infra/public/store/local/reducer.ts | 33 --- .../infra/public/store/local/selectors.ts | 26 -- .../store/local/waffle_filter/actions.ts | 19 -- .../public/store/local/waffle_filter/index.ts | 11 - .../store/local/waffle_filter/reducer.ts | 43 --- .../store/local/waffle_filter/selectors.ts | 33 --- .../store/local/waffle_options/actions.ts | 29 -- .../store/local/waffle_options/index.ts | 11 - .../store/local/waffle_options/reducer.ts | 113 -------- .../store/local/waffle_options/selector.ts | 18 -- .../public/store/local/waffle_time/actions.ts | 15 - .../public/store/local/waffle_time/epic.ts | 38 --- .../public/store/local/waffle_time/index.ts | 12 - .../public/store/local/waffle_time/reducer.ts | 52 ---- .../store/local/waffle_time/selectors.ts | 23 -- x-pack/plugins/infra/public/store/reducer.ts | 21 -- .../plugins/infra/public/store/selectors.ts | 22 -- x-pack/plugins/infra/public/store/store.ts | 50 ---- .../infra/public/utils/redux_context.tsx | 16 -- .../infra/server/routes/metadata/index.ts | 13 +- .../metadata/lib/get_cloud_metric_metadata.ts | 16 +- .../metadata/lib/get_metric_metadata.ts | 12 +- .../api_integration/apis/infra/metadata.ts | 30 ++ x-pack/typings/rison_node.d.ts | 2 +- 87 files changed, 1087 insertions(+), 2149 deletions(-) create mode 100644 x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx delete mode 100644 x-pack/plugins/infra/public/containers/waffle/index.ts delete mode 100644 x-pack/plugins/infra/public/containers/waffle/waffle_nodes.gql_query.ts delete mode 100644 x-pack/plugins/infra/public/containers/waffle/with_waffle_filters.tsx delete mode 100644 x-pack/plugins/infra/public/containers/waffle/with_waffle_options.tsx delete mode 100644 x-pack/plugins/infra/public/containers/waffle/with_waffle_time.tsx delete mode 100644 x-pack/plugins/infra/public/containers/waffle/with_waffle_view_state.tsx delete mode 100644 x-pack/plugins/infra/public/pages/infrastructure/snapshot/page_content.tsx create mode 100644 x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx create mode 100644 x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts create mode 100644 x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts create mode 100644 x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts create mode 100644 x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts delete mode 100644 x-pack/plugins/infra/public/pages/metrics/containers/metrics.gql_query.ts delete mode 100644 x-pack/plugins/infra/public/pages/metrics/containers/with_metrics_time.tsx rename x-pack/plugins/infra/public/pages/metrics/{containers => hooks}/metrics_time.test.tsx (96%) create mode 100644 x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts delete mode 100644 x-pack/plugins/infra/public/store/actions.ts delete mode 100644 x-pack/plugins/infra/public/store/epics.ts delete mode 100644 x-pack/plugins/infra/public/store/index.ts delete mode 100644 x-pack/plugins/infra/public/store/local/actions.ts delete mode 100644 x-pack/plugins/infra/public/store/local/epic.ts delete mode 100644 x-pack/plugins/infra/public/store/local/index.ts delete mode 100644 x-pack/plugins/infra/public/store/local/reducer.ts delete mode 100644 x-pack/plugins/infra/public/store/local/selectors.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_filter/actions.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_filter/index.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_filter/reducer.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_filter/selectors.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_options/actions.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_options/index.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_options/reducer.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_options/selector.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_time/actions.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_time/epic.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_time/index.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_time/reducer.ts delete mode 100644 x-pack/plugins/infra/public/store/local/waffle_time/selectors.ts delete mode 100644 x-pack/plugins/infra/public/store/reducer.ts delete mode 100644 x-pack/plugins/infra/public/store/selectors.ts delete mode 100644 x-pack/plugins/infra/public/store/store.ts delete mode 100644 x-pack/plugins/infra/public/utils/redux_context.tsx diff --git a/test/functional/page_objects/common_page.ts b/test/functional/page_objects/common_page.ts index f06baeb7a4167b..862e5127bb6704 100644 --- a/test/functional/page_objects/common_page.ts +++ b/test/functional/page_objects/common_page.ts @@ -247,25 +247,11 @@ export function CommonPageProvider({ getService, getPageObjects }: FtrProviderCo } currentUrl = (await browser.getCurrentUrl()).replace(/\/\/\w+:\w+@/, '//'); - const maxAdditionalLengthOnNavUrl = 230; - - // On several test failures at the end of the TileMap test we try to navigate back to - // Visualize so we can create the next Vertical Bar Chart, but we can see from the - // logging and the screenshot that it's still on the TileMap page. Why didn't the "get" - // with a new timestamped URL go? I thought that sleep(700) between the get and the - // refresh would solve the problem but didn't seem to always work. - // So this hack fails the navSuccessful check if the currentUrl doesn't match the - // appUrl plus up to 230 other chars. - // Navigating to Settings when there is a default index pattern has a URL length of 196 - // (from debug output). Some other tabs may also be long. But a rather simple configured - // visualization is about 1000 chars long. So at least we catch that case. - - // Browsers don't show the ':port' if it's 80 or 443 so we have to - // remove that part so we can get a match in the tests. - const navSuccessful = new RegExp( - appUrl.replace(':80/', '/').replace(':443/', '/') + - `.{0,${maxAdditionalLengthOnNavUrl}}$` - ).test(currentUrl); + + const navSuccessful = currentUrl + .replace(':80/', '/') + .replace(':443/', '/') + .startsWith(appUrl); if (!navSuccessful) { const msg = `App failed to load: ${appName} in ${defaultFindTimeout}ms appUrl=${appUrl} currentUrl=${currentUrl}`; diff --git a/test/typings/rison_node.d.ts b/test/typings/rison_node.d.ts index 2592c36e8ae9a5..a0497f421c3fe2 100644 --- a/test/typings/rison_node.d.ts +++ b/test/typings/rison_node.d.ts @@ -18,7 +18,7 @@ */ declare module 'rison-node' { - export type RisonValue = null | boolean | number | string | RisonObject | RisonArray; + export type RisonValue = undefined | null | boolean | number | string | RisonObject | RisonArray; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface RisonArray extends Array {} diff --git a/typings/rison_node.d.ts b/typings/rison_node.d.ts index 2592c36e8ae9a5..a0497f421c3fe2 100644 --- a/typings/rison_node.d.ts +++ b/typings/rison_node.d.ts @@ -18,7 +18,7 @@ */ declare module 'rison-node' { - export type RisonValue = null | boolean | number | string | RisonObject | RisonArray; + export type RisonValue = undefined | null | boolean | number | string | RisonObject | RisonArray; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface RisonArray extends Array {} diff --git a/x-pack/plugins/infra/common/http_api/metadata_api.ts b/x-pack/plugins/infra/common/http_api/metadata_api.ts index 7fc3c3e876f086..5ee96b479be8ee 100644 --- a/x-pack/plugins/infra/common/http_api/metadata_api.ts +++ b/x-pack/plugins/infra/common/http_api/metadata_api.ts @@ -11,6 +11,10 @@ export const InfraMetadataRequestRT = rt.type({ nodeId: rt.string, nodeType: ItemTypeRT, sourceId: rt.string, + timeRange: rt.type({ + from: rt.number, + to: rt.number, + }), }); export const InfraMetadataFeatureRT = rt.type({ diff --git a/x-pack/plugins/infra/common/inventory_models/aws_ec2/layout.tsx b/x-pack/plugins/infra/common/inventory_models/aws_ec2/layout.tsx index c8e0680287526f..68bfe41fd538e6 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_ec2/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_ec2/layout.tsx @@ -20,7 +20,7 @@ import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { MetadataDetails } from '../../../public/pages/metrics/components/metadata_details'; -export const Layout = withTheme(({ metrics, theme }: LayoutPropsWithTheme) => ( +export const Layout = withTheme(({ metrics, theme, onChangeRangeTime }: LayoutPropsWithTheme) => ( ( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( @@ -40,6 +40,7 @@ export const Layout = withTheme(({ metrics, theme }: LayoutPropsWithTheme) => ( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( ( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( />
- - + +
)); diff --git a/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx b/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx index 43b95d73f6d955..8bc2f3ee8b4b31 100644 --- a/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx @@ -23,7 +23,7 @@ import { MetadataDetails } from '../../../public/pages/metrics/components/metada // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; -export const Layout = withTheme(({ metrics, theme }: LayoutPropsWithTheme) => ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( @@ -38,6 +38,7 @@ export const Layout = withTheme(({ metrics, theme }: LayoutPropsWithTheme) => ( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( />
- +
)); diff --git a/x-pack/plugins/infra/common/inventory_models/shared/layouts/aws.tsx b/x-pack/plugins/infra/common/inventory_models/shared/layouts/aws.tsx index fba48c4224e6b2..7a0b898d406ce7 100644 --- a/x-pack/plugins/infra/common/inventory_models/shared/layouts/aws.tsx +++ b/x-pack/plugins/infra/common/inventory_models/shared/layouts/aws.tsx @@ -18,7 +18,7 @@ import { ChartSectionVis } from '../../../../public/pages/metrics/components/cha // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../../observability/public'; -export const Layout = withTheme(({ metrics, theme }: LayoutPropsWithTheme) => ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => (
( } )} metrics={metrics} + onChangeRangeTime={onChangeRangeTime} > ( +export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( -
+
{ const [darkMode] = useUiSetting$('theme:darkMode'); @@ -56,19 +45,15 @@ export async function startApp( - - - - - - - - - - - - - + + + + + + + + + diff --git a/x-pack/plugins/infra/public/components/inventory/layout.tsx b/x-pack/plugins/infra/public/components/inventory/layout.tsx index 4dd9803c7bfce0..3c91f9fa5946fc 100644 --- a/x-pack/plugins/infra/public/components/inventory/layout.tsx +++ b/x-pack/plugins/infra/public/components/inventory/layout.tsx @@ -5,64 +5,89 @@ */ import React from 'react'; -import { InfraWaffleMapOptions, InfraWaffleMapBounds } from '../../lib/lib'; -import { KueryFilterQuery } from '../../store/local/waffle_filter'; +import { useInterval } from 'react-use'; +import { euiPaletteColorBlind } from '@elastic/eui'; import { NodesOverview } from '../nodes_overview'; import { Toolbar } from './toolbars/toolbar'; import { PageContent } from '../page'; import { useSnapshot } from '../../containers/waffle/use_snaphot'; import { useInventoryMeta } from '../../containers/inventory_metadata/use_inventory_meta'; -import { SnapshotMetricInput, SnapshotGroupBy } from '../../../common/http_api/snapshot_api'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { useWaffleTimeContext } from '../../pages/inventory_view/hooks/use_waffle_time'; +import { useWaffleFiltersContext } from '../../pages/inventory_view/hooks/use_waffle_filters'; +import { useWaffleOptionsContext } from '../../pages/inventory_view/hooks/use_waffle_options'; +import { useSourceContext } from '../../containers/source'; +import { InfraFormatterType, InfraWaffleMapGradientLegend } from '../../lib/lib'; -export interface LayoutProps { - options: InfraWaffleMapOptions; - nodeType: InventoryItemType; - onDrilldown: (filter: KueryFilterQuery) => void; - currentTime: number; - onViewChange: (view: string) => void; - view: string; - boundsOverride: InfraWaffleMapBounds; - autoBounds: boolean; +const euiVisColorPalette = euiPaletteColorBlind(); - filterQuery: string | null | undefined; - metric: SnapshotMetricInput; - groupBy: SnapshotGroupBy; - sourceId: string; - accountId: string; - region: string; -} - -export const Layout = (props: LayoutProps) => { - const { accounts, regions } = useInventoryMeta(props.sourceId, props.nodeType); +export const Layout = () => { + const { sourceId, source } = useSourceContext(); + const { + metric, + groupBy, + nodeType, + accountId, + region, + changeView, + view, + autoBounds, + boundsOverride, + } = useWaffleOptionsContext(); + const { accounts, regions } = useInventoryMeta(sourceId, nodeType); + const { currentTime, jumpToTime, isAutoReloading } = useWaffleTimeContext(); + const { filterQueryAsJson, applyFilterQuery } = useWaffleFiltersContext(); const { loading, nodes, reload, interval } = useSnapshot( - props.filterQuery, - props.metric, - props.groupBy, - props.nodeType, - props.sourceId, - props.currentTime, - props.accountId, - props.region + filterQueryAsJson, + metric, + groupBy, + nodeType, + sourceId, + currentTime, + accountId, + region + ); + + const options = { + formatter: InfraFormatterType.percent, + formatTemplate: '{{value}}', + legend: { + type: 'gradient', + rules: [ + { value: 0, color: '#D3DAE6' }, + { value: 1, color: euiVisColorPalette[1] }, + ], + } as InfraWaffleMapGradientLegend, + metric, + fields: source?.configuration?.fields, + groupBy, + }; + + useInterval( + () => { + if (!loading) { + jumpToTime(Date.now()); + } + }, + isAutoReloading ? 5000 : null ); return ( <> - + diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx b/x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx new file mode 100644 index 00000000000000..cb315d3e17b032 --- /dev/null +++ b/x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { SavedViewsToolbarControls } from '../../saved_views/toolbar_control'; +import { inventoryViewSavedObjectType } from '../../../../common/saved_objects/inventory_view'; +import { useWaffleViewState } from '../../../pages/inventory_view/hooks/use_waffle_view_state'; + +export const SavedViews = () => { + const { viewState, defaultViewState, onViewChange } = useWaffleViewState(); + return ( + + ); +}; diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx b/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx index c59ab994a018ce..63ab6d2f4465a4 100644 --- a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx +++ b/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx @@ -5,7 +5,6 @@ */ import React, { FunctionComponent } from 'react'; -import { Action } from 'typescript-fsa'; import { EuiFlexItem } from '@elastic/eui'; import { SnapshotMetricInput, @@ -16,33 +15,23 @@ import { InventoryCloudAccount } from '../../../../common/http_api/inventory_met import { findToolbar } from '../../../../common/inventory_models/toolbars'; import { ToolbarWrapper } from './toolbar_wrapper'; -import { waffleOptionsSelectors } from '../../../store'; import { InfraGroupByOptions } from '../../../lib/lib'; -import { WithWaffleViewState } from '../../../containers/waffle/with_waffle_view_state'; -import { SavedViewsToolbarControls } from '../../saved_views/toolbar_control'; -import { inventoryViewSavedObjectType } from '../../../../common/saved_objects/inventory_view'; import { IIndexPattern } from '../../../../../../../src/plugins/data/public'; import { InventoryItemType } from '../../../../common/inventory_models/types'; +import { WaffleOptionsState } from '../../../pages/inventory_view/hooks/use_waffle_options'; +import { SavedViews } from './save_views'; -export interface ToolbarProps { +export interface ToolbarProps + extends Omit { createDerivedIndexPattern: (type: 'logs' | 'metrics' | 'both') => IIndexPattern; - changeMetric: (payload: SnapshotMetricInput) => Action; - changeGroupBy: (payload: SnapshotGroupBy) => Action; - changeCustomOptions: (payload: InfraGroupByOptions[]) => Action; - changeAccount: (id: string) => Action; - changeRegion: (name: string) => Action; - customOptions: ReturnType; - groupBy: ReturnType; - metric: ReturnType; - nodeType: ReturnType; - accountId: ReturnType; - region: ReturnType; + changeMetric: (payload: SnapshotMetricInput) => void; + changeGroupBy: (payload: SnapshotGroupBy) => void; + changeCustomOptions: (payload: InfraGroupByOptions[]) => void; + changeAccount: (id: string) => void; + changeRegion: (name: string) => void; accounts: InventoryCloudAccount[]; regions: string[]; - customMetrics: ReturnType; - changeCustomMetrics: ( - payload: SnapshotCustomMetricInput[] - ) => Action; + changeCustomMetrics: (payload: SnapshotCustomMetricInput[]) => void; } const wrapToolbarItems = ( @@ -57,16 +46,7 @@ const wrapToolbarItems = ( - - {({ defaultViewState, viewState, onViewChange }) => ( - - )} - + )} diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx b/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx index 735539d063b01c..fefda94372cfb4 100644 --- a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx +++ b/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx @@ -8,58 +8,52 @@ import React from 'react'; import { EuiFlexGroup } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { SnapshotMetricType } from '../../../../common/inventory_models/types'; -import { WithSource } from '../../../containers/with_source'; -import { WithWaffleOptions } from '../../../containers/waffle/with_waffle_options'; import { Toolbar } from '../../eui/toolbar'; import { ToolbarProps } from './toolbar'; import { fieldToName } from '../../waffle/lib/field_to_display_name'; +import { useSourceContext } from '../../../containers/source'; +import { useWaffleOptionsContext } from '../../../pages/inventory_view/hooks/use_waffle_options'; interface Props { children: (props: Omit) => React.ReactElement; } export const ToolbarWrapper = (props: Props) => { + const { + changeMetric, + changeGroupBy, + changeCustomOptions, + changeAccount, + changeRegion, + customOptions, + groupBy, + metric, + nodeType, + accountId, + region, + customMetrics, + changeCustomMetrics, + } = useWaffleOptionsContext(); + const { createDerivedIndexPattern } = useSourceContext(); return ( - - {({ createDerivedIndexPattern }) => ( - - {({ - changeMetric, - changeGroupBy, - changeCustomOptions, - changeAccount, - changeRegion, - customOptions, - groupBy, - metric, - nodeType, - accountId, - region, - customMetrics, - changeCustomMetrics, - }) => - props.children({ - createDerivedIndexPattern, - changeMetric, - changeGroupBy, - changeAccount, - changeRegion, - changeCustomOptions, - customOptions, - groupBy, - metric, - nodeType, - region, - accountId, - customMetrics, - changeCustomMetrics, - }) - } - - )} - + {props.children({ + createDerivedIndexPattern, + changeMetric, + changeGroupBy, + changeAccount, + changeRegion, + changeCustomOptions, + customOptions, + groupBy, + metric, + nodeType, + region, + accountId, + customMetrics, + changeCustomMetrics, + })} ); diff --git a/x-pack/plugins/infra/public/components/nodes_overview/index.tsx b/x-pack/plugins/infra/public/components/nodes_overview/index.tsx index 4d61568a63b9ff..ef22e0486f8921 100644 --- a/x-pack/plugins/infra/public/components/nodes_overview/index.tsx +++ b/x-pack/plugins/infra/public/components/nodes_overview/index.tsx @@ -12,7 +12,6 @@ import React from 'react'; import { euiStyled } from '../../../../observability/public'; import { InfraFormatterType, InfraWaffleMapBounds, InfraWaffleMapOptions } from '../../lib/lib'; -import { KueryFilterQuery } from '../../store/local/waffle_filter'; import { createFormatter } from '../../utils/formatters'; import { NoData } from '../empty_states'; import { InfraLoadingPanel } from '../loading'; @@ -24,6 +23,11 @@ import { convertIntervalToString } from '../../utils/convert_interval_to_string' import { InventoryItemType } from '../../../common/inventory_models/types'; import { createFormatterForMetric } from '../metrics_explorer/helpers/create_formatter_for_metric'; +export interface KueryFilterQuery { + kind: 'kuery'; + expression: string; +} + interface Props { options: InfraWaffleMapOptions; nodeType: InventoryItemType; diff --git a/x-pack/plugins/infra/public/components/waffle/legend.tsx b/x-pack/plugins/infra/public/components/waffle/legend.tsx index de070efb35a1f7..13e533b225d4df 100644 --- a/x-pack/plugins/infra/public/components/waffle/legend.tsx +++ b/x-pack/plugins/infra/public/components/waffle/legend.tsx @@ -6,12 +6,12 @@ import React from 'react'; import { euiStyled } from '../../../../observability/public'; -import { WithWaffleOptions } from '../../containers/waffle/with_waffle_options'; import { InfraFormatter, InfraWaffleMapBounds, InfraWaffleMapLegend } from '../../lib/lib'; import { GradientLegend } from './gradient_legend'; import { LegendControls } from './legend_controls'; import { isInfraWaffleMapGradientLegend, isInfraWaffleMapStepLegend } from './lib/type_guards'; import { StepLegend } from './steps_legend'; +import { useWaffleOptionsContext } from '../../pages/inventory_view/hooks/use_waffle_options'; interface Props { legend: InfraWaffleMapLegend; bounds: InfraWaffleMapBounds; @@ -25,22 +25,24 @@ interface LegendControlOptions { } export const Legend: React.FC = ({ dataBounds, legend, bounds, formatter }) => { + const { + changeBoundsOverride, + changeAutoBounds, + autoBounds, + boundsOverride, + } = useWaffleOptionsContext(); return ( - - {({ changeBoundsOverride, changeAutoBounds, autoBounds, boundsOverride }) => ( - { - changeBoundsOverride(options.bounds); - changeAutoBounds(options.auto); - }} - /> - )} - + { + changeBoundsOverride(options.bounds); + changeAutoBounds(options.auto); + }} + /> {isInfraWaffleMapGradientLegend(legend) && ( )} diff --git a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts b/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts index 18e5838a15b563..902969c83ba393 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts +++ b/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts @@ -5,11 +5,7 @@ */ import { createUptimeLink } from './create_uptime_link'; -import { - InfraWaffleMapOptions, - InfraWaffleMapLegendMode, - InfraFormatterType, -} from '../../../lib/lib'; +import { InfraWaffleMapOptions, InfraFormatterType } from '../../../lib/lib'; import { SnapshotMetricType } from '../../../../common/inventory_models/types'; const options: InfraWaffleMapOptions = { @@ -26,7 +22,7 @@ const options: InfraWaffleMapOptions = { metric: { type: 'cpu' }, groupBy: [], legend: { - type: InfraWaffleMapLegendMode.gradient, + type: 'gradient', rules: [], }, }; diff --git a/x-pack/plugins/infra/public/components/waffle/lib/type_guards.ts b/x-pack/plugins/infra/public/components/waffle/lib/type_guards.ts index aff16374ae2626..f793afee1b948b 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/type_guards.ts +++ b/x-pack/plugins/infra/public/components/waffle/lib/type_guards.ts @@ -4,16 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import { - InfraWaffleMapGradientLegend, - InfraWaffleMapLegendMode, - InfraWaffleMapStepLegend, -} from '../../../lib/lib'; +import { InfraWaffleMapGradientLegend, InfraWaffleMapStepLegend } from '../../../lib/lib'; + export function isInfraWaffleMapStepLegend(subject: any): subject is InfraWaffleMapStepLegend { - return subject.type && subject.type === InfraWaffleMapLegendMode.step; + return subject.type && subject.type === 'step'; } + export function isInfraWaffleMapGradientLegend( subject: any ): subject is InfraWaffleMapGradientLegend { - return subject.type && subject.type === InfraWaffleMapLegendMode.gradient; + return subject.type && subject.type === 'gradient'; } diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx b/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx index d265b418f010df..21da10a0a76502 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx +++ b/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx @@ -16,36 +16,23 @@ import React, { useCallback, useState, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { findInventoryModel } from '../../../common/inventory_models'; import { InventoryItemType } from '../../../common/inventory_models/types'; -import { - SnapshotMetricInput, - SnapshotGroupBy, - SnapshotCustomMetricInput, -} from '../../../common/http_api/snapshot_api'; - -interface WaffleInventorySwitcherProps { - nodeType: InventoryItemType; - changeNodeType: (nodeType: InventoryItemType) => void; - changeGroupBy: (groupBy: SnapshotGroupBy) => void; - changeMetric: (metric: SnapshotMetricInput) => void; - changeCustomMetrics: (metrics: SnapshotCustomMetricInput[]) => void; - changeAccount: (id: string) => void; - changeRegion: (name: string) => void; -} +import { useWaffleOptionsContext } from '../../pages/inventory_view/hooks/use_waffle_options'; const getDisplayNameForType = (type: InventoryItemType) => { const inventoryModel = findInventoryModel(type); return inventoryModel.displayName; }; -export const WaffleInventorySwitcher: React.FC = ({ - changeNodeType, - changeGroupBy, - changeMetric, - changeAccount, - changeRegion, - changeCustomMetrics, - nodeType, -}) => { +export const WaffleInventorySwitcher: React.FC = () => { + const { + changeNodeType, + changeGroupBy, + changeMetric, + changeAccount, + changeRegion, + changeCustomMetrics, + nodeType, + } = useWaffleOptionsContext(); const [isOpen, setIsOpen] = useState(false); const closePopover = useCallback(() => setIsOpen(false), []); const openPopover = useCallback(() => setIsOpen(true), []); diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx b/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx index 4f840336de8c34..458bb674afadef 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx +++ b/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx @@ -7,84 +7,60 @@ import { EuiButtonEmpty, EuiDatePicker, EuiFormControlLayout } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import moment, { Moment } from 'moment'; -import React from 'react'; -import { Action } from 'typescript-fsa'; +import React, { useCallback } from 'react'; +import { useWaffleTimeContext } from '../../pages/inventory_view/hooks/use_waffle_time'; -interface WaffleTimeControlsProps { - currentTime: number; - isLiveStreaming?: boolean; - onChangeTime?: (time: number) => void; - startLiveStreaming?: (payload: void) => Action; - stopLiveStreaming?: (payload: void) => Action; -} +export const WaffleTimeControls = () => { + const { + currentTime, + isAutoReloading, + startAutoReload, + stopAutoReload, + jumpToTime, + } = useWaffleTimeContext(); -export class WaffleTimeControls extends React.Component { - public render() { - const { currentTime, isLiveStreaming } = this.props; + const currentMoment = moment(currentTime); - const currentMoment = moment(currentTime); + const liveStreamingButton = isAutoReloading ? ( + + + + ) : ( + + + + ); - const liveStreamingButton = isLiveStreaming ? ( - - - - ) : ( - - - - ); + const handleChangeDate = useCallback( + (time: Moment | null) => { + if (time) { + jumpToTime(time.valueOf()); + } + }, + [jumpToTime] + ); - return ( - - - - ); - } - - private handleChangeDate = (time: Moment | null) => { - const { onChangeTime } = this.props; - - if (onChangeTime && time) { - onChangeTime(time.valueOf()); - } - }; - - private startLiveStreaming = () => { - const { startLiveStreaming } = this.props; - - if (startLiveStreaming) { - startLiveStreaming(); - } - }; - - private stopLiveStreaming = () => { - const { stopLiveStreaming } = this.props; - - if (stopLiveStreaming) { - stopLiveStreaming(); - } - }; -} + return ( + + + + ); +}; diff --git a/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts b/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts index 52c522ce8efd42..1ba016195bef40 100644 --- a/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts +++ b/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts @@ -13,17 +13,18 @@ import { useHTTPRequest } from '../../hooks/use_http_request'; import { throwErrors, createPlainError } from '../../../common/runtime_types'; import { InventoryMetric, InventoryItemType } from '../../../common/inventory_models/types'; import { getFilteredMetrics } from './lib/get_filtered_metrics'; +import { MetricsTimeInput } from '../../pages/metrics/hooks/use_metrics_time'; export function useMetadata( nodeId: string, nodeType: InventoryItemType, requiredMetrics: InventoryMetric[], - sourceId: string + sourceId: string, + timeRange: MetricsTimeInput ) { const decodeResponse = (response: any) => { return pipe(InfraMetadataRT.decode(response), fold(throwErrors(createPlainError), identity)); }; - const { error, loading, response, makeRequest } = useHTTPRequest( '/api/infra/metadata', 'POST', @@ -31,6 +32,7 @@ export function useMetadata( nodeId, nodeType, sourceId, + timeRange: { from: timeRange.from, to: timeRange.to }, }), decodeResponse ); diff --git a/x-pack/plugins/infra/public/containers/waffle/index.ts b/x-pack/plugins/infra/public/containers/waffle/index.ts deleted file mode 100644 index 40c4bfc8cf6789..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export * from './with_waffle_filters'; diff --git a/x-pack/plugins/infra/public/containers/waffle/waffle_nodes.gql_query.ts b/x-pack/plugins/infra/public/containers/waffle/waffle_nodes.gql_query.ts deleted file mode 100644 index 1ca6bc8c397e5a..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/waffle_nodes.gql_query.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import gql from 'graphql-tag'; - -export const waffleNodesQuery = gql` - query WaffleNodesQuery( - $sourceId: ID! - $timerange: InfraTimerangeInput! - $filterQuery: String - $metric: InfraSnapshotMetricInput! - $groupBy: [InfraSnapshotGroupbyInput!]! - $type: InfraNodeType! - ) { - source(id: $sourceId) { - id - snapshot(timerange: $timerange, filterQuery: $filterQuery) { - nodes(groupBy: $groupBy, metric: $metric, type: $type) { - path { - value - label - ip - } - metric { - name - value - avg - max - } - } - } - } - } -`; diff --git a/x-pack/plugins/infra/public/containers/waffle/with_waffle_filters.tsx b/x-pack/plugins/infra/public/containers/waffle/with_waffle_filters.tsx deleted file mode 100644 index 0214237ef52d8f..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/with_waffle_filters.tsx +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { connect } from 'react-redux'; - -import { IIndexPattern } from 'src/plugins/data/public'; -import { State, waffleFilterActions, waffleFilterSelectors } from '../../store'; -import { FilterQuery } from '../../store/local/waffle_filter'; -import { convertKueryToElasticSearchQuery } from '../../utils/kuery'; -import { asChildFunctionRenderer } from '../../utils/typed_react'; -import { bindPlainActionCreators } from '../../utils/typed_redux'; -import { UrlStateContainer } from '../../utils/url_state'; - -interface WithWaffleFilterProps { - indexPattern: IIndexPattern; -} - -export const withWaffleFilter = connect( - (state: State) => ({ - filterQuery: waffleFilterSelectors.selectWaffleFilterQuery(state), - filterQueryDraft: waffleFilterSelectors.selectWaffleFilterQueryDraft(state), - filterQueryAsJson: waffleFilterSelectors.selectWaffleFilterQueryAsJson(state), - isFilterQueryDraftValid: waffleFilterSelectors.selectIsWaffleFilterQueryDraftValid(state), - }), - (dispatch, ownProps: WithWaffleFilterProps) => - bindPlainActionCreators({ - applyFilterQuery: (query: FilterQuery) => - waffleFilterActions.applyWaffleFilterQuery({ - query, - serializedQuery: convertKueryToElasticSearchQuery( - query.expression, - ownProps.indexPattern - ), - }), - applyFilterQueryFromKueryExpression: (expression: string) => - waffleFilterActions.applyWaffleFilterQuery({ - query: { - kind: 'kuery', - expression, - }, - serializedQuery: convertKueryToElasticSearchQuery(expression, ownProps.indexPattern), - }), - setFilterQueryDraft: waffleFilterActions.setWaffleFilterQueryDraft, - setFilterQueryDraftFromKueryExpression: (expression: string) => - waffleFilterActions.setWaffleFilterQueryDraft({ - kind: 'kuery', - expression, - }), - }) -); - -export const WithWaffleFilter = asChildFunctionRenderer(withWaffleFilter); - -/** - * Url State - */ - -type WaffleFilterUrlState = ReturnType; - -type WithWaffleFilterUrlStateProps = WithWaffleFilterProps; - -export const WithWaffleFilterUrlState: React.FC = ({ - indexPattern, -}) => ( - - {({ applyFilterQuery, filterQuery }) => ( - { - if (urlState) { - applyFilterQuery(urlState); - } - }} - onInitialize={urlState => { - if (urlState) { - applyFilterQuery(urlState); - } - }} - /> - )} - -); - -const mapToUrlState = (value: any): WaffleFilterUrlState | undefined => - value && value.kind === 'kuery' && typeof value.expression === 'string' - ? { - kind: value.kind, - expression: value.expression, - } - : undefined; diff --git a/x-pack/plugins/infra/public/containers/waffle/with_waffle_options.tsx b/x-pack/plugins/infra/public/containers/waffle/with_waffle_options.tsx deleted file mode 100644 index 47dd6a5a73a739..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/with_waffle_options.tsx +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { isBoolean, isNumber } from 'lodash'; -import { InfraGroupByOptions } from '../../lib/lib'; -import { State, waffleOptionsActions, waffleOptionsSelectors } from '../../store'; -import { asChildFunctionRenderer } from '../../utils/typed_react'; -import { bindPlainActionCreators } from '../../utils/typed_redux'; -import { UrlStateContainer } from '../../utils/url_state'; -import { - SnapshotMetricInput, - SnapshotGroupBy, - SnapshotCustomMetricInputRT, -} from '../../../common/http_api/snapshot_api'; -import { - SnapshotMetricTypeRT, - InventoryItemType, - ItemTypeRT, -} from '../../../common/inventory_models/types'; - -const selectOptionsUrlState = createSelector( - waffleOptionsSelectors.selectMetric, - waffleOptionsSelectors.selectView, - waffleOptionsSelectors.selectGroupBy, - waffleOptionsSelectors.selectNodeType, - waffleOptionsSelectors.selectCustomOptions, - waffleOptionsSelectors.selectBoundsOverride, - waffleOptionsSelectors.selectAutoBounds, - waffleOptionsSelectors.selectAccountId, - waffleOptionsSelectors.selectRegion, - waffleOptionsSelectors.selectCustomMetrics, - ( - metric, - view, - groupBy, - nodeType, - customOptions, - boundsOverride, - autoBounds, - accountId, - region, - customMetrics - ) => ({ - metric, - groupBy, - nodeType, - view, - customOptions, - boundsOverride, - autoBounds, - accountId, - region, - customMetrics, - }) -); - -export const withWaffleOptions = connect( - (state: State) => ({ - metric: waffleOptionsSelectors.selectMetric(state), - groupBy: waffleOptionsSelectors.selectGroupBy(state), - nodeType: waffleOptionsSelectors.selectNodeType(state), - view: waffleOptionsSelectors.selectView(state), - customOptions: waffleOptionsSelectors.selectCustomOptions(state), - boundsOverride: waffleOptionsSelectors.selectBoundsOverride(state), - autoBounds: waffleOptionsSelectors.selectAutoBounds(state), - accountId: waffleOptionsSelectors.selectAccountId(state), - region: waffleOptionsSelectors.selectRegion(state), - urlState: selectOptionsUrlState(state), - customMetrics: waffleOptionsSelectors.selectCustomMetrics(state), - }), - bindPlainActionCreators({ - changeMetric: waffleOptionsActions.changeMetric, - changeGroupBy: waffleOptionsActions.changeGroupBy, - changeNodeType: waffleOptionsActions.changeNodeType, - changeView: waffleOptionsActions.changeView, - changeCustomOptions: waffleOptionsActions.changeCustomOptions, - changeBoundsOverride: waffleOptionsActions.changeBoundsOverride, - changeAutoBounds: waffleOptionsActions.changeAutoBounds, - changeAccount: waffleOptionsActions.changeAccount, - changeRegion: waffleOptionsActions.changeRegion, - changeCustomMetrics: waffleOptionsActions.changeCustomMetrics, - }) -); - -export const WithWaffleOptions = asChildFunctionRenderer(withWaffleOptions); - -/** - * Url State - */ - -interface WaffleOptionsUrlState { - metric?: ReturnType; - groupBy?: ReturnType; - nodeType?: ReturnType; - view?: ReturnType; - customOptions?: ReturnType; - bounds?: ReturnType; - auto?: ReturnType; - accountId?: ReturnType; - region?: ReturnType; - customMetrics?: ReturnType; -} - -export const WithWaffleOptionsUrlState = () => ( - - {({ - changeMetric, - urlState, - changeGroupBy, - changeNodeType, - changeView, - changeCustomOptions, - changeAutoBounds, - changeBoundsOverride, - changeAccount, - changeRegion, - changeCustomMetrics, - }) => ( - - urlState={urlState} - urlStateKey="waffleOptions" - mapToUrlState={mapToUrlState} - onChange={newUrlState => { - if (newUrlState && newUrlState.metric) { - changeMetric(newUrlState.metric); - } - if (newUrlState && newUrlState.groupBy) { - changeGroupBy(newUrlState.groupBy); - } - if (newUrlState && newUrlState.nodeType) { - changeNodeType(newUrlState.nodeType); - } - if (newUrlState && newUrlState.view) { - changeView(newUrlState.view); - } - if (newUrlState && newUrlState.customOptions) { - changeCustomOptions(newUrlState.customOptions); - } - if (newUrlState && newUrlState.bounds) { - changeBoundsOverride(newUrlState.bounds); - } - if (newUrlState && newUrlState.auto) { - changeAutoBounds(newUrlState.auto); - } - if (newUrlState && newUrlState.accountId) { - changeAccount(newUrlState.accountId); - } - if (newUrlState && newUrlState.region) { - changeRegion(newUrlState.region); - } - if (newUrlState && newUrlState.customMetrics) { - changeCustomMetrics(newUrlState.customMetrics); - } - }} - onInitialize={initialUrlState => { - if (initialUrlState && initialUrlState.metric) { - changeMetric(initialUrlState.metric); - } - if (initialUrlState && initialUrlState.groupBy) { - changeGroupBy(initialUrlState.groupBy); - } - if (initialUrlState && initialUrlState.nodeType) { - changeNodeType(initialUrlState.nodeType); - } - if (initialUrlState && initialUrlState.view) { - changeView(initialUrlState.view); - } - if (initialUrlState && initialUrlState.customOptions) { - changeCustomOptions(initialUrlState.customOptions); - } - if (initialUrlState && initialUrlState.bounds) { - changeBoundsOverride(initialUrlState.bounds); - } - if (initialUrlState && initialUrlState.auto) { - changeAutoBounds(initialUrlState.auto); - } - if (initialUrlState && initialUrlState.accountId) { - changeAccount(initialUrlState.accountId); - } - if (initialUrlState && initialUrlState.region) { - changeRegion(initialUrlState.region); - } - if (initialUrlState && initialUrlState.customMetrics) { - changeCustomMetrics(initialUrlState.customMetrics); - } - }} - /> - )} - -); - -const mapToUrlState = (value: any): WaffleOptionsUrlState | undefined => - value - ? { - metric: mapToMetricUrlState(value.metric), - groupBy: mapToGroupByUrlState(value.groupBy), - nodeType: mapToNodeTypeUrlState(value.nodeType), - view: mapToViewUrlState(value.view), - customOptions: mapToCustomOptionsUrlState(value.customOptions), - bounds: mapToBoundsOverideUrlState(value.boundsOverride), - auto: mapToAutoBoundsUrlState(value.autoBounds), - accountId: value.accountId, - region: value.region, - customMetrics: mapToCustomMetricsUrlState(value.customMetrics), - } - : undefined; - -const isInfraNodeType = (value: any): value is InventoryItemType => value in ItemTypeRT; - -const isInfraSnapshotMetricInput = (subject: any): subject is SnapshotMetricInput => { - return subject != null && subject.type in SnapshotMetricTypeRT; -}; - -const isInfraSnapshotGroupbyInput = (subject: any): subject is SnapshotGroupBy => { - return subject != null && subject.type != null; -}; - -const isInfraGroupByOption = (subject: any): subject is InfraGroupByOptions => { - return subject != null && subject.text != null && subject.field != null; -}; - -const mapToMetricUrlState = (subject: any) => { - return subject && isInfraSnapshotMetricInput(subject) ? subject : undefined; -}; - -const mapToGroupByUrlState = (subject: any) => { - return subject && Array.isArray(subject) && subject.every(isInfraSnapshotGroupbyInput) - ? subject - : undefined; -}; - -const mapToNodeTypeUrlState = (subject: any) => { - return isInfraNodeType(subject) ? subject : undefined; -}; - -const mapToViewUrlState = (subject: any) => { - return subject && ['map', 'table'].includes(subject) ? subject : undefined; -}; - -const mapToCustomOptionsUrlState = (subject: any) => { - return subject && Array.isArray(subject) && subject.every(isInfraGroupByOption) - ? subject - : undefined; -}; - -const mapToCustomMetricsUrlState = (subject: any) => { - return subject && Array.isArray(subject) && subject.every(s => SnapshotCustomMetricInputRT.is(s)) - ? subject - : []; -}; - -const mapToBoundsOverideUrlState = (subject: any) => { - return subject != null && isNumber(subject.max) && isNumber(subject.min) ? subject : undefined; -}; - -const mapToAutoBoundsUrlState = (subject: any) => { - return subject != null && isBoolean(subject) ? subject : undefined; -}; diff --git a/x-pack/plugins/infra/public/containers/waffle/with_waffle_time.tsx b/x-pack/plugins/infra/public/containers/waffle/with_waffle_time.tsx deleted file mode 100644 index 293f6184af21bb..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/with_waffle_time.tsx +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; - -import { State, waffleTimeActions, waffleTimeSelectors } from '../../store'; -import { asChildFunctionRenderer } from '../../utils/typed_react'; -import { bindPlainActionCreators } from '../../utils/typed_redux'; -import { UrlStateContainer } from '../../utils/url_state'; - -export const withWaffleTime = connect( - (state: State) => ({ - currentTime: waffleTimeSelectors.selectCurrentTime(state), - currentTimeRange: waffleTimeSelectors.selectCurrentTimeRange(state), - isAutoReloading: waffleTimeSelectors.selectIsAutoReloading(state), - urlState: selectTimeUrlState(state), - }), - bindPlainActionCreators({ - jumpToTime: waffleTimeActions.jumpToTime, - startAutoReload: waffleTimeActions.startAutoReload, - stopAutoReload: waffleTimeActions.stopAutoReload, - }) -); - -export const WithWaffleTime = asChildFunctionRenderer(withWaffleTime, { - onCleanup: ({ stopAutoReload }) => stopAutoReload(), -}); - -/** - * Url State - */ - -interface WaffleTimeUrlState { - time?: ReturnType; - autoReload?: ReturnType; -} - -export const WithWaffleTimeUrlState = () => ( - - {({ jumpToTime, startAutoReload, stopAutoReload, urlState }) => ( - { - if (newUrlState && newUrlState.time) { - jumpToTime(newUrlState.time); - } - if (newUrlState && newUrlState.autoReload) { - startAutoReload(); - } else if ( - newUrlState && - typeof newUrlState.autoReload !== 'undefined' && - !newUrlState.autoReload - ) { - stopAutoReload(); - } - }} - onInitialize={initialUrlState => { - if (initialUrlState) { - jumpToTime(initialUrlState.time ? initialUrlState.time : Date.now()); - } - if (initialUrlState && initialUrlState.autoReload) { - startAutoReload(); - } - }} - /> - )} - -); - -const selectTimeUrlState = createSelector( - waffleTimeSelectors.selectCurrentTime, - waffleTimeSelectors.selectIsAutoReloading, - (time, autoReload) => ({ - time, - autoReload, - }) -); - -const mapToUrlState = (value: any): WaffleTimeUrlState | undefined => - value - ? { - time: mapToTimeUrlState(value.time), - autoReload: mapToAutoReloadUrlState(value.autoReload), - } - : undefined; - -const mapToTimeUrlState = (value: any) => (value && typeof value === 'number' ? value : undefined); - -const mapToAutoReloadUrlState = (value: any) => (typeof value === 'boolean' ? value : undefined); diff --git a/x-pack/plugins/infra/public/containers/waffle/with_waffle_view_state.tsx b/x-pack/plugins/infra/public/containers/waffle/with_waffle_view_state.tsx deleted file mode 100644 index 421c506166d047..00000000000000 --- a/x-pack/plugins/infra/public/containers/waffle/with_waffle_view_state.tsx +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import { IIndexPattern } from 'src/plugins/data/public'; -import { - State, - waffleOptionsActions, - waffleOptionsSelectors, - waffleTimeSelectors, - waffleTimeActions, - waffleFilterActions, - waffleFilterSelectors, - initialState, -} from '../../store'; -import { asChildFunctionRenderer } from '../../utils/typed_react'; -import { convertKueryToElasticSearchQuery } from '../../utils/kuery'; - -const selectViewState = createSelector( - waffleOptionsSelectors.selectMetric, - waffleOptionsSelectors.selectView, - waffleOptionsSelectors.selectGroupBy, - waffleOptionsSelectors.selectNodeType, - waffleOptionsSelectors.selectCustomOptions, - waffleOptionsSelectors.selectBoundsOverride, - waffleOptionsSelectors.selectAutoBounds, - waffleTimeSelectors.selectCurrentTime, - waffleTimeSelectors.selectIsAutoReloading, - waffleFilterSelectors.selectWaffleFilterQuery, - waffleOptionsSelectors.selectCustomMetrics, - ( - metric, - view, - groupBy, - nodeType, - customOptions, - boundsOverride, - autoBounds, - time, - autoReload, - filterQuery, - customMetrics - ) => ({ - time, - autoReload, - metric, - groupBy, - nodeType, - view, - customOptions, - boundsOverride, - autoBounds, - filterQuery, - customMetrics, - }) -); - -interface Props { - indexPattern: IIndexPattern; -} - -export const withWaffleViewState = connect( - (state: State) => ({ - viewState: selectViewState(state), - defaultViewState: selectViewState(initialState), - }), - (dispatch, ownProps: Props) => { - return { - onViewChange: (viewState: WaffleViewState) => { - if (viewState.time) { - dispatch(waffleTimeActions.jumpToTime(viewState.time)); - } - if (viewState.autoReload) { - dispatch(waffleTimeActions.startAutoReload()); - } else if (typeof viewState.autoReload !== 'undefined' && !viewState.autoReload) { - dispatch(waffleTimeActions.stopAutoReload()); - } - if (viewState.metric) { - dispatch(waffleOptionsActions.changeMetric(viewState.metric)); - } - if (viewState.groupBy) { - dispatch(waffleOptionsActions.changeGroupBy(viewState.groupBy)); - } - if (viewState.nodeType) { - dispatch(waffleOptionsActions.changeNodeType(viewState.nodeType)); - } - if (viewState.view) { - dispatch(waffleOptionsActions.changeView(viewState.view)); - } - if (viewState.customOptions) { - dispatch(waffleOptionsActions.changeCustomOptions(viewState.customOptions)); - } - if (viewState.customMetrics) { - dispatch(waffleOptionsActions.changeCustomMetrics(viewState.customMetrics)); - } - if (viewState.boundsOverride) { - dispatch(waffleOptionsActions.changeBoundsOverride(viewState.boundsOverride)); - } - if (viewState.autoBounds) { - dispatch(waffleOptionsActions.changeAutoBounds(viewState.autoBounds)); - } - if (viewState.filterQuery) { - dispatch( - waffleFilterActions.applyWaffleFilterQuery({ - query: viewState.filterQuery, - serializedQuery: convertKueryToElasticSearchQuery( - viewState.filterQuery.expression, - ownProps.indexPattern - ), - }) - ); - } else { - dispatch( - waffleFilterActions.applyWaffleFilterQuery({ - query: null, - serializedQuery: null, - }) - ); - } - }, - }; - } -); - -export const WithWaffleViewState = asChildFunctionRenderer(withWaffleViewState); - -/** - * View State - */ -export interface WaffleViewState { - metric?: ReturnType; - groupBy?: ReturnType; - nodeType?: ReturnType; - view?: ReturnType; - customOptions?: ReturnType; - customMetrics?: ReturnType; - boundsOverride?: ReturnType; - autoBounds?: ReturnType; - time?: ReturnType; - autoReload?: ReturnType; - filterQuery?: ReturnType; -} diff --git a/x-pack/plugins/infra/public/containers/with_options.tsx b/x-pack/plugins/infra/public/containers/with_options.tsx index 972722890ffefc..e18fc85a68d60b 100644 --- a/x-pack/plugins/infra/public/containers/with_options.tsx +++ b/x-pack/plugins/infra/public/containers/with_options.tsx @@ -8,7 +8,7 @@ import moment from 'moment'; import React from 'react'; import { euiPaletteColorBlind } from '@elastic/eui'; -import { InfraFormatterType, InfraOptions, InfraWaffleMapLegendMode } from '../lib/lib'; +import { InfraFormatterType, InfraOptions } from '../lib/lib'; import { RendererFunction } from '../utils/typed_react'; const euiVisColorPalette = euiPaletteColorBlind(); @@ -29,7 +29,7 @@ const initialState = { metric: { type: 'cpu' }, groupBy: [], legend: { - type: InfraWaffleMapLegendMode.gradient, + type: 'gradient', rules: [ { value: 0, diff --git a/x-pack/plugins/infra/public/lib/lib.ts b/x-pack/plugins/infra/public/lib/lib.ts index 9f851e185018b6..e4de0caf9bb8ba 100644 --- a/x-pack/plugins/infra/public/lib/lib.ts +++ b/x-pack/plugins/infra/public/lib/lib.ts @@ -136,18 +136,13 @@ export interface InfraWaffleMapGradientRule { color: string; } -export enum InfraWaffleMapLegendMode { - step = 'step', - gradient = 'gradient', -} - export interface InfraWaffleMapStepLegend { - type: InfraWaffleMapLegendMode.step; + type: 'step'; rules: InfraWaffleMapStepRule[]; } export interface InfraWaffleMapGradientLegend { - type: InfraWaffleMapLegendMode.gradient; + type: 'gradient'; rules: InfraWaffleMapGradientRule[]; } diff --git a/x-pack/plugins/infra/public/pages/infrastructure/index.tsx b/x-pack/plugins/infra/public/pages/infrastructure/index.tsx index 422eb53148fe6d..d592ae3480fc95 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/index.tsx +++ b/x-pack/plugins/infra/public/pages/infrastructure/index.tsx @@ -25,6 +25,9 @@ import { MetricsSettingsPage } from './settings'; import { AppNavigation } from '../../components/navigation/app_navigation'; import { SourceLoadingPage } from '../../components/source_loading_page'; import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; +import { WaffleOptionsProvider } from '../inventory_view/hooks/use_waffle_options'; +import { WaffleTimeProvider } from '../inventory_view/hooks/use_waffle_time'; +import { WaffleFiltersProvider } from '../inventory_view/hooks/use_waffle_filters'; import { AlertDropdown } from '../../components/alerting/metrics/alert_dropdown'; export const InfrastructurePage = ({ match }: RouteComponentProps) => { @@ -32,96 +35,101 @@ export const InfrastructurePage = ({ match }: RouteComponentProps) => { return ( - - - - + + + + + -
+ - - - - - - - - - - + + + + + + + + + + - - - ( - - {({ configuration, createDerivedIndexPattern }) => ( - - - {configuration ? ( - - ) : ( - - )} - - )} - - )} - /> - - - + + + ( + + {({ configuration, createDerivedIndexPattern }) => ( + + + {configuration ? ( + + ) : ( + + )} + + )} + + )} + /> + + + + + + ); }; diff --git a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx b/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx index dbb8b2d8e29521..48cc56388c0f24 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx +++ b/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx @@ -8,7 +8,6 @@ import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useContext } from 'react'; -import { SnapshotPageContent } from './page_content'; import { SnapshotToolbar } from './toolbar'; import { DocumentTitle } from '../../../components/document_title'; @@ -19,17 +18,14 @@ import { SourceErrorPage } from '../../../components/source_error_page'; import { SourceLoadingPage } from '../../../components/source_loading_page'; import { ViewSourceConfigurationButton } from '../../../components/source_configuration'; import { Source } from '../../../containers/source'; -import { WithWaffleFilterUrlState } from '../../../containers/waffle/with_waffle_filters'; -import { WithWaffleOptionsUrlState } from '../../../containers/waffle/with_waffle_options'; -import { WithWaffleTimeUrlState } from '../../../containers/waffle/with_waffle_time'; import { useTrackPageview } from '../../../../../observability/public'; import { useKibana } from '../../../../../../../src/plugins/kibana_react/public'; +import { Layout } from '../../../components/inventory/layout'; import { useLinkProps } from '../../../hooks/use_link_props'; export const SnapshotPage = () => { const uiCapabilities = useKibana().services.application?.capabilities; const { - createDerivedIndexPattern, hasFailedLoadingSource, isLoading, loadSourceFailureMessage, @@ -60,11 +56,8 @@ export const SnapshotPage = () => { ) : metricIndicesExist ? ( <> - - - - + ) : hasFailedLoadingSource ? ( diff --git a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/page_content.tsx b/x-pack/plugins/infra/public/pages/infrastructure/snapshot/page_content.tsx deleted file mode 100644 index 83a4c8d3a497f6..00000000000000 --- a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/page_content.tsx +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; - -import { WithWaffleFilter } from '../../../containers/waffle/with_waffle_filters'; -import { WithWaffleOptions } from '../../../containers/waffle/with_waffle_options'; -import { WithWaffleTime } from '../../../containers/waffle/with_waffle_time'; -import { WithOptions } from '../../../containers/with_options'; -import { WithSource } from '../../../containers/with_source'; -import { Layout } from '../../../components/inventory/layout'; - -export const SnapshotPageContent: React.FC = () => ( - - {({ configuration, createDerivedIndexPattern, sourceId }) => ( - - {({ wafflemap }) => ( - - {({ filterQueryAsJson, applyFilterQuery }) => ( - - {({ currentTime }) => ( - - {({ - metric, - groupBy, - nodeType, - view, - changeView, - autoBounds, - boundsOverride, - accountId, - region, - }) => ( - - )} - - )} - - )} - - )} - - )} - -); diff --git a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx b/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx index 3606580e865045..ccdaa5e8dc7857 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx +++ b/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx @@ -5,92 +5,24 @@ */ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import React from 'react'; -import { AutocompleteField } from '../../../components/autocomplete_field'; import { Toolbar } from '../../../components/eui/toolbar'; import { WaffleTimeControls } from '../../../components/waffle/waffle_time_controls'; -import { WithWaffleFilter } from '../../../containers/waffle/with_waffle_filters'; -import { WithWaffleTime } from '../../../containers/waffle/with_waffle_time'; -import { WithKueryAutocompletion } from '../../../containers/with_kuery_autocompletion'; -import { WithSource } from '../../../containers/with_source'; -import { WithWaffleOptions } from '../../../containers/waffle/with_waffle_options'; import { WaffleInventorySwitcher } from '../../../components/waffle/waffle_inventory_switcher'; +import { SearchBar } from '../../inventory_view/compontents/search_bar'; export const SnapshotToolbar = () => ( - - {({ - changeMetric, - changeNodeType, - changeGroupBy, - changeAccount, - changeRegion, - changeCustomMetrics, - nodeType, - }) => ( - - )} - + - - {({ createDerivedIndexPattern }) => ( - - {({ isLoadingSuggestions, loadSuggestions, suggestions }) => ( - - {({ - applyFilterQueryFromKueryExpression, - filterQueryDraft, - isFilterQueryDraftValid, - setFilterQueryDraftFromKueryExpression, - }) => ( - - )} - - )} - - )} - + - - {({ currentTime, isAutoReloading, jumpToTime, startAutoReload, stopAutoReload }) => ( - - )} - + diff --git a/x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx b/x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx new file mode 100644 index 00000000000000..f4fde46d434f83 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React, { useContext } from 'react'; +import { i18n } from '@kbn/i18n'; +import { Source } from '../../../containers/source'; +import { AutocompleteField } from '../../../components/autocomplete_field'; +import { WithKueryAutocompletion } from '../../../containers/with_kuery_autocompletion'; +import { useWaffleFiltersContext } from '../hooks/use_waffle_filters'; + +export const SearchBar = () => { + const { createDerivedIndexPattern } = useContext(Source.Context); + const { + applyFilterQueryFromKueryExpression, + filterQueryDraft, + isFilterQueryDraftValid, + setFilterQueryDraftFromKueryExpression, + } = useWaffleFiltersContext(); + return ( + + {({ isLoadingSuggestions, loadSuggestions, suggestions }) => ( + + )} + + ); +}; diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts new file mode 100644 index 00000000000000..02c079dcaddc40 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useState, useMemo, useCallback, useEffect } from 'react'; +import * as rt from 'io-ts'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { fold } from 'fp-ts/lib/Either'; +import { constant, identity } from 'fp-ts/lib/function'; +import createContainter from 'constate'; +import { useUrlState } from '../../../utils/use_url_state'; +import { useSourceContext } from '../../../containers/source'; +import { convertKueryToElasticSearchQuery } from '../../../utils/kuery'; +import { esKuery } from '../../../../../../../src/plugins/data/public'; + +const validateKuery = (expression: string) => { + try { + esKuery.fromKueryExpression(expression); + } catch (err) { + return false; + } + return true; +}; + +export const DEFAULT_WAFFLE_FILTERS_STATE: WaffleFiltersState = { kind: 'kuery', expression: '' }; + +export const useWaffleFilters = () => { + const { createDerivedIndexPattern } = useSourceContext(); + const indexPattern = createDerivedIndexPattern('metrics'); + + const [urlState, setUrlState] = useUrlState({ + defaultState: DEFAULT_WAFFLE_FILTERS_STATE, + decodeUrlState, + encodeUrlState, + urlStateKey: 'waffleFilter', + }); + + const [state, setState] = useState(urlState); + + useEffect(() => setUrlState(state), [setUrlState, state]); + + const [filterQueryDraft, setFilterQueryDraft] = useState(urlState.expression); + + const filterQueryAsJson = useMemo( + () => convertKueryToElasticSearchQuery(urlState.expression, indexPattern), + [indexPattern, urlState.expression] + ); + + const applyFilterQueryFromKueryExpression = useCallback( + (expression: string) => { + setState(previous => ({ + ...previous, + kind: 'kuery', + expression, + })); + }, + [setState] + ); + + const applyFilterQuery = useCallback((filterQuery: WaffleFiltersState) => { + setState(filterQuery); + setFilterQueryDraft(filterQuery.expression); + }, []); + + const isFilterQueryDraftValid = useMemo(() => validateKuery(filterQueryDraft), [ + filterQueryDraft, + ]); + + return { + filterQuery: urlState, + filterQueryDraft, + filterQueryAsJson, + applyFilterQuery, + setFilterQueryDraftFromKueryExpression: setFilterQueryDraft, + applyFilterQueryFromKueryExpression, + isFilterQueryDraftValid, + setWaffleFiltersState: applyFilterQuery, + }; +}; + +export const WaffleFiltersStateRT = rt.type({ + kind: rt.literal('kuery'), + expression: rt.string, +}); + +export type WaffleFiltersState = rt.TypeOf; +const encodeUrlState = WaffleFiltersStateRT.encode; +const decodeUrlState = (value: unknown) => + pipe(WaffleFiltersStateRT.decode(value), fold(constant(undefined), identity)); +export const WaffleFilters = createContainter(useWaffleFilters); +export const [WaffleFiltersProvider, useWaffleFiltersContext] = WaffleFilters; diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts new file mode 100644 index 00000000000000..2853917d5f6838 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { useCallback, useState, useEffect } from 'react'; +import * as rt from 'io-ts'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { fold } from 'fp-ts/lib/Either'; +import { constant, identity } from 'fp-ts/lib/function'; +import createContainer from 'constate'; +import { + SnapshotMetricInput, + SnapshotGroupBy, + SnapshotCustomMetricInput, + SnapshotMetricInputRT, + SnapshotGroupByRT, + SnapshotCustomMetricInputRT, +} from '../../../../common/http_api/snapshot_api'; +import { useUrlState } from '../../../utils/use_url_state'; +import { InventoryItemType, ItemTypeRT } from '../../../../common/inventory_models/types'; + +export const DEFAULT_WAFFLE_OPTIONS_STATE: WaffleOptionsState = { + metric: { type: 'cpu' }, + groupBy: [], + nodeType: 'host', + view: 'map', + customOptions: [], + boundsOverride: { max: 1, min: 0 }, + autoBounds: true, + accountId: '', + region: '', + customMetrics: [], +}; + +export const useWaffleOptions = () => { + const [urlState, setUrlState] = useUrlState({ + defaultState: DEFAULT_WAFFLE_OPTIONS_STATE, + decodeUrlState, + encodeUrlState, + urlStateKey: 'waffleOptions', + }); + + const [state, setState] = useState(urlState); + + useEffect(() => setUrlState(state), [setUrlState, state]); + + const changeMetric = useCallback( + (metric: SnapshotMetricInput) => setState(previous => ({ ...previous, metric })), + [setState] + ); + + const changeGroupBy = useCallback( + (groupBy: SnapshotGroupBy) => setState(previous => ({ ...previous, groupBy })), + [setState] + ); + + const changeNodeType = useCallback( + (nodeType: InventoryItemType) => setState(previous => ({ ...previous, nodeType })), + [setState] + ); + + const changeView = useCallback((view: string) => setState(previous => ({ ...previous, view })), [ + setState, + ]); + + const changeCustomOptions = useCallback( + (customOptions: Array<{ text: string; field: string }>) => + setState(previous => ({ ...previous, customOptions })), + [setState] + ); + + const changeAutoBounds = useCallback( + (autoBounds: boolean) => setState(previous => ({ ...previous, autoBounds })), + [setState] + ); + + const changeBoundsOverride = useCallback( + (boundsOverride: { min: number; max: number }) => + setState(previous => ({ ...previous, boundsOverride })), + [setState] + ); + + const changeAccount = useCallback( + (accountId: string) => setState(previous => ({ ...previous, accountId })), + [setState] + ); + + const changeRegion = useCallback( + (region: string) => setState(previous => ({ ...previous, region })), + [setState] + ); + + const changeCustomMetrics = useCallback( + (customMetrics: SnapshotCustomMetricInput[]) => { + setState(previous => ({ ...previous, customMetrics })); + }, + [setState] + ); + + return { + ...state, + changeMetric, + changeGroupBy, + changeNodeType, + changeView, + changeCustomOptions, + changeAutoBounds, + changeBoundsOverride, + changeAccount, + changeRegion, + changeCustomMetrics, + setWaffleOptionsState: setState, + }; +}; + +export const WaffleOptionsStateRT = rt.type({ + metric: SnapshotMetricInputRT, + groupBy: SnapshotGroupByRT, + nodeType: ItemTypeRT, + view: rt.string, + customOptions: rt.array( + rt.type({ + text: rt.string, + field: rt.string, + }) + ), + boundsOverride: rt.type({ + min: rt.number, + max: rt.number, + }), + autoBounds: rt.boolean, + accountId: rt.string, + region: rt.string, + customMetrics: rt.array(SnapshotCustomMetricInputRT), +}); + +export type WaffleOptionsState = rt.TypeOf; +const encodeUrlState = (state: WaffleOptionsState) => { + return WaffleOptionsStateRT.encode(state); +}; +const decodeUrlState = (value: unknown) => + pipe(WaffleOptionsStateRT.decode(value), fold(constant(undefined), identity)); + +export const WaffleOptions = createContainer(useWaffleOptions); +export const [WaffleOptionsProvider, useWaffleOptionsContext] = WaffleOptions; diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts new file mode 100644 index 00000000000000..051b5e598cb757 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { useCallback, useState, useEffect } from 'react'; +import * as rt from 'io-ts'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { fold } from 'fp-ts/lib/Either'; +import { constant, identity } from 'fp-ts/lib/function'; +import createContainer from 'constate'; +import { useUrlState } from '../../../utils/use_url_state'; + +export const DEFAULT_WAFFLE_TIME_STATE: WaffleTimeState = { + currentTime: Date.now(), + isAutoReloading: false, +}; + +export const useWaffleTime = () => { + const [urlState, setUrlState] = useUrlState({ + defaultState: DEFAULT_WAFFLE_TIME_STATE, + decodeUrlState, + encodeUrlState, + urlStateKey: 'waffleTime', + }); + + const [state, setState] = useState(urlState); + + useEffect(() => setUrlState(state), [setUrlState, state]); + + const { currentTime, isAutoReloading } = urlState; + + const startAutoReload = useCallback(() => { + setState(previous => ({ ...previous, isAutoReloading: true })); + }, [setState]); + + const stopAutoReload = useCallback(() => { + setState(previous => ({ ...previous, isAutoReloading: false })); + }, [setState]); + + const jumpToTime = useCallback( + (time: number) => { + setState(previous => ({ ...previous, currentTime: time })); + }, + [setState] + ); + + const currentTimeRange = { + from: currentTime - 1000 * 60 * 5, + interval: '1m', + to: currentTime, + }; + + return { + currentTime, + currentTimeRange, + isAutoReloading, + startAutoReload, + stopAutoReload, + jumpToTime, + setWaffleTimeState: setState, + }; +}; + +export const WaffleTimeStateRT = rt.type({ + currentTime: rt.number, + isAutoReloading: rt.boolean, +}); + +export type WaffleTimeState = rt.TypeOf; +const encodeUrlState = WaffleTimeStateRT.encode; +const decodeUrlState = (value: unknown) => + pipe(WaffleTimeStateRT.decode(value), fold(constant(undefined), identity)); + +export const WaffleTime = createContainer(useWaffleTime); +export const [WaffleTimeProvider, useWaffleTimeContext] = WaffleTime; diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts new file mode 100644 index 00000000000000..869560b2b87095 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { useCallback } from 'react'; +import { + useWaffleOptionsContext, + DEFAULT_WAFFLE_OPTIONS_STATE, + WaffleOptionsState, +} from './use_waffle_options'; +import { useWaffleTimeContext, DEFAULT_WAFFLE_TIME_STATE } from './use_waffle_time'; +import { + useWaffleFiltersContext, + DEFAULT_WAFFLE_FILTERS_STATE, + WaffleFiltersState, +} from './use_waffle_filters'; + +export const useWaffleViewState = () => { + const { + metric, + groupBy, + nodeType, + view, + customOptions, + customMetrics, + boundsOverride, + autoBounds, + accountId, + region, + setWaffleOptionsState, + } = useWaffleOptionsContext(); + const { currentTime, isAutoReloading, setWaffleTimeState } = useWaffleTimeContext(); + const { filterQuery, setWaffleFiltersState } = useWaffleFiltersContext(); + + const viewState: WaffleViewState = { + metric, + groupBy, + nodeType, + view, + customOptions, + customMetrics, + boundsOverride, + autoBounds, + accountId, + region, + time: currentTime, + autoReload: isAutoReloading, + filterQuery, + }; + + const defaultViewState: WaffleViewState = { + ...DEFAULT_WAFFLE_OPTIONS_STATE, + filterQuery: DEFAULT_WAFFLE_FILTERS_STATE, + time: DEFAULT_WAFFLE_TIME_STATE.currentTime, + autoReload: DEFAULT_WAFFLE_TIME_STATE.isAutoReloading, + }; + + const onViewChange = useCallback( + (newState: WaffleViewState) => { + setWaffleOptionsState({ + metric: newState.metric, + groupBy: newState.groupBy, + nodeType: newState.nodeType, + view: newState.view, + customOptions: newState.customOptions, + customMetrics: newState.customMetrics, + boundsOverride: newState.boundsOverride, + autoBounds: newState.autoBounds, + accountId: newState.accountId, + region: newState.region, + }); + if (newState.time) { + setWaffleTimeState({ + currentTime: newState.time, + isAutoReloading: newState.autoReload, + }); + } + setWaffleFiltersState(newState.filterQuery); + }, + [setWaffleOptionsState, setWaffleTimeState, setWaffleFiltersState] + ); + + return { + viewState, + defaultViewState, + onViewChange, + }; +}; + +export type WaffleViewState = WaffleOptionsState & { + time: number; + autoReload: boolean; + filterQuery: WaffleFiltersState; +}; diff --git a/x-pack/plugins/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx b/x-pack/plugins/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx index 01b02f1acbbf25..b1dab3bd3f6737 100644 --- a/x-pack/plugins/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { Redirect, RouteComponentProps } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; -import { replaceMetricTimeInQueryString } from '../metrics/containers/with_metrics_time'; +import { replaceMetricTimeInQueryString } from '../metrics/hooks/use_metrics_time'; import { useHostIpToName } from './use_host_ip_to_name'; import { getFromFromLocation, getToFromLocation } from './query_params'; import { LoadingPage } from '../../components/loading_page'; diff --git a/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_detail.tsx b/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_detail.tsx index 9eae632756a3ff..72a41f5264244f 100644 --- a/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_detail.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_detail.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { Redirect, RouteComponentProps } from 'react-router-dom'; -import { replaceMetricTimeInQueryString } from '../metrics/containers/with_metrics_time'; +import { replaceMetricTimeInQueryString } from '../metrics/hooks/use_metrics_time'; import { getFromFromLocation, getToFromLocation } from './query_params'; import { InventoryItemType } from '../../../common/inventory_models/types'; import { LinkDescriptor } from '../../hooks/use_link_props'; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx b/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx index ea91c53faf6757..dd2a5f2bdb39e6 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx @@ -22,7 +22,7 @@ import { MetricsTimeControls } from './time_controls'; import { SideNavContext, NavItem } from '../lib/side_nav_context'; import { PageBody } from './page_body'; import { euiStyled } from '../../../../../observability/public'; -import { MetricsTimeInput } from '../containers/with_metrics_time'; +import { MetricsTimeInput } from '../hooks/use_metrics_time'; import { InfraMetadata } from '../../../../common/http_api/metadata_api'; import { PageError } from './page_error'; import { MetadataContext } from '../../../pages/metrics/containers/metadata_context'; @@ -94,7 +94,7 @@ export const NodeDetailsPage = (props: Props) => { setRefreshInterval={props.setRefreshInterval} onChangeTimeRange={props.setTimeRange} setAutoReload={props.setAutoReload} - onRefresh={props.triggerRefresh} + onRefresh={refetch} /> diff --git a/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx b/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx index 414b9c60adee39..e651d6b92d9811 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { findLayout } from '../../../../common/inventory_models/layouts'; import { InventoryItemType } from '../../../../common/inventory_models/types'; -import { MetricsTimeInput } from '../containers/with_metrics_time'; +import { MetricsTimeInput } from '../hooks/use_metrics_time'; import { InfraLoadingPanel } from '../../../components/loading'; import { NoData } from '../../../components/empty_states'; import { NodeDetailsMetricData } from '../../../../common/http_api/node_details_api'; @@ -19,9 +19,9 @@ interface Props { refetch: () => void; type: InventoryItemType; metrics: NodeDetailsMetricData[]; - onChangeRangeTime?: (time: MetricsTimeInput) => void; - isLiveStreaming?: boolean; - stopLiveStreaming?: () => void; + onChangeRangeTime: (time: MetricsTimeInput) => void; + isLiveStreaming: boolean; + stopLiveStreaming: () => void; } export const PageBody = ({ diff --git a/x-pack/plugins/infra/public/pages/metrics/components/section.tsx b/x-pack/plugins/infra/public/pages/metrics/components/section.tsx index 2f9ed9f54df826..68003737a1f145 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/section.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/components/section.tsx @@ -41,6 +41,9 @@ export const Section: FunctionComponent = ({ if (metric === null) { return accumulatedChildren; } + if (!child.props.label) { + return accumulatedChildren; + } return [ ...accumulatedChildren, { diff --git a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx b/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx index 91e25fd8ef5854..02ba506e8abe14 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx @@ -19,7 +19,7 @@ jest.mock('../../../utils/use_kibana_ui_setting', () => ({ import React from 'react'; import { MetricsTimeControls } from './time_controls'; import { mount } from 'enzyme'; -import { MetricsTimeInput } from '../containers/with_metrics_time'; +import { MetricsTimeInput } from '../hooks/use_metrics_time'; describe('MetricsTimeControls', () => { it('should set a valid from and to value for Today', () => { diff --git a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx index b1daaa0320fabc..cdbdc9bb7ecdb5 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx @@ -7,7 +7,7 @@ import { EuiSuperDatePicker, OnRefreshChangeProps, OnTimeChangeProps } from '@elastic/eui'; import React, { useCallback } from 'react'; import { euiStyled } from '../../../../../observability/public'; -import { MetricsTimeInput } from '../containers/with_metrics_time'; +import { MetricsTimeInput } from '../hooks/use_metrics_time'; import { useKibanaUiSetting } from '../../../utils/use_kibana_ui_setting'; import { mapKibanaQuickRangesToDatePickerRanges } from '../../../utils/map_timepicker_quickranges_to_datepicker_ranges'; @@ -61,8 +61,8 @@ export const MetricsTimeControls = (props: MetricsTimeControlsProps) => { return ( void; - refreshInterval: number; - setRefreshInterval: (refreshInterval: number) => void; - isAutoReloading: boolean; - setAutoReload: (isAutoReloading: boolean) => void; - lastRefresh: number; - triggerRefresh: () => void; -} - -const parseRange = (range: MetricsTimeInput) => { - const parsedFrom = dateMath.parse(range.from); - const parsedTo = dateMath.parse(range.to, { roundUp: true }); - return { - ...range, - from: - (parsedFrom && parsedFrom.valueOf()) || - moment() - .subtract(1, 'hour') - .valueOf(), - to: (parsedTo && parsedTo.valueOf()) || moment().valueOf(), - }; -}; - -export const useMetricsTime = () => { - const defaultRange = { - from: 'now-1h', - to: 'now', - interval: '>=1m', - }; - const [isAutoReloading, setAutoReload] = useState(false); - const [refreshInterval, setRefreshInterval] = useState(5000); - const [lastRefresh, setLastRefresh] = useState(moment().valueOf()); - const [timeRange, setTimeRange] = useState(defaultRange); - - const [parsedTimeRange, setParsedTimeRange] = useState(parseRange(defaultRange)); - - const updateTimeRange = useCallback((range: MetricsTimeInput) => { - setTimeRange(range); - setParsedTimeRange(parseRange(range)); - }, []); - - return { - timeRange, - setTimeRange: updateTimeRange, - parsedTimeRange, - refreshInterval, - setRefreshInterval, - isAutoReloading, - setAutoReload, - lastRefresh, - triggerRefresh: useCallback(() => setLastRefresh(moment().valueOf()), [setLastRefresh]), - }; -}; - -export const MetricsTimeContainer = createContainer(useMetricsTime); - -interface WithMetricsTimeProps { - children: (args: MetricsTimeState) => React.ReactElement; -} -export const WithMetricsTime: React.FunctionComponent = ({ - children, -}: WithMetricsTimeProps) => { - const metricsTimeState = useContext(MetricsTimeContainer.Context); - return children({ ...metricsTimeState }); -}; - -/** - * Url State - */ - -interface MetricsTimeUrlState { - time?: MetricsTimeState['timeRange']; - autoReload?: boolean; - refreshInterval?: number; -} - -export const WithMetricsTimeUrlState = () => ( - - {({ - timeRange, - setTimeRange, - refreshInterval, - setRefreshInterval, - isAutoReloading, - setAutoReload, - }) => ( - { - if (newUrlState && newUrlState.time) { - setTimeRange(newUrlState.time); - } - if (newUrlState && newUrlState.autoReload) { - setAutoReload(true); - } else if ( - newUrlState && - typeof newUrlState.autoReload !== 'undefined' && - !newUrlState.autoReload - ) { - setAutoReload(false); - } - if (newUrlState && newUrlState.refreshInterval) { - setRefreshInterval(newUrlState.refreshInterval); - } - }} - onInitialize={initialUrlState => { - if (initialUrlState && initialUrlState.time) { - if ( - timeRange.from !== initialUrlState.time.from || - timeRange.to !== initialUrlState.time.to || - timeRange.interval !== initialUrlState.time.interval - ) { - setTimeRange(initialUrlState.time); - } - } - if (initialUrlState && initialUrlState.autoReload) { - setAutoReload(true); - } - if (initialUrlState && initialUrlState.refreshInterval) { - setRefreshInterval(initialUrlState.refreshInterval); - } - }} - /> - )} - -); - -const mapToUrlState = (value: any): MetricsTimeUrlState | undefined => - value - ? { - time: mapToTimeUrlState(value.time), - autoReload: mapToAutoReloadUrlState(value.autoReload), - refreshInterval: mapToRefreshInterval(value.refreshInterval), - } - : undefined; - -const MetricsTimeRT = rt.type({ - from: rt.union([rt.string, rt.number]), - to: rt.union([rt.string, rt.number]), - interval: rt.string, -}); - -const mapToTimeUrlState = (value: any) => { - const result = MetricsTimeRT.decode(value); - if (isRight(result)) { - const resultValue = result.right; - const to = isNumber(resultValue.to) ? moment(resultValue.to).toISOString() : resultValue.to; - const from = isNumber(resultValue.from) - ? moment(resultValue.from).toISOString() - : resultValue.from; - return { ...resultValue, from, to }; - } - return undefined; -}; - -const mapToAutoReloadUrlState = (value: any) => (typeof value === 'boolean' ? value : undefined); - -const mapToRefreshInterval = (value: any) => (typeof value === 'number' ? value : undefined); - -export const replaceMetricTimeInQueryString = (from: number, to: number) => - Number.isNaN(from) || Number.isNaN(to) - ? (value: string) => value - : replaceStateKeyInQueryString('metricTime', { - autoReload: false, - time: { - interval: '>=1m', - from: moment(from).toISOString(), - to: moment(to).toISOString(), - }, - }); diff --git a/x-pack/plugins/infra/public/pages/metrics/containers/metrics_time.test.tsx b/x-pack/plugins/infra/public/pages/metrics/hooks/metrics_time.test.tsx similarity index 96% rename from x-pack/plugins/infra/public/pages/metrics/containers/metrics_time.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/hooks/metrics_time.test.tsx index 350fa908109353..17fcc05406470a 100644 --- a/x-pack/plugins/infra/public/pages/metrics/containers/metrics_time.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hooks/metrics_time.test.tsx @@ -6,7 +6,7 @@ import { mountHook } from 'test_utils/enzyme_helpers'; -import { useMetricsTime } from './with_metrics_time'; +import { useMetricsTime } from './use_metrics_time'; describe('useMetricsTime hook', () => { describe('timeRange state', () => { diff --git a/x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts b/x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts new file mode 100644 index 00000000000000..2ed86863535ff7 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import createContainer from 'constate'; +import { useState, useCallback, useEffect } from 'react'; +import moment from 'moment'; +import dateMath from '@elastic/datemath'; +import * as rt from 'io-ts'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { fold } from 'fp-ts/lib/Either'; +import { constant, identity } from 'fp-ts/lib/function'; +import { useUrlState } from '../../../utils/use_url_state'; +import { replaceStateKeyInQueryString } from '../../../utils/url_state'; + +const parseRange = (range: MetricsTimeInput) => { + const parsedFrom = dateMath.parse(range.from.toString()); + const parsedTo = dateMath.parse(range.to.toString(), { roundUp: true }); + return { + ...range, + from: + (parsedFrom && parsedFrom.valueOf()) || + moment() + .subtract(1, 'hour') + .valueOf(), + to: (parsedTo && parsedTo.valueOf()) || moment().valueOf(), + }; +}; + +const DEFAULT_TIMERANGE: MetricsTimeInput = { + from: 'now-1h', + to: 'now', + interval: '>=1m', +}; + +const DEFAULT_URL_STATE: MetricsTimeUrlState = { + time: DEFAULT_TIMERANGE, + autoReload: false, + refreshInterval: 5000, +}; + +export const useMetricsTime = () => { + const [urlState, setUrlState] = useUrlState({ + defaultState: DEFAULT_URL_STATE, + decodeUrlState, + encodeUrlState, + urlStateKey: 'metricTime', + }); + + const [isAutoReloading, setAutoReload] = useState(urlState.autoReload || false); + const [refreshInterval, setRefreshInterval] = useState(urlState.refreshInterval || 5000); + const [lastRefresh, setLastRefresh] = useState(moment().valueOf()); + const [timeRange, setTimeRange] = useState(urlState.time || DEFAULT_TIMERANGE); + + useEffect(() => { + const newState = { + time: timeRange, + autoReload: isAutoReloading, + refreshInterval, + }; + return setUrlState(newState); + }, [isAutoReloading, refreshInterval, setUrlState, timeRange]); + + const [parsedTimeRange, setParsedTimeRange] = useState( + parseRange(urlState.time || DEFAULT_TIMERANGE) + ); + + const updateTimeRange = useCallback((range: MetricsTimeInput) => { + setTimeRange(range); + setParsedTimeRange(parseRange(range)); + }, []); + + return { + timeRange, + setTimeRange: updateTimeRange, + parsedTimeRange, + refreshInterval, + setRefreshInterval, + isAutoReloading, + setAutoReload, + lastRefresh, + triggerRefresh: useCallback(() => { + return setLastRefresh(moment().valueOf()); + }, [setLastRefresh]), + }; +}; + +export const MetricsTimeInputRT = rt.type({ + from: rt.union([rt.string, rt.number]), + to: rt.union([rt.string, rt.number]), + interval: rt.string, +}); +export type MetricsTimeInput = rt.TypeOf; + +export const MetricsTimeUrlStateRT = rt.partial({ + time: MetricsTimeInputRT, + autoReload: rt.boolean, + refreshInterval: rt.number, +}); +export type MetricsTimeUrlState = rt.TypeOf; + +const encodeUrlState = MetricsTimeUrlStateRT.encode; +const decodeUrlState = (value: unknown) => + pipe(MetricsTimeUrlStateRT.decode(value), fold(constant(undefined), identity)); + +export const replaceMetricTimeInQueryString = (from: number, to: number) => + Number.isNaN(from) || Number.isNaN(to) + ? (value: string) => value + : replaceStateKeyInQueryString('metricTime', { + autoReload: false, + time: { + interval: '>=1m', + from: moment(from).toISOString(), + to: moment(to).toISOString(), + }, + }); + +export const MetricsTimeContainer = createContainer(useMetricsTime); +export const [MetricsTimeProvider, useMetricsTimeContext] = MetricsTimeContainer; diff --git a/x-pack/plugins/infra/public/pages/metrics/index.tsx b/x-pack/plugins/infra/public/pages/metrics/index.tsx index 52c9825a4d614f..531be40d2dc43b 100644 --- a/x-pack/plugins/infra/public/pages/metrics/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/index.tsx @@ -9,7 +9,6 @@ import { euiStyled, EuiTheme, withTheme } from '../../../../observability/public import { DocumentTitle } from '../../components/document_title'; import { Header } from '../../components/header'; import { ColumnarPage, PageContent } from '../../components/page'; -import { WithMetricsTime, WithMetricsTimeUrlState } from './containers/with_metrics_time'; import { withMetricPageProviders } from './page_providers'; import { useMetadata } from '../../containers/metadata/use_metadata'; import { Source } from '../../containers/source'; @@ -19,6 +18,7 @@ import { NavItem } from './lib/side_nav_context'; import { NodeDetailsPage } from './components/node_details_page'; import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; import { InventoryItemType } from '../../../common/inventory_models/types'; +import { useMetricsTimeContext } from './hooks/use_metrics_time'; import { useLinkProps } from '../../hooks/use_link_props'; const DetailPageContent = euiStyled(PageContent)` @@ -37,19 +37,29 @@ interface Props { } export const MetricDetail = withMetricPageProviders( - withTheme(({ match, theme }: Props) => { + withTheme(({ match }: Props) => { const uiCapabilities = useKibana().services.application?.capabilities; const nodeId = match.params.node; const nodeType = match.params.type as InventoryItemType; const inventoryModel = findInventoryModel(nodeType); const { sourceId } = useContext(Source.Context); + const { + timeRange, + parsedTimeRange, + setTimeRange, + refreshInterval, + setRefreshInterval, + isAutoReloading, + setAutoReload, + triggerRefresh, + } = useMetricsTimeContext(); const { name, filteredRequiredMetrics, loading: metadataLoading, cloudId, metadata, - } = useMetadata(nodeId, nodeType, inventoryModel.requiredMetrics, sourceId); + } = useMetadata(nodeId, nodeType, inventoryModel.requiredMetrics, sourceId, parsedTimeRange); const [sideNav, setSideNav] = useState([]); @@ -90,58 +100,41 @@ export const MetricDetail = withMetricPageProviders( } return ( - - {({ - timeRange, - parsedTimeRange, - setTimeRange, - refreshInterval, - setRefreshInterval, - isAutoReloading, - setAutoReload, - triggerRefresh, - }) => ( - -
- - +
+ + + {metadata ? ( + - - {metadata ? ( - - ) : null} - - - )} - + ) : null} + + ); }) ); diff --git a/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx b/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx index 0abbd597dd65cd..d3f10adec06ed7 100644 --- a/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx @@ -6,15 +6,15 @@ import React from 'react'; -import { MetricsTimeContainer } from './containers/with_metrics_time'; import { Source } from '../../containers/source'; +import { MetricsTimeProvider } from './hooks/use_metrics_time'; export const withMetricPageProviders = (Component: React.ComponentType) => ( props: T ) => ( - + - + ); diff --git a/x-pack/plugins/infra/public/pages/metrics/types.ts b/x-pack/plugins/infra/public/pages/metrics/types.ts index fd6243292ec07d..2cc261df289772 100644 --- a/x-pack/plugins/infra/public/pages/metrics/types.ts +++ b/x-pack/plugins/infra/public/pages/metrics/types.ts @@ -7,7 +7,7 @@ import rt from 'io-ts'; import { EuiTheme } from '../../../../observability/public'; import { InventoryFormatterTypeRT } from '../../../common/inventory_models/types'; -import { MetricsTimeInput } from './containers/with_metrics_time'; +import { MetricsTimeInput } from './hooks/use_metrics_time'; import { NodeDetailsMetricData } from '../../../common/http_api/node_details_api'; export interface LayoutProps { diff --git a/x-pack/plugins/infra/public/store/actions.ts b/x-pack/plugins/infra/public/store/actions.ts deleted file mode 100644 index 8a5d1f6c668d0b..00000000000000 --- a/x-pack/plugins/infra/public/store/actions.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { waffleFilterActions, waffleTimeActions, waffleOptionsActions } from './local'; diff --git a/x-pack/plugins/infra/public/store/epics.ts b/x-pack/plugins/infra/public/store/epics.ts deleted file mode 100644 index b5e48a4ec6214e..00000000000000 --- a/x-pack/plugins/infra/public/store/epics.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineEpics } from 'redux-observable'; - -import { createLocalEpic } from './local'; - -export const createRootEpic = () => combineEpics(createLocalEpic()); diff --git a/x-pack/plugins/infra/public/store/index.ts b/x-pack/plugins/infra/public/store/index.ts deleted file mode 100644 index 025da41ec40d51..00000000000000 --- a/x-pack/plugins/infra/public/store/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export * from './actions'; -export * from './epics'; -export * from './reducer'; -export * from './selectors'; -export { createStore } from './store'; diff --git a/x-pack/plugins/infra/public/store/local/actions.ts b/x-pack/plugins/infra/public/store/local/actions.ts deleted file mode 100644 index 1c79d5a515cd4e..00000000000000 --- a/x-pack/plugins/infra/public/store/local/actions.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export { waffleFilterActions } from './waffle_filter'; -export { waffleTimeActions } from './waffle_time'; -export { waffleOptionsActions } from './waffle_options'; diff --git a/x-pack/plugins/infra/public/store/local/epic.ts b/x-pack/plugins/infra/public/store/local/epic.ts deleted file mode 100644 index e1a051355576f7..00000000000000 --- a/x-pack/plugins/infra/public/store/local/epic.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineEpics } from 'redux-observable'; - -import { createWaffleTimeEpic } from './waffle_time'; - -export const createLocalEpic = () => combineEpics(createWaffleTimeEpic()); diff --git a/x-pack/plugins/infra/public/store/local/index.ts b/x-pack/plugins/infra/public/store/local/index.ts deleted file mode 100644 index c2843320bfd0cc..00000000000000 --- a/x-pack/plugins/infra/public/store/local/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export * from './actions'; -export * from './epic'; -export * from './reducer'; -export * from './selectors'; diff --git a/x-pack/plugins/infra/public/store/local/reducer.ts b/x-pack/plugins/infra/public/store/local/reducer.ts deleted file mode 100644 index 9e194a5d37f493..00000000000000 --- a/x-pack/plugins/infra/public/store/local/reducer.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineReducers } from 'redux'; - -import { initialWaffleFilterState, waffleFilterReducer, WaffleFilterState } from './waffle_filter'; -import { - initialWaffleOptionsState, - waffleOptionsReducer, - WaffleOptionsState, -} from './waffle_options'; -import { initialWaffleTimeState, waffleTimeReducer, WaffleTimeState } from './waffle_time'; - -export interface LocalState { - waffleFilter: WaffleFilterState; - waffleTime: WaffleTimeState; - waffleMetrics: WaffleOptionsState; -} - -export const initialLocalState: LocalState = { - waffleFilter: initialWaffleFilterState, - waffleTime: initialWaffleTimeState, - waffleMetrics: initialWaffleOptionsState, -}; - -export const localReducer = combineReducers({ - waffleFilter: waffleFilterReducer, - waffleTime: waffleTimeReducer, - waffleMetrics: waffleOptionsReducer, -}); diff --git a/x-pack/plugins/infra/public/store/local/selectors.ts b/x-pack/plugins/infra/public/store/local/selectors.ts deleted file mode 100644 index 56ffc53c2bc72a..00000000000000 --- a/x-pack/plugins/infra/public/store/local/selectors.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { globalizeSelectors } from '../../utils/typed_redux'; -import { LocalState } from './reducer'; -import { waffleFilterSelectors as innerWaffleFilterSelectors } from './waffle_filter'; -import { waffleOptionsSelectors as innerWaffleOptionsSelectors } from './waffle_options'; -import { waffleTimeSelectors as innerWaffleTimeSelectors } from './waffle_time'; - -export const waffleFilterSelectors = globalizeSelectors( - (state: LocalState) => state.waffleFilter, - innerWaffleFilterSelectors -); - -export const waffleTimeSelectors = globalizeSelectors( - (state: LocalState) => state.waffleTime, - innerWaffleTimeSelectors -); - -export const waffleOptionsSelectors = globalizeSelectors( - (state: LocalState) => state.waffleMetrics, - innerWaffleOptionsSelectors -); diff --git a/x-pack/plugins/infra/public/store/local/waffle_filter/actions.ts b/x-pack/plugins/infra/public/store/local/waffle_filter/actions.ts deleted file mode 100644 index a23f9b3108b5b1..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_filter/actions.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import actionCreatorFactory from 'typescript-fsa'; - -import { FilterQuery, SerializedFilterQuery } from './reducer'; - -const actionCreator = actionCreatorFactory('x-pack/infra/local/waffle_filter'); - -export const setWaffleFilterQueryDraft = actionCreator( - 'SET_WAFFLE_FILTER_QUERY_DRAFT' -); - -export const applyWaffleFilterQuery = actionCreator( - 'APPLY_WAFFLE_FILTER_QUERY' -); diff --git a/x-pack/plugins/infra/public/store/local/waffle_filter/index.ts b/x-pack/plugins/infra/public/store/local/waffle_filter/index.ts deleted file mode 100644 index 558314f2aeda8e..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_filter/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import * as waffleFilterActions from './actions'; -import * as waffleFilterSelectors from './selectors'; - -export { waffleFilterActions, waffleFilterSelectors }; -export * from './reducer'; diff --git a/x-pack/plugins/infra/public/store/local/waffle_filter/reducer.ts b/x-pack/plugins/infra/public/store/local/waffle_filter/reducer.ts deleted file mode 100644 index 912ad96357334d..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_filter/reducer.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { reducerWithInitialState } from 'typescript-fsa-reducers/dist'; - -import { applyWaffleFilterQuery, setWaffleFilterQueryDraft } from './actions'; - -export interface KueryFilterQuery { - kind: 'kuery'; - expression: string; -} - -export type FilterQuery = KueryFilterQuery; - -export interface SerializedFilterQuery { - query: FilterQuery | null; - serializedQuery: string | null; -} - -export interface WaffleFilterState { - filterQuery: SerializedFilterQuery | null; - filterQueryDraft: KueryFilterQuery | null; -} - -export const initialWaffleFilterState: WaffleFilterState = { - filterQuery: null, - filterQueryDraft: null, -}; - -export const waffleFilterReducer = reducerWithInitialState(initialWaffleFilterState) - .case(setWaffleFilterQueryDraft, (state, filterQueryDraft) => ({ - ...state, - filterQueryDraft, - })) - .case(applyWaffleFilterQuery, (state, filterQuery) => ({ - ...state, - filterQuery, - filterQueryDraft: filterQuery.query, - })) - .build(); diff --git a/x-pack/plugins/infra/public/store/local/waffle_filter/selectors.ts b/x-pack/plugins/infra/public/store/local/waffle_filter/selectors.ts deleted file mode 100644 index 047dabd3f0dd3e..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_filter/selectors.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { createSelector } from 'reselect'; - -import { esKuery } from '../../../../../../../src/plugins/data/public'; -import { WaffleFilterState } from './reducer'; - -export const selectWaffleFilterQuery = (state: WaffleFilterState) => - state.filterQuery ? state.filterQuery.query : null; - -export const selectWaffleFilterQueryAsJson = (state: WaffleFilterState) => - state.filterQuery ? state.filterQuery.serializedQuery : null; - -export const selectWaffleFilterQueryDraft = (state: WaffleFilterState) => state.filterQueryDraft; - -export const selectIsWaffleFilterQueryDraftValid = createSelector( - selectWaffleFilterQueryDraft, - filterQueryDraft => { - if (filterQueryDraft && filterQueryDraft.kind === 'kuery') { - try { - esKuery.fromKueryExpression(filterQueryDraft.expression); - } catch (err) { - return false; - } - } - - return true; - } -); diff --git a/x-pack/plugins/infra/public/store/local/waffle_options/actions.ts b/x-pack/plugins/infra/public/store/local/waffle_options/actions.ts deleted file mode 100644 index 88229c31b2056f..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_options/actions.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import actionCreatorFactory from 'typescript-fsa'; -import { - SnapshotGroupBy, - SnapshotMetricInput, - SnapshotCustomMetricInput, -} from '../../../../common/http_api/snapshot_api'; -import { InventoryItemType } from '../../../../common/inventory_models/types'; -import { InfraGroupByOptions, InfraWaffleMapBounds } from '../../../lib/lib'; - -const actionCreator = actionCreatorFactory('x-pack/infra/local/waffle_options'); - -export const changeMetric = actionCreator('CHANGE_METRIC'); -export const changeGroupBy = actionCreator('CHANGE_GROUP_BY'); -export const changeCustomOptions = actionCreator('CHANGE_CUSTOM_OPTIONS'); -export const changeNodeType = actionCreator('CHANGE_NODE_TYPE'); -export const changeView = actionCreator('CHANGE_VIEW'); -export const changeBoundsOverride = actionCreator('CHANGE_BOUNDS_OVERRIDE'); -export const changeAutoBounds = actionCreator('CHANGE_AUTO_BOUNDS'); -export const changeAccount = actionCreator('CHANGE_ACCOUNT'); -export const changeRegion = actionCreator('CHANGE_REGION'); -export const changeCustomMetrics = actionCreator( - 'CHANGE_CUSTOM_METRICS' -); diff --git a/x-pack/plugins/infra/public/store/local/waffle_options/index.ts b/x-pack/plugins/infra/public/store/local/waffle_options/index.ts deleted file mode 100644 index 3ecf108eb49d4f..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_options/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import * as waffleOptionsActions from './actions'; -import * as waffleOptionsSelectors from './selector'; - -export { waffleOptionsActions, waffleOptionsSelectors }; -export * from './reducer'; diff --git a/x-pack/plugins/infra/public/store/local/waffle_options/reducer.ts b/x-pack/plugins/infra/public/store/local/waffle_options/reducer.ts deleted file mode 100644 index 3789228a7c16b0..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_options/reducer.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineReducers } from 'redux'; -import { reducerWithInitialState } from 'typescript-fsa-reducers'; -import { - SnapshotMetricInput, - SnapshotGroupBy, - SnapshotCustomMetricInput, -} from '../../../../common/http_api/snapshot_api'; -import { InfraGroupByOptions, InfraWaffleMapBounds } from '../../../lib/lib'; -import { - changeAutoBounds, - changeBoundsOverride, - changeCustomOptions, - changeGroupBy, - changeMetric, - changeNodeType, - changeView, - changeAccount, - changeRegion, - changeCustomMetrics, -} from './actions'; -import { InventoryItemType } from '../../../../common/inventory_models/types'; - -export interface WaffleOptionsState { - metric: SnapshotMetricInput; - groupBy: SnapshotGroupBy; - nodeType: InventoryItemType; - view: string; - customOptions: InfraGroupByOptions[]; - boundsOverride: InfraWaffleMapBounds; - autoBounds: boolean; - accountId: string; - region: string; - customMetrics: SnapshotCustomMetricInput[]; -} - -export const initialWaffleOptionsState: WaffleOptionsState = { - metric: { type: 'cpu' }, - groupBy: [], - nodeType: 'host', - view: 'map', - customOptions: [], - boundsOverride: { max: 1, min: 0 }, - autoBounds: true, - accountId: '', - region: '', - customMetrics: [], -}; - -const currentMetricReducer = reducerWithInitialState(initialWaffleOptionsState.metric).case( - changeMetric, - (current, target) => target -); - -const currentCustomOptionsReducer = reducerWithInitialState( - initialWaffleOptionsState.customOptions -).case(changeCustomOptions, (current, target) => target); - -const currentGroupByReducer = reducerWithInitialState(initialWaffleOptionsState.groupBy).case( - changeGroupBy, - (current, target) => target -); - -const currentNodeTypeReducer = reducerWithInitialState(initialWaffleOptionsState.nodeType).case( - changeNodeType, - (current, target) => target -); - -const currentViewReducer = reducerWithInitialState(initialWaffleOptionsState.view).case( - changeView, - (current, target) => target -); - -const currentBoundsOverrideReducer = reducerWithInitialState( - initialWaffleOptionsState.boundsOverride -).case(changeBoundsOverride, (current, target) => target); - -const currentAutoBoundsReducer = reducerWithInitialState(initialWaffleOptionsState.autoBounds).case( - changeAutoBounds, - (current, target) => target -); - -const currentAccountIdReducer = reducerWithInitialState(initialWaffleOptionsState.accountId).case( - changeAccount, - (current, target) => target -); - -const currentRegionReducer = reducerWithInitialState(initialWaffleOptionsState.region).case( - changeRegion, - (current, target) => target -); - -const currentCustomMetricsReducer = reducerWithInitialState( - initialWaffleOptionsState.customMetrics -).case(changeCustomMetrics, (current, target) => target); - -export const waffleOptionsReducer = combineReducers({ - metric: currentMetricReducer, - groupBy: currentGroupByReducer, - nodeType: currentNodeTypeReducer, - view: currentViewReducer, - customOptions: currentCustomOptionsReducer, - boundsOverride: currentBoundsOverrideReducer, - autoBounds: currentAutoBoundsReducer, - accountId: currentAccountIdReducer, - region: currentRegionReducer, - customMetrics: currentCustomMetricsReducer, -}); diff --git a/x-pack/plugins/infra/public/store/local/waffle_options/selector.ts b/x-pack/plugins/infra/public/store/local/waffle_options/selector.ts deleted file mode 100644 index 4487af156df971..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_options/selector.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { WaffleOptionsState } from './reducer'; - -export const selectMetric = (state: WaffleOptionsState) => state.metric; -export const selectGroupBy = (state: WaffleOptionsState) => state.groupBy; -export const selectCustomOptions = (state: WaffleOptionsState) => state.customOptions; -export const selectNodeType = (state: WaffleOptionsState) => state.nodeType; -export const selectView = (state: WaffleOptionsState) => state.view; -export const selectBoundsOverride = (state: WaffleOptionsState) => state.boundsOverride; -export const selectAutoBounds = (state: WaffleOptionsState) => state.autoBounds; -export const selectAccountId = (state: WaffleOptionsState) => state.accountId; -export const selectRegion = (state: WaffleOptionsState) => state.region; -export const selectCustomMetrics = (state: WaffleOptionsState) => state.customMetrics; diff --git a/x-pack/plugins/infra/public/store/local/waffle_time/actions.ts b/x-pack/plugins/infra/public/store/local/waffle_time/actions.ts deleted file mode 100644 index fe79f2f536a936..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_time/actions.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import actionCreatorFactory from 'typescript-fsa'; - -const actionCreator = actionCreatorFactory('x-pack/infra/local/waffle_time'); - -export const jumpToTime = actionCreator('JUMP_TO_TIME'); - -export const startAutoReload = actionCreator('START_AUTO_RELOAD'); - -export const stopAutoReload = actionCreator('STOP_AUTO_RELOAD'); diff --git a/x-pack/plugins/infra/public/store/local/waffle_time/epic.ts b/x-pack/plugins/infra/public/store/local/waffle_time/epic.ts deleted file mode 100644 index 986d6b17a24242..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_time/epic.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Action } from 'redux'; -import { Epic } from 'redux-observable'; -import { timer } from 'rxjs'; -import { exhaustMap, filter, map, takeUntil, withLatestFrom } from 'rxjs/operators'; - -import { jumpToTime, startAutoReload, stopAutoReload } from './actions'; - -interface WaffleTimeEpicDependencies { - selectWaffleTimeUpdatePolicyInterval: (state: State) => number | null; -} - -export const createWaffleTimeEpic = (): Epic< - Action, - Action, - State, - WaffleTimeEpicDependencies -> => (action$, state$, { selectWaffleTimeUpdatePolicyInterval }) => { - const updateInterval$ = state$.pipe(map(selectWaffleTimeUpdatePolicyInterval), filter(isNotNull)); - - return action$.pipe( - filter(startAutoReload.match), - withLatestFrom(updateInterval$), - exhaustMap(([action, updateInterval]) => - timer(0, updateInterval).pipe( - map(() => jumpToTime(Date.now())), - takeUntil(action$.pipe(filter(stopAutoReload.match))) - ) - ) - ); -}; - -const isNotNull = (value: T | null): value is T => value !== null; diff --git a/x-pack/plugins/infra/public/store/local/waffle_time/index.ts b/x-pack/plugins/infra/public/store/local/waffle_time/index.ts deleted file mode 100644 index 2b99a6d6d57600..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_time/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import * as waffleTimeActions from './actions'; -import * as waffleTimeSelectors from './selectors'; - -export { waffleTimeActions, waffleTimeSelectors }; -export * from './epic'; -export * from './reducer'; diff --git a/x-pack/plugins/infra/public/store/local/waffle_time/reducer.ts b/x-pack/plugins/infra/public/store/local/waffle_time/reducer.ts deleted file mode 100644 index 026e5decf5d376..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_time/reducer.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineReducers } from 'redux'; -import { reducerWithInitialState } from 'typescript-fsa-reducers/dist'; - -import { jumpToTime, startAutoReload, stopAutoReload } from './actions'; - -interface ManualTimeUpdatePolicy { - policy: 'manual'; -} - -interface IntervalTimeUpdatePolicy { - policy: 'interval'; - interval: number; -} - -type TimeUpdatePolicy = ManualTimeUpdatePolicy | IntervalTimeUpdatePolicy; - -export interface WaffleTimeState { - currentTime: number; - updatePolicy: TimeUpdatePolicy; -} - -export const initialWaffleTimeState: WaffleTimeState = { - currentTime: Date.now(), - updatePolicy: { - policy: 'manual', - }, -}; - -const currentTimeReducer = reducerWithInitialState(initialWaffleTimeState.currentTime).case( - jumpToTime, - (currentTime, targetTime) => targetTime -); - -const updatePolicyReducer = reducerWithInitialState(initialWaffleTimeState.updatePolicy) - .case(startAutoReload, () => ({ - policy: 'interval', - interval: 5000, - })) - .case(stopAutoReload, () => ({ - policy: 'manual', - })); - -export const waffleTimeReducer = combineReducers({ - currentTime: currentTimeReducer, - updatePolicy: updatePolicyReducer, -}); diff --git a/x-pack/plugins/infra/public/store/local/waffle_time/selectors.ts b/x-pack/plugins/infra/public/store/local/waffle_time/selectors.ts deleted file mode 100644 index 0b6d01bdf52883..00000000000000 --- a/x-pack/plugins/infra/public/store/local/waffle_time/selectors.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { createSelector } from 'reselect'; - -import { WaffleTimeState } from './reducer'; - -export const selectCurrentTime = (state: WaffleTimeState) => state.currentTime; - -export const selectIsAutoReloading = (state: WaffleTimeState) => - state.updatePolicy.policy === 'interval'; - -export const selectTimeUpdatePolicyInterval = (state: WaffleTimeState) => - state.updatePolicy.policy === 'interval' ? state.updatePolicy.interval : null; - -export const selectCurrentTimeRange = createSelector(selectCurrentTime, currentTime => ({ - from: currentTime - 1000 * 60 * 5, - interval: '1m', - to: currentTime, -})); diff --git a/x-pack/plugins/infra/public/store/reducer.ts b/x-pack/plugins/infra/public/store/reducer.ts deleted file mode 100644 index 2536ddbee401bf..00000000000000 --- a/x-pack/plugins/infra/public/store/reducer.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { combineReducers } from 'redux'; - -import { initialLocalState, localReducer, LocalState } from './local'; - -export interface State { - local: LocalState; -} - -export const initialState: State = { - local: initialLocalState, -}; - -export const reducer = combineReducers({ - local: localReducer, -}); diff --git a/x-pack/plugins/infra/public/store/selectors.ts b/x-pack/plugins/infra/public/store/selectors.ts deleted file mode 100644 index f4011c232cba45..00000000000000 --- a/x-pack/plugins/infra/public/store/selectors.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { globalizeSelectors } from '../utils/typed_redux'; -import { - waffleFilterSelectors as localWaffleFilterSelectors, - waffleOptionsSelectors as localWaffleOptionsSelectors, - waffleTimeSelectors as localWaffleTimeSelectors, -} from './local'; -import { State } from './reducer'; -/** - * local selectors - */ - -const selectLocal = (state: State) => state.local; - -export const waffleFilterSelectors = globalizeSelectors(selectLocal, localWaffleFilterSelectors); -export const waffleTimeSelectors = globalizeSelectors(selectLocal, localWaffleTimeSelectors); -export const waffleOptionsSelectors = globalizeSelectors(selectLocal, localWaffleOptionsSelectors); diff --git a/x-pack/plugins/infra/public/store/store.ts b/x-pack/plugins/infra/public/store/store.ts deleted file mode 100644 index cae0622c5e4a15..00000000000000 --- a/x-pack/plugins/infra/public/store/store.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { Action, applyMiddleware, compose, createStore as createBasicStore } from 'redux'; -import { createEpicMiddleware } from 'redux-observable'; -import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; - -import { createRootEpic, initialState, reducer, State, waffleTimeSelectors } from '.'; -import { InfraApolloClient, InfraObservableApi } from '../lib/lib'; - -declare global { - interface Window { - __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: typeof compose; - } -} - -export interface StoreDependencies { - apolloClient: Observable; - observableApi: Observable; -} - -export function createStore({ apolloClient, observableApi }: StoreDependencies) { - const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; - - const middlewareDependencies = { - postToApi$: observableApi.pipe(map(({ post }) => post)), - apolloClient$: apolloClient, - selectWaffleTimeUpdatePolicyInterval: waffleTimeSelectors.selectTimeUpdatePolicyInterval, - }; - - const epicMiddleware = createEpicMiddleware( - { - dependencies: middlewareDependencies, - } - ); - - const store = createBasicStore( - reducer, - initialState, - composeEnhancers(applyMiddleware(epicMiddleware)) - ); - - epicMiddleware.run(createRootEpic()); - - return store; -} diff --git a/x-pack/plugins/infra/public/utils/redux_context.tsx b/x-pack/plugins/infra/public/utils/redux_context.tsx deleted file mode 100644 index f249d72a6b56fc..00000000000000 --- a/x-pack/plugins/infra/public/utils/redux_context.tsx +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { useSelector } from 'react-redux'; -import React, { createContext } from 'react'; -import { State, initialState } from '../store'; - -export const ReduxStateContext = createContext(initialState); - -export const ReduxStateContextProvider = ({ children }: { children: JSX.Element }) => { - const state = useSelector((store: State) => store); - return {children}; -}; diff --git a/x-pack/plugins/infra/server/routes/metadata/index.ts b/x-pack/plugins/infra/server/routes/metadata/index.ts index 03d28110d612a1..c45f191b1130d8 100644 --- a/x-pack/plugins/infra/server/routes/metadata/index.ts +++ b/x-pack/plugins/infra/server/routes/metadata/index.ts @@ -38,7 +38,7 @@ export const initMetadataRoute = (libs: InfraBackendLibs) => { }, async (requestContext, request, response) => { try { - const { nodeId, nodeType, sourceId } = pipe( + const { nodeId, nodeType, sourceId, timeRange } = pipe( InfraMetadataRequestRT.decode(request.body), fold(throwErrors(Boom.badRequest), identity) ); @@ -52,7 +52,8 @@ export const initMetadataRoute = (libs: InfraBackendLibs) => { requestContext, configuration, nodeId, - nodeType + nodeType, + timeRange ); const metricFeatures = pickFeatureName(metricsMetadata.buckets).map( nameToFeature('metrics') @@ -62,7 +63,13 @@ export const initMetadataRoute = (libs: InfraBackendLibs) => { const cloudInstanceId = get(info, 'cloud.instance.id'); const cloudMetricsMetadata = cloudInstanceId - ? await getCloudMetricsMetadata(framework, requestContext, configuration, cloudInstanceId) + ? await getCloudMetricsMetadata( + framework, + requestContext, + configuration, + cloudInstanceId, + timeRange + ) : { buckets: [] }; const cloudMetricsFeatures = pickFeatureName(cloudMetricsMetadata.buckets).map( nameToFeature('metrics') diff --git a/x-pack/plugins/infra/server/routes/metadata/lib/get_cloud_metric_metadata.ts b/x-pack/plugins/infra/server/routes/metadata/lib/get_cloud_metric_metadata.ts index 75ca3ae3caee21..54a1ca0aaa7e04 100644 --- a/x-pack/plugins/infra/server/routes/metadata/lib/get_cloud_metric_metadata.ts +++ b/x-pack/plugins/infra/server/routes/metadata/lib/get_cloud_metric_metadata.ts @@ -21,7 +21,8 @@ export const getCloudMetricsMetadata = async ( framework: KibanaFramework, requestContext: RequestHandlerContext, sourceConfiguration: InfraSourceConfiguration, - instanceId: string + instanceId: string, + timeRange: { from: number; to: number } ): Promise => { const metricQuery = { allowNoIndices: true, @@ -30,7 +31,18 @@ export const getCloudMetricsMetadata = async ( body: { query: { bool: { - filter: [{ match: { 'cloud.instance.id': instanceId } }], + filter: [ + { match: { 'cloud.instance.id': instanceId } }, + { + range: { + [sourceConfiguration.fields.timestamp]: { + gte: timeRange.from, + lte: timeRange.to, + format: 'epoch_millis', + }, + }, + }, + ], should: CLOUD_METRICS_MODULES.map(module => ({ match: { 'event.module': module } })), }, }, diff --git a/x-pack/plugins/infra/server/routes/metadata/lib/get_metric_metadata.ts b/x-pack/plugins/infra/server/routes/metadata/lib/get_metric_metadata.ts index 191339565b813f..7753d3161039b4 100644 --- a/x-pack/plugins/infra/server/routes/metadata/lib/get_metric_metadata.ts +++ b/x-pack/plugins/infra/server/routes/metadata/lib/get_metric_metadata.ts @@ -26,7 +26,8 @@ export const getMetricMetadata = async ( requestContext: RequestHandlerContext, sourceConfiguration: InfraSourceConfiguration, nodeId: string, - nodeType: InventoryItemType + nodeType: InventoryItemType, + timeRange: { from: number; to: number } ): Promise => { const fields = findInventoryFields(nodeType, sourceConfiguration.fields); const metricQuery = { @@ -41,6 +42,15 @@ export const getMetricMetadata = async ( { match: { [fields.id]: nodeId }, }, + { + range: { + [sourceConfiguration.fields.timestamp]: { + gte: timeRange.from, + lte: timeRange.to, + format: 'epoch_millis', + }, + }, + }, ], }, }, diff --git a/x-pack/test/api_integration/apis/infra/metadata.ts b/x-pack/test/api_integration/apis/infra/metadata.ts index b693881abcdf72..5187cc5e3ec26a 100644 --- a/x-pack/test/api_integration/apis/infra/metadata.ts +++ b/x-pack/test/api_integration/apis/infra/metadata.ts @@ -12,6 +12,28 @@ import { } from '../../../../plugins/infra/common/http_api/metadata_api'; import { FtrProviderContext } from '../../ftr_provider_context'; +import { DATES } from './constants'; + +const timeRange700 = { + from: DATES['7.0.0'].hosts.min, + to: DATES[`7.0.0`].hosts.max, +}; + +const timeRange660 = { + from: DATES['6.6.0'].docker.min, + to: DATES[`6.6.0`].docker.max, +}; + +const timeRange800withAws = { + from: DATES['8.0.0'].logs_and_metrics_with_aws.min, + to: DATES[`8.0.0`].logs_and_metrics_with_aws.max, +}; + +const timeRange800 = { + from: DATES['8.0.0'].logs_and_metrics.min, + to: DATES[`8.0.0`].logs_and_metrics.max, +}; + export default function({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); @@ -34,6 +56,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'demo-stack-mysql-01', nodeType: InfraNodeType.host, + timeRange: timeRange700, }); if (metadata) { expect(metadata.features.length).to.be(12); @@ -53,6 +76,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: '631f36a845514442b93c3fdd2dc91bcd8feb680b8ac5832c7fb8fdc167bb938e', nodeType: InfraNodeType.container, + timeRange: timeRange660, }); if (metadata) { expect(metadata.features.length).to.be(10); @@ -74,6 +98,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'gke-observability-8--observability-8--bc1afd95-f0zc', nodeType: InfraNodeType.host, + timeRange: timeRange800withAws, }); if (metadata) { expect(metadata.features.length).to.be(58); @@ -114,6 +139,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'ip-172-31-47-9.us-east-2.compute.internal', nodeType: InfraNodeType.host, + timeRange: timeRange800withAws, }); if (metadata) { expect(metadata.features.length).to.be(19); @@ -155,6 +181,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: '14887487-99f8-11e9-9a96-42010a84004d', nodeType: InfraNodeType.pod, + timeRange: timeRange800withAws, }); if (metadata) { expect(metadata.features.length).to.be(29); @@ -200,6 +227,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'c74b04834c6d7cc1800c3afbe31d0c8c0c267f06e9eb45c2b0c2df3e6cee40c5', nodeType: InfraNodeType.container, + timeRange: timeRange800withAws, }); if (metadata) { expect(metadata.features.length).to.be(26); @@ -251,6 +279,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'gke-observability-8--observability-8--bc1afd95-f0zc', nodeType: 'host', + timeRange: timeRange800, }); if (metadata) { expect( @@ -265,6 +294,7 @@ export default function({ getService }: FtrProviderContext) { sourceId: 'default', nodeId: 'c1031331-9ae0-11e9-9a96-42010a84004d', nodeType: 'pod', + timeRange: timeRange800, }); if (metadata) { expect( diff --git a/x-pack/typings/rison_node.d.ts b/x-pack/typings/rison_node.d.ts index ec8e5c1f407adc..f830adc8974456 100644 --- a/x-pack/typings/rison_node.d.ts +++ b/x-pack/typings/rison_node.d.ts @@ -5,7 +5,7 @@ */ declare module 'rison-node' { - export type RisonValue = null | boolean | number | string | RisonObject | RisonArray; + export type RisonValue = undefined | null | boolean | number | string | RisonObject | RisonArray; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface RisonArray extends Array {} From 3e2665441633472fc57ba41b1a11bcf9b45db049 Mon Sep 17 00:00:00 2001 From: Pete Harverson Date: Tue, 14 Apr 2020 17:49:46 +0100 Subject: [PATCH 48/65] [ML] Converts utils Mocha tests to Jest (#63132) * [ML] Converts utils Mocha tests to Jest * [ML] Remove unused imports * [ML] Switch out enzyme mount for react testing library render Co-authored-by: Elastic Machine --- .../ml/common/util/__tests__/anomaly_utils.js | 443 ------------- .../plugins/ml/common/util/anomaly_utils.d.ts | 11 - .../ml/common/util/anomaly_utils.test.ts | 444 +++++++++++++ .../{anomaly_utils.js => anomaly_utils.ts} | 54 +- .../{__tests__/utils.js => utils.test.js} | 45 +- .../util/__tests__/calc_auto_interval.js | 140 ---- .../application/util/__tests__/chart_utils.js | 297 --------- .../util/__tests__/string_utils.js | 229 ------- .../util/calc_auto_interval.test.js | 139 ++++ .../application/util/chart_utils.test.js | 624 ++++++++++++------ .../public/application/util/string_utils.d.ts | 4 + .../public/application/util/string_utils.js | 205 ------ .../application/util/string_utils.test.ts | 193 ++++++ 13 files changed, 1271 insertions(+), 1557 deletions(-) delete mode 100644 x-pack/plugins/ml/common/util/__tests__/anomaly_utils.js delete mode 100644 x-pack/plugins/ml/common/util/anomaly_utils.d.ts create mode 100644 x-pack/plugins/ml/common/util/anomaly_utils.test.ts rename x-pack/plugins/ml/common/util/{anomaly_utils.js => anomaly_utils.ts} (87%) rename x-pack/plugins/ml/public/application/components/rule_editor/{__tests__/utils.js => utils.test.js} (66%) delete mode 100644 x-pack/plugins/ml/public/application/util/__tests__/calc_auto_interval.js delete mode 100644 x-pack/plugins/ml/public/application/util/__tests__/chart_utils.js delete mode 100644 x-pack/plugins/ml/public/application/util/__tests__/string_utils.js create mode 100644 x-pack/plugins/ml/public/application/util/calc_auto_interval.test.js create mode 100644 x-pack/plugins/ml/public/application/util/string_utils.test.ts diff --git a/x-pack/plugins/ml/common/util/__tests__/anomaly_utils.js b/x-pack/plugins/ml/common/util/__tests__/anomaly_utils.js deleted file mode 100644 index 515304d222c8c7..00000000000000 --- a/x-pack/plugins/ml/common/util/__tests__/anomaly_utils.js +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { - getSeverity, - getSeverityWithLow, - getSeverityColor, - getMultiBucketImpactLabel, - getEntityFieldName, - getEntityFieldValue, - getEntityFieldList, - showActualForFunction, - showTypicalForFunction, - isRuleSupported, - aggregationTypeTransform, -} from '../anomaly_utils'; - -describe('ML - anomaly utils', () => { - const partitionEntityRecord = { - job_id: 'farequote', - result_type: 'record', - probability: 0.012818, - record_score: 0.0162059, - bucket_span: 300, - detector_index: 0, - timestamp: 1455047400000, - partition_field_name: 'airline', - partition_field_value: 'AAL', - function: 'mean', - function_description: 'mean', - field_name: 'responsetime', - }; - - const byEntityRecord = { - job_id: 'farequote', - result_type: 'record', - probability: 0.012818, - record_score: 0.0162059, - bucket_span: 300, - detector_index: 0, - timestamp: 1455047400000, - by_field_name: 'airline', - by_field_value: 'JZA', - function: 'mean', - function_description: 'mean', - field_name: 'responsetime', - }; - - const overEntityRecord = { - job_id: 'gallery', - result_type: 'record', - probability: 2.81806e-9, - record_score: 59.055, - bucket_span: 3600, - detector_index: 4, - timestamp: 1420552800000, - function: 'sum', - function_description: 'sum', - field_name: 'bytes', - by_field_name: 'method', - over_field_name: 'clientip', - over_field_value: '37.157.32.164', - }; - - const noEntityRecord = { - job_id: 'farequote_no_by', - result_type: 'record', - probability: 0.0191711, - record_score: 4.38431, - initial_record_score: 19.654, - bucket_span: 300, - detector_index: 0, - timestamp: 1454890500000, - function: 'mean', - function_description: 'mean', - field_name: 'responsetime', - }; - - const metricNoEntityRecord = { - job_id: 'farequote_metric', - result_type: 'record', - probability: 0.030133495093182184, - record_score: 0.024881740359975164, - initial_record_score: 0.024881740359975164, - bucket_span: 900, - detector_index: 0, - is_interim: false, - timestamp: 1486845000000, - function: 'metric', - function_description: 'mean', - typical: [545.7764658569108], - actual: [758.8220213274412], - field_name: 'responsetime', - influencers: [ - { - influencer_field_name: 'airline', - influencer_field_values: ['NKS'], - }, - ], - airline: ['NKS'], - }; - - const rareEntityRecord = { - job_id: 'gallery', - result_type: 'record', - probability: 0.02277014211908481, - record_score: 4.545378107075983, - initial_record_score: 4.545378107075983, - bucket_span: 3600, - detector_index: 0, - is_interim: false, - timestamp: 1495879200000, - by_field_name: 'status', - function: 'rare', - function_description: 'rare', - over_field_name: 'clientip', - over_field_value: '173.252.74.112', - causes: [ - { - probability: 0.02277014211908481, - by_field_name: 'status', - by_field_value: '206', - function: 'rare', - function_description: 'rare', - typical: [0.00014832458182211878], - actual: [1], - over_field_name: 'clientip', - over_field_value: '173.252.74.112', - }, - ], - influencers: [ - { - influencer_field_name: 'uri', - influencer_field_values: [ - '/wp-content/uploads/2013/06/dune_house_oil_on_canvas_24x20-298x298.jpg', - '/wp-content/uploads/2013/10/Case-dAste-1-11-298x298.png', - ], - }, - { - influencer_field_name: 'status', - influencer_field_values: ['206'], - }, - { - influencer_field_name: 'clientip', - influencer_field_values: ['173.252.74.112'], - }, - ], - clientip: ['173.252.74.112'], - uri: [ - '/wp-content/uploads/2013/06/dune_house_oil_on_canvas_24x20-298x298.jpg', - '/wp-content/uploads/2013/10/Case-dAste-1-11-298x298.png', - ], - status: ['206'], - }; - - describe('getSeverity', () => { - it('returns warning for 0 <= score < 25', () => { - expect(getSeverity(0).id).to.be('warning'); - expect(getSeverity(0.001).id).to.be('warning'); - expect(getSeverity(24.99).id).to.be('warning'); - }); - - it('returns minor for 25 <= score < 50', () => { - expect(getSeverity(25).id).to.be('minor'); - expect(getSeverity(49.99).id).to.be('minor'); - }); - - it('returns minor for 50 <= score < 75', () => { - expect(getSeverity(50).id).to.be('major'); - expect(getSeverity(74.99).id).to.be('major'); - }); - - it('returns critical for score >= 75', () => { - expect(getSeverity(75).id).to.be('critical'); - expect(getSeverity(100).id).to.be('critical'); - expect(getSeverity(1000).id).to.be('critical'); - }); - - it('returns unknown for scores less than 0 or string input', () => { - expect(getSeverity(-10).id).to.be('unknown'); - expect(getSeverity('value').id).to.be('unknown'); - }); - }); - - describe('getSeverityWithLow', () => { - it('returns low for 0 <= score < 3', () => { - expect(getSeverityWithLow(0).id).to.be('low'); - expect(getSeverityWithLow(0.001).id).to.be('low'); - expect(getSeverityWithLow(2.99).id).to.be('low'); - }); - - it('returns warning for 3 <= score < 25', () => { - expect(getSeverityWithLow(3).id).to.be('warning'); - expect(getSeverityWithLow(24.99).id).to.be('warning'); - }); - - it('returns minor for 25 <= score < 50', () => { - expect(getSeverityWithLow(25).id).to.be('minor'); - expect(getSeverityWithLow(49.99).id).to.be('minor'); - }); - - it('returns minor for 50 <= score < 75', () => { - expect(getSeverityWithLow(50).id).to.be('major'); - expect(getSeverityWithLow(74.99).id).to.be('major'); - }); - - it('returns critical for score >= 75', () => { - expect(getSeverityWithLow(75).id).to.be('critical'); - expect(getSeverityWithLow(100).id).to.be('critical'); - expect(getSeverityWithLow(1000).id).to.be('critical'); - }); - - it('returns unknown for scores less than 0 or string input', () => { - expect(getSeverityWithLow(-10).id).to.be('unknown'); - expect(getSeverityWithLow('value').id).to.be('unknown'); - }); - }); - - describe('getSeverityColor', () => { - it('returns correct hex code for low for 0 <= score < 3', () => { - expect(getSeverityColor(0)).to.be('#d2e9f7'); - expect(getSeverityColor(0.001)).to.be('#d2e9f7'); - expect(getSeverityColor(2.99)).to.be('#d2e9f7'); - }); - - it('returns correct hex code for warning for 3 <= score < 25', () => { - expect(getSeverityColor(3)).to.be('#8bc8fb'); - expect(getSeverityColor(24.99)).to.be('#8bc8fb'); - }); - - it('returns correct hex code for minor for 25 <= score < 50', () => { - expect(getSeverityColor(25)).to.be('#fdec25'); - expect(getSeverityColor(49.99)).to.be('#fdec25'); - }); - - it('returns correct hex code for major for 50 <= score < 75', () => { - expect(getSeverityColor(50)).to.be('#fba740'); - expect(getSeverityColor(74.99)).to.be('#fba740'); - }); - - it('returns correct hex code for critical for score >= 75', () => { - expect(getSeverityColor(75)).to.be('#fe5050'); - expect(getSeverityColor(100)).to.be('#fe5050'); - expect(getSeverityColor(1000)).to.be('#fe5050'); - }); - - it('returns correct hex code for unknown for scores less than 0 or string input', () => { - expect(getSeverityColor(-10)).to.be('#ffffff'); - expect(getSeverityColor('value')).to.be('#ffffff'); - }); - }); - - describe('getMultiBucketImpactLabel', () => { - it('returns high for 3 <= score <= 5', () => { - expect(getMultiBucketImpactLabel(3)).to.be('high'); - expect(getMultiBucketImpactLabel(5)).to.be('high'); - }); - - it('returns medium for 2 <= score < 3', () => { - expect(getMultiBucketImpactLabel(2)).to.be('medium'); - expect(getMultiBucketImpactLabel(2.99)).to.be('medium'); - }); - - it('returns low for 1 <= score < 2', () => { - expect(getMultiBucketImpactLabel(1)).to.be('low'); - expect(getMultiBucketImpactLabel(1.99)).to.be('low'); - }); - - it('returns none for -5 <= score < 1', () => { - expect(getMultiBucketImpactLabel(-5)).to.be('none'); - expect(getMultiBucketImpactLabel(0.99)).to.be('none'); - }); - - it('returns expected label when impact outside normal bounds', () => { - expect(getMultiBucketImpactLabel(10)).to.be('high'); - expect(getMultiBucketImpactLabel(-10)).to.be('none'); - }); - }); - - describe('getEntityFieldName', () => { - it('returns the by field name', () => { - expect(getEntityFieldName(byEntityRecord)).to.be('airline'); - }); - - it('returns the partition field name', () => { - expect(getEntityFieldName(partitionEntityRecord)).to.be('airline'); - }); - - it('returns the over field name', () => { - expect(getEntityFieldName(overEntityRecord)).to.be('clientip'); - }); - - it('returns undefined if no by, over or partition fields', () => { - expect(getEntityFieldName(noEntityRecord)).to.be(undefined); - }); - }); - - describe('getEntityFieldValue', () => { - it('returns the by field value', () => { - expect(getEntityFieldValue(byEntityRecord)).to.be('JZA'); - }); - - it('returns the partition field value', () => { - expect(getEntityFieldValue(partitionEntityRecord)).to.be('AAL'); - }); - - it('returns the over field value', () => { - expect(getEntityFieldValue(overEntityRecord)).to.be('37.157.32.164'); - }); - - it('returns undefined if no by, over or partition fields', () => { - expect(getEntityFieldValue(noEntityRecord)).to.be(undefined); - }); - }); - - describe('getEntityFieldList', () => { - it('returns an empty list for a record with no by, over or partition fields', () => { - expect(getEntityFieldList(noEntityRecord)).to.be.empty(); - }); - - it('returns correct list for a record with a by field', () => { - expect(getEntityFieldList(byEntityRecord)).to.eql([ - { - fieldName: 'airline', - fieldValue: 'JZA', - fieldType: 'by', - }, - ]); - }); - - it('returns correct list for a record with a partition field', () => { - expect(getEntityFieldList(partitionEntityRecord)).to.eql([ - { - fieldName: 'airline', - fieldValue: 'AAL', - fieldType: 'partition', - }, - ]); - }); - - it('returns correct list for a record with an over field', () => { - expect(getEntityFieldList(overEntityRecord)).to.eql([ - { - fieldName: 'clientip', - fieldValue: '37.157.32.164', - fieldType: 'over', - }, - ]); - }); - - it('returns correct list for a record with a by and over field', () => { - expect(getEntityFieldList(rareEntityRecord)).to.eql([ - { - fieldName: 'clientip', - fieldValue: '173.252.74.112', - fieldType: 'over', - }, - ]); - }); - }); - - describe('showActualForFunction', () => { - it('returns true for expected function descriptions', () => { - expect(showActualForFunction('count')).to.be(true); - expect(showActualForFunction('distinct_count')).to.be(true); - expect(showActualForFunction('lat_long')).to.be(true); - expect(showActualForFunction('mean')).to.be(true); - expect(showActualForFunction('max')).to.be(true); - expect(showActualForFunction('min')).to.be(true); - expect(showActualForFunction('sum')).to.be(true); - expect(showActualForFunction('median')).to.be(true); - expect(showActualForFunction('varp')).to.be(true); - expect(showActualForFunction('info_content')).to.be(true); - expect(showActualForFunction('time')).to.be(true); - }); - - it('returns false for expected function descriptions', () => { - expect(showActualForFunction('rare')).to.be(false); - }); - }); - - describe('showTypicalForFunction', () => { - it('returns true for expected function descriptions', () => { - expect(showTypicalForFunction('count')).to.be(true); - expect(showTypicalForFunction('distinct_count')).to.be(true); - expect(showTypicalForFunction('lat_long')).to.be(true); - expect(showTypicalForFunction('mean')).to.be(true); - expect(showTypicalForFunction('max')).to.be(true); - expect(showTypicalForFunction('min')).to.be(true); - expect(showTypicalForFunction('sum')).to.be(true); - expect(showTypicalForFunction('median')).to.be(true); - expect(showTypicalForFunction('varp')).to.be(true); - expect(showTypicalForFunction('info_content')).to.be(true); - expect(showTypicalForFunction('time')).to.be(true); - }); - - it('returns false for expected function descriptions', () => { - expect(showTypicalForFunction('rare')).to.be(false); - }); - }); - - describe('isRuleSupported', () => { - it('returns true for anomalies supporting rules', () => { - expect(isRuleSupported(partitionEntityRecord)).to.be(true); - expect(isRuleSupported(byEntityRecord)).to.be(true); - expect(isRuleSupported(overEntityRecord)).to.be(true); - expect(isRuleSupported(rareEntityRecord)).to.be(true); - expect(isRuleSupported(noEntityRecord)).to.be(true); - }); - - it('returns false for anomaly not supporting rules', () => { - expect(isRuleSupported(metricNoEntityRecord)).to.be(false); - }); - }); - - describe('aggregationTypeTransform', () => { - it('returns correct ES aggregation type for ML function description', () => { - expect(aggregationTypeTransform.toES('count')).to.be('count'); - expect(aggregationTypeTransform.toES('distinct_count')).to.be('cardinality'); - expect(aggregationTypeTransform.toES('distinct_count')).to.not.be('distinct_count'); - expect(aggregationTypeTransform.toES('mean')).to.be('avg'); - expect(aggregationTypeTransform.toES('mean')).to.not.be('mean'); - expect(aggregationTypeTransform.toES('max')).to.be('max'); - expect(aggregationTypeTransform.toES('min')).to.be('min'); - expect(aggregationTypeTransform.toES('sum')).to.be('sum'); - }); - - it('returns correct ML function description for ES aggregation type', () => { - expect(aggregationTypeTransform.toML('count')).to.be('count'); - expect(aggregationTypeTransform.toML('cardinality')).to.be('distinct_count'); - expect(aggregationTypeTransform.toML('cardinality')).to.not.be('cardinality'); - expect(aggregationTypeTransform.toML('avg')).to.be('mean'); - expect(aggregationTypeTransform.toML('avg')).to.not.be('avg'); - expect(aggregationTypeTransform.toML('max')).to.be('max'); - expect(aggregationTypeTransform.toML('min')).to.be('min'); - expect(aggregationTypeTransform.toML('sum')).to.be('sum'); - }); - }); -}); diff --git a/x-pack/plugins/ml/common/util/anomaly_utils.d.ts b/x-pack/plugins/ml/common/util/anomaly_utils.d.ts deleted file mode 100644 index adeb6dc7dd5b9a..00000000000000 --- a/x-pack/plugins/ml/common/util/anomaly_utils.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { ANOMALY_SEVERITY } from '../constants/anomalies'; - -export function getSeverity(normalizedScore: number): string; -export function getSeverityType(normalizedScore: number): ANOMALY_SEVERITY; -export function getSeverityColor(normalizedScore: number): string; diff --git a/x-pack/plugins/ml/common/util/anomaly_utils.test.ts b/x-pack/plugins/ml/common/util/anomaly_utils.test.ts new file mode 100644 index 00000000000000..1343e4611c2156 --- /dev/null +++ b/x-pack/plugins/ml/common/util/anomaly_utils.test.ts @@ -0,0 +1,444 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { AnomalyRecordDoc } from '../types/anomalies'; + +import { + aggregationTypeTransform, + getEntityFieldList, + getEntityFieldName, + getEntityFieldValue, + getMultiBucketImpactLabel, + getSeverity, + getSeverityWithLow, + getSeverityColor, + isRuleSupported, + showActualForFunction, + showTypicalForFunction, +} from './anomaly_utils'; + +describe('ML - anomaly utils', () => { + const partitionEntityRecord: AnomalyRecordDoc = { + job_id: 'farequote', + result_type: 'record', + probability: 0.012818, + record_score: 0.0162059, + initial_record_score: 0.0162059, + bucket_span: 300, + detector_index: 0, + is_interim: false, + timestamp: 1455047400000, + partition_field_name: 'airline', + partition_field_value: 'AAL', + function: 'mean', + function_description: 'mean', + field_name: 'responsetime', + }; + + const byEntityRecord: AnomalyRecordDoc = { + job_id: 'farequote', + result_type: 'record', + probability: 0.012818, + record_score: 0.0162059, + initial_record_score: 0.0162059, + bucket_span: 300, + detector_index: 0, + is_interim: false, + timestamp: 1455047400000, + by_field_name: 'airline', + by_field_value: 'JZA', + function: 'mean', + function_description: 'mean', + field_name: 'responsetime', + }; + + const overEntityRecord: AnomalyRecordDoc = { + job_id: 'gallery', + result_type: 'record', + probability: 2.81806e-9, + record_score: 59.055, + initial_record_score: 59.055, + bucket_span: 3600, + detector_index: 4, + is_interim: false, + timestamp: 1420552800000, + function: 'sum', + function_description: 'sum', + field_name: 'bytes', + by_field_name: 'method', + over_field_name: 'clientip', + over_field_value: '37.157.32.164', + }; + + const noEntityRecord: AnomalyRecordDoc = { + job_id: 'farequote_no_by', + result_type: 'record', + probability: 0.0191711, + record_score: 4.38431, + initial_record_score: 19.654, + bucket_span: 300, + detector_index: 0, + is_interim: false, + timestamp: 1454890500000, + function: 'mean', + function_description: 'mean', + field_name: 'responsetime', + }; + + const metricNoEntityRecord: AnomalyRecordDoc = { + job_id: 'farequote_metric', + result_type: 'record', + probability: 0.030133495093182184, + record_score: 0.024881740359975164, + initial_record_score: 0.024881740359975164, + bucket_span: 900, + detector_index: 0, + is_interim: false, + timestamp: 1486845000000, + function: 'metric', + function_description: 'mean', + typical: [545.7764658569108], + actual: [758.8220213274412], + field_name: 'responsetime', + influencers: [ + { + influencer_field_name: 'airline', + influencer_field_values: ['NKS'], + }, + ], + airline: ['NKS'], + }; + + const rareEntityRecord: AnomalyRecordDoc = { + job_id: 'gallery', + result_type: 'record', + probability: 0.02277014211908481, + record_score: 4.545378107075983, + initial_record_score: 4.545378107075983, + bucket_span: 3600, + detector_index: 0, + is_interim: false, + timestamp: 1495879200000, + by_field_name: 'status', + function: 'rare', + function_description: 'rare', + over_field_name: 'clientip', + over_field_value: '173.252.74.112', + causes: [ + { + probability: 0.02277014211908481, + by_field_name: 'status', + by_field_value: '206', + function: 'rare', + function_description: 'rare', + typical: [0.00014832458182211878], + actual: [1], + over_field_name: 'clientip', + over_field_value: '173.252.74.112', + }, + ], + influencers: [ + { + influencer_field_name: 'uri', + influencer_field_values: [ + '/wp-content/uploads/2013/06/dune_house_oil_on_canvas_24x20-298x298.jpg', + '/wp-content/uploads/2013/10/Case-dAste-1-11-298x298.png', + ], + }, + { + influencer_field_name: 'status', + influencer_field_values: ['206'], + }, + { + influencer_field_name: 'clientip', + influencer_field_values: ['173.252.74.112'], + }, + ], + clientip: ['173.252.74.112'], + uri: [ + '/wp-content/uploads/2013/06/dune_house_oil_on_canvas_24x20-298x298.jpg', + '/wp-content/uploads/2013/10/Case-dAste-1-11-298x298.png', + ], + status: ['206'], + }; + + describe('getSeverity', () => { + test('returns warning for 0 <= score < 25', () => { + expect(getSeverity(0).id).toBe('warning'); + expect(getSeverity(0.001).id).toBe('warning'); + expect(getSeverity(24.99).id).toBe('warning'); + }); + + test('returns minor for 25 <= score < 50', () => { + expect(getSeverity(25).id).toBe('minor'); + expect(getSeverity(49.99).id).toBe('minor'); + }); + + test('returns minor for 50 <= score < 75', () => { + expect(getSeverity(50).id).toBe('major'); + expect(getSeverity(74.99).id).toBe('major'); + }); + + test('returns critical for score >= 75', () => { + expect(getSeverity(75).id).toBe('critical'); + expect(getSeverity(100).id).toBe('critical'); + expect(getSeverity(1000).id).toBe('critical'); + }); + + test('returns unknown for scores less than 0', () => { + expect(getSeverity(-10).id).toBe('unknown'); + }); + }); + + describe('getSeverityWithLow', () => { + test('returns low for 0 <= score < 3', () => { + expect(getSeverityWithLow(0).id).toBe('low'); + expect(getSeverityWithLow(0.001).id).toBe('low'); + expect(getSeverityWithLow(2.99).id).toBe('low'); + }); + + test('returns warning for 3 <= score < 25', () => { + expect(getSeverityWithLow(3).id).toBe('warning'); + expect(getSeverityWithLow(24.99).id).toBe('warning'); + }); + + test('returns minor for 25 <= score < 50', () => { + expect(getSeverityWithLow(25).id).toBe('minor'); + expect(getSeverityWithLow(49.99).id).toBe('minor'); + }); + + test('returns minor for 50 <= score < 75', () => { + expect(getSeverityWithLow(50).id).toBe('major'); + expect(getSeverityWithLow(74.99).id).toBe('major'); + }); + + test('returns critical for score >= 75', () => { + expect(getSeverityWithLow(75).id).toBe('critical'); + expect(getSeverityWithLow(100).id).toBe('critical'); + expect(getSeverityWithLow(1000).id).toBe('critical'); + }); + + test('returns unknown for scores less than 0 ', () => { + expect(getSeverityWithLow(-10).id).toBe('unknown'); + }); + }); + + describe('getSeverityColor', () => { + test('returns correct hex code for low for 0 <= score < 3', () => { + expect(getSeverityColor(0)).toBe('#d2e9f7'); + expect(getSeverityColor(0.001)).toBe('#d2e9f7'); + expect(getSeverityColor(2.99)).toBe('#d2e9f7'); + }); + + test('returns correct hex code for warning for 3 <= score < 25', () => { + expect(getSeverityColor(3)).toBe('#8bc8fb'); + expect(getSeverityColor(24.99)).toBe('#8bc8fb'); + }); + + test('returns correct hex code for minor for 25 <= score < 50', () => { + expect(getSeverityColor(25)).toBe('#fdec25'); + expect(getSeverityColor(49.99)).toBe('#fdec25'); + }); + + test('returns correct hex code for major for 50 <= score < 75', () => { + expect(getSeverityColor(50)).toBe('#fba740'); + expect(getSeverityColor(74.99)).toBe('#fba740'); + }); + + test('returns correct hex code for critical for score >= 75', () => { + expect(getSeverityColor(75)).toBe('#fe5050'); + expect(getSeverityColor(100)).toBe('#fe5050'); + expect(getSeverityColor(1000)).toBe('#fe5050'); + }); + + test('returns correct hex code for unknown for scores less than 0', () => { + expect(getSeverityColor(-10)).toBe('#ffffff'); + }); + }); + + describe('getMultiBucketImpactLabel', () => { + test('returns high for 3 <= score <= 5', () => { + expect(getMultiBucketImpactLabel(3)).toBe('high'); + expect(getMultiBucketImpactLabel(5)).toBe('high'); + }); + + test('returns medium for 2 <= score < 3', () => { + expect(getMultiBucketImpactLabel(2)).toBe('medium'); + expect(getMultiBucketImpactLabel(2.99)).toBe('medium'); + }); + + test('returns low for 1 <= score < 2', () => { + expect(getMultiBucketImpactLabel(1)).toBe('low'); + expect(getMultiBucketImpactLabel(1.99)).toBe('low'); + }); + + test('returns none for -5 <= score < 1', () => { + expect(getMultiBucketImpactLabel(-5)).toBe('none'); + expect(getMultiBucketImpactLabel(0.99)).toBe('none'); + }); + + test('returns expected label when impact outside normal bounds', () => { + expect(getMultiBucketImpactLabel(10)).toBe('high'); + expect(getMultiBucketImpactLabel(-10)).toBe('none'); + }); + }); + + describe('getEntityFieldName', () => { + it('returns the by field name', () => { + expect(getEntityFieldName(byEntityRecord)).toBe('airline'); + }); + + it('returns the partition field name', () => { + expect(getEntityFieldName(partitionEntityRecord)).toBe('airline'); + }); + + it('returns the over field name', () => { + expect(getEntityFieldName(overEntityRecord)).toBe('clientip'); + }); + + it('returns undefined if no by, over or partition fields', () => { + expect(getEntityFieldName(noEntityRecord)).toBe(undefined); + }); + }); + + describe('getEntityFieldValue', () => { + test('returns the by field value', () => { + expect(getEntityFieldValue(byEntityRecord)).toBe('JZA'); + }); + + test('returns the partition field value', () => { + expect(getEntityFieldValue(partitionEntityRecord)).toBe('AAL'); + }); + + test('returns the over field value', () => { + expect(getEntityFieldValue(overEntityRecord)).toBe('37.157.32.164'); + }); + + test('returns undefined if no by, over or partition fields', () => { + expect(getEntityFieldValue(noEntityRecord)).toBe(undefined); + }); + }); + + describe('getEntityFieldList', () => { + test('returns an empty list for a record with no by, over or partition fields', () => { + expect(getEntityFieldList(noEntityRecord)).toHaveLength(0); + }); + + test('returns correct list for a record with a by field', () => { + expect(getEntityFieldList(byEntityRecord)).toEqual([ + { + fieldName: 'airline', + fieldValue: 'JZA', + fieldType: 'by', + }, + ]); + }); + + test('returns correct list for a record with a partition field', () => { + expect(getEntityFieldList(partitionEntityRecord)).toEqual([ + { + fieldName: 'airline', + fieldValue: 'AAL', + fieldType: 'partition', + }, + ]); + }); + + test('returns correct list for a record with an over field', () => { + expect(getEntityFieldList(overEntityRecord)).toEqual([ + { + fieldName: 'clientip', + fieldValue: '37.157.32.164', + fieldType: 'over', + }, + ]); + }); + + test('returns correct list for a record with a by and over field', () => { + expect(getEntityFieldList(rareEntityRecord)).toEqual([ + { + fieldName: 'clientip', + fieldValue: '173.252.74.112', + fieldType: 'over', + }, + ]); + }); + }); + + describe('showActualForFunction', () => { + test('returns true for expected function descriptions', () => { + expect(showActualForFunction('count')).toBe(true); + expect(showActualForFunction('distinct_count')).toBe(true); + expect(showActualForFunction('lat_long')).toBe(true); + expect(showActualForFunction('mean')).toBe(true); + expect(showActualForFunction('max')).toBe(true); + expect(showActualForFunction('min')).toBe(true); + expect(showActualForFunction('sum')).toBe(true); + expect(showActualForFunction('median')).toBe(true); + expect(showActualForFunction('varp')).toBe(true); + expect(showActualForFunction('info_content')).toBe(true); + expect(showActualForFunction('time')).toBe(true); + }); + + test('returns false for expected function descriptions', () => { + expect(showActualForFunction('rare')).toBe(false); + }); + }); + + describe('showTypicalForFunction', () => { + test('returns true for expected function descriptions', () => { + expect(showTypicalForFunction('count')).toBe(true); + expect(showTypicalForFunction('distinct_count')).toBe(true); + expect(showTypicalForFunction('lat_long')).toBe(true); + expect(showTypicalForFunction('mean')).toBe(true); + expect(showTypicalForFunction('max')).toBe(true); + expect(showTypicalForFunction('min')).toBe(true); + expect(showTypicalForFunction('sum')).toBe(true); + expect(showTypicalForFunction('median')).toBe(true); + expect(showTypicalForFunction('varp')).toBe(true); + expect(showTypicalForFunction('info_content')).toBe(true); + expect(showTypicalForFunction('time')).toBe(true); + }); + + test('returns false for expected function descriptions', () => { + expect(showTypicalForFunction('rare')).toBe(false); + }); + }); + + describe('isRuleSupported', () => { + test('returns true for anomalies supporting rules', () => { + expect(isRuleSupported(partitionEntityRecord)).toBe(true); + expect(isRuleSupported(byEntityRecord)).toBe(true); + expect(isRuleSupported(overEntityRecord)).toBe(true); + expect(isRuleSupported(rareEntityRecord)).toBe(true); + expect(isRuleSupported(noEntityRecord)).toBe(true); + }); + + it('returns false for anomaly not supporting rules', () => { + expect(isRuleSupported(metricNoEntityRecord)).toBe(false); + }); + }); + + describe('aggregationTypeTransform', () => { + test('returns correct ES aggregation type for ML function description', () => { + expect(aggregationTypeTransform.toES('count')).toBe('count'); + expect(aggregationTypeTransform.toES('distinct_count')).toBe('cardinality'); + expect(aggregationTypeTransform.toES('mean')).toBe('avg'); + expect(aggregationTypeTransform.toES('max')).toBe('max'); + expect(aggregationTypeTransform.toES('min')).toBe('min'); + expect(aggregationTypeTransform.toES('sum')).toBe('sum'); + }); + + test('returns correct ML function description for ES aggregation type', () => { + expect(aggregationTypeTransform.toML('count')).toBe('count'); + expect(aggregationTypeTransform.toML('cardinality')).toBe('distinct_count'); + expect(aggregationTypeTransform.toML('avg')).toBe('mean'); + expect(aggregationTypeTransform.toML('max')).toBe('max'); + expect(aggregationTypeTransform.toML('min')).toBe('min'); + expect(aggregationTypeTransform.toML('sum')).toBe('sum'); + }); + }); +}); diff --git a/x-pack/plugins/ml/common/util/anomaly_utils.js b/x-pack/plugins/ml/common/util/anomaly_utils.ts similarity index 87% rename from x-pack/plugins/ml/common/util/anomaly_utils.js rename to x-pack/plugins/ml/common/util/anomaly_utils.ts index 16c27b6af869d5..36b91f5580b393 100644 --- a/x-pack/plugins/ml/common/util/anomaly_utils.js +++ b/x-pack/plugins/ml/common/util/anomaly_utils.ts @@ -13,6 +13,24 @@ import { i18n } from '@kbn/i18n'; import { CONDITIONS_NOT_SUPPORTED_FUNCTIONS } from '../constants/detector_rule'; import { MULTI_BUCKET_IMPACT } from '../constants/multi_bucket_impact'; import { ANOMALY_SEVERITY, ANOMALY_THRESHOLD } from '../constants/anomalies'; +import { AnomalyRecordDoc } from '../types/anomalies'; + +export interface SeverityType { + id: ANOMALY_SEVERITY; + label: string; +} + +export enum ENTITY_FIELD_TYPE { + BY = 'by', + OVER = 'over', + PARTITON = 'partition', +} + +export interface EntityField { + fieldName: string; + fieldValue: string | number | undefined; + fieldType: ENTITY_FIELD_TYPE; +} // List of function descriptions for which actual values from record level results should be displayed. const DISPLAY_ACTUAL_FUNCTIONS = [ @@ -44,7 +62,7 @@ const DISPLAY_TYPICAL_FUNCTIONS = [ 'time', ]; -let severityTypes; +let severityTypes: Record; function getSeverityTypes() { if (severityTypes) { @@ -93,7 +111,7 @@ function getSeverityTypes() { // Returns a severity label (one of critical, major, minor, warning or unknown) // for the supplied normalized anomaly score (a value between 0 and 100). -export function getSeverity(normalizedScore) { +export function getSeverity(normalizedScore: number): SeverityType { const severityTypesList = getSeverityTypes(); if (normalizedScore >= ANOMALY_THRESHOLD.CRITICAL) { @@ -109,7 +127,7 @@ export function getSeverity(normalizedScore) { } } -export function getSeverityType(normalizedScore) { +export function getSeverityType(normalizedScore: number): ANOMALY_SEVERITY { if (normalizedScore >= 75) { return ANOMALY_SEVERITY.CRITICAL; } else if (normalizedScore >= 50) { @@ -128,7 +146,7 @@ export function getSeverityType(normalizedScore) { // Returns a severity label (one of critical, major, minor, warning, low or unknown) // for the supplied normalized anomaly score (a value between 0 and 100), where scores // less than 3 are assigned a severity of 'low'. -export function getSeverityWithLow(normalizedScore) { +export function getSeverityWithLow(normalizedScore: number): SeverityType { const severityTypesList = getSeverityTypes(); if (normalizedScore >= ANOMALY_THRESHOLD.CRITICAL) { @@ -148,7 +166,7 @@ export function getSeverityWithLow(normalizedScore) { // Returns a severity RGB color (one of critical, major, minor, warning, low_warning or unknown) // for the supplied normalized anomaly score (a value between 0 and 100). -export function getSeverityColor(normalizedScore) { +export function getSeverityColor(normalizedScore: number): string { if (normalizedScore >= ANOMALY_THRESHOLD.CRITICAL) { return '#fe5050'; } else if (normalizedScore >= ANOMALY_THRESHOLD.MAJOR) { @@ -167,7 +185,7 @@ export function getSeverityColor(normalizedScore) { // Returns a label to use for the multi-bucket impact of an anomaly // according to the value of the multi_bucket_impact field of a record, // which ranges from -5 to +5. -export function getMultiBucketImpactLabel(multiBucketImpact) { +export function getMultiBucketImpactLabel(multiBucketImpact: number): string { if (multiBucketImpact >= MULTI_BUCKET_IMPACT.HIGH) { return i18n.translate('xpack.ml.anomalyUtils.multiBucketImpact.highLabel', { defaultMessage: 'high', @@ -190,7 +208,7 @@ export function getMultiBucketImpactLabel(multiBucketImpact) { // Returns the name of the field to use as the entity name from the source record // obtained from Elasticsearch. The function looks first for a by_field, then over_field, // then partition_field, returning undefined if none of these fields are present. -export function getEntityFieldName(record) { +export function getEntityFieldName(record: AnomalyRecordDoc): string | undefined { // Analyses with by and over fields, will have a top-level by_field_name, but // the by_field_value(s) will be in the nested causes array. if (record.by_field_name !== undefined && record.by_field_value !== undefined) { @@ -211,7 +229,7 @@ export function getEntityFieldName(record) { // Returns the value of the field to use as the entity value from the source record // obtained from Elasticsearch. The function looks first for a by_field, then over_field, // then partition_field, returning undefined if none of these fields are present. -export function getEntityFieldValue(record) { +export function getEntityFieldValue(record: AnomalyRecordDoc): string | number | undefined { if (record.by_field_value !== undefined) { return record.by_field_value; } @@ -229,13 +247,13 @@ export function getEntityFieldValue(record) { // Returns the list of partitioning entity fields for the source record as a list // of objects in the form { fieldName: airline, fieldValue: AAL, fieldType: partition } -export function getEntityFieldList(record) { - const entityFields = []; +export function getEntityFieldList(record: AnomalyRecordDoc): EntityField[] { + const entityFields: EntityField[] = []; if (record.partition_field_name !== undefined) { entityFields.push({ fieldName: record.partition_field_name, fieldValue: record.partition_field_value, - fieldType: 'partition', + fieldType: ENTITY_FIELD_TYPE.PARTITON, }); } @@ -243,7 +261,7 @@ export function getEntityFieldList(record) { entityFields.push({ fieldName: record.over_field_name, fieldValue: record.over_field_value, - fieldType: 'over', + fieldType: ENTITY_FIELD_TYPE.OVER, }); } @@ -254,7 +272,7 @@ export function getEntityFieldList(record) { entityFields.push({ fieldName: record.by_field_name, fieldValue: record.by_field_value, - fieldType: 'by', + fieldType: ENTITY_FIELD_TYPE.BY, }); } @@ -264,19 +282,19 @@ export function getEntityFieldList(record) { // Returns whether actual values should be displayed for a record with the specified function description. // Note that the 'function' field in a record contains what the user entered e.g. 'high_count', // whereas the 'function_description' field holds a ML-built display hint for function e.g. 'count'. -export function showActualForFunction(functionDescription) { +export function showActualForFunction(functionDescription: string): boolean { return DISPLAY_ACTUAL_FUNCTIONS.indexOf(functionDescription) > -1; } // Returns whether typical values should be displayed for a record with the specified function description. // Note that the 'function' field in a record contains what the user entered e.g. 'high_count', // whereas the 'function_description' field holds a ML-built display hint for function e.g. 'count'. -export function showTypicalForFunction(functionDescription) { +export function showTypicalForFunction(functionDescription: string): boolean { return DISPLAY_TYPICAL_FUNCTIONS.indexOf(functionDescription) > -1; } // Returns whether a rule can be configured against the specified anomaly. -export function isRuleSupported(record) { +export function isRuleSupported(record: AnomalyRecordDoc): boolean { // A rule can be configured with a numeric condition if the function supports it, // and/or with scope if there is a partitioning fields. return ( @@ -303,7 +321,7 @@ export function isRuleSupported(record) { // The input to toES and the output from toML correspond to the value of the // function_description field of anomaly records. export const aggregationTypeTransform = { - toES: function(oldAggType) { + toES(oldAggType: string): string { let newAggType = oldAggType; if (newAggType === 'mean') { @@ -316,7 +334,7 @@ export const aggregationTypeTransform = { return newAggType; }, - toML: function(oldAggType) { + toML(oldAggType: string): string { let newAggType = oldAggType; if (newAggType === 'avg') { diff --git a/x-pack/plugins/ml/public/application/components/rule_editor/__tests__/utils.js b/x-pack/plugins/ml/public/application/components/rule_editor/utils.test.js similarity index 66% rename from x-pack/plugins/ml/public/application/components/rule_editor/__tests__/utils.js rename to x-pack/plugins/ml/public/application/components/rule_editor/utils.test.js index b5f9bdeaa12aa8..18e382f8fe5e88 100644 --- a/x-pack/plugins/ml/public/application/components/rule_editor/__tests__/utils.js +++ b/x-pack/plugins/ml/public/application/components/rule_editor/utils.test.js @@ -4,14 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ -import expect from '@kbn/expect'; -import { isValidRule, buildRuleDescription, getAppliesToValueFromAnomaly } from '../utils'; +import { isValidRule, buildRuleDescription, getAppliesToValueFromAnomaly } from './utils'; import { ACTION, APPLIES_TO, OPERATOR, FILTER_TYPE, -} from '../../../../../common/constants/detector_rule'; +} from '../../../../common/constants/detector_rule'; describe('ML - rule editor utils', () => { const ruleWithCondition = { @@ -55,19 +54,19 @@ describe('ML - rule editor utils', () => { }; describe('isValidRule', () => { - it('returns true for a rule with an action and a condition', () => { - expect(isValidRule(ruleWithCondition)).to.be(true); + test('returns true for a rule with an action and a condition', () => { + expect(isValidRule(ruleWithCondition)).toBe(true); }); - it('returns true for a rule with an action and scope', () => { - expect(isValidRule(ruleWithScope)).to.be(true); + test('returns true for a rule with an action and scope', () => { + expect(isValidRule(ruleWithScope)).toBe(true); }); - it('returns true for a rule with an action, scope and condition', () => { - expect(isValidRule(ruleWithConditionAndScope)).to.be(true); + test('returns true for a rule with an action, scope and condition', () => { + expect(isValidRule(ruleWithConditionAndScope)).toBe(true); }); - it('returns false for a rule with no action', () => { + test('returns false for a rule with no action', () => { const ruleWithNoAction = { actions: [], conditions: [ @@ -79,27 +78,27 @@ describe('ML - rule editor utils', () => { ], }; - expect(isValidRule(ruleWithNoAction)).to.be(false); + expect(isValidRule(ruleWithNoAction)).toBe(false); }); - it('returns false for a rule with no scope or conditions', () => { + test('returns false for a rule with no scope or conditions', () => { const ruleWithNoScopeOrCondition = { actions: [ACTION.SKIP_RESULT], }; - expect(isValidRule(ruleWithNoScopeOrCondition)).to.be(false); + expect(isValidRule(ruleWithNoScopeOrCondition)).toBe(false); }); }); describe('buildRuleDescription', () => { - it('returns expected rule descriptions', () => { - expect(buildRuleDescription(ruleWithCondition)).to.be( + test('returns expected rule descriptions', () => { + expect(buildRuleDescription(ruleWithCondition)).toBe( 'skip result when actual is greater than 10' ); - expect(buildRuleDescription(ruleWithScope)).to.be( + expect(buildRuleDescription(ruleWithScope)).toBe( 'skip result when instance is in test_aws_instances' ); - expect(buildRuleDescription(ruleWithConditionAndScope)).to.be( + expect(buildRuleDescription(ruleWithConditionAndScope)).toBe( 'skip result when typical is less than 100 AND instance is not in test_aws_instances' ); }); @@ -111,16 +110,16 @@ describe('ML - rule editor utils', () => { typical: [1.23], }; - it('returns expected actual value from an anomaly', () => { - expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.ACTUAL)).to.be(210); + test('returns expected actual value from an anomaly', () => { + expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.ACTUAL)).toBe(210); }); - it('returns expected typical value from an anomaly', () => { - expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.TYPICAL)).to.be(1.23); + test('returns expected typical value from an anomaly', () => { + expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.TYPICAL)).toBe(1.23); }); - it('returns expected diff from typical value from an anomaly', () => { - expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.DIFF_FROM_TYPICAL)).to.be(208.77); + test('returns expected diff from typical value from an anomaly', () => { + expect(getAppliesToValueFromAnomaly(anomaly, APPLIES_TO.DIFF_FROM_TYPICAL)).toBe(208.77); }); }); }); diff --git a/x-pack/plugins/ml/public/application/util/__tests__/calc_auto_interval.js b/x-pack/plugins/ml/public/application/util/__tests__/calc_auto_interval.js deleted file mode 100644 index 0553cec5cd7d4f..00000000000000 --- a/x-pack/plugins/ml/public/application/util/__tests__/calc_auto_interval.js +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import moment from 'moment'; - -import { timeBucketsCalcAutoIntervalProvider } from '../calc_auto_interval'; - -describe('ML - calc auto intervals', () => { - const calcAuto = timeBucketsCalcAutoIntervalProvider(); - - describe('near interval', () => { - it('returns 0ms buckets for undefined / 0 bars', () => { - const interval = calcAuto.near(0, undefined); - expect(interval.asMilliseconds()).to.be(0); - }); - - it('returns 1000ms buckets for 60s / 100 bars', () => { - const interval = calcAuto.near(100, moment.duration(60, 's')); - expect(interval.asMilliseconds()).to.be(1000); - }); - - it('returns 5m buckets for 8h / 100 bars', () => { - const interval = calcAuto.near(100, moment.duration(8, 'h')); - expect(interval.asMinutes()).to.be(5); - }); - - it('returns 15m buckets for 1d / 100 bars', () => { - const interval = calcAuto.near(100, moment.duration(1, 'd')); - expect(interval.asMinutes()).to.be(15); - }); - - it('returns 1h buckets for 20d / 500 bars', () => { - const interval = calcAuto.near(500, moment.duration(20, 'd')); - expect(interval.asHours()).to.be(1); - }); - - it('returns 6h buckets for 100d / 500 bars', () => { - const interval = calcAuto.near(500, moment.duration(100, 'd')); - expect(interval.asHours()).to.be(6); - }); - - it('returns 24h buckets for 1y / 500 bars', () => { - const interval = calcAuto.near(500, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(24); - }); - - it('returns 12h buckets for 1y / 1000 bars', () => { - const interval = calcAuto.near(1000, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(12); - }); - }); - - describe('lessThan interval', () => { - it('returns 0ms buckets for undefined / 0 bars', () => { - const interval = calcAuto.lessThan(0, undefined); - expect(interval.asMilliseconds()).to.be(0); - }); - - it('returns 500ms buckets for 60s / 100 bars', () => { - const interval = calcAuto.lessThan(100, moment.duration(60, 's')); - expect(interval.asMilliseconds()).to.be(500); - }); - - it('returns 5m buckets for 8h / 100 bars', () => { - const interval = calcAuto.lessThan(100, moment.duration(8, 'h')); - expect(interval.asMinutes()).to.be(5); - }); - - it('returns 30m buckets for 1d / 100 bars', () => { - const interval = calcAuto.lessThan(100, moment.duration(1, 'd')); - expect(interval.asMinutes()).to.be(30); - }); - - it('returns 1h buckets for 20d / 500 bars', () => { - const interval = calcAuto.lessThan(500, moment.duration(20, 'd')); - expect(interval.asHours()).to.be(1); - }); - - it('returns 6h buckets for 100d / 500 bars', () => { - const interval = calcAuto.lessThan(500, moment.duration(100, 'd')); - expect(interval.asHours()).to.be(6); - }); - - it('returns 24h buckets for 1y / 500 bars', () => { - const interval = calcAuto.lessThan(500, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(24); - }); - - it('returns 12h buckets for 1y / 1000 bars', () => { - const interval = calcAuto.lessThan(1000, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(12); - }); - }); - - describe('atLeast interval', () => { - it('returns 0ms buckets for undefined / 0 bars', () => { - const interval = calcAuto.atLeast(0, undefined); - expect(interval.asMilliseconds()).to.be(0); - }); - - it('returns 100ms buckets for 60s / 100 bars', () => { - const interval = calcAuto.atLeast(100, moment.duration(60, 's')); - expect(interval.asMilliseconds()).to.be(100); - }); - - it('returns 1m buckets for 8h / 100 bars', () => { - const interval = calcAuto.atLeast(100, moment.duration(8, 'h')); - expect(interval.asMinutes()).to.be(1); - }); - - it('returns 10m buckets for 1d / 100 bars', () => { - const interval = calcAuto.atLeast(100, moment.duration(1, 'd')); - expect(interval.asMinutes()).to.be(10); - }); - - it('returns 30m buckets for 20d / 500 bars', () => { - const interval = calcAuto.atLeast(500, moment.duration(20, 'd')); - expect(interval.asMinutes()).to.be(30); - }); - - it('returns 4h buckets for 100d / 500 bars', () => { - const interval = calcAuto.atLeast(500, moment.duration(100, 'd')); - expect(interval.asHours()).to.be(4); - }); - - it('returns 12h buckets for 1y / 500 bars', () => { - const interval = calcAuto.atLeast(500, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(12); - }); - - it('returns 8h buckets for 1y / 1000 bars', () => { - const interval = calcAuto.atLeast(1000, moment.duration(1, 'y')); - expect(interval.asHours()).to.be(8); - }); - }); -}); diff --git a/x-pack/plugins/ml/public/application/util/__tests__/chart_utils.js b/x-pack/plugins/ml/public/application/util/__tests__/chart_utils.js deleted file mode 100644 index 89df5946abe766..00000000000000 --- a/x-pack/plugins/ml/public/application/util/__tests__/chart_utils.js +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import $ from 'jquery'; -import d3 from 'd3'; -import expect from '@kbn/expect'; -import { - chartLimits, - filterAxisLabels, - getChartType, - numTicks, - showMultiBucketAnomalyMarker, - showMultiBucketAnomalyTooltip, -} from '../chart_utils'; -import { MULTI_BUCKET_IMPACT } from '../../../../common/constants/multi_bucket_impact'; -import { CHART_TYPE } from '../../explorer/explorer_constants'; - -describe('ML - chart utils', () => { - describe('chartLimits', () => { - it('returns NaN when called without data', () => { - const limits = chartLimits(); - expect(limits.min).to.be.NaN; - expect(limits.max).to.be.NaN; - }); - - it('returns {max: 625736376, min: 201039318} for some test data', () => { - const data = [ - { - date: new Date('2017-02-23T08:00:00.000Z'), - value: 228243469, - anomalyScore: 63.32916, - numberOfCauses: 1, - actual: [228243469], - typical: [133107.7703441773], - }, - { date: new Date('2017-02-23T09:00:00.000Z'), value: null }, - { date: new Date('2017-02-23T10:00:00.000Z'), value: null }, - { date: new Date('2017-02-23T11:00:00.000Z'), value: null }, - { - date: new Date('2017-02-23T12:00:00.000Z'), - value: 625736376, - anomalyScore: 97.32085, - numberOfCauses: 1, - actual: [625736376], - typical: [132830.424736973], - }, - { - date: new Date('2017-02-23T13:00:00.000Z'), - value: 201039318, - anomalyScore: 59.83488, - numberOfCauses: 1, - actual: [201039318], - typical: [132739.5267403542], - }, - ]; - - const limits = chartLimits(data); - - // {max: 625736376, min: 201039318} - expect(limits.min).to.be(201039318); - expect(limits.max).to.be(625736376); - }); - - it("adds 5% padding when min/max are the same, e.g. when there's only one data point", () => { - const data = [ - { - date: new Date('2017-02-23T08:00:00.000Z'), - value: 100, - anomalyScore: 50, - numberOfCauses: 1, - actual: [100], - typical: [100], - }, - ]; - - const limits = chartLimits(data); - expect(limits.min).to.be(95); - expect(limits.max).to.be(105); - }); - - it('returns minimum of 0 when data includes an anomaly for missing data', () => { - const data = [ - { date: new Date('2017-02-23T09:00:00.000Z'), value: 22.2 }, - { date: new Date('2017-02-23T10:00:00.000Z'), value: 23.3 }, - { date: new Date('2017-02-23T11:00:00.000Z'), value: 24.4 }, - { - date: new Date('2017-02-23T12:00:00.000Z'), - value: null, - anomalyScore: 97.32085, - actual: [0], - typical: [22.2], - }, - { date: new Date('2017-02-23T13:00:00.000Z'), value: 21.3 }, - { date: new Date('2017-02-23T14:00:00.000Z'), value: 21.2 }, - { date: new Date('2017-02-23T15:00:00.000Z'), value: 21.1 }, - ]; - - const limits = chartLimits(data); - expect(limits.min).to.be(0); - expect(limits.max).to.be(24.4); - }); - }); - - describe('filterAxisLabels', () => { - it('throws an error when called without arguments', () => { - expect(() => filterAxisLabels()).to.throwError(); - }); - - it('filters axis labels', () => { - // this provides a dummy structure of axis labels. - // the first one should always be filtered because it overflows on the - // left side of the axis. the last one should be filtered based on the - // given width parameter when doing the test calls. - $('body').append(` - - - - 06:00 - - - 12:00 - - - 18:00 - - - 00:00 - - - - `); - - const selector = '#filterAxisLabels .x.axis'; - - // given this width, the last tick should not be removed - filterAxisLabels(d3.selectAll(selector), 1000); - expect(d3.selectAll(selector + ' .tick text').size()).to.be(3); - - // given this width, the last tick should be removed - filterAxisLabels(d3.selectAll(selector), 790); - expect(d3.selectAll(selector + ' .tick text').size()).to.be(2); - - // clean up - $('#filterAxisLabels').remove(); - }); - }); - - describe('getChartType', () => { - const singleMetricConfig = { - metricFunction: 'avg', - functionDescription: 'mean', - fieldName: 'responsetime', - entityFields: [], - }; - - const multiMetricConfig = { - metricFunction: 'avg', - functionDescription: 'mean', - fieldName: 'responsetime', - entityFields: [ - { - fieldName: 'airline', - fieldValue: 'AAL', - fieldType: 'partition', - }, - ], - }; - - const populationConfig = { - metricFunction: 'avg', - functionDescription: 'mean', - fieldName: 'http.response.body.bytes', - entityFields: [ - { - fieldName: 'source.ip', - fieldValue: '10.11.12.13', - fieldType: 'over', - }, - ], - }; - - const rareConfig = { - metricFunction: 'count', - functionDescription: 'rare', - entityFields: [ - { - fieldName: 'http.response.status_code', - fieldValue: '404', - fieldType: 'by', - }, - ], - }; - - const varpModelPlotConfig = { - metricFunction: null, - functionDescription: 'varp', - fieldName: 'NetworkOut', - entityFields: [ - { - fieldName: 'instance', - fieldValue: 'i-ef74d410', - fieldType: 'over', - }, - ], - }; - - const overScriptFieldModelPlotConfig = { - metricFunction: 'count', - functionDescription: 'count', - fieldName: 'highest_registered_domain', - entityFields: [ - { - fieldName: 'highest_registered_domain', - fieldValue: 'elastic.co', - fieldType: 'over', - }, - ], - datafeedConfig: { - script_fields: { - highest_registered_domain: { - script: { - source: "return domainSplit(doc['query'].value, params).get(1);", - lang: 'painless', - }, - ignore_failure: false, - }, - }, - }, - }; - - it('returns single metric chart type as expected for configs', () => { - expect(getChartType(singleMetricConfig)).to.be(CHART_TYPE.SINGLE_METRIC); - expect(getChartType(multiMetricConfig)).to.be(CHART_TYPE.SINGLE_METRIC); - expect(getChartType(varpModelPlotConfig)).to.be(CHART_TYPE.SINGLE_METRIC); - expect(getChartType(overScriptFieldModelPlotConfig)).to.be(CHART_TYPE.SINGLE_METRIC); - }); - - it('returns event distribution chart type as expected for configs', () => { - expect(getChartType(rareConfig)).to.be(CHART_TYPE.EVENT_DISTRIBUTION); - }); - - it('returns population distribution chart type as expected for configs', () => { - expect(getChartType(populationConfig)).to.be(CHART_TYPE.POPULATION_DISTRIBUTION); - }); - }); - - describe('numTicks', () => { - it('returns 10 for 1000', () => { - expect(numTicks(1000)).to.be(10); - }); - }); - - describe('showMultiBucketAnomalyMarker', () => { - it('returns true for points with multiBucketImpact at or above medium impact', () => { - expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.HIGH })).to.be( - true - ); - expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.MEDIUM })).to.be( - true - ); - }); - - it('returns false for points with multiBucketImpact missing or below medium impact', () => { - expect(showMultiBucketAnomalyMarker({})).to.be(false); - expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.LOW })).to.be( - false - ); - expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.NONE })).to.be( - false - ); - }); - }); - - describe('showMultiBucketAnomalyTooltip', () => { - it('returns true for points with multiBucketImpact at or above low impact', () => { - expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.HIGH })).to.be( - true - ); - expect( - showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.MEDIUM }) - ).to.be(true); - expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.LOW })).to.be( - true - ); - }); - - it('returns false for points with multiBucketImpact missing or below medium impact', () => { - expect(showMultiBucketAnomalyTooltip({})).to.be(false); - expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.NONE })).to.be( - false - ); - }); - }); -}); diff --git a/x-pack/plugins/ml/public/application/util/__tests__/string_utils.js b/x-pack/plugins/ml/public/application/util/__tests__/string_utils.js deleted file mode 100644 index 702e9dfd962057..00000000000000 --- a/x-pack/plugins/ml/public/application/util/__tests__/string_utils.js +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import expect from '@kbn/expect'; -import { - replaceStringTokens, - detectorToString, - sortByKey, - guessTimeFormat, - toLocaleString, - mlEscape, - escapeForElasticsearchQuery, -} from '../string_utils'; - -describe('ML - string utils', () => { - describe('replaceStringTokens', () => { - const testRecord = { - job_id: 'test_job', - result_type: 'record', - probability: 0.0191711, - record_score: 4.3, - bucket_span: 300, - detector_index: 0, - timestamp: 1454890500000, - function: 'mean', - function_description: 'mean', - field_name: 'responsetime', - user: "Des O'Connor", - testfield1: 'test$tring=[+-?]', - testfield2: '{<()>}', - testfield3: 'host=\\\\test@uk.dev', - }; - - it('returns correct values without URI encoding', () => { - const result = replaceStringTokens('user=$user$,time=$timestamp$', testRecord, false); - expect(result).to.be("user=Des O'Connor,time=1454890500000"); - }); - - it('returns correct values for missing token without URI encoding', () => { - const result = replaceStringTokens('user=$username$,time=$timestamp$', testRecord, false); - expect(result).to.be('user=$username$,time=1454890500000'); - }); - - it('returns correct values with URI encoding', () => { - const testString1 = 'https://www.google.co.uk/webhp#q=$testfield1$'; - const testString2 = 'https://www.google.co.uk/webhp#q=$testfield2$'; - const testString3 = 'https://www.google.co.uk/webhp#q=$testfield3$'; - const testString4 = 'https://www.google.co.uk/webhp#q=$user$'; - - const result1 = replaceStringTokens(testString1, testRecord, true); - const result2 = replaceStringTokens(testString2, testRecord, true); - const result3 = replaceStringTokens(testString3, testRecord, true); - const result4 = replaceStringTokens(testString4, testRecord, true); - - expect(result1).to.be('https://www.google.co.uk/webhp#q=test%24tring%3D%5B%2B-%3F%5D'); - expect(result2).to.be('https://www.google.co.uk/webhp#q=%7B%3C()%3E%7D'); - expect(result3).to.be('https://www.google.co.uk/webhp#q=host%3D%5C%5Ctest%40uk.dev'); - expect(result4).to.be("https://www.google.co.uk/webhp#q=Des%20O'Connor"); - }); - - it('returns correct values for missing token with URI encoding', () => { - const testString = 'https://www.google.co.uk/webhp#q=$username$&time=$timestamp$'; - const result = replaceStringTokens(testString, testRecord, true); - expect(result).to.be('https://www.google.co.uk/webhp#q=$username$&time=1454890500000'); - }); - }); - - describe('detectorToString', () => { - it('returns the correct descriptions for detectors', () => { - const detector1 = { - function: 'count', - }; - - const detector2 = { - function: 'count', - by_field_name: 'airline', - use_null: false, - }; - - const detector3 = { - function: 'mean', - field_name: 'CPUUtilization', - partition_field_name: 'region', - by_field_name: 'host', - over_field_name: 'user', - exclude_frequent: 'all', - }; - - expect(detectorToString(detector1)).to.be('count'); - expect(detectorToString(detector2)).to.be('count by airline use_null=false'); - expect(detectorToString(detector3)).to.be( - 'mean(CPUUtilization) by host over user partition_field_name=region exclude_frequent=all' - ); - }); - }); - - describe('sortByKey', () => { - const obj = { - zebra: 'stripes', - giraffe: 'neck', - elephant: 'trunk', - }; - - const valueComparator = function(value) { - return value; - }; - - it('returns correct ordering with default comparator', () => { - const result = sortByKey(obj, false); - const keys = Object.keys(result); - expect(keys[0]).to.be('elephant'); - expect(keys[1]).to.be('giraffe'); - expect(keys[2]).to.be('zebra'); - }); - - it('returns correct ordering with default comparator and order reversed', () => { - const result = sortByKey(obj, true); - const keys = Object.keys(result); - expect(keys[0]).to.be('zebra'); - expect(keys[1]).to.be('giraffe'); - expect(keys[2]).to.be('elephant'); - }); - - it('returns correct ordering with comparator', () => { - const result = sortByKey(obj, false, valueComparator); - const keys = Object.keys(result); - expect(keys[0]).to.be('giraffe'); - expect(keys[1]).to.be('zebra'); - expect(keys[2]).to.be('elephant'); - }); - - it('returns correct ordering with comparator and order reversed', () => { - const result = sortByKey(obj, true, valueComparator); - const keys = Object.keys(result); - expect(keys[0]).to.be('elephant'); - expect(keys[1]).to.be('zebra'); - expect(keys[2]).to.be('giraffe'); - }); - }); - - describe('guessTimeFormat', () => { - it('returns correct format for various dates', () => { - expect(guessTimeFormat('2017-03-24T00:00')).to.be("yyyy-MM-dd'T'HH:mm"); - expect(guessTimeFormat('2017-03-24 00:00')).to.be('yyyy-MM-dd HH:mm'); - expect(guessTimeFormat('2017-03-24 00:00:00')).to.be('yyyy-MM-dd HH:mm:ss'); - expect(guessTimeFormat('2017-03-24 00:00:00Z')).to.be('yyyy-MM-dd HH:mm:ssX'); - expect(guessTimeFormat('2017-03-24 00:00:00.000')).to.be('yyyy-MM-dd HH:mm:ss.SSS'); - expect(guessTimeFormat('2017-03-24 00:00:00:000')).to.be('yyyy-MM-dd HH:mm:ss:SSS'); - expect(guessTimeFormat('2017-03-24 00:00:00.000+00:00:00')).to.be( - 'yyyy-MM-dd HH:mm:ss.SSSXXXXX' - ); - expect(guessTimeFormat('2017-03-24 00:00:00.000+00:00')).to.be('yyyy-MM-dd HH:mm:ss.SSSXXX'); - expect(guessTimeFormat('2017-03-24 00:00:00.000+000000')).to.be( - 'yyyy-MM-dd HH:mm:ss.SSSXXXX' - ); - expect(guessTimeFormat('2017-03-24 00:00:00.000+0000')).to.be('yyyy-MM-dd HH:mm:ss.SSSZ'); - expect(guessTimeFormat('2017-03-24 00:00:00.000+00')).to.be('yyyy-MM-dd HH:mm:ss.SSSX'); - expect(guessTimeFormat('2017-03-24 00:00:00.000Z')).to.be('yyyy-MM-dd HH:mm:ss.SSSX'); - expect(guessTimeFormat('2017-03-24 00:00:00.000 GMT')).to.be('yyyy-MM-dd HH:mm:ss.SSS zzz'); - expect(guessTimeFormat('2017-03-24 00:00:00 GMT')).to.be('yyyy-MM-dd HH:mm:ss zzz'); - expect(guessTimeFormat('2017 03 24 00:00:00.000')).to.be('yyyy MM dd HH:mm:ss.SSS'); - expect(guessTimeFormat('2017.03.24 00:00:00.000')).to.be('yyyy.MM.dd HH:mm:ss.SSS'); - expect(guessTimeFormat('2017/03/24 00:00:00.000')).to.be('yyyy/MM/dd HH:mm:ss.SSS'); - expect(guessTimeFormat('24/03/2017 00:00:00.000')).to.be('dd/MM/yyyy HH:mm:ss.SSS'); - expect(guessTimeFormat('03 24 2017 00:00:00.000')).to.be('MM dd yyyy HH:mm:ss.SSS'); - expect(guessTimeFormat('03/24/2017 00:00:00.000')).to.be('MM/dd/yyyy HH:mm:ss.SSS'); - expect(guessTimeFormat('2017 Mar 24 00:00:00.000')).to.be('yyyy MMM dd HH:mm:ss.SSS'); - expect(guessTimeFormat('Mar 24 2017 00:00:00.000')).to.be('MMM dd yyyy HH:mm:ss.SSS'); - expect(guessTimeFormat('24 Mar 2017 00:00:00.000')).to.be('dd MMM yyyy HH:mm:ss.SSS'); - expect(guessTimeFormat('1490313600')).to.be('epoch'); - expect(guessTimeFormat('1490313600000')).to.be('epoch_ms'); - }); - }); - - describe('toLocaleString', () => { - it('returns correct comma placement for large numbers', () => { - expect(toLocaleString(1)).to.be('1'); - expect(toLocaleString(10)).to.be('10'); - expect(toLocaleString(100)).to.be('100'); - expect(toLocaleString(1000)).to.be('1,000'); - expect(toLocaleString(10000)).to.be('10,000'); - expect(toLocaleString(100000)).to.be('100,000'); - expect(toLocaleString(1000000)).to.be('1,000,000'); - expect(toLocaleString(10000000)).to.be('10,000,000'); - expect(toLocaleString(100000000)).to.be('100,000,000'); - expect(toLocaleString(1000000000)).to.be('1,000,000,000'); - }); - }); - - describe('mlEscape', () => { - it('returns correct escaping of characters', () => { - expect(mlEscape('foo&bar')).to.be('foo&bar'); - expect(mlEscape('foobar')).to.be('foo>bar'); - expect(mlEscape('foo"bar')).to.be('foo"bar'); - expect(mlEscape("foo'bar")).to.be('foo'bar'); - expect(mlEscape('foo/bar')).to.be('foo/bar'); - }); - }); - - describe('escapeForElasticsearchQuery', () => { - it('returns correct escaping of reserved elasticsearch characters', () => { - expect(escapeForElasticsearchQuery('foo+bar')).to.be('foo\\+bar'); - expect(escapeForElasticsearchQuery('foo-bar')).to.be('foo\\-bar'); - expect(escapeForElasticsearchQuery('foo=bar')).to.be('foo\\=bar'); - expect(escapeForElasticsearchQuery('foo&&bar')).to.be('foo\\&\\&bar'); - expect(escapeForElasticsearchQuery('foo||bar')).to.be('foo\\|\\|bar'); - expect(escapeForElasticsearchQuery('foo>bar')).to.be('foo\\>bar'); - expect(escapeForElasticsearchQuery('foo { + const calcAuto = timeBucketsCalcAutoIntervalProvider(); + + describe('near interval', () => { + test('returns 0ms buckets for undefined / 0 bars', () => { + const interval = calcAuto.near(0, undefined); + expect(interval.asMilliseconds()).toBe(0); + }); + + test('returns 1000ms buckets for 60s / 100 bars', () => { + const interval = calcAuto.near(100, moment.duration(60, 's')); + expect(interval.asMilliseconds()).toBe(1000); + }); + + test('returns 5m buckets for 8h / 100 bars', () => { + const interval = calcAuto.near(100, moment.duration(8, 'h')); + expect(interval.asMinutes()).toBe(5); + }); + + test('returns 15m buckets for 1d / 100 bars', () => { + const interval = calcAuto.near(100, moment.duration(1, 'd')); + expect(interval.asMinutes()).toBe(15); + }); + + test('returns 1h buckets for 20d / 500 bars', () => { + const interval = calcAuto.near(500, moment.duration(20, 'd')); + expect(interval.asHours()).toBe(1); + }); + + test('returns 6h buckets for 100d / 500 bars', () => { + const interval = calcAuto.near(500, moment.duration(100, 'd')); + expect(interval.asHours()).toBe(6); + }); + + test('returns 24h buckets for 1y / 500 bars', () => { + const interval = calcAuto.near(500, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(24); + }); + + test('returns 12h buckets for 1y / 1000 bars', () => { + const interval = calcAuto.near(1000, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(12); + }); + }); + + describe('lessThan interval', () => { + test('returns 0ms buckets for undefined / 0 bars', () => { + const interval = calcAuto.lessThan(0, undefined); + expect(interval.asMilliseconds()).toBe(0); + }); + + test('returns 500ms buckets for 60s / 100 bars', () => { + const interval = calcAuto.lessThan(100, moment.duration(60, 's')); + expect(interval.asMilliseconds()).toBe(500); + }); + + test('returns 5m buckets for 8h / 100 bars', () => { + const interval = calcAuto.lessThan(100, moment.duration(8, 'h')); + expect(interval.asMinutes()).toBe(5); + }); + + test('returns 30m buckets for 1d / 100 bars', () => { + const interval = calcAuto.lessThan(100, moment.duration(1, 'd')); + expect(interval.asMinutes()).toBe(30); + }); + + test('returns 1h buckets for 20d / 500 bars', () => { + const interval = calcAuto.lessThan(500, moment.duration(20, 'd')); + expect(interval.asHours()).toBe(1); + }); + + test('returns 6h buckets for 100d / 500 bars', () => { + const interval = calcAuto.lessThan(500, moment.duration(100, 'd')); + expect(interval.asHours()).toBe(6); + }); + + test('returns 24h buckets for 1y / 500 bars', () => { + const interval = calcAuto.lessThan(500, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(24); + }); + + test('returns 12h buckets for 1y / 1000 bars', () => { + const interval = calcAuto.lessThan(1000, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(12); + }); + }); + + describe('atLeast interval', () => { + test('returns 0ms buckets for undefined / 0 bars', () => { + const interval = calcAuto.atLeast(0, undefined); + expect(interval.asMilliseconds()).toBe(0); + }); + + test('returns 100ms buckets for 60s / 100 bars', () => { + const interval = calcAuto.atLeast(100, moment.duration(60, 's')); + expect(interval.asMilliseconds()).toBe(100); + }); + + test('returns 1m buckets for 8h / 100 bars', () => { + const interval = calcAuto.atLeast(100, moment.duration(8, 'h')); + expect(interval.asMinutes()).toBe(1); + }); + + test('returns 10m buckets for 1d / 100 bars', () => { + const interval = calcAuto.atLeast(100, moment.duration(1, 'd')); + expect(interval.asMinutes()).toBe(10); + }); + + test('returns 30m buckets for 20d / 500 bars', () => { + const interval = calcAuto.atLeast(500, moment.duration(20, 'd')); + expect(interval.asMinutes()).toBe(30); + }); + + test('returns 4h buckets for 100d / 500 bars', () => { + const interval = calcAuto.atLeast(500, moment.duration(100, 'd')); + expect(interval.asHours()).toBe(4); + }); + + test('returns 12h buckets for 1y / 500 bars', () => { + const interval = calcAuto.atLeast(500, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(12); + }); + + test('returns 8h buckets for 1y / 1000 bars', () => { + const interval = calcAuto.atLeast(1000, moment.duration(1, 'y')); + expect(interval.asHours()).toBe(8); + }); + }); +}); diff --git a/x-pack/plugins/ml/public/application/util/chart_utils.test.js b/x-pack/plugins/ml/public/application/util/chart_utils.test.js index 4b33cb131be7f3..57aea3c0ab5aa5 100644 --- a/x-pack/plugins/ml/public/application/util/chart_utils.test.js +++ b/x-pack/plugins/ml/public/application/util/chart_utils.test.js @@ -29,246 +29,488 @@ const timefilter = getTimefilter(); import d3 from 'd3'; import moment from 'moment'; -import { mount } from 'enzyme'; import React from 'react'; +import { render } from '@testing-library/react'; import { + chartLimits, + getChartType, getExploreSeriesLink, getTickValues, - isLabelLengthAboveThreshold, getXTransform, + isLabelLengthAboveThreshold, + numTicks, removeLabelOverlap, + showMultiBucketAnomalyMarker, + showMultiBucketAnomalyTooltip, } from './chart_utils'; +import { MULTI_BUCKET_IMPACT } from '../../../common/constants/multi_bucket_impact'; +import { CHART_TYPE } from '../explorer/explorer_constants'; + timefilter.setTime({ from: moment(seriesConfig.selectedEarliest).toISOString(), to: moment(seriesConfig.selectedLatest).toISOString(), }); -describe('getExploreSeriesLink', () => { - test('get timeseriesexplorer link', () => { - const link = getExploreSeriesLink(seriesConfig); - const expectedLink = - `#/timeseriesexplorer?_g=(ml:(jobIds:!(population-03)),` + - `refreshInterval:(display:Off,pause:!f,value:0),time:(from:'2017-02-23T00:00:00.000Z',mode:absolute,` + - `to:'2017-02-23T23:59:59.999Z'))&_a=(mlTimeSeriesExplorer%3A(detectorIndex%3A0%2Centities%3A` + - `(nginx.access.remote_ip%3A'72.57.0.53')%2Czoom%3A(from%3A'2017-02-19T20%3A00%3A00.000Z'%2Cto%3A'2017-02-27T04%3A00%3A00.000Z'))` + - `%2Cquery%3A(query_string%3A(analyze_wildcard%3A!t%2Cquery%3A'*')))`; - - expect(link).toBe(expectedLink); - }); -}); +describe('ML - chart utils', () => { + describe('chartLimits', () => { + test('returns NaN when called without data', () => { + const limits = chartLimits(); + expect(limits.min).toBeNaN(); + expect(limits.max).toBeNaN(); + }); -describe('getTickValues', () => { - test('farequote sample data', () => { - const tickValues = getTickValues(1486656000000, 14400000, 1486606500000, 1486719900000); - - expect(tickValues).toEqual([ - 1486612800000, - 1486627200000, - 1486641600000, - 1486656000000, - 1486670400000, - 1486684800000, - 1486699200000, - 1486713600000, - ]); - }); + test('returns {max: 625736376, min: 201039318} for some test data', () => { + const data = [ + { + date: new Date('2017-02-23T08:00:00.000Z'), + value: 228243469, + anomalyScore: 63.32916, + numberOfCauses: 1, + actual: [228243469], + typical: [133107.7703441773], + }, + { date: new Date('2017-02-23T09:00:00.000Z'), value: null }, + { date: new Date('2017-02-23T10:00:00.000Z'), value: null }, + { date: new Date('2017-02-23T11:00:00.000Z'), value: null }, + { + date: new Date('2017-02-23T12:00:00.000Z'), + value: 625736376, + anomalyScore: 97.32085, + numberOfCauses: 1, + actual: [625736376], + typical: [132830.424736973], + }, + { + date: new Date('2017-02-23T13:00:00.000Z'), + value: 201039318, + anomalyScore: 59.83488, + numberOfCauses: 1, + actual: [201039318], + typical: [132739.5267403542], + }, + ]; + + const limits = chartLimits(data); + + // {max: 625736376, min: 201039318} + expect(limits.min).toBe(201039318); + expect(limits.max).toBe(625736376); + }); - test('filebeat sample data', () => { - const tickValues = getTickValues(1486080000000, 14400000, 1485860400000, 1486314000000); - expect(tickValues).toEqual([ - 1485864000000, - 1485878400000, - 1485892800000, - 1485907200000, - 1485921600000, - 1485936000000, - 1485950400000, - 1485964800000, - 1485979200000, - 1485993600000, - 1486008000000, - 1486022400000, - 1486036800000, - 1486051200000, - 1486065600000, - 1486080000000, - 1486094400000, - 1486108800000, - 1486123200000, - 1486137600000, - 1486152000000, - 1486166400000, - 1486180800000, - 1486195200000, - 1486209600000, - 1486224000000, - 1486238400000, - 1486252800000, - 1486267200000, - 1486281600000, - 1486296000000, - 1486310400000, - ]); + test("adds 5% padding when min/max are the same, e.g. when there's only one data point", () => { + const data = [ + { + date: new Date('2017-02-23T08:00:00.000Z'), + value: 100, + anomalyScore: 50, + numberOfCauses: 1, + actual: [100], + typical: [100], + }, + ]; + + const limits = chartLimits(data); + expect(limits.min).toBe(95); + expect(limits.max).toBe(105); + }); + + test('returns minimum of 0 when data includes an anomaly for missing data', () => { + const data = [ + { date: new Date('2017-02-23T09:00:00.000Z'), value: 22.2 }, + { date: new Date('2017-02-23T10:00:00.000Z'), value: 23.3 }, + { date: new Date('2017-02-23T11:00:00.000Z'), value: 24.4 }, + { + date: new Date('2017-02-23T12:00:00.000Z'), + value: null, + anomalyScore: 97.32085, + actual: [0], + typical: [22.2], + }, + { date: new Date('2017-02-23T13:00:00.000Z'), value: 21.3 }, + { date: new Date('2017-02-23T14:00:00.000Z'), value: 21.2 }, + { date: new Date('2017-02-23T15:00:00.000Z'), value: 21.1 }, + ]; + + const limits = chartLimits(data); + expect(limits.min).toBe(0); + expect(limits.max).toBe(24.4); + }); }); - test('gallery sample data', () => { - const tickValues = getTickValues(1518652800000, 604800000, 1518274800000, 1519635600000); - expect(tickValues).toEqual([1518652800000, 1519257600000]); + describe('getChartType', () => { + const singleMetricConfig = { + metricFunction: 'avg', + functionDescription: 'mean', + fieldName: 'responsetime', + entityFields: [], + }; + + const multiMetricConfig = { + metricFunction: 'avg', + functionDescription: 'mean', + fieldName: 'responsetime', + entityFields: [ + { + fieldName: 'airline', + fieldValue: 'AAL', + fieldType: 'partition', + }, + ], + }; + + const populationConfig = { + metricFunction: 'avg', + functionDescription: 'mean', + fieldName: 'http.response.body.bytes', + entityFields: [ + { + fieldName: 'source.ip', + fieldValue: '10.11.12.13', + fieldType: 'over', + }, + ], + }; + + const rareConfig = { + metricFunction: 'count', + functionDescription: 'rare', + entityFields: [ + { + fieldName: 'http.response.status_code', + fieldValue: '404', + fieldType: 'by', + }, + ], + }; + + const varpModelPlotConfig = { + metricFunction: null, + functionDescription: 'varp', + fieldName: 'NetworkOut', + entityFields: [ + { + fieldName: 'instance', + fieldValue: 'i-ef74d410', + fieldType: 'over', + }, + ], + }; + + const overScriptFieldModelPlotConfig = { + metricFunction: 'count', + functionDescription: 'count', + fieldName: 'highest_registered_domain', + entityFields: [ + { + fieldName: 'highest_registered_domain', + fieldValue: 'elastic.co', + fieldType: 'over', + }, + ], + datafeedConfig: { + script_fields: { + highest_registered_domain: { + script: { + source: "return domainSplit(doc['query'].value, params).get(1);", + lang: 'painless', + }, + ignore_failure: false, + }, + }, + }, + }; + + test('returns single metric chart type as expected for configs', () => { + expect(getChartType(singleMetricConfig)).toBe(CHART_TYPE.SINGLE_METRIC); + expect(getChartType(multiMetricConfig)).toBe(CHART_TYPE.SINGLE_METRIC); + expect(getChartType(varpModelPlotConfig)).toBe(CHART_TYPE.SINGLE_METRIC); + expect(getChartType(overScriptFieldModelPlotConfig)).toBe(CHART_TYPE.SINGLE_METRIC); + }); + + test('returns event distribution chart type as expected for configs', () => { + expect(getChartType(rareConfig)).toBe(CHART_TYPE.EVENT_DISTRIBUTION); + }); + + test('returns population distribution chart type as expected for configs', () => { + expect(getChartType(populationConfig)).toBe(CHART_TYPE.POPULATION_DISTRIBUTION); + }); }); - test('invalid tickIntervals trigger an error', () => { - expect(() => { - getTickValues(1518652800000, 0, 1518274800000, 1519635600000); - }).toThrow(); - expect(() => { - getTickValues(1518652800000, -604800000, 1518274800000, 1519635600000); - }).toThrow(); + describe('getExploreSeriesLink', () => { + test('get timeseriesexplorer link', () => { + const link = getExploreSeriesLink(seriesConfig); + const expectedLink = + `#/timeseriesexplorer?_g=(ml:(jobIds:!(population-03)),` + + `refreshInterval:(display:Off,pause:!f,value:0),time:(from:'2017-02-23T00:00:00.000Z',mode:absolute,` + + `to:'2017-02-23T23:59:59.999Z'))&_a=(mlTimeSeriesExplorer%3A(detectorIndex%3A0%2Centities%3A` + + `(nginx.access.remote_ip%3A'72.57.0.53')%2Czoom%3A(from%3A'2017-02-19T20%3A00%3A00.000Z'%2Cto%3A'2017-02-27T04%3A00%3A00.000Z'))` + + `%2Cquery%3A(query_string%3A(analyze_wildcard%3A!t%2Cquery%3A'*')))`; + + expect(link).toBe(expectedLink); + }); }); -}); -describe('isLabelLengthAboveThreshold', () => { - test('short label', () => { - const isLongLabel = isLabelLengthAboveThreshold({ - detectorLabel: 'count', - entityFields: seriesConfig.entityFields, + describe('numTicks', () => { + test('returns 10 for 1000', () => { + expect(numTicks(1000)).toBe(10); }); - expect(isLongLabel).toBeFalsy(); }); - test('long label', () => { - const isLongLabel = isLabelLengthAboveThreshold(seriesConfig); - expect(isLongLabel).toBeTruthy(); + describe('showMultiBucketAnomalyMarker', () => { + test('returns true for points with multiBucketImpact at or above medium impact', () => { + expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.HIGH })).toBe( + true + ); + expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.MEDIUM })).toBe( + true + ); + }); + + test('returns false for points with multiBucketImpact missing or below medium impact', () => { + expect(showMultiBucketAnomalyMarker({})).toBe(false); + expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.LOW })).toBe( + false + ); + expect(showMultiBucketAnomalyMarker({ multiBucketImpact: MULTI_BUCKET_IMPACT.NONE })).toBe( + false + ); + }); }); -}); -describe('getXTransform', () => { - const expectedXTransform = 0.007167499999999999; + describe('showMultiBucketAnomalyTooltip', () => { + test('returns true for points with multiBucketImpact at or above low impact', () => { + expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.HIGH })).toBe( + true + ); + expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.MEDIUM })).toBe( + true + ); + expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.LOW })).toBe( + true + ); + }); - test('Chrome/Safari/Firefox String variant.', () => { - const transformStr = 'translate(0.007167499999999999,0)'; - const xTransform = getXTransform(transformStr); - expect(xTransform).toEqual(expectedXTransform); + test('returns false for points with multiBucketImpact missing or below medium impact', () => { + expect(showMultiBucketAnomalyTooltip({})).toBe(false); + expect(showMultiBucketAnomalyTooltip({ multiBucketImpact: MULTI_BUCKET_IMPACT.NONE })).toBe( + false + ); + }); }); - test('IE11 String variant.', () => { - const transformStr = 'translate(0.007167499999999999)'; - const xTransform = getXTransform(transformStr); - expect(xTransform).toEqual(expectedXTransform); + describe('getTickValues', () => { + test('farequote sample data', () => { + const tickValues = getTickValues(1486656000000, 14400000, 1486606500000, 1486719900000); + + expect(tickValues).toEqual([ + 1486612800000, + 1486627200000, + 1486641600000, + 1486656000000, + 1486670400000, + 1486684800000, + 1486699200000, + 1486713600000, + ]); + }); + + test('filebeat sample data', () => { + const tickValues = getTickValues(1486080000000, 14400000, 1485860400000, 1486314000000); + expect(tickValues).toEqual([ + 1485864000000, + 1485878400000, + 1485892800000, + 1485907200000, + 1485921600000, + 1485936000000, + 1485950400000, + 1485964800000, + 1485979200000, + 1485993600000, + 1486008000000, + 1486022400000, + 1486036800000, + 1486051200000, + 1486065600000, + 1486080000000, + 1486094400000, + 1486108800000, + 1486123200000, + 1486137600000, + 1486152000000, + 1486166400000, + 1486180800000, + 1486195200000, + 1486209600000, + 1486224000000, + 1486238400000, + 1486252800000, + 1486267200000, + 1486281600000, + 1486296000000, + 1486310400000, + ]); + }); + + test('gallery sample data', () => { + const tickValues = getTickValues(1518652800000, 604800000, 1518274800000, 1519635600000); + expect(tickValues).toEqual([1518652800000, 1519257600000]); + }); + + test('invalid tickIntervals trigger an error', () => { + expect(() => { + getTickValues(1518652800000, 0, 1518274800000, 1519635600000); + }).toThrow(); + expect(() => { + getTickValues(1518652800000, -604800000, 1518274800000, 1519635600000); + }).toThrow(); + }); }); - test('Invalid String.', () => { - const transformStr = 'translate()'; - const xTransform = getXTransform(transformStr); - expect(xTransform).toEqual(NaN); + describe('isLabelLengthAboveThreshold', () => { + test('short label', () => { + const isLongLabel = isLabelLengthAboveThreshold({ + detectorLabel: 'count', + entityFields: seriesConfig.entityFields, + }); + expect(isLongLabel).toBeFalsy(); + }); + + test('long label', () => { + const isLongLabel = isLabelLengthAboveThreshold(seriesConfig); + expect(isLongLabel).toBeTruthy(); + }); }); -}); -describe('removeLabelOverlap', () => { - const originalGetBBox = SVGElement.prototype.getBBox; - - // This resembles how ExplorerChart renders its x axis. - // We set up this boilerplate so we can then run removeLabelOverlap() - // on some "real" structure. - function axisSetup({ interval, plotEarliest, plotLatest, startTimeMs, xAxisTickFormat }) { - const wrapper = mount(
); - const node = wrapper.getDOMNode(); - - const chartHeight = 170; - const margin = { top: 10, right: 0, bottom: 30, left: 60 }; - const svgWidth = 500; - const svgHeight = chartHeight + margin.top + margin.bottom; - const vizWidth = 500; - - const chartElement = d3.select(node); - - const lineChartXScale = d3.time - .scale() - .range([0, vizWidth]) - .domain([plotEarliest, plotLatest]); - - const xAxis = d3.svg - .axis() - .scale(lineChartXScale) - .orient('bottom') - .innerTickSize(-chartHeight) - .outerTickSize(0) - .tickPadding(10) - .tickFormat(d => moment(d).format(xAxisTickFormat)); - - const tickValues = getTickValues(startTimeMs, interval, plotEarliest, plotLatest); - xAxis.tickValues(tickValues); - - const svg = chartElement - .append('svg') - .attr('width', svgWidth) - .attr('height', svgHeight); - - const axes = svg.append('g'); - - const gAxis = axes - .append('g') - .attr('class', 'x axis') - .attr('transform', 'translate(0,' + chartHeight + ')') - .call(xAxis); - - return { - gAxis, - node, - vizWidth, - }; - } + describe('getXTransform', () => { + const expectedXTransform = 0.007167499999999999; - test('farequote sample data', () => { - const mockedGetBBox = { width: 27.21875 }; - SVGElement.prototype.getBBox = () => mockedGetBBox; + test('Chrome/Safari/Firefox String variant.', () => { + const transformStr = 'translate(0.007167499999999999,0)'; + const xTransform = getXTransform(transformStr); + expect(xTransform).toEqual(expectedXTransform); + }); - const startTimeMs = 1486656000000; - const interval = 14400000; + test('IE11 String variant.', () => { + const transformStr = 'translate(0.007167499999999999)'; + const xTransform = getXTransform(transformStr); + expect(xTransform).toEqual(expectedXTransform); + }); - const { gAxis, node, vizWidth } = axisSetup({ - interval, - plotEarliest: 1486606500000, - plotLatest: 1486719900000, - startTimeMs, - xAxisTickFormat: 'HH:mm', + test('Invalid String.', () => { + const transformStr = 'translate()'; + const xTransform = getXTransform(transformStr); + expect(xTransform).toEqual(NaN); }); + }); - expect(node.getElementsByTagName('text')).toHaveLength(8); + describe('removeLabelOverlap', () => { + const originalGetBBox = SVGElement.prototype.getBBox; + + // This resembles how ExplorerChart renders its x axis. + // We set up this boilerplate so we can then run removeLabelOverlap() + // on some "real" structure. + function axisSetup({ interval, plotEarliest, plotLatest, startTimeMs, xAxisTickFormat }) { + const { container } = render(
); + const node = container.querySelector('.content-wrapper'); + + const chartHeight = 170; + const margin = { top: 10, right: 0, bottom: 30, left: 60 }; + const svgWidth = 500; + const svgHeight = chartHeight + margin.top + margin.bottom; + const vizWidth = 500; + + const chartElement = d3.select(node); + + const lineChartXScale = d3.time + .scale() + .range([0, vizWidth]) + .domain([plotEarliest, plotLatest]); + + const xAxis = d3.svg + .axis() + .scale(lineChartXScale) + .orient('bottom') + .innerTickSize(-chartHeight) + .outerTickSize(0) + .tickPadding(10) + .tickFormat(d => moment(d).format(xAxisTickFormat)); + + const tickValues = getTickValues(startTimeMs, interval, plotEarliest, plotLatest); + xAxis.tickValues(tickValues); + + const svg = chartElement + .append('svg') + .attr('width', svgWidth) + .attr('height', svgHeight); + + const axes = svg.append('g'); + + const gAxis = axes + .append('g') + .attr('class', 'x axis') + .attr('transform', 'translate(0,' + chartHeight + ')') + .call(xAxis); - removeLabelOverlap(gAxis, startTimeMs, interval, vizWidth); + return { + gAxis, + node, + vizWidth, + }; + } - // at the vizWidth of 500, the most left and right tick label - // will get removed because it overflows the chart area - expect(node.getElementsByTagName('text')).toHaveLength(6); + test('farequote sample data', () => { + const mockedGetBBox = { width: 27.21875 }; + SVGElement.prototype.getBBox = () => mockedGetBBox; - SVGElement.prototype.getBBox = originalGetBBox; - }); + const startTimeMs = 1486656000000; + const interval = 14400000; + + const { gAxis, node, vizWidth } = axisSetup({ + interval, + plotEarliest: 1486606500000, + plotLatest: 1486719900000, + startTimeMs, + xAxisTickFormat: 'HH:mm', + }); - test('filebeat sample data', () => { - const mockedGetBBox = { width: 85.640625 }; - SVGElement.prototype.getBBox = () => mockedGetBBox; + expect(node.getElementsByTagName('text')).toHaveLength(8); - const startTimeMs = 1486080000000; - const interval = 14400000; + removeLabelOverlap(gAxis, startTimeMs, interval, vizWidth); - const { gAxis, node, vizWidth } = axisSetup({ - interval, - plotEarliest: 1485860400000, - plotLatest: 1486314000000, - startTimeMs, - xAxisTickFormat: 'YYYY-MM-DD HH:mm', + // at the vizWidth of 500, the most left and right tick label + // will get removed because it overflows the chart area + expect(node.getElementsByTagName('text')).toHaveLength(6); + + SVGElement.prototype.getBBox = originalGetBBox; }); - expect(node.getElementsByTagName('text')).toHaveLength(32); + test('filebeat sample data', () => { + const mockedGetBBox = { width: 85.640625 }; + SVGElement.prototype.getBBox = () => mockedGetBBox; + + const startTimeMs = 1486080000000; + const interval = 14400000; - removeLabelOverlap(gAxis, startTimeMs, interval, vizWidth); + const { gAxis, node, vizWidth } = axisSetup({ + interval, + plotEarliest: 1485860400000, + plotLatest: 1486314000000, + startTimeMs, + xAxisTickFormat: 'YYYY-MM-DD HH:mm', + }); - // In this case labels get reduced significantly because of the wider - // labels (full dates + time) and the narrow interval. - expect(node.getElementsByTagName('text')).toHaveLength(3); + expect(node.getElementsByTagName('text')).toHaveLength(32); - SVGElement.prototype.getBBox = originalGetBBox; + removeLabelOverlap(gAxis, startTimeMs, interval, vizWidth); + + // In this case labels get reduced significantly because of the wider + // labels (full dates + time) and the narrow interval. + expect(node.getElementsByTagName('text')).toHaveLength(3); + + SVGElement.prototype.getBBox = originalGetBBox; + }); }); }); diff --git a/x-pack/plugins/ml/public/application/util/string_utils.d.ts b/x-pack/plugins/ml/public/application/util/string_utils.d.ts index b5063907e1fdf7..531e44e3e78c13 100644 --- a/x-pack/plugins/ml/public/application/util/string_utils.d.ts +++ b/x-pack/plugins/ml/public/application/util/string_utils.d.ts @@ -14,4 +14,8 @@ export function replaceStringTokens( export function detectorToString(dtr: any): string; +export function sortByKey(list: any, reverse: boolean, comparator?: any): any; + export function toLocaleString(x: number): string; + +export function mlEscape(str: string): string; diff --git a/x-pack/plugins/ml/public/application/util/string_utils.js b/x-pack/plugins/ml/public/application/util/string_utils.js index 172d334099b3df..66835984df5e5d 100644 --- a/x-pack/plugins/ml/public/application/util/string_utils.js +++ b/x-pack/plugins/ml/public/application/util/string_utils.js @@ -99,211 +99,6 @@ export function sortByKey(list, reverse, comparator) { ); } -// guess the time format for a given time string -export function guessTimeFormat(time) { - let format = ''; - let matched = false; - if (isNaN(time)) { - let match; - - // match date format - if (!matched) { - let reg = ''; - - reg += '('; // 1 ( date - - reg += '('; // 2 ( yyyy-MM-dd - reg += '(\\d{4})'; // 3 yyyy - reg += '([-/.\\s])'; // 4 - or . or \s - reg += '('; // 5 ( month - reg += '([01]\\d)'; // 6 MM - reg += '|'; // or - reg += '(\\w{3})'; // 7 MMM - reg += ')'; // ) end month - reg += '([-/.\\s])'; // 8 - or . or \s - reg += '([0-3]\\d)'; // 9 dd 0-3 and 0-9 - reg += ')'; // ) end yyyy-MM-dd - - reg += '|'; // or - - reg += '('; // 10 ( d[d]-MM[M]-yyyy or MM[M]-d[d]-yyyy - - reg += '('; // 11 ( day or month - reg += '(\\d{1,2})'; // 12 d or M or dd or MM - reg += '|'; // or - reg += '(\\w{3})'; // 13 MMM - reg += ')'; // ) end day or month - - reg += '([-/.\\s])'; // 14 - or . or \s - - reg += '('; // 15 ( day or month - reg += '(\\d{1,2})'; // 12 d or M or dd or MM - reg += '|'; // or - reg += '(\\w{3})'; // 17 MMM - reg += ')'; // ) end day or month - - reg += '([-/.\\s])'; // 18 - or . or \s - reg += '(\\d{4})'; // 19 yyyy - reg += ')'; // ) end d[d]-MM[M]-yyyy or MM[M]-d[d]-yyyy - - reg += ')'; // ) end date - - reg += '([T\\s])?'; // 20 T or space - - reg += '([0-2]\\d)'; // 21 HH 0-2 and 0-9 - reg += '([:.])'; // 22 :. - reg += '([0-5]\\d)'; // 23 mm 0-5 and 0-9 - reg += '('; // 24 ( optional secs - reg += '([:.])'; // 25 :. - reg += '([0-5]\\d)'; // 26 ss 0-5 and 0-9 - reg += ')?'; // ) end optional secs - reg += '('; // 27 ( optional millisecs - reg += '([:.])'; // 28 :. - reg += '(\\d{3})'; // 29 3 * 0-9 - reg += ')?'; // ) end optional millisecs - reg += '('; // 30 ( optional timezone matches - reg += '([+-]\\d{2}[:.]\\d{2}[:.]\\d{2})'; // 31 +- 0-9 0-9 :. 0-9 0-9 :. 0-9 0-9 e.g. +00:00:00 - reg += '|'; // or - reg += '([+-]\\d{2}[:.]\\d{2})'; // 32 +- 0-9 0-9 :. 0-9 0-9 e.g. +00:00 - reg += '|'; // or - reg += '([+-]\\d{6})'; // 33 +- 6 * 0-9 e.g. +000000 - reg += '|'; // or - reg += '([+-]\\d{4})'; // 34 +- 4 * 0-9 e.g. +0000 - reg += '|'; // or - reg += '(Z)'; // 35 Z - reg += '|'; // or - reg += '([+-]\\d{2})'; // 36 +- 0-9 0-9 e.g. +00 - reg += '|'; // or - reg += '('; // 37 ( string timezone - reg += '(\\s)'; // 38 optional space - reg += '(\\w{1,4})'; // 39 1-4 letters e.g UTC - reg += ')'; // ) end string timezone - reg += ')?'; // ) end optional timezone - - console.log('guessTimeFormat: time format regex: ' + reg); - - match = time.match(new RegExp(reg)); - // console.log(match); - if (match) { - // add the standard data and time - if (match[2] !== undefined) { - // match yyyy-[MM MMM]-dd - format += 'yyyy'; - format += match[4]; - if (match[6] !== undefined) { - format += 'MM'; - } else if (match[7] !== undefined) { - format += 'MMM'; - } - format += match[8]; - format += 'dd'; - } else if (match[10] !== undefined) { - // match dd-MM[M]-yyyy or MM[M]-dd-yyyy - - if (match[13] !== undefined) { - // found a word as the first part - // e.g., Jan 01 2000 - format += 'MMM'; - format += match[14]; - format += 'dd'; - } else if (match[17] !== undefined) { - // found a word as the second part - // e.g., 01 Jan 2000 - format += 'dd'; - format += match[14]; - format += 'MMM'; - } else { - // check to see if the first number is greater than 12 - // e.g., 24/03/1981 - // this is a guess, but is only thing we can do - // with one line from the data set - if (match[12] !== undefined && +match[12] > 12) { - format += 'dd'; - format += match[14]; - format += 'MM'; - } else { - // default to US format. - format += 'MM'; - format += match[14]; - format += 'dd'; - } - } - - format += match[18]; - format += 'yyyy'; - } - - // optional T or space splitter - // wrap T in single quotes - format += match[20] === 'T' ? "'" + match[20] + "'" : match[20]; - format += 'HH'; - format += match[22]; - format += 'mm'; - - // add optional secs - if (match[24] !== undefined) { - format += match[25]; - format += 'ss'; - } - - // add optional millisecs - if (match[27] !== undefined) { - // .000 - format += match[28]; - format += 'SSS'; - } - - // add optional time zone - if (match[31] !== undefined) { - // +00:00:00 - format += 'XXXXX'; - } else if (match[32] !== undefined) { - // +00:00 - format += 'XXX'; - } else if (match[33] !== undefined) { - // +000000 - format += 'XXXX'; - } else if (match[34] !== undefined) { - // +0000 - format += 'Z'; - } else if (match[35] !== undefined || match[36] !== undefined) { - // Z or +00 - format += 'X'; - } else if (match[37] !== undefined) { - // UTC - if (match[38] !== undefined) { - // add optional space char - format += match[38]; - } - // add time zone name, up to 4 chars - for (let i = 0; i < match[39].length; i++) { - format += 'z'; - } - } - matched = true; - } - } - } else { - // time field is a number, so probably epoch or epoch_ms - if (time > 10000000000) { - // probably milliseconds - format = 'epoch_ms'; - } else { - // probably seconds - format = 'epoch'; - } - matched = true; - } - - if (matched) { - console.log('guessTimeFormat: guessed time format: ', format); - } else { - console.log('guessTimeFormat: time format could not be guessed from: ' + time); - } - - return format; -} - // add commas to large numbers // Number.toLocaleString is not supported on safari export function toLocaleString(x) { diff --git a/x-pack/plugins/ml/public/application/util/string_utils.test.ts b/x-pack/plugins/ml/public/application/util/string_utils.test.ts new file mode 100644 index 00000000000000..d940fce2ee1d58 --- /dev/null +++ b/x-pack/plugins/ml/public/application/util/string_utils.test.ts @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + replaceStringTokens, + detectorToString, + sortByKey, + toLocaleString, + mlEscape, + escapeForElasticsearchQuery, +} from './string_utils'; + +describe('ML - string utils', () => { + describe('replaceStringTokens', () => { + const testRecord = { + job_id: 'test_job', + result_type: 'record', + probability: 0.0191711, + record_score: 4.3, + bucket_span: 300, + detector_index: 0, + timestamp: 1454890500000, + function: 'mean', + function_description: 'mean', + field_name: 'responsetime', + user: "Des O'Connor", + testfield1: 'test$tring=[+-?]', + testfield2: '{<()>}', + testfield3: 'host=\\\\test@uk.dev', + }; + + test('returns correct values without URI encoding', () => { + const result = replaceStringTokens('user=$user$,time=$timestamp$', testRecord, false); + expect(result).toBe("user=Des O'Connor,time=1454890500000"); + }); + + test('returns correct values for missing token without URI encoding', () => { + const result = replaceStringTokens('user=$username$,time=$timestamp$', testRecord, false); + expect(result).toBe('user=$username$,time=1454890500000'); + }); + + test('returns correct values with URI encoding', () => { + const testString1 = 'https://www.google.co.uk/webhp#q=$testfield1$'; + const testString2 = 'https://www.google.co.uk/webhp#q=$testfield2$'; + const testString3 = 'https://www.google.co.uk/webhp#q=$testfield3$'; + const testString4 = 'https://www.google.co.uk/webhp#q=$user$'; + + const result1 = replaceStringTokens(testString1, testRecord, true); + const result2 = replaceStringTokens(testString2, testRecord, true); + const result3 = replaceStringTokens(testString3, testRecord, true); + const result4 = replaceStringTokens(testString4, testRecord, true); + + expect(result1).toBe('https://www.google.co.uk/webhp#q=test%24tring%3D%5B%2B-%3F%5D'); + expect(result2).toBe('https://www.google.co.uk/webhp#q=%7B%3C()%3E%7D'); + expect(result3).toBe('https://www.google.co.uk/webhp#q=host%3D%5C%5Ctest%40uk.dev'); + expect(result4).toBe("https://www.google.co.uk/webhp#q=Des%20O'Connor"); + }); + + test('returns correct values for missing token with URI encoding', () => { + const testString = 'https://www.google.co.uk/webhp#q=$username$&time=$timestamp$'; + const result = replaceStringTokens(testString, testRecord, true); + expect(result).toBe('https://www.google.co.uk/webhp#q=$username$&time=1454890500000'); + }); + }); + + describe('detectorToString', () => { + test('returns the correct descriptions for detectors', () => { + const detector1 = { + function: 'count', + }; + + const detector2 = { + function: 'count', + by_field_name: 'airline', + use_null: false, + }; + + const detector3 = { + function: 'mean', + field_name: 'CPUUtilization', + partition_field_name: 'region', + by_field_name: 'host', + over_field_name: 'user', + exclude_frequent: 'all', + }; + + expect(detectorToString(detector1)).toBe('count'); + expect(detectorToString(detector2)).toBe('count by airline use_null=false'); + expect(detectorToString(detector3)).toBe( + 'mean(CPUUtilization) by host over user partition_field_name=region exclude_frequent=all' + ); + }); + }); + + describe('sortByKey', () => { + const obj = { + zebra: 'stripes', + giraffe: 'neck', + elephant: 'trunk', + }; + + const valueComparator = function(value: string) { + return value; + }; + + test('returns correct ordering with default comparator', () => { + const result = sortByKey(obj, false); + const keys = Object.keys(result); + expect(keys[0]).toBe('elephant'); + expect(keys[1]).toBe('giraffe'); + expect(keys[2]).toBe('zebra'); + }); + + test('returns correct ordering with default comparator and order reversed', () => { + const result = sortByKey(obj, true); + const keys = Object.keys(result); + expect(keys[0]).toBe('zebra'); + expect(keys[1]).toBe('giraffe'); + expect(keys[2]).toBe('elephant'); + }); + + test('returns correct ordering with comparator', () => { + const result = sortByKey(obj, false, valueComparator); + const keys = Object.keys(result); + expect(keys[0]).toBe('giraffe'); + expect(keys[1]).toBe('zebra'); + expect(keys[2]).toBe('elephant'); + }); + + test('returns correct ordering with comparator and order reversed', () => { + const result = sortByKey(obj, true, valueComparator); + const keys = Object.keys(result); + expect(keys[0]).toBe('elephant'); + expect(keys[1]).toBe('zebra'); + expect(keys[2]).toBe('giraffe'); + }); + }); + + describe('toLocaleString', () => { + test('returns correct comma placement for large numbers', () => { + expect(toLocaleString(1)).toBe('1'); + expect(toLocaleString(10)).toBe('10'); + expect(toLocaleString(100)).toBe('100'); + expect(toLocaleString(1000)).toBe('1,000'); + expect(toLocaleString(10000)).toBe('10,000'); + expect(toLocaleString(100000)).toBe('100,000'); + expect(toLocaleString(1000000)).toBe('1,000,000'); + expect(toLocaleString(10000000)).toBe('10,000,000'); + expect(toLocaleString(100000000)).toBe('100,000,000'); + expect(toLocaleString(1000000000)).toBe('1,000,000,000'); + }); + }); + + describe('mlEscape', () => { + test('returns correct escaping of characters', () => { + expect(mlEscape('foo&bar')).toBe('foo&bar'); + expect(mlEscape('foobar')).toBe('foo>bar'); + expect(mlEscape('foo"bar')).toBe('foo"bar'); + expect(mlEscape("foo'bar")).toBe('foo'bar'); + expect(mlEscape('foo/bar')).toBe('foo/bar'); + }); + }); + + describe('escapeForElasticsearchQuery', () => { + test('returns correct escaping of reserved elasticsearch characters', () => { + expect(escapeForElasticsearchQuery('foo+bar')).toBe('foo\\+bar'); + expect(escapeForElasticsearchQuery('foo-bar')).toBe('foo\\-bar'); + expect(escapeForElasticsearchQuery('foo=bar')).toBe('foo\\=bar'); + expect(escapeForElasticsearchQuery('foo&&bar')).toBe('foo\\&\\&bar'); + expect(escapeForElasticsearchQuery('foo||bar')).toBe('foo\\|\\|bar'); + expect(escapeForElasticsearchQuery('foo>bar')).toBe('foo\\>bar'); + expect(escapeForElasticsearchQuery('foo Date: Tue, 14 Apr 2020 12:13:44 -0500 Subject: [PATCH 49/65] Add help text to form fields (#63165) Co-authored-by: Elastic Machine --- .../public/components/alerting/metrics/expression.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx index 2e43ede2480ce5..2430fe78e20533 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx @@ -264,10 +264,10 @@ export const Expressions: React.FC = props => { = props => { {alertsContext.metadata && ( Date: Tue, 14 Apr 2020 13:36:54 -0400 Subject: [PATCH 50/65] [Ingest][Endpoint] Add Ingest rest api response types for use in Endpoint (#63373) * Added REST Response types to datasouces * Adjust Types in Endpoint to reference those from Ingest * Remove un-used endpoint type --- .../store/policy_details/middleware.ts | 4 +-- .../endpoint/store/policy_list/middleware.ts | 4 +-- .../store/policy_list/services/ingest.ts | 14 +++++----- .../store/policy_list/test_mock_utils.ts | 6 ++--- .../public/applications/endpoint/types.ts | 27 +++++++------------ .../common/types/rest_spec/datasource.ts | 17 ++++++++---- 6 files changed, 36 insertions(+), 36 deletions(-) diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/middleware.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/middleware.ts index a00ce255cbac40..2581ab37f56771 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/middleware.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/middleware.ts @@ -8,7 +8,7 @@ import { MiddlewareFactory, PolicyData, PolicyDetailsState, - UpdateDatasourceResponse, + UpdatePolicyResponse, } from '../../types'; import { policyIdFromParams, isOnPolicyDetailsPage, policyDetails } from './selectors'; import { generatePolicy } from '../../models/policy'; @@ -77,7 +77,7 @@ export const policyDetailsMiddlewareFactory: MiddlewareFactory = c if (action.type === 'userChangedUrl' && isOnPolicyListPage(state)) { const { page_index: pageIndex, page_size: pageSize } = urlSearchParams(state); - let response: GetDatasourcesResponse; + let response: GetPolicyListResponse; try { response = await sendGetEndpointSpecificDatasources(http, { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts index bfbb5f94e8950f..5fccb01d1ad35a 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/services/ingest.ts @@ -11,9 +11,9 @@ import { } from '../../../../../../../ingest_manager/common'; import { NewPolicyData, - GetDatasourcesResponse, - GetDatasourceResponse, - UpdateDatasourceResponse, + GetPolicyListResponse, + GetPolicyResponse, + UpdatePolicyResponse, } from '../../../types'; const INGEST_API_ROOT = `/api/ingest_manager`; @@ -30,8 +30,8 @@ const INGEST_API_FLEET_AGENT_STATUS = `${INGEST_API_FLEET}/agent-status`; export const sendGetEndpointSpecificDatasources = ( http: HttpStart, options: HttpFetchOptions & Partial = {} -): Promise => { - return http.get(INGEST_API_DATASOURCES, { +): Promise => { + return http.get(INGEST_API_DATASOURCES, { ...options, query: { ...options.query, @@ -53,7 +53,7 @@ export const sendGetDatasource = ( datasourceId: string, options?: HttpFetchOptions ) => { - return http.get(`${INGEST_API_DATASOURCES}/${datasourceId}`, options); + return http.get(`${INGEST_API_DATASOURCES}/${datasourceId}`, options); }; /** @@ -69,7 +69,7 @@ export const sendPutDatasource = ( datasourceId: string, datasource: NewPolicyData, options: Exclude = {} -): Promise => { +): Promise => { return http.put(`${INGEST_API_DATASOURCES}/${datasourceId}`, { ...options, body: JSON.stringify(datasource), diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts index 0d41ae0d76da4d..20d5a637182d2b 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_list/test_mock_utils.ts @@ -8,7 +8,7 @@ import { HttpStart } from 'kibana/public'; import { Dispatch } from 'redux'; import { INGEST_API_DATASOURCES } from './services/ingest'; import { EndpointDocGenerator } from '../../../../../common/generate_data'; -import { AppAction, GetDatasourcesResponse, GlobalState, MiddlewareFactory } from '../../types'; +import { AppAction, GetPolicyListResponse, GlobalState, MiddlewareFactory } from '../../types'; const generator = new EndpointDocGenerator('policy-list'); @@ -19,13 +19,13 @@ const generator = new EndpointDocGenerator('policy-list'); */ export const setPolicyListApiMockImplementation = ( mockedHttpService: jest.Mocked, - responseItems: GetDatasourcesResponse['items'] = [generator.generatePolicyDatasource()] + responseItems: GetPolicyListResponse['items'] = [generator.generatePolicyDatasource()] ): void => { mockedHttpService.get.mockImplementation((...args) => { const [path] = args; if (typeof path === 'string') { if (path === INGEST_API_DATASOURCES) { - return Promise.resolve({ + return Promise.resolve({ items: responseItems, total: 10, page: 1, diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts index 54afbf220944eb..015468f84e740a 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/types.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/types.ts @@ -17,11 +17,14 @@ import { import { EndpointPluginStartDependencies } from '../../plugin'; import { AppAction } from './store/action'; import { CoreStart } from '../../../../../../src/core/public'; -import { Datasource, NewDatasource } from '../../../../ingest_manager/common/types/models'; import { + Datasource, + NewDatasource, GetAgentStatusResponse, - CreateDatasourceResponse, -} from '../../../../ingest_manager/common/types/rest_spec'; + GetDatasourcesResponse, + GetOneDatasourceResponse, + UpdateDatasourceResponse, +} from '../../../../ingest_manager/common'; export { AppAction }; export type MiddlewareFactory = ( @@ -335,24 +338,14 @@ export interface AlertingIndexUIQueryParams { filters?: string; } -export interface GetDatasourcesResponse { +export interface GetPolicyListResponse extends GetDatasourcesResponse { items: PolicyData[]; - total: number; - page: number; - perPage: number; - success: boolean; } -export interface GetDatasourceResponse { +export interface GetPolicyResponse extends GetOneDatasourceResponse { item: PolicyData; - success: boolean; } -export type UpdateDatasourceResponse = CreateDatasourceResponse & { +export interface UpdatePolicyResponse extends UpdateDatasourceResponse { item: PolicyData; -}; - -/** - * The PageId type is used for the payload when firing userNavigatedToPage actions - */ -export type PageId = 'alertsPage' | 'managementPage' | 'policyListPage'; +} diff --git a/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts b/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts index 66f734b904cfcb..61f1f15d492597 100644 --- a/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts +++ b/x-pack/plugins/ingest_manager/common/types/rest_spec/datasource.ts @@ -13,17 +13,22 @@ export interface GetDatasourcesRequest { }; } +export interface GetDatasourcesResponse { + items: Datasource[]; + total: number; + page: number; + perPage: number; + success: boolean; +} + export interface GetOneDatasourceRequest { params: { datasourceId: string; }; } -export interface GetDatasourcesResponse { - items: Datasource[]; - total: number; - page: number; - perPage: number; +export interface GetOneDatasourceResponse { + item: Datasource; success: boolean; } @@ -40,6 +45,8 @@ export type UpdateDatasourceRequest = GetOneDatasourceRequest & { body: NewDatasource; }; +export type UpdateDatasourceResponse = CreateDatasourceResponse; + export interface DeleteDatasourcesRequest { body: { datasourceIds: string[]; From 959a0e5d3de1a6d7b9790aa59fba31e19f115a19 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 14 Apr 2020 18:57:26 +0100 Subject: [PATCH 51/65] [ML] Listing global calendars on the job management page (#63124) * [ML] Listing global calendars on the job management page * tiny refactor Co-authored-by: Elastic Machine --- .../plugins/ml/server/models/job_service/jobs.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index edcabcac93c2a8..6024ecf4925e61 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -16,6 +16,7 @@ import { DatafeedWithStats, CombinedJobWithStats, } from '../../../common/types/anomaly_detection_jobs'; +import { GLOBAL_CALENDAR } from '../../../common/constants/calendars'; import { datafeedsProvider, MlDatafeedsResponse, MlDatafeedsStatsResponse } from './datafeeds'; import { jobAuditMessagesProvider } from '../job_audit_messages'; import { resultsServiceProvider } from '../results_service'; @@ -227,6 +228,8 @@ export function jobsProvider(callAsCurrentUser: APICaller) { const groups: { [jobId: string]: string[] } = {}; const datafeeds: { [id: string]: DatafeedWithStats } = {}; const calendarsByJobId: { [jobId: string]: string[] } = {}; + const globalCalendars: string[] = []; + const requests: [ Promise, Promise, @@ -298,7 +301,9 @@ export function jobsProvider(callAsCurrentUser: APICaller) { if (calendarResults) { calendarResults.forEach(cal => { cal.job_ids.forEach(id => { - if (groups[id]) { + if (id === GLOBAL_CALENDAR) { + globalCalendars.push(cal.calendar_id); + } else if (groups[id]) { groups[id].forEach(jId => { if (calendarsByJobId[jId] !== undefined) { calendarsByJobId[jId].push(cal.calendar_id); @@ -325,8 +330,12 @@ export function jobsProvider(callAsCurrentUser: APICaller) { jobResults.jobs.forEach(job => { const tempJob = job as CombinedJobWithStats; - if (calendarsByJobId[tempJob.job_id].length) { - tempJob.calendars = calendarsByJobId[tempJob.job_id]; + const calendars: string[] = [ + ...(calendarsByJobId[tempJob.job_id] || []), + ...(globalCalendars || []), + ]; + if (calendars.length) { + tempJob.calendars = calendars; } if (jobStatsResults && jobStatsResults.jobs) { From 2b4c3003aba51153ccf64f2c6e46239390d3dbdc Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 14 Apr 2020 18:58:22 +0100 Subject: [PATCH 52/65] [ML] Improving parsing of large uploaded files (#62970) * [ML] Improving parsing of large uploaded files * small clean up * increasing max to 1GB * adding comments Co-authored-by: Elastic Machine --- .../common/constants/file_datavisualizer.ts | 4 +- .../ml/common/types/file_datavisualizer.ts | 4 +- .../file_datavisualizer_view.js | 28 +++++------ .../components/import_view/import_view.js | 4 +- .../import_view/importer/importer.ts | 48 ++++++++++++++++--- .../import_view/importer/message_importer.ts | 34 ++++++------- .../import_view/importer/ndjson_importer.ts | 35 ++++++++++---- .../file_based/components/utils/index.ts | 1 - .../file_based/components/utils/utils.ts | 22 ++++----- 9 files changed, 113 insertions(+), 67 deletions(-) diff --git a/x-pack/plugins/ml/common/constants/file_datavisualizer.ts b/x-pack/plugins/ml/common/constants/file_datavisualizer.ts index 81d51bfa258160..675247af2db99d 100644 --- a/x-pack/plugins/ml/common/constants/file_datavisualizer.ts +++ b/x-pack/plugins/ml/common/constants/file_datavisualizer.ts @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -export const MAX_BYTES = 104857600; -export const ABSOLUTE_MAX_BYTES = MAX_BYTES * 5; +export const MAX_BYTES = 104857600; // 100MB +export const ABSOLUTE_MAX_BYTES = 1073741274; // 1GB export const FILE_SIZE_DISPLAY_FORMAT = '0,0.[0] b'; // Value to use in the Elasticsearch index mapping meta data to identify the diff --git a/x-pack/plugins/ml/common/types/file_datavisualizer.ts b/x-pack/plugins/ml/common/types/file_datavisualizer.ts index f771547b978114..c997a4e24f8689 100644 --- a/x-pack/plugins/ml/common/types/file_datavisualizer.ts +++ b/x-pack/plugins/ml/common/types/file_datavisualizer.ts @@ -67,13 +67,15 @@ export interface ImportResponse { export interface ImportFailure { item: number; reason: string; - doc: Doc; + doc: ImportDoc; } export interface Doc { message: string; } +export type ImportDoc = Doc | string; + export interface Settings { pipeline?: string; index: string; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js index d1b615a878b2b5..c73ab4b9e11c70 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js @@ -24,14 +24,11 @@ import { readFile, createUrlOverrides, processResults, - reduceData, hasImportPermission, } from '../utils'; import { MODE } from './constants'; -const UPLOAD_SIZE_MB = 5; - export class FileDataVisualizerView extends Component { constructor(props) { super(props); @@ -40,6 +37,7 @@ export class FileDataVisualizerView extends Component { files: {}, fileName: '', fileContents: '', + data: [], fileSize: 0, fileTooLarge: false, fileCouldNotBeRead: false, @@ -79,6 +77,7 @@ export class FileDataVisualizerView extends Component { loaded: false, fileName: '', fileContents: '', + data: [], fileSize: 0, fileTooLarge: false, fileCouldNotBeRead: false, @@ -97,15 +96,15 @@ export class FileDataVisualizerView extends Component { async loadFile(file) { if (file.size <= this.maxFileUploadBytes) { try { - const fileContents = await readFile(file); - const data = fileContents.data; + const { data, fileContents } = await readFile(file); this.setState({ - fileContents: data, + data, + fileContents, fileName: file.name, fileSize: file.size, }); - await this.loadSettings(data); + await this.analyzeFile(fileContents); } catch (error) { this.setState({ loaded: false, @@ -124,14 +123,9 @@ export class FileDataVisualizerView extends Component { } } - async loadSettings(data, overrides, isRetry = false) { + async analyzeFile(fileContents, overrides, isRetry = false) { try { - // reduce the amount of data being sent to the endpoint - // 5MB should be enough to contain 1000 lines - const lessData = reduceData(data, UPLOAD_SIZE_MB); - console.log('overrides', overrides); - const { analyzeFile } = ml.fileDatavisualizer; - const resp = await analyzeFile(lessData, overrides); + const resp = await ml.fileDatavisualizer.analyzeFile(fileContents, overrides); const serverSettings = processResults(resp); const serverOverrides = resp.overrides; @@ -198,7 +192,7 @@ export class FileDataVisualizerView extends Component { loading: true, loaded: false, }); - this.loadSettings(data, this.previousOverrides, true); + this.analyzeFile(fileContents, this.previousOverrides, true); } } } @@ -240,7 +234,7 @@ export class FileDataVisualizerView extends Component { }, () => { const formattedOverrides = createUrlOverrides(overrides, this.originalSettings); - this.loadSettings(this.state.fileContents, formattedOverrides); + this.analyzeFile(this.state.fileContents, formattedOverrides); } ); }; @@ -261,6 +255,7 @@ export class FileDataVisualizerView extends Component { results, explanation, fileContents, + data, fileName, fileSize, fileTooLarge, @@ -339,6 +334,7 @@ export class FileDataVisualizerView extends Component { results={results} fileName={fileName} fileContents={fileContents} + data={data} indexPatterns={this.props.indexPatterns} kibanaConfig={this.props.kibanaConfig} showBottomBar={this.showBottomBar} diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js index 4c9579bfd4b46e..2bf7bbeb641d0e 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/import_view.js @@ -94,7 +94,7 @@ export class ImportView extends Component { // TODO - sort this function out. it's a mess async import() { - const { fileContents, results, indexPatterns, kibanaConfig, showBottomBar } = this.props; + const { data, results, indexPatterns, kibanaConfig, showBottomBar } = this.props; const { format } = results; let { timeFieldName } = this.state; @@ -217,7 +217,7 @@ export class ImportView extends Component { if (success) { const importer = importerFactory(format, results, indexCreationSettings); if (importer !== undefined) { - const readResp = importer.read(fileContents, this.setReadProgress); + const readResp = importer.read(data, this.setReadProgress); success = readResp.success; this.setState({ readStatus: success ? IMPORT_STATUS.COMPLETE : IMPORT_STATUS.FAILED, diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/importer.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/importer.ts index c97f1c147c4543..718587ad15ad58 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/importer.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/importer.ts @@ -9,7 +9,7 @@ import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { ml } from '../../../../../services/ml_api_service'; import { - Doc, + ImportDoc, ImportFailure, ImportResponse, Mappings, @@ -20,6 +20,7 @@ import { const CHUNK_SIZE = 5000; const MAX_CHUNK_CHAR_COUNT = 1000000; const IMPORT_RETRIES = 5; +const STRING_CHUNKS_MB = 100; export interface ImportConfig { settings: Settings; @@ -34,12 +35,19 @@ export interface ImportResults { error?: any; } -export class Importer { +export interface CreateDocsResponse { + success: boolean; + remainder: number; + docs: ImportDoc[]; + error?: any; +} + +export abstract class Importer { private _settings: Settings; private _mappings: Mappings; private _pipeline: IngestPipeline; - protected _docArray: Doc[] = []; + protected _docArray: ImportDoc[] = []; constructor({ settings, mappings, pipeline }: ImportConfig) { this._settings = settings; @@ -47,7 +55,33 @@ export class Importer { this._pipeline = pipeline; } - async initializeImport(index: string) { + public read(data: ArrayBuffer) { + const decoder = new TextDecoder(); + const size = STRING_CHUNKS_MB * Math.pow(2, 20); + + // chop the data up into 100MB chunks for processing. + // if the chop produces a partial line at the end, a character "remainder" count + // is returned which is used to roll the next chunk back that many chars so + // it is included in the next chunk. + const parts = Math.ceil(data.byteLength / size); + let remainder = 0; + for (let i = 0; i < parts; i++) { + const byteArray = decoder.decode(data.slice(i * size - remainder, (i + 1) * size)); + const { success, docs, remainder: tempRemainder } = this._createDocs(byteArray); + if (success) { + this._docArray = this._docArray.concat(docs); + remainder = tempRemainder; + } else { + return { success: false }; + } + } + + return { success: true }; + } + + protected abstract _createDocs(t: string): CreateDocsResponse; + + public async initializeImport(index: string) { const settings = this._settings; const mappings = this._mappings; const pipeline = this._pipeline; @@ -75,7 +109,7 @@ export class Importer { return createIndexResp; } - async import( + public async import( id: string, index: string, pipelineId: string, @@ -201,8 +235,8 @@ function updatePipelineTimezone(ingestPipeline: IngestPipeline) { } } -function createDocumentChunks(docArray: Doc[]) { - const chunks: Doc[][] = []; +function createDocumentChunks(docArray: ImportDoc[]) { + const chunks: ImportDoc[][] = []; // chop docArray into 5000 doc chunks const tempChunks = chunk(docArray, CHUNK_SIZE); diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/message_importer.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/message_importer.ts index 7ccc5a8d673f42..65be24d9e7be4a 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/message_importer.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/message_importer.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Importer, ImportConfig } from './importer'; +import { Importer, ImportConfig, CreateDocsResponse } from './importer'; import { Doc, FindFileStructureResponse, @@ -33,54 +33,54 @@ export class MessageImporter extends Importer { // multiline_start_pattern regex // if it does, it is a legitimate end of line and can be pushed into the list, // if not, it must be a newline char inside a field value, so keep looking. - read(text: string) { + protected _createDocs(text: string): CreateDocsResponse { + let remainder = 0; try { - const data: Doc[] = []; + const docs: Doc[] = []; let message = ''; let line = ''; for (let i = 0; i < text.length; i++) { const char = text[i]; if (char === '\n') { - message = this.processLine(data, message, line); + message = this._processLine(docs, message, line); line = ''; } else { line += char; } } - // the last line may have been missing a newline ending - if (line !== '') { - message = this.processLine(data, message, line); - } + remainder = line.length; - // add the last message to the list if not already done + // // add the last message to the list if not already done if (message !== '') { - this.addMessage(data, message); + this._addMessage(docs, message); } // remove first line if it is blank - if (data[0] && data[0].message === '') { - data.shift(); + if (docs[0] && docs[0].message === '') { + docs.shift(); } - this._docArray = data; - return { success: true, + docs, + remainder, }; } catch (error) { return { success: false, + docs: [], + remainder, error, }; } } - processLine(data: Doc[], message: string, line: string) { + private _processLine(data: Doc[], message: string, line: string) { if (this._excludeLinesRegex === null || line.match(this._excludeLinesRegex) === null) { if (this._multilineStartRegex === null || line.match(this._multilineStartRegex) !== null) { - this.addMessage(data, message); + this._addMessage(data, message); message = ''; } else if (data.length === 0) { // discard everything before the first line that is considered the first line of a message @@ -95,7 +95,7 @@ export class MessageImporter extends Importer { return message; } - addMessage(data: Doc[], message: string) { + private _addMessage(data: Doc[], message: string) { // if the message ended \r\n (Windows line endings) // then omit the \r as well as the \n for consistency message = message.replace(/\r$/, ''); diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/ndjson_importer.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/ndjson_importer.ts index 7f5f37abc5246c..17c9de8ef45580 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/ndjson_importer.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/import_view/importer/ndjson_importer.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { Importer, ImportConfig } from './importer'; +import { Importer, ImportConfig, CreateDocsResponse } from './importer'; import { FindFileStructureResponse } from '../../../../../../../common/types/file_datavisualizer'; export class NdjsonImporter extends Importer { @@ -12,27 +12,42 @@ export class NdjsonImporter extends Importer { super(settings); } - read(json: string) { + protected _createDocs(json: string): CreateDocsResponse { + let remainder = 0; try { const splitJson = json.split(/}\s*\n/); + const incompleteLastLine = json.match(/}\s*\n?$/) === null; - const ndjson: any[] = []; - for (let i = 0; i < splitJson.length; i++) { - if (splitJson[i] !== '') { - // note the extra } at the end of the line, adding back - // the one that was eaten in the split - ndjson.push(`${splitJson[i]}}`); + const docs: string[] = []; + if (splitJson.length) { + for (let i = 0; i < splitJson.length - 1; i++) { + if (splitJson[i] !== '') { + // note the extra } at the end of the line, adding back + // the one that was eaten in the split + docs.push(`${splitJson[i]}}`); + } } - } - this._docArray = ndjson; + const lastDoc = splitJson[splitJson.length - 1]; + if (lastDoc) { + if (incompleteLastLine === true) { + remainder = lastDoc.length; + } else { + docs.push(`${lastDoc}}`); + } + } + } return { success: true, + docs, + remainder, }; } catch (error) { return { success: false, + docs: [], + remainder, error, }; } diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts index 0f0036a7c46164..492a797f7a2f2f 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts @@ -9,7 +9,6 @@ export { hasImportPermission, processResults, readFile, - reduceData, getMaxBytes, getMaxBytesFormatted, } from './utils'; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts index 0d2016b71ed837..ecef01aae0519c 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts @@ -15,6 +15,7 @@ import { import { getMlConfig } from '../../../../util/dependency_cache'; const DEFAULT_LINES_TO_SAMPLE = 1000; +const UPLOAD_SIZE_MB = 5; const overrideDefaults = { timestampFormat: undefined, @@ -34,15 +35,22 @@ export function readFile(file: File) { return new Promise((resolve, reject) => { if (file && file.size) { const reader = new FileReader(); - reader.readAsText(file); + reader.readAsArrayBuffer(file); reader.onload = (() => { return () => { + const decoder = new TextDecoder(); const data = reader.result; - if (data === '') { + if (data === null || typeof data === 'string') { + return reject(); + } + const size = UPLOAD_SIZE_MB * Math.pow(2, 20); + const fileContents = decoder.decode(data.slice(0, size)); + + if (fileContents === '') { reject(); } else { - resolve({ data }); + resolve({ fileContents, data }); } }; })(); @@ -52,14 +60,6 @@ export function readFile(file: File) { }); } -export function reduceData(data: string, mb: number) { - // assuming ascii characters in the file where 1 char is 1 byte - // TODO - change this when other non UTF-8 formats are - // supported for the read data - const size = mb * Math.pow(2, 20); - return data.length >= size ? data.slice(0, size) : data; -} - export function getMaxBytes() { const maxBytes = getMlConfig().file_data_visualizer.max_file_size_bytes; return maxBytes < ABSOLUTE_MAX_BYTES ? maxBytes : ABSOLUTE_MAX_BYTES; From d275d7f4df60f2370671f4fef56ccc7b5436091b Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Tue, 14 Apr 2020 12:25:54 -0600 Subject: [PATCH 53/65] [SIEM] [Cases] Case container unit tests (#63376) --- .../public/containers/case/__mocks__/api.ts | 122 +++++ .../siem/public/containers/case/api.test.tsx | 463 ++++++++++++++++++ .../siem/public/containers/case/mock.ts | 307 ++++++++++++ .../siem/public/containers/case/types.ts | 2 +- .../case/use_bulk_update_case.test.tsx | 128 +++++ .../containers/case/use_bulk_update_case.tsx | 4 +- .../containers/case/use_delete_cases.test.tsx | 124 +++++ .../containers/case/use_delete_cases.tsx | 8 +- .../case/use_get_action_license.test.tsx | 89 ++++ .../case/use_get_action_license.tsx | 4 +- .../containers/case/use_get_case.test.tsx | 112 +++++ .../public/containers/case/use_get_case.tsx | 4 +- .../case/use_get_case_user_actions.test.tsx | 106 ++++ .../case/use_get_case_user_actions.tsx | 5 +- .../containers/case/use_get_cases.test.tsx | 202 ++++++++ .../public/containers/case/use_get_cases.tsx | 6 +- .../case/use_get_cases_status.test.tsx | 88 ++++ .../containers/case/use_get_cases_status.tsx | 2 +- .../case/use_get_reporters.test.tsx | 86 ++++ .../containers/case/use_get_reporters.tsx | 2 +- .../containers/case/use_get_tags.test.tsx | 74 +++ .../public/containers/case/use_get_tags.tsx | 4 +- .../containers/case/use_post_case.test.tsx | 96 ++++ .../public/containers/case/use_post_case.tsx | 2 +- .../containers/case/use_post_comment.test.tsx | 102 ++++ .../containers/case/use_post_comment.tsx | 2 +- .../case/use_post_push_to_service.test.tsx | 137 ++++++ .../case/use_post_push_to_service.tsx | 4 +- .../containers/case/use_update_case.test.tsx | 119 +++++ .../containers/case/use_update_case.tsx | 4 +- .../case/use_update_comment.test.tsx | 116 +++++ .../containers/case/use_update_comment.tsx | 2 +- .../case/components/__mock__/case_data.tsx | 226 --------- .../components/all_cases/columns.test.tsx | 2 +- .../case/components/all_cases/index.test.tsx | 2 +- .../pages/case/components/all_cases/index.tsx | 4 +- .../components/case_view/actions.test.tsx | 2 +- .../case/components/case_view/index.test.tsx | 22 +- .../case/components/case_view/translations.ts | 3 + .../user_action_tree/helpers.test.tsx | 2 +- .../user_action_tree/index.test.tsx | 2 +- .../components/user_action_tree/index.tsx | 2 +- .../user_action_title.test.tsx | 2 +- .../user_action_tree/user_action_title.tsx | 4 +- x-pack/plugins/case/common/api/cases/case.ts | 1 + 45 files changed, 2529 insertions(+), 271 deletions(-) create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/__mocks__/api.ts create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/mock.ts create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_case.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_post_case.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_update_case.test.tsx create mode 100644 x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.test.tsx delete mode 100644 x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/case_data.tsx diff --git a/x-pack/legacy/plugins/siem/public/containers/case/__mocks__/api.ts b/x-pack/legacy/plugins/siem/public/containers/case/__mocks__/api.ts new file mode 100644 index 00000000000000..6d2cfb7147537f --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/__mocks__/api.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + ActionLicense, + AllCases, + BulkUpdateStatus, + Case, + CasesStatus, + CaseUserActions, + FetchCasesProps, + SortFieldCase, +} from '../types'; +import { + actionLicenses, + allCases, + basicCase, + basicCaseCommentPatch, + basicCasePost, + casesStatus, + caseUserActions, + pushedCase, + respReporters, + serviceConnector, + tags, +} from '../mock'; +import { + CaseExternalServiceRequest, + CasePatchRequest, + CasePostRequest, + CommentRequest, + ServiceConnectorCaseParams, + ServiceConnectorCaseResponse, + User, +} from '../../../../../../../plugins/case/common/api'; + +export const getCase = async ( + caseId: string, + includeComments: boolean = true, + signal: AbortSignal +): Promise => { + return Promise.resolve(basicCase); +}; + +export const getCasesStatus = async (signal: AbortSignal): Promise => + Promise.resolve(casesStatus); + +export const getTags = async (signal: AbortSignal): Promise => Promise.resolve(tags); + +export const getReporters = async (signal: AbortSignal): Promise => + Promise.resolve(respReporters); + +export const getCaseUserActions = async ( + caseId: string, + signal: AbortSignal +): Promise => Promise.resolve(caseUserActions); + +export const getCases = async ({ + filterOptions = { + search: '', + reporters: [], + status: 'open', + tags: [], + }, + queryParams = { + page: 1, + perPage: 5, + sortField: SortFieldCase.createdAt, + sortOrder: 'desc', + }, + signal, +}: FetchCasesProps): Promise => Promise.resolve(allCases); + +export const postCase = async (newCase: CasePostRequest, signal: AbortSignal): Promise => + Promise.resolve(basicCasePost); + +export const patchCase = async ( + caseId: string, + updatedCase: Pick, + version: string, + signal: AbortSignal +): Promise => Promise.resolve([basicCase]); + +export const patchCasesStatus = async ( + cases: BulkUpdateStatus[], + signal: AbortSignal +): Promise => Promise.resolve(allCases.cases); + +export const postComment = async ( + newComment: CommentRequest, + caseId: string, + signal: AbortSignal +): Promise => Promise.resolve(basicCase); + +export const patchComment = async ( + caseId: string, + commentId: string, + commentUpdate: string, + version: string, + signal: AbortSignal +): Promise => Promise.resolve(basicCaseCommentPatch); + +export const deleteCases = async (caseIds: string[], signal: AbortSignal): Promise => + Promise.resolve(true); + +export const pushCase = async ( + caseId: string, + push: CaseExternalServiceRequest, + signal: AbortSignal +): Promise => Promise.resolve(pushedCase); + +export const pushToService = async ( + connectorId: string, + casePushParams: ServiceConnectorCaseParams, + signal: AbortSignal +): Promise => Promise.resolve(serviceConnector); + +export const getActionLicense = async (signal: AbortSignal): Promise => + Promise.resolve(actionLicenses); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx new file mode 100644 index 00000000000000..4f5655cc9f2219 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx @@ -0,0 +1,463 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { KibanaServices } from '../../lib/kibana'; +import { + deleteCases, + getActionLicense, + getCase, + getCases, + getCasesStatus, + getCaseUserActions, + getReporters, + getTags, + patchCase, + patchCasesStatus, + patchComment, + postCase, + postComment, + pushCase, + pushToService, +} from './api'; +import { + actionLicenses, + allCases, + basicCase, + allCasesSnake, + basicCaseSnake, + actionTypeExecutorResult, + pushedCaseSnake, + casesStatus, + casesSnake, + cases, + caseUserActions, + pushedCase, + pushSnake, + reporters, + respReporters, + serviceConnector, + casePushParams, + tags, + caseUserActionsSnake, + casesStatusSnake, +} from './mock'; +import { CASES_URL } from './constants'; +import { DEFAULT_FILTER_OPTIONS, DEFAULT_QUERY_PARAMS } from './use_get_cases'; +import * as i18n from './translations'; + +const abortCtrl = new AbortController(); +const mockKibanaServices = KibanaServices.get as jest.Mock; +jest.mock('../../lib/kibana'); + +const fetchMock = jest.fn(); +mockKibanaServices.mockReturnValue({ http: { fetch: fetchMock } }); + +describe('Case Configuration API', () => { + describe('deleteCases', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(''); + }); + const data = ['1', '2']; + + test('check url, method, signal', async () => { + await deleteCases(data, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}`, { + method: 'DELETE', + query: { ids: JSON.stringify(data) }, + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await deleteCases(data, abortCtrl.signal); + expect(resp).toEqual(''); + }); + }); + describe('getActionLicense', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(actionLicenses); + }); + test('check url, method, signal', async () => { + await getActionLicense(abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`/api/action/types`, { + method: 'GET', + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getActionLicense(abortCtrl.signal); + expect(resp).toEqual(actionLicenses); + }); + }); + describe('getCase', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + const data = basicCase.id; + + test('check url, method, signal', async () => { + await getCase(data, true, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}`, { + method: 'GET', + query: { includeComments: true }, + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getCase(data, true, abortCtrl.signal); + expect(resp).toEqual(basicCase); + }); + }); + describe('getCases', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(allCasesSnake); + }); + test('check url, method, signal', async () => { + await getCases({ + filterOptions: DEFAULT_FILTER_OPTIONS, + queryParams: DEFAULT_QUERY_PARAMS, + signal: abortCtrl.signal, + }); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/_find`, { + method: 'GET', + query: { + ...DEFAULT_QUERY_PARAMS, + reporters: [], + tags: [], + status: 'open', + }, + signal: abortCtrl.signal, + }); + }); + test('correctly applies filters', async () => { + await getCases({ + filterOptions: { + ...DEFAULT_FILTER_OPTIONS, + reporters: [...respReporters, { username: null, full_name: null, email: null }], + tags, + status: '', + search: 'hello', + }, + queryParams: DEFAULT_QUERY_PARAMS, + signal: abortCtrl.signal, + }); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/_find`, { + method: 'GET', + query: { + ...DEFAULT_QUERY_PARAMS, + reporters, + tags, + search: 'hello', + }, + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getCases({ + filterOptions: DEFAULT_FILTER_OPTIONS, + queryParams: DEFAULT_QUERY_PARAMS, + signal: abortCtrl.signal, + }); + expect(resp).toEqual({ ...allCases }); + }); + }); + describe('getCasesStatus', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(casesStatusSnake); + }); + test('check url, method, signal', async () => { + await getCasesStatus(abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/status`, { + method: 'GET', + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getCasesStatus(abortCtrl.signal); + expect(resp).toEqual(casesStatus); + }); + }); + describe('getCaseUserActions', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(caseUserActionsSnake); + }); + + test('check url, method, signal', async () => { + await getCaseUserActions(basicCase.id, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions`, { + method: 'GET', + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getCaseUserActions(basicCase.id, abortCtrl.signal); + expect(resp).toEqual(caseUserActions); + }); + }); + describe('getReporters', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(respReporters); + }); + + test('check url, method, signal', async () => { + await getReporters(abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/reporters`, { + method: 'GET', + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getReporters(abortCtrl.signal); + expect(resp).toEqual(respReporters); + }); + }); + describe('getTags', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(tags); + }); + + test('check url, method, signal', async () => { + await getTags(abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/tags`, { + method: 'GET', + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await getTags(abortCtrl.signal); + expect(resp).toEqual(tags); + }); + }); + describe('patchCase', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue([basicCaseSnake]); + }); + const data = { description: 'updated description' }; + test('check url, method, signal', async () => { + await patchCase(basicCase.id, data, basicCase.version, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}`, { + method: 'PATCH', + body: JSON.stringify({ + cases: [{ ...data, id: basicCase.id, version: basicCase.version }], + }), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await patchCase( + basicCase.id, + { description: 'updated description' }, + basicCase.version, + abortCtrl.signal + ); + expect(resp).toEqual({ ...[basicCase] }); + }); + }); + describe('patchCasesStatus', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(casesSnake); + }); + const data = [ + { + status: 'closed', + id: basicCase.id, + version: basicCase.version, + }, + ]; + + test('check url, method, signal', async () => { + await patchCasesStatus(data, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}`, { + method: 'PATCH', + body: JSON.stringify({ cases: data }), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await patchCasesStatus(data, abortCtrl.signal); + expect(resp).toEqual({ ...cases }); + }); + }); + describe('patchComment', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + + test('check url, method, signal', async () => { + await patchComment( + basicCase.id, + basicCase.comments[0].id, + 'updated comment', + basicCase.comments[0].version, + abortCtrl.signal + ); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/comments`, { + method: 'PATCH', + body: JSON.stringify({ + comment: 'updated comment', + id: basicCase.comments[0].id, + version: basicCase.comments[0].version, + }), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await patchComment( + basicCase.id, + basicCase.comments[0].id, + 'updated comment', + basicCase.comments[0].version, + abortCtrl.signal + ); + expect(resp).toEqual(basicCase); + }); + }); + describe('postCase', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + const data = { + description: 'description', + tags: ['tag'], + title: 'title', + }; + + test('check url, method, signal', async () => { + await postCase(data, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}`, { + method: 'POST', + body: JSON.stringify(data), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await postCase(data, abortCtrl.signal); + expect(resp).toEqual(basicCase); + }); + }); + describe('postComment', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(basicCaseSnake); + }); + const data = { + comment: 'comment', + }; + + test('check url, method, signal', async () => { + await postComment(data, basicCase.id, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/comments`, { + method: 'POST', + body: JSON.stringify(data), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await postComment(data, basicCase.id, abortCtrl.signal); + expect(resp).toEqual(basicCase); + }); + }); + describe('pushCase', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(pushedCaseSnake); + }); + + test('check url, method, signal', async () => { + await pushCase(basicCase.id, pushSnake, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/_push`, { + method: 'POST', + body: JSON.stringify(pushSnake), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await pushCase(basicCase.id, pushSnake, abortCtrl.signal); + expect(resp).toEqual(pushedCase); + }); + }); + describe('pushToService', () => { + beforeEach(() => { + fetchMock.mockClear(); + fetchMock.mockResolvedValue(actionTypeExecutorResult); + }); + const connectorId = 'connectorId'; + test('check url, method, signal', async () => { + await pushToService(connectorId, casePushParams, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`/api/action/${connectorId}/_execute`, { + method: 'POST', + body: JSON.stringify({ params: casePushParams }), + signal: abortCtrl.signal, + }); + }); + + test('happy path', async () => { + const resp = await pushToService(connectorId, casePushParams, abortCtrl.signal); + expect(resp).toEqual(serviceConnector); + }); + + test('unhappy path - serviceMessage', async () => { + const theError = 'the error'; + fetchMock.mockResolvedValue({ + ...actionTypeExecutorResult, + status: 'error', + serviceMessage: theError, + message: 'not it', + }); + await expect( + pushToService(connectorId, casePushParams, abortCtrl.signal) + ).rejects.toMatchObject({ message: theError }); + }); + + test('unhappy path - message', async () => { + const theError = 'the error'; + fetchMock.mockResolvedValue({ + ...actionTypeExecutorResult, + status: 'error', + message: theError, + }); + await expect( + pushToService(connectorId, casePushParams, abortCtrl.signal) + ).rejects.toMatchObject({ message: theError }); + }); + + test('unhappy path - no message', async () => { + const theError = i18n.ERROR_PUSH_TO_SERVICE; + fetchMock.mockResolvedValue({ + ...actionTypeExecutorResult, + status: 'error', + }); + await expect( + pushToService(connectorId, casePushParams, abortCtrl.signal) + ).rejects.toMatchObject({ message: theError }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/mock.ts b/x-pack/legacy/plugins/siem/public/containers/case/mock.ts new file mode 100644 index 00000000000000..0bda75e5bc9e05 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/mock.ts @@ -0,0 +1,307 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { ActionLicense, AllCases, Case, CasesStatus, CaseUserActions, Comment } from './types'; + +import { + CommentResponse, + ServiceConnectorCaseResponse, + Status, + UserAction, + UserActionField, + CaseResponse, + CasesStatusResponse, + CaseUserActionsResponse, + CasesResponse, + CasesFindResponse, +} from '../../../../../../plugins/case/common/api/cases'; +import { UseGetCasesState, DEFAULT_FILTER_OPTIONS, DEFAULT_QUERY_PARAMS } from './use_get_cases'; + +export const basicCaseId = 'basic-case-id'; +const basicCommentId = 'basic-comment-id'; +const basicCreatedAt = '2020-02-19T23:06:33.798Z'; +const basicUpdatedAt = '2020-02-20T15:02:57.995Z'; +const laterTime = '2020-02-28T15:02:57.995Z'; +export const elasticUser = { + fullName: 'Leslie Knope', + username: 'lknope', + email: 'leslie.knope@elastic.co', +}; + +export const tags: string[] = ['coke', 'pepsi']; + +export const basicComment: Comment = { + comment: 'Solve this fast!', + id: basicCommentId, + createdAt: basicCreatedAt, + createdBy: elasticUser, + pushedAt: null, + pushedBy: null, + updatedAt: null, + updatedBy: null, + version: 'WzQ3LDFc', +}; + +export const basicCase: Case = { + closedAt: null, + closedBy: null, + id: basicCaseId, + comments: [basicComment], + createdAt: basicCreatedAt, + createdBy: elasticUser, + description: 'Security banana Issue', + externalService: null, + status: 'open', + tags, + title: 'Another horrible breach!!', + totalComment: 1, + updatedAt: basicUpdatedAt, + updatedBy: elasticUser, + version: 'WzQ3LDFd', +}; + +export const basicCasePost: Case = { + ...basicCase, + updatedAt: null, + updatedBy: null, +}; + +export const basicCommentPatch: Comment = { + ...basicComment, + updatedAt: basicUpdatedAt, + updatedBy: { + username: 'elastic', + }, +}; + +export const basicCaseCommentPatch = { + ...basicCase, + comments: [basicCommentPatch], +}; + +export const casesStatus: CasesStatus = { + countClosedCases: 130, + countOpenCases: 20, +}; + +const basicPush = { + connectorId: 'connector_id', + connectorName: 'connector name', + externalId: 'external_id', + externalTitle: 'external title', + externalUrl: 'basicPush.com', + pushedAt: basicUpdatedAt, + pushedBy: elasticUser, +}; + +export const pushedCase: Case = { + ...basicCase, + externalService: basicPush, +}; + +export const serviceConnector: ServiceConnectorCaseResponse = { + number: '123', + incidentId: '444', + pushedDate: basicUpdatedAt, + url: 'connector.com', + comments: [ + { + commentId: basicCommentId, + pushedDate: basicUpdatedAt, + }, + ], +}; + +const basicAction = { + actionAt: basicCreatedAt, + actionBy: elasticUser, + oldValue: null, + newValue: 'what a cool value', + caseId: basicCaseId, + commentId: null, +}; + +export const casePushParams = { + actionBy: elasticUser, + caseId: basicCaseId, + createdAt: basicCreatedAt, + createdBy: elasticUser, + incidentId: null, + title: 'what a cool value', + commentId: null, + updatedAt: basicCreatedAt, + updatedBy: elasticUser, + description: 'nice', +}; +export const actionTypeExecutorResult = { + actionId: 'string', + status: 'ok', + data: serviceConnector, +}; + +export const cases: Case[] = [ + basicCase, + { ...pushedCase, id: '1', totalComment: 0, comments: [] }, + { ...pushedCase, updatedAt: laterTime, id: '2', totalComment: 0, comments: [] }, + { ...basicCase, id: '3', totalComment: 0, comments: [] }, + { ...basicCase, id: '4', totalComment: 0, comments: [] }, +]; + +export const allCases: AllCases = { + cases, + page: 1, + perPage: 5, + total: 10, + ...casesStatus, +}; +export const actionLicenses: ActionLicense[] = [ + { + id: '.servicenow', + name: 'ServiceNow', + enabled: true, + enabledInConfig: true, + enabledInLicense: true, + }, +]; + +// Snake case for mock api responses +export const elasticUserSnake = { + full_name: 'Leslie Knope', + username: 'lknope', + email: 'leslie.knope@elastic.co', +}; +export const basicCommentSnake: CommentResponse = { + ...basicComment, + comment: 'Solve this fast!', + id: basicCommentId, + created_at: basicCreatedAt, + created_by: elasticUserSnake, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, +}; + +export const basicCaseSnake: CaseResponse = { + ...basicCase, + status: 'open' as Status, + closed_at: null, + closed_by: null, + comments: [basicCommentSnake], + created_at: basicCreatedAt, + created_by: elasticUserSnake, + external_service: null, + updated_at: basicUpdatedAt, + updated_by: elasticUserSnake, +}; + +export const casesStatusSnake: CasesStatusResponse = { + count_closed_cases: 130, + count_open_cases: 20, +}; + +export const pushSnake = { + connector_id: 'connector_id', + connector_name: 'connector name', + external_id: 'external_id', + external_title: 'external title', + external_url: 'basicPush.com', +}; +const basicPushSnake = { + ...pushSnake, + pushed_at: basicUpdatedAt, + pushed_by: elasticUserSnake, +}; +export const pushedCaseSnake = { + ...basicCaseSnake, + external_service: basicPushSnake, +}; + +export const reporters: string[] = ['alexis', 'kim', 'maria', 'steph']; +export const respReporters = [ + { username: 'alexis', full_name: null, email: null }, + { username: 'kim', full_name: null, email: null }, + { username: 'maria', full_name: null, email: null }, + { username: 'steph', full_name: null, email: null }, +]; +export const casesSnake: CasesResponse = [ + basicCaseSnake, + { ...pushedCaseSnake, id: '1', totalComment: 0, comments: [] }, + { ...pushedCaseSnake, updated_at: laterTime, id: '2', totalComment: 0, comments: [] }, + { ...basicCaseSnake, id: '3', totalComment: 0, comments: [] }, + { ...basicCaseSnake, id: '4', totalComment: 0, comments: [] }, +]; + +export const allCasesSnake: CasesFindResponse = { + cases: casesSnake, + page: 1, + per_page: 5, + total: 10, + ...casesStatusSnake, +}; + +const basicActionSnake = { + action_at: basicCreatedAt, + action_by: elasticUserSnake, + old_value: null, + new_value: 'what a cool value', + case_id: basicCaseId, + comment_id: null, +}; +export const getUserActionSnake = (af: UserActionField, a: UserAction) => ({ + ...basicActionSnake, + action_id: `${af[0]}-${a}`, + action_field: af, + action: a, + comment_id: af[0] === 'comment' ? basicCommentId : null, + new_value: + a === 'push-to-service' && af[0] === 'pushed' + ? JSON.stringify(basicPushSnake) + : basicAction.newValue, +}); + +export const caseUserActionsSnake: CaseUserActionsResponse = [ + getUserActionSnake(['description'], 'create'), + getUserActionSnake(['comment'], 'create'), + getUserActionSnake(['description'], 'update'), +]; + +// user actions + +export const getUserAction = (af: UserActionField, a: UserAction) => ({ + ...basicAction, + actionId: `${af[0]}-${a}`, + actionField: af, + action: a, + commentId: af[0] === 'comment' ? basicCommentId : null, + newValue: + a === 'push-to-service' && af[0] === 'pushed' + ? JSON.stringify(basicPushSnake) + : basicAction.newValue, +}); + +export const caseUserActions: CaseUserActions[] = [ + getUserAction(['description'], 'create'), + getUserAction(['comment'], 'create'), + getUserAction(['description'], 'update'), +]; + +// components tests +export const useGetCasesMockState: UseGetCasesState = { + data: allCases, + loading: [], + selectedCases: [], + isError: false, + queryParams: DEFAULT_QUERY_PARAMS, + filterOptions: DEFAULT_FILTER_OPTIONS, +}; + +export const basicCaseClosed: Case = { + ...basicCase, + closedAt: '2020-02-25T23:06:33.798Z', + closedBy: elasticUser, + status: 'closed', +}; diff --git a/x-pack/legacy/plugins/siem/public/containers/case/types.ts b/x-pack/legacy/plugins/siem/public/containers/case/types.ts index d2a58e9eeeff4a..e552f22b55fa40 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/types.ts +++ b/x-pack/legacy/plugins/siem/public/containers/case/types.ts @@ -31,7 +31,7 @@ export interface CaseUserActions { export interface CaseExternalService { pushedAt: string; - pushedBy: string; + pushedBy: ElasticUser; connectorId: string; connectorName: string; externalId: string; diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.test.tsx new file mode 100644 index 00000000000000..329fda10424a8f --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.test.tsx @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useUpdateCases, UseUpdateCases } from './use_bulk_update_case'; +import { basicCase } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useUpdateCases', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + isUpdated: false, + updateBulkStatus: result.current.updateBulkStatus, + dispatchResetIsUpdated: result.current.dispatchResetIsUpdated, + }); + }); + }); + + it('calls patchCase with correct arguments', async () => { + const spyOnPatchCases = jest.spyOn(api, 'patchCasesStatus'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + await waitForNextUpdate(); + + result.current.updateBulkStatus([basicCase], 'closed'); + await waitForNextUpdate(); + expect(spyOnPatchCases).toBeCalledWith( + [ + { + status: 'closed', + id: basicCase.id, + version: basicCase.version, + }, + ], + abortCtrl.signal + ); + }); + }); + + it('patch cases', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + await waitForNextUpdate(); + result.current.updateBulkStatus([basicCase], 'closed'); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isUpdated: true, + isLoading: false, + isError: false, + updateBulkStatus: result.current.updateBulkStatus, + dispatchResetIsUpdated: result.current.dispatchResetIsUpdated, + }); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + await waitForNextUpdate(); + result.current.updateBulkStatus([basicCase], 'closed'); + + expect(result.current.isLoading).toBe(true); + }); + }); + + it('dispatchResetIsUpdated resets is updated', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + + await waitForNextUpdate(); + result.current.updateBulkStatus([basicCase], 'closed'); + await waitForNextUpdate(); + expect(result.current.isUpdated).toBeTruthy(); + result.current.dispatchResetIsUpdated(); + expect(result.current.isUpdated).toBeFalsy(); + }); + }); + + it('unhappy path', async () => { + const spyOnPatchCases = jest.spyOn(api, 'patchCasesStatus'); + spyOnPatchCases.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCases() + ); + await waitForNextUpdate(); + result.current.updateBulkStatus([basicCase], 'closed'); + + expect(result.current).toEqual({ + isUpdated: false, + isLoading: false, + isError: true, + updateBulkStatus: result.current.updateBulkStatus, + dispatchResetIsUpdated: result.current.dispatchResetIsUpdated, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.tsx index 7d040c49f19716..d0cc4d99f8f9f5 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_bulk_update_case.tsx @@ -51,12 +51,12 @@ const dataFetchReducer = (state: UpdateState, action: Action): UpdateState => { return state; } }; -interface UseUpdateCase extends UpdateState { +export interface UseUpdateCases extends UpdateState { updateBulkStatus: (cases: Case[], status: string) => void; dispatchResetIsUpdated: () => void; } -export const useUpdateCases = (): UseUpdateCase => { +export const useUpdateCases = (): UseUpdateCases => { const [state, dispatch] = useReducer(dataFetchReducer, { isLoading: false, isError: false, diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.test.tsx new file mode 100644 index 00000000000000..45ba392f3b5b45 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.test.tsx @@ -0,0 +1,124 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useDeleteCases, UseDeleteCase } from './use_delete_cases'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useDeleteCases', () => { + const abortCtrl = new AbortController(); + const deleteObj = [{ id: '1' }, { id: '2' }, { id: '3' }]; + const deleteArr = ['1', '2', '3']; + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isDisplayConfirmDeleteModal: false, + isLoading: false, + isError: false, + isDeleted: false, + dispatchResetIsDeleted: result.current.dispatchResetIsDeleted, + handleOnDeleteConfirm: result.current.handleOnDeleteConfirm, + handleToggleModal: result.current.handleToggleModal, + }); + }); + }); + + it('calls deleteCases with correct arguments', async () => { + const spyOnDeleteCases = jest.spyOn(api, 'deleteCases'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + + result.current.handleOnDeleteConfirm(deleteObj); + await waitForNextUpdate(); + expect(spyOnDeleteCases).toBeCalledWith(deleteArr, abortCtrl.signal); + }); + }); + + it('deletes cases', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + result.current.handleToggleModal(); + result.current.handleOnDeleteConfirm(deleteObj); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isDisplayConfirmDeleteModal: false, + isLoading: false, + isError: false, + isDeleted: true, + dispatchResetIsDeleted: result.current.dispatchResetIsDeleted, + handleOnDeleteConfirm: result.current.handleOnDeleteConfirm, + handleToggleModal: result.current.handleToggleModal, + }); + }); + }); + + it('resets is deleting', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + result.current.handleToggleModal(); + result.current.handleOnDeleteConfirm(deleteObj); + await waitForNextUpdate(); + expect(result.current.isDeleted).toBeTruthy(); + result.current.handleToggleModal(); + result.current.dispatchResetIsDeleted(); + expect(result.current.isDeleted).toBeFalsy(); + }); + }); + + it('set isLoading to true when deleting cases', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + result.current.handleToggleModal(); + result.current.handleOnDeleteConfirm(deleteObj); + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnDeleteCases = jest.spyOn(api, 'deleteCases'); + spyOnDeleteCases.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useDeleteCases() + ); + await waitForNextUpdate(); + result.current.handleToggleModal(); + result.current.handleOnDeleteConfirm(deleteObj); + + expect(result.current).toEqual({ + isDisplayConfirmDeleteModal: false, + isLoading: false, + isError: true, + isDeleted: false, + dispatchResetIsDeleted: result.current.dispatchResetIsDeleted, + handleOnDeleteConfirm: result.current.handleOnDeleteConfirm, + handleToggleModal: result.current.handleToggleModal, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.tsx index 07e3786758aeb5..3c49be551c0640 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_delete_cases.tsx @@ -59,9 +59,9 @@ const dataFetchReducer = (state: DeleteState, action: Action): DeleteState => { } }; -interface UseDeleteCase extends DeleteState { +export interface UseDeleteCase extends DeleteState { dispatchResetIsDeleted: () => void; - handleOnDeleteConfirm: (caseIds: DeleteCase[]) => void; + handleOnDeleteConfirm: (cases: DeleteCase[]) => void; handleToggleModal: () => void; } @@ -117,8 +117,8 @@ export const useDeleteCases = (): UseDeleteCase => { }, [state.isDisplayConfirmDeleteModal]); const handleOnDeleteConfirm = useCallback( - caseIds => { - dispatchDeleteCases(caseIds); + (cases: DeleteCase[]) => { + dispatchDeleteCases(cases); dispatchToggleDeleteModal(); }, [state.isDisplayConfirmDeleteModal] diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.test.tsx new file mode 100644 index 00000000000000..23c9ff5e49586f --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.test.tsx @@ -0,0 +1,89 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { initialData, useGetActionLicense, ActionLicenseState } from './use_get_action_license'; +import { actionLicenses } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetActionLicense', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetActionLicense() + ); + await waitForNextUpdate(); + expect(result.current).toEqual(initialData); + }); + }); + + it('calls getActionLicense with correct arguments', async () => { + const spyOnGetActionLicense = jest.spyOn(api, 'getActionLicense'); + + await act(async () => { + const { waitForNextUpdate } = renderHook(() => + useGetActionLicense() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetActionLicense).toBeCalledWith(abortCtrl.signal); + }); + }); + + it('gets action license', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetActionLicense() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + actionLicense: actionLicenses[0], + }); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetActionLicense() + ); + await waitForNextUpdate(); + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnGetActionLicense = jest.spyOn(api, 'getActionLicense'); + spyOnGetActionLicense.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetActionLicense() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + actionLicense: null, + isLoading: false, + isError: true, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.tsx index 12f92b2db039b0..0d28a1b20c61f0 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_action_license.tsx @@ -11,13 +11,13 @@ import { getActionLicense } from './api'; import * as i18n from './translations'; import { ActionLicense } from './types'; -interface ActionLicenseState { +export interface ActionLicenseState { actionLicense: ActionLicense | null; isLoading: boolean; isError: boolean; } -const initialData: ActionLicenseState = { +export const initialData: ActionLicenseState = { actionLicense: null, isLoading: true, isError: false, diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.test.tsx new file mode 100644 index 00000000000000..10649da548d432 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.test.tsx @@ -0,0 +1,112 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { initialData, useGetCase, UseGetCase } from './use_get_case'; +import { basicCase } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetCase', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCase(basicCase.id) + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + data: initialData, + isLoading: true, + isError: false, + fetchCase: result.current.fetchCase, + updateCase: result.current.updateCase, + }); + }); + }); + + it('calls getCase with correct arguments', async () => { + const spyOnGetCase = jest.spyOn(api, 'getCase'); + await act(async () => { + const { waitForNextUpdate } = renderHook(() => useGetCase(basicCase.id)); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetCase).toBeCalledWith(basicCase.id, true, abortCtrl.signal); + }); + }); + + it('fetch case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCase(basicCase.id) + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + data: basicCase, + isLoading: false, + isError: false, + fetchCase: result.current.fetchCase, + updateCase: result.current.updateCase, + }); + }); + }); + + it('refetch case', async () => { + const spyOnGetCase = jest.spyOn(api, 'getCase'); + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCase(basicCase.id) + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.fetchCase(); + expect(spyOnGetCase).toHaveBeenCalledTimes(2); + }); + }); + + it('set isLoading to true when refetching case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCase(basicCase.id) + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.fetchCase(); + + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnGetCase = jest.spyOn(api, 'getCase'); + spyOnGetCase.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCase(basicCase.id) + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + data: initialData, + isLoading: false, + isError: true, + fetchCase: result.current.fetchCase, + updateCase: result.current.updateCase, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.tsx index 835fb7153dc959..b2e3b6d0cacf60 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case.tsx @@ -53,7 +53,7 @@ const dataFetchReducer = (state: CaseState, action: Action): CaseState => { return state; } }; -const initialData: Case = { +export const initialData: Case = { id: '', closedAt: null, closedBy: null, @@ -73,7 +73,7 @@ const initialData: Case = { version: '', }; -interface UseGetCase extends CaseState { +export interface UseGetCase extends CaseState { fetchCase: () => void; updateCase: (newCase: Case) => void; } diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.test.tsx new file mode 100644 index 00000000000000..cdd40b84f8724b --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.test.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { + initialData, + useGetCaseUserActions, + UseGetCaseUserActions, +} from './use_get_case_user_actions'; +import { basicCaseId, caseUserActions, elasticUser } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetCaseUserActions', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCaseUserActions(basicCaseId) + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + ...initialData, + fetchCaseUserActions: result.current.fetchCaseUserActions, + }); + }); + }); + + it('calls getCaseUserActions with correct arguments', async () => { + const spyOnPostCase = jest.spyOn(api, 'getCaseUserActions'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCaseUserActions(basicCaseId) + ); + await waitForNextUpdate(); + + result.current.fetchCaseUserActions(basicCaseId); + await waitForNextUpdate(); + expect(spyOnPostCase).toBeCalledWith(basicCaseId, abortCtrl.signal); + }); + }); + + it('retuns proper state on getCaseUserActions', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCaseUserActions(basicCaseId) + ); + await waitForNextUpdate(); + result.current.fetchCaseUserActions(basicCaseId); + await waitForNextUpdate(); + expect(result.current).toEqual({ + ...initialData, + caseUserActions: caseUserActions.slice(1), + fetchCaseUserActions: result.current.fetchCaseUserActions, + hasDataToPush: true, + isError: false, + isLoading: false, + participants: [elasticUser], + }); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCaseUserActions(basicCaseId) + ); + await waitForNextUpdate(); + result.current.fetchCaseUserActions(basicCaseId); + + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnPostCase = jest.spyOn(api, 'getCaseUserActions'); + spyOnPostCase.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCaseUserActions(basicCaseId) + ); + await waitForNextUpdate(); + result.current.fetchCaseUserActions(basicCaseId); + + expect(result.current).toEqual({ + ...initialData, + isLoading: false, + isError: true, + fetchCaseUserActions: result.current.fetchCaseUserActions, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.tsx index 4c278bc0381343..6d9874a655e97a 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_case_user_actions.tsx @@ -22,7 +22,7 @@ interface CaseUserActionsState { lastIndexPushToService: number; } -const initialData: CaseUserActionsState = { +export const initialData: CaseUserActionsState = { caseUserActions: [], firstIndexPushToService: -1, lastIndexPushToService: -1, @@ -32,7 +32,7 @@ const initialData: CaseUserActionsState = { participants: [], }; -interface UseGetCaseUserActions extends CaseUserActionsState { +export interface UseGetCaseUserActions extends CaseUserActionsState { fetchCaseUserActions: (caseId: string) => void; } @@ -80,6 +80,7 @@ export const useGetCaseUserActions = (caseId: string): UseGetCaseUserActions => const participants = !isEmpty(response) ? uniqBy('actionBy.username', response).map(cau => cau.actionBy) : []; + const caseUserActions = !isEmpty(response) ? response.slice(1) : []; setCaseUserActionsState({ caseUserActions, diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.test.tsx new file mode 100644 index 00000000000000..4e274e074b036b --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.test.tsx @@ -0,0 +1,202 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { + DEFAULT_FILTER_OPTIONS, + DEFAULT_QUERY_PARAMS, + initialData, + useGetCases, + UseGetCases, +} from './use_get_cases'; +import { UpdateKey } from './use_update_case'; +import { allCases, basicCase } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetCases', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + expect(result.current).toEqual({ + data: initialData, + dispatchUpdateCaseProperty: result.current.dispatchUpdateCaseProperty, + filterOptions: DEFAULT_FILTER_OPTIONS, + isError: false, + loading: [], + queryParams: DEFAULT_QUERY_PARAMS, + refetchCases: result.current.refetchCases, + selectedCases: [], + setFilters: result.current.setFilters, + setQueryParams: result.current.setQueryParams, + setSelectedCases: result.current.setSelectedCases, + }); + }); + }); + + it('calls getCases with correct arguments', async () => { + const spyOnGetCases = jest.spyOn(api, 'getCases'); + await act(async () => { + const { waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetCases).toBeCalledWith({ + filterOptions: DEFAULT_FILTER_OPTIONS, + queryParams: DEFAULT_QUERY_PARAMS, + signal: abortCtrl.signal, + }); + }); + }); + + it('fetch cases', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + data: allCases, + dispatchUpdateCaseProperty: result.current.dispatchUpdateCaseProperty, + filterOptions: DEFAULT_FILTER_OPTIONS, + isError: false, + loading: [], + queryParams: DEFAULT_QUERY_PARAMS, + refetchCases: result.current.refetchCases, + selectedCases: [], + setFilters: result.current.setFilters, + setQueryParams: result.current.setQueryParams, + setSelectedCases: result.current.setSelectedCases, + }); + }); + }); + it('dispatch update case property', async () => { + const spyOnPatchCase = jest.spyOn(api, 'patchCase'); + await act(async () => { + const updateCase = { + updateKey: 'description' as UpdateKey, + updateValue: 'description update', + caseId: basicCase.id, + refetchCasesStatus: jest.fn(), + version: '99999', + }; + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.dispatchUpdateCaseProperty(updateCase); + expect(result.current.loading).toEqual(['caseUpdate']); + expect(spyOnPatchCase).toBeCalledWith( + basicCase.id, + { [updateCase.updateKey]: updateCase.updateValue }, + updateCase.version, + abortCtrl.signal + ); + }); + }); + + it('refetch cases', async () => { + const spyOnGetCases = jest.spyOn(api, 'getCases'); + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.refetchCases(); + expect(spyOnGetCases).toHaveBeenCalledTimes(2); + }); + }); + + it('set isLoading to true when refetching case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.refetchCases(); + + expect(result.current.loading).toEqual(['cases']); + }); + }); + + it('unhappy path', async () => { + const spyOnGetCases = jest.spyOn(api, 'getCases'); + spyOnGetCases.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + data: initialData, + dispatchUpdateCaseProperty: result.current.dispatchUpdateCaseProperty, + filterOptions: DEFAULT_FILTER_OPTIONS, + isError: true, + loading: [], + queryParams: DEFAULT_QUERY_PARAMS, + refetchCases: result.current.refetchCases, + selectedCases: [], + setFilters: result.current.setFilters, + setQueryParams: result.current.setQueryParams, + setSelectedCases: result.current.setSelectedCases, + }); + }); + }); + it('set filters', async () => { + await act(async () => { + const spyOnGetCases = jest.spyOn(api, 'getCases'); + const newFilters = { + search: 'new', + tags: ['new'], + status: 'closed', + }; + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.setFilters(newFilters); + await waitForNextUpdate(); + expect(spyOnGetCases.mock.calls[1][0]).toEqual({ + filterOptions: { ...DEFAULT_FILTER_OPTIONS, ...newFilters }, + queryParams: DEFAULT_QUERY_PARAMS, + signal: abortCtrl.signal, + }); + }); + }); + it('set query params', async () => { + await act(async () => { + const spyOnGetCases = jest.spyOn(api, 'getCases'); + const newQueryParams = { + page: 2, + }; + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.setQueryParams(newQueryParams); + await waitForNextUpdate(); + expect(spyOnGetCases.mock.calls[1][0]).toEqual({ + filterOptions: DEFAULT_FILTER_OPTIONS, + queryParams: { ...DEFAULT_QUERY_PARAMS, ...newQueryParams }, + signal: abortCtrl.signal, + }); + }); + }); + it('set selected cases', async () => { + await act(async () => { + const selectedCases = [basicCase]; + const { result, waitForNextUpdate } = renderHook(() => useGetCases()); + await waitForNextUpdate(); + await waitForNextUpdate(); + result.current.setSelectedCases(selectedCases); + expect(result.current.selectedCases).toEqual(selectedCases); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.tsx index 1cbce5af6304b7..465b50dbdc1bc6 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases.tsx @@ -105,7 +105,7 @@ export const DEFAULT_QUERY_PARAMS: QueryParams = { sortOrder: 'desc', }; -const initialData: AllCases = { +export const initialData: AllCases = { cases: [], countClosedCases: null, countOpenCases: null, @@ -113,7 +113,7 @@ const initialData: AllCases = { perPage: 0, total: 0, }; -interface UseGetCases extends UseGetCasesState { +export interface UseGetCases extends UseGetCasesState { dispatchUpdateCaseProperty: ({ updateKey, updateValue, @@ -121,7 +121,7 @@ interface UseGetCases extends UseGetCasesState { version, refetchCasesStatus, }: UpdateCase) => void; - refetchCases: (filters: FilterOptions, queryParams: QueryParams) => void; + refetchCases: () => void; setFilters: (filters: Partial) => void; setQueryParams: (queryParams: Partial) => void; setSelectedCases: (mySelectedCases: Case[]) => void; diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.test.tsx new file mode 100644 index 00000000000000..bfbcbd2525e3b8 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.test.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useGetCasesStatus, UseGetCasesStatus } from './use_get_cases_status'; +import { casesStatus } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetCasesStatus', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCasesStatus() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + countClosedCases: null, + countOpenCases: null, + isLoading: true, + isError: false, + fetchCasesStatus: result.current.fetchCasesStatus, + }); + }); + }); + + it('calls getCasesStatus api', async () => { + const spyOnGetCasesStatus = jest.spyOn(api, 'getCasesStatus'); + await act(async () => { + const { waitForNextUpdate } = renderHook(() => + useGetCasesStatus() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetCasesStatus).toBeCalledWith(abortCtrl.signal); + }); + }); + + it('fetch reporters', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCasesStatus() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + countClosedCases: casesStatus.countClosedCases, + countOpenCases: casesStatus.countOpenCases, + isLoading: false, + isError: false, + fetchCasesStatus: result.current.fetchCasesStatus, + }); + }); + }); + + it('unhappy path', async () => { + const spyOnGetCasesStatus = jest.spyOn(api, 'getCasesStatus'); + spyOnGetCasesStatus.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetCasesStatus() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + countClosedCases: 0, + countOpenCases: 0, + isLoading: false, + isError: true, + fetchCasesStatus: result.current.fetchCasesStatus, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.tsx index 7f56d27ef160e2..07884646023570 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_cases_status.tsx @@ -23,7 +23,7 @@ const initialData: CasesStatusState = { isError: false, }; -interface UseGetCasesStatus extends CasesStatusState { +export interface UseGetCasesStatus extends CasesStatusState { fetchCasesStatus: () => void; } diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.test.tsx new file mode 100644 index 00000000000000..3629fbc60e4d3e --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.test.tsx @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useGetReporters, UseGetReporters } from './use_get_reporters'; +import { reporters, respReporters } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetReporters', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetReporters() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + reporters: [], + respReporters: [], + isLoading: true, + isError: false, + fetchReporters: result.current.fetchReporters, + }); + }); + }); + + it('calls getReporters api', async () => { + const spyOnGetReporters = jest.spyOn(api, 'getReporters'); + await act(async () => { + const { waitForNextUpdate } = renderHook(() => useGetReporters()); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetReporters).toBeCalledWith(abortCtrl.signal); + }); + }); + + it('fetch reporters', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetReporters() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + reporters, + respReporters, + isLoading: false, + isError: false, + fetchReporters: result.current.fetchReporters, + }); + }); + }); + + it('unhappy path', async () => { + const spyOnGetReporters = jest.spyOn(api, 'getReporters'); + spyOnGetReporters.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useGetReporters() + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + reporters: [], + respReporters: [], + isLoading: false, + isError: true, + fetchReporters: result.current.fetchReporters, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.tsx index 2478172a3394b8..2fc9b8294c8e0e 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_reporters.tsx @@ -26,7 +26,7 @@ const initialData: ReportersState = { isError: false, }; -interface UseGetReporters extends ReportersState { +export interface UseGetReporters extends ReportersState { fetchReporters: () => void; } diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.test.tsx new file mode 100644 index 00000000000000..3df83d1c8a596e --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.test.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useGetTags, TagsState } from './use_get_tags'; +import { tags } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useGetTags', () => { + const abortCtrl = new AbortController(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetTags()); + await waitForNextUpdate(); + expect(result.current).toEqual({ + tags: [], + isLoading: true, + isError: false, + }); + }); + }); + + it('calls getTags api', async () => { + const spyOnGetTags = jest.spyOn(api, 'getTags'); + await act(async () => { + const { waitForNextUpdate } = renderHook(() => useGetTags()); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(spyOnGetTags).toBeCalledWith(abortCtrl.signal); + }); + }); + + it('fetch tags', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetTags()); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + tags, + isLoading: false, + isError: false, + }); + }); + }); + + it('unhappy path', async () => { + const spyOnGetTags = jest.spyOn(api, 'getTags'); + spyOnGetTags.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => useGetTags()); + await waitForNextUpdate(); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + tags: [], + isLoading: false, + isError: true, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.tsx index b41d5aab5c07a4..7c58316ac3fe91 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_get_tags.tsx @@ -10,7 +10,7 @@ import { errorToToaster, useStateToaster } from '../../components/toasters'; import { getTags } from './api'; import * as i18n from './translations'; -interface TagsState { +export interface TagsState { tags: string[]; isLoading: boolean; isError: boolean; @@ -49,7 +49,7 @@ const initialData: string[] = []; export const useGetTags = (): TagsState => { const [state, dispatch] = useReducer(dataFetchReducer, { - isLoading: false, + isLoading: true, isError: false, tags: initialData, }); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.test.tsx new file mode 100644 index 00000000000000..8b105fe041d27d --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.test.tsx @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { usePostCase, UsePostCase } from './use_post_case'; +import { basicCasePost } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('usePostCase', () => { + const abortCtrl = new AbortController(); + const samplePost = { + description: 'description', + tags: ['tags'], + title: 'title', + }; + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + caseData: null, + postCase: result.current.postCase, + }); + }); + }); + + it('calls postCase with correct arguments', async () => { + const spyOnPostCase = jest.spyOn(api, 'postCase'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + + result.current.postCase(samplePost); + await waitForNextUpdate(); + expect(spyOnPostCase).toBeCalledWith(samplePost, abortCtrl.signal); + }); + }); + + it('post case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + result.current.postCase(samplePost); + await waitForNextUpdate(); + expect(result.current).toEqual({ + caseData: basicCasePost, + isLoading: false, + isError: false, + postCase: result.current.postCase, + }); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + result.current.postCase(samplePost); + + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnPostCase = jest.spyOn(api, 'postCase'); + spyOnPostCase.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => usePostCase()); + await waitForNextUpdate(); + result.current.postCase(samplePost); + + expect(result.current).toEqual({ + caseData: null, + isLoading: false, + isError: true, + postCase: result.current.postCase, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.tsx index 0e01364721dc50..aeb50fc098eeed 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_case.tsx @@ -48,7 +48,7 @@ const dataFetchReducer = (state: NewCaseState, action: Action): NewCaseState => } }; -interface UsePostCase extends NewCaseState { +export interface UsePostCase extends NewCaseState { postCase: (data: CasePostRequest) => void; } export const usePostCase = (): UsePostCase => { diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.test.tsx new file mode 100644 index 00000000000000..d7d9cf9c557c9d --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.test.tsx @@ -0,0 +1,102 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { usePostComment, UsePostComment } from './use_post_comment'; +import { basicCaseId } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('usePostComment', () => { + const abortCtrl = new AbortController(); + const samplePost = { + comment: 'a comment', + }; + const updateCaseCallback = jest.fn(); + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostComment(basicCaseId) + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + postComment: result.current.postComment, + }); + }); + }); + + it('calls postComment with correct arguments', async () => { + const spyOnPostCase = jest.spyOn(api, 'postComment'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostComment(basicCaseId) + ); + await waitForNextUpdate(); + + result.current.postComment(samplePost, updateCaseCallback); + await waitForNextUpdate(); + expect(spyOnPostCase).toBeCalledWith(samplePost, basicCaseId, abortCtrl.signal); + }); + }); + + it('post case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostComment(basicCaseId) + ); + await waitForNextUpdate(); + result.current.postComment(samplePost, updateCaseCallback); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + postComment: result.current.postComment, + }); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostComment(basicCaseId) + ); + await waitForNextUpdate(); + result.current.postComment(samplePost, updateCaseCallback); + + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnPostCase = jest.spyOn(api, 'postComment'); + spyOnPostCase.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostComment(basicCaseId) + ); + await waitForNextUpdate(); + result.current.postComment(samplePost, updateCaseCallback); + + expect(result.current).toEqual({ + isLoading: false, + isError: true, + postComment: result.current.postComment, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.tsx index 207b05814717fe..c6d34b54499777 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_comment.tsx @@ -41,7 +41,7 @@ const dataFetchReducer = (state: NewCommentState, action: Action): NewCommentSta } }; -interface UsePostComment extends NewCommentState { +export interface UsePostComment extends NewCommentState { postComment: (data: CommentRequest, updateCase: (newCase: Case) => void) => void; } diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.test.tsx new file mode 100644 index 00000000000000..b07a346a8da46f --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.test.tsx @@ -0,0 +1,137 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { + formatServiceRequestData, + usePostPushToService, + UsePostPushToService, +} from './use_post_push_to_service'; +import { basicCase, pushedCase, serviceConnector } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('usePostPushToService', () => { + const abortCtrl = new AbortController(); + const updateCase = jest.fn(); + const samplePush = { + caseId: pushedCase.id, + connectorName: 'sample', + connectorId: '22', + updateCase, + }; + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + serviceData: null, + pushedCaseData: null, + isLoading: false, + isError: false, + postPushToService: result.current.postPushToService, + }); + }); + }); + + it('calls pushCase with correct arguments', async () => { + const spyOnPushCase = jest.spyOn(api, 'pushCase'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + result.current.postPushToService(samplePush); + await waitForNextUpdate(); + expect(spyOnPushCase).toBeCalledWith( + samplePush.caseId, + { + connector_id: samplePush.connectorId, + connector_name: samplePush.connectorName, + external_id: serviceConnector.incidentId, + external_title: serviceConnector.number, + external_url: serviceConnector.url, + }, + abortCtrl.signal + ); + }); + }); + + it('calls pushToService with correct arguments', async () => { + const spyOnPushToService = jest.spyOn(api, 'pushToService'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + result.current.postPushToService(samplePush); + await waitForNextUpdate(); + expect(spyOnPushToService).toBeCalledWith( + samplePush.connectorId, + formatServiceRequestData(basicCase), + abortCtrl.signal + ); + }); + }); + + it('post push to service', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + result.current.postPushToService(samplePush); + await waitForNextUpdate(); + expect(result.current).toEqual({ + serviceData: serviceConnector, + pushedCaseData: pushedCase, + isLoading: false, + isError: false, + postPushToService: result.current.postPushToService, + }); + }); + }); + + it('set isLoading to true when deleting cases', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + result.current.postPushToService(samplePush); + expect(result.current.isLoading).toBe(true); + }); + }); + + it('unhappy path', async () => { + const spyOnPushToService = jest.spyOn(api, 'pushToService'); + spyOnPushToService.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + usePostPushToService() + ); + await waitForNextUpdate(); + result.current.postPushToService(samplePush); + await waitForNextUpdate(); + + expect(result.current).toEqual({ + serviceData: null, + pushedCaseData: null, + isLoading: false, + isError: true, + postPushToService: result.current.postPushToService, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.tsx index d9a32f26f7fe77..89e7e18cf06881 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_post_push_to_service.tsx @@ -68,7 +68,7 @@ interface PushToServiceRequest { updateCase: (newCase: Case) => void; } -interface UsePostPushToService extends PushToServiceState { +export interface UsePostPushToService extends PushToServiceState { postPushToService: ({ caseId, connectorId, updateCase }: PushToServiceRequest) => void; } @@ -131,7 +131,7 @@ export const usePostPushToService = (): UsePostPushToService => { return { ...state, postPushToService }; }; -const formatServiceRequestData = (myCase: Case): ServiceConnectorCaseParams => { +export const formatServiceRequestData = (myCase: Case): ServiceConnectorCaseParams => { const { id: caseId, createdAt, diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.test.tsx new file mode 100644 index 00000000000000..86cfc3459c5955 --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.test.tsx @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useUpdateCase, UseUpdateCase, UpdateKey } from './use_update_case'; +import { basicCase } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useUpdateCase', () => { + const abortCtrl = new AbortController(); + const fetchCaseUserActions = jest.fn(); + const updateCase = jest.fn(); + const updateKey: UpdateKey = 'description'; + const sampleUpdate = { + fetchCaseUserActions, + updateKey, + updateValue: 'updated description', + updateCase, + version: basicCase.version, + }; + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCase({ caseId: basicCase.id }) + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoading: false, + isError: false, + updateKey: null, + updateCaseProperty: result.current.updateCaseProperty, + }); + }); + }); + + it('calls patchCase with correct arguments', async () => { + const spyOnPatchCase = jest.spyOn(api, 'patchCase'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCase({ caseId: basicCase.id }) + ); + await waitForNextUpdate(); + + result.current.updateCaseProperty(sampleUpdate); + await waitForNextUpdate(); + expect(spyOnPatchCase).toBeCalledWith( + basicCase.id, + { description: 'updated description' }, + basicCase.version, + abortCtrl.signal + ); + }); + }); + + it('patch case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCase({ caseId: basicCase.id }) + ); + await waitForNextUpdate(); + result.current.updateCaseProperty(sampleUpdate); + await waitForNextUpdate(); + expect(result.current).toEqual({ + updateKey: null, + isLoading: false, + isError: false, + updateCaseProperty: result.current.updateCaseProperty, + }); + expect(fetchCaseUserActions).toBeCalledWith(basicCase.id); + expect(updateCase).toBeCalledWith(basicCase); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCase({ caseId: basicCase.id }) + ); + await waitForNextUpdate(); + result.current.updateCaseProperty(sampleUpdate); + + expect(result.current.isLoading).toBe(true); + expect(result.current.updateKey).toBe(updateKey); + }); + }); + + it('unhappy path', async () => { + const spyOnPatchCase = jest.spyOn(api, 'patchCase'); + spyOnPatchCase.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateCase({ caseId: basicCase.id }) + ); + await waitForNextUpdate(); + result.current.updateCaseProperty(sampleUpdate); + + expect(result.current).toEqual({ + updateKey: null, + isLoading: false, + isError: true, + updateCaseProperty: result.current.updateCaseProperty, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.tsx index 4973deef4d91ad..7ebbbba076c121 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_update_case.tsx @@ -12,7 +12,7 @@ import { patchCase } from './api'; import * as i18n from './translations'; import { Case } from './types'; -type UpdateKey = keyof Pick; +export type UpdateKey = keyof Pick; interface NewCaseState { isLoading: boolean; @@ -62,7 +62,7 @@ const dataFetchReducer = (state: NewCaseState, action: Action): NewCaseState => } }; -interface UseUpdateCase extends NewCaseState { +export interface UseUpdateCase extends NewCaseState { updateCaseProperty: (updates: UpdateByKey) => void; } export const useUpdateCase = ({ caseId }: { caseId: string }): UseUpdateCase => { diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.test.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.test.tsx new file mode 100644 index 00000000000000..5772ff4246866e --- /dev/null +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.test.tsx @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useUpdateComment, UseUpdateComment } from './use_update_comment'; +import { basicCase, basicCaseCommentPatch } from './mock'; +import * as api from './api'; + +jest.mock('./api'); + +describe('useUpdateComment', () => { + const abortCtrl = new AbortController(); + const fetchUserActions = jest.fn(); + const updateCase = jest.fn(); + const sampleUpdate = { + caseId: basicCase.id, + commentId: basicCase.comments[0].id, + commentUpdate: 'updated comment', + fetchUserActions, + updateCase, + version: basicCase.comments[0].version, + }; + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + + it('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateComment() + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoadingIds: [], + isError: false, + patchComment: result.current.patchComment, + }); + }); + }); + + it('calls patchComment with correct arguments', async () => { + const spyOnPatchComment = jest.spyOn(api, 'patchComment'); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateComment() + ); + await waitForNextUpdate(); + + result.current.patchComment(sampleUpdate); + await waitForNextUpdate(); + expect(spyOnPatchComment).toBeCalledWith( + basicCase.id, + basicCase.comments[0].id, + 'updated comment', + basicCase.comments[0].version, + abortCtrl.signal + ); + }); + }); + + it('patch comment', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateComment() + ); + await waitForNextUpdate(); + result.current.patchComment(sampleUpdate); + await waitForNextUpdate(); + expect(result.current).toEqual({ + isLoadingIds: [], + isError: false, + patchComment: result.current.patchComment, + }); + expect(fetchUserActions).toBeCalled(); + expect(updateCase).toBeCalledWith(basicCaseCommentPatch); + }); + }); + + it('set isLoading to true when posting case', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateComment() + ); + await waitForNextUpdate(); + result.current.patchComment(sampleUpdate); + + expect(result.current.isLoadingIds).toEqual([basicCase.comments[0].id]); + }); + }); + + it('unhappy path', async () => { + const spyOnPatchComment = jest.spyOn(api, 'patchComment'); + spyOnPatchComment.mockImplementation(() => { + throw new Error('Something went wrong'); + }); + + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useUpdateComment() + ); + await waitForNextUpdate(); + result.current.patchComment(sampleUpdate); + + expect(result.current).toEqual({ + isLoadingIds: [], + isError: true, + patchComment: result.current.patchComment, + }); + }); + }); +}); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.tsx b/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.tsx index faf9649a705c5a..ffc5cffee7a554 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/use_update_comment.tsx @@ -60,7 +60,7 @@ interface UpdateComment { version: string; } -interface UseUpdateComment extends CommentUpdateState { +export interface UseUpdateComment extends CommentUpdateState { patchComment: ({ caseId, commentId, commentUpdate, fetchUserActions }: UpdateComment) => void; } diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/case_data.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/case_data.tsx deleted file mode 100644 index 64c6276fc1be2b..00000000000000 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/case_data.tsx +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { CaseProps } from '../case_view'; -import { Case, Comment, SortFieldCase } from '../../../../containers/case/types'; -import { UseGetCasesState } from '../../../../containers/case/use_get_cases'; -import { UserAction, UserActionField } from '../../../../../../../../plugins/case/common/api/cases'; - -const updateCase = jest.fn(); -const fetchCase = jest.fn(); - -const basicCaseId = 'basic-case-id'; -const basicCommentId = 'basic-comment-id'; -const basicCreatedAt = '2020-02-20T23:06:33.798Z'; -const elasticUser = { - fullName: 'Leslie Knope', - username: 'lknope', - email: 'leslie.knope@elastic.co', -}; - -export const basicComment: Comment = { - comment: 'Solve this fast!', - id: basicCommentId, - createdAt: basicCreatedAt, - createdBy: elasticUser, - pushedAt: null, - pushedBy: null, - updatedAt: '2020-02-20T23:06:33.798Z', - updatedBy: { - username: 'elastic', - }, - version: 'WzQ3LDFc', -}; - -export const basicCase: Case = { - closedAt: null, - closedBy: null, - id: basicCaseId, - comments: [basicComment], - createdAt: '2020-02-13T19:44:23.627Z', - createdBy: elasticUser, - description: 'Security banana Issue', - externalService: null, - status: 'open', - tags: ['defacement'], - title: 'Another horrible breach!!', - totalComment: 1, - updatedAt: '2020-02-19T15:02:57.995Z', - updatedBy: { - username: 'elastic', - }, - version: 'WzQ3LDFd', -}; - -export const caseProps: CaseProps = { - caseId: basicCaseId, - userCanCrud: true, - caseData: basicCase, - fetchCase, - updateCase, -}; - -export const caseClosedProps: CaseProps = { - ...caseProps, - caseData: { - ...caseProps.caseData, - closedAt: '2020-02-20T23:06:33.798Z', - closedBy: { - username: 'elastic', - }, - status: 'closed', - }, -}; - -export const basicCaseClosed: Case = { - ...caseClosedProps.caseData, -}; - -const basicAction = { - actionAt: basicCreatedAt, - actionBy: elasticUser, - oldValue: null, - newValue: 'what a cool value', - caseId: basicCaseId, - commentId: null, -}; -export const caseUserActions = [ - { - ...basicAction, - actionBy: elasticUser, - actionField: ['comment'], - action: 'create', - actionId: 'tt', - }, -]; - -export const useGetCasesMockState: UseGetCasesState = { - data: { - countClosedCases: 0, - countOpenCases: 5, - cases: [ - basicCase, - { - closedAt: null, - closedBy: null, - id: '362a5c10-4e99-11ea-9290-35d05cb55c15', - createdAt: '2020-02-13T19:44:13.328Z', - createdBy: { username: 'elastic' }, - comments: [], - description: 'Security banana Issue', - externalService: { - pushedAt: '2020-02-13T19:45:01.901Z', - pushedBy: 'elastic', - connectorId: 'string', - connectorName: 'string', - externalId: 'string', - externalTitle: 'string', - externalUrl: 'string', - }, - status: 'open', - tags: ['phishing'], - title: 'Bad email', - totalComment: 0, - updatedAt: '2020-02-13T15:45:01.901Z', - updatedBy: { username: 'elastic' }, - version: 'WzQ3LDFd', - }, - { - closedAt: null, - closedBy: null, - id: '34f8b9e0-4e99-11ea-9290-35d05cb55c15', - createdAt: '2020-02-13T19:44:11.328Z', - createdBy: { username: 'elastic' }, - comments: [], - description: 'Security banana Issue', - externalService: { - pushedAt: '2020-02-13T19:45:01.901Z', - pushedBy: 'elastic', - connectorId: 'string', - connectorName: 'string', - externalId: 'string', - externalTitle: 'string', - externalUrl: 'string', - }, - status: 'open', - tags: ['phishing'], - title: 'Bad email', - totalComment: 0, - updatedAt: '2020-02-14T19:45:01.901Z', - updatedBy: { username: 'elastic' }, - version: 'WzQ3LDFd', - }, - { - closedAt: '2020-02-13T19:44:13.328Z', - closedBy: { username: 'elastic' }, - id: '31890e90-4e99-11ea-9290-35d05cb55c15', - createdAt: '2020-02-13T19:44:05.563Z', - createdBy: { username: 'elastic' }, - comments: [], - description: 'Security banana Issue', - externalService: null, - status: 'closed', - tags: ['phishing'], - title: 'Uh oh', - totalComment: 0, - updatedAt: null, - updatedBy: null, - version: 'WzQ3LDFd', - }, - { - closedAt: null, - closedBy: null, - id: '2f5b3210-4e99-11ea-9290-35d05cb55c15', - createdAt: '2020-02-13T19:44:01.901Z', - createdBy: { username: 'elastic' }, - comments: [], - description: 'Security banana Issue', - externalService: null, - status: 'open', - tags: ['phishing'], - title: 'Uh oh', - totalComment: 0, - updatedAt: null, - updatedBy: null, - version: 'WzQ3LDFd', - }, - ], - page: 1, - perPage: 5, - total: 10, - }, - loading: [], - selectedCases: [], - isError: false, - queryParams: { - page: 1, - perPage: 5, - sortField: SortFieldCase.createdAt, - sortOrder: 'desc', - }, - filterOptions: { search: '', reporters: [], tags: [], status: 'open' }, -}; - -const basicPush = { - connector_id: 'connector_id', - connector_name: 'connector name', - external_id: 'external_id', - external_title: 'external title', - external_url: 'basicPush.com', - pushed_at: basicCreatedAt, - pushed_by: elasticUser, -}; -export const getUserAction = (af: UserActionField, a: UserAction) => ({ - ...basicAction, - actionId: `${af[0]}-${a}`, - actionField: af, - action: a, - commentId: af[0] === 'comment' ? basicCommentId : null, - newValue: - a === 'push-to-service' && af[0] === 'pushed' - ? JSON.stringify(basicPush) - : basicAction.newValue, -}); diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/columns.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/columns.test.tsx index e008b94ab9e16b..31c795c05edd57 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/columns.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/columns.test.tsx @@ -9,7 +9,7 @@ import { mount } from 'enzyme'; import { ServiceNowColumn } from './columns'; -import { useGetCasesMockState } from '../__mock__/case_data'; +import { useGetCasesMockState } from '../../../../containers/case/mock'; describe('ServiceNowColumn ', () => { it('Not pushed render', () => { diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.test.tsx index f65736e7cd1092..58d0c1b0faaf3c 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.test.tsx @@ -9,7 +9,7 @@ import { mount } from 'enzyme'; import moment from 'moment-timezone'; import { AllCases } from './'; import { TestProviders } from '../../../../mock'; -import { useGetCasesMockState } from '../__mock__/case_data'; +import { useGetCasesMockState } from '../../../../containers/case/mock'; import * as i18n from './translations'; import { getEmptyTagValue } from '../../../../components/empty_value'; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.tsx index b0ff3dbada6c9b..c50b7d8c17abcf 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/all_cases/index.tsx @@ -131,11 +131,11 @@ export const AllCases = React.memo(({ userCanCrud }) => { const [deleteBulk, setDeleteBulk] = useState([]); const refreshCases = useCallback(() => { - refetchCases(filterOptions, queryParams); + refetchCases(); fetchCasesStatus(); setSelectedCases([]); setDeleteBulk([]); - }, [filterOptions, queryParams]); + }, []); useEffect(() => { if (isDeleted) { diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/actions.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/actions.test.tsx index 8a25a2121104d6..8b6ee76dd783db 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/actions.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/actions.test.tsx @@ -9,7 +9,7 @@ import { mount } from 'enzyme'; import { useDeleteCases } from '../../../../containers/case/use_delete_cases'; import { TestProviders } from '../../../../mock'; -import { basicCase } from '../__mock__/case_data'; +import { basicCase } from '../../../../containers/case/mock'; import { CaseViewActions } from './actions'; jest.mock('../../../../containers/case/use_delete_cases'); const useDeleteCasesMock = useDeleteCases as jest.Mock; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/index.test.tsx index 3721a5a727ca57..7ce9d7b8533e43 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/index.test.tsx @@ -8,13 +8,8 @@ import React from 'react'; import { mount } from 'enzyme'; import { Router, routeData, mockHistory, mockLocation } from '../__mock__/router'; -import { CaseComponent, CaseView } from './'; -import { - basicCaseClosed, - caseClosedProps, - caseProps, - caseUserActions, -} from '../__mock__/case_data'; +import { CaseComponent, CaseProps, CaseView } from './'; +import { basicCase, basicCaseClosed, caseUserActions } from '../../../../containers/case/mock'; import { TestProviders } from '../../../../mock'; import { useUpdateCase } from '../../../../containers/case/use_update_case'; import { useGetCase } from '../../../../containers/case/use_get_case'; @@ -29,6 +24,19 @@ const useUpdateCaseMock = useUpdateCase as jest.Mock; const useGetCaseUserActionsMock = useGetCaseUserActions as jest.Mock; const usePushToServiceMock = usePushToService as jest.Mock; +export const caseProps: CaseProps = { + caseId: basicCase.id, + userCanCrud: true, + caseData: basicCase, + fetchCase: jest.fn(), + updateCase: jest.fn(), +}; + +export const caseClosedProps: CaseProps = { + ...caseProps, + caseData: basicCaseClosed, +}; + describe('CaseView ', () => { const updateCaseProperty = jest.fn(); const fetchCaseUserActions = jest.fn(); diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/translations.ts b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/translations.ts index 17132b96107545..70b8035db5c16f 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/translations.ts +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/case_view/translations.ts @@ -118,3 +118,6 @@ export const EMAIL_BODY = (caseUrl: string) => values: { caseUrl }, defaultMessage: 'Case reference: {caseUrl}', }); +export const UNKNOWN = i18n.translate('xpack.siem.case.caseView.unknown', { + defaultMessage: 'Unknown', +}); diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/helpers.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/helpers.test.tsx index 5c342538f0feb0..e34981286bc813 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/helpers.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/helpers.test.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; -import { getUserAction } from '../__mock__/case_data'; +import { getUserAction } from '../../../../containers/case/mock'; import { getLabelTitle } from './helpers'; import * as i18n from '../case_view/translations'; import { mount } from 'enzyme'; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.test.tsx index 0d8cd729b4a1d9..1c71260422d4b1 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.test.tsx @@ -10,7 +10,7 @@ import { mount } from 'enzyme'; import { Router, routeData, mockHistory, mockLocation } from '../__mock__/router'; import { getFormMock } from '../__mock__/form'; import { useUpdateComment } from '../../../../containers/case/use_update_comment'; -import { basicCase, getUserAction } from '../__mock__/case_data'; +import { basicCase, getUserAction } from '../../../../containers/case/mock'; import { UserActionTree } from './'; import { TestProviders } from '../../../../mock'; import { useFormMock } from '../create/index.test'; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.tsx index f8f3f0651fa3cf..d1e8eb3f6306b3 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/index.tsx @@ -179,7 +179,7 @@ export const UserActionTree = React.memo( markdown={MarkdownDescription} onEdit={handleManageMarkdownEditId.bind(null, DESCRIPTION_ID)} onQuote={handleManageQuote.bind(null, caseData.description)} - username={caseData.createdBy.username ?? 'Unknown'} + username={caseData.createdBy.username ?? i18n.UNKNOWN} /> {caseUserActions.map((action, index) => { diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.test.tsx index e2189367068ca3..8a1e8a80f664de 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { mount } from 'enzyme'; import copy from 'copy-to-clipboard'; import { Router, routeData, mockHistory } from '../__mock__/router'; -import { caseUserActions as basicUserActions } from '../__mock__/case_data'; +import { caseUserActions as basicUserActions } from '../../../../containers/case/mock'; import { UserActionTitle } from './user_action_title'; import { TestProviders } from '../../../../mock'; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.tsx index a1edbab7e1fa2c..fc2a74466dedc6 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/user_action_tree/user_action_title.tsx @@ -43,7 +43,7 @@ interface UserActionTitleProps { linkId?: string | null; fullName?: string | null; updatedAt?: string | null; - username: string; + username?: string | null; onEdit?: (id: string) => void; onQuote?: (id: string) => void; outlineComment?: (id: string) => void; @@ -63,7 +63,7 @@ export const UserActionTitle = ({ onQuote, outlineComment, updatedAt, - username, + username = i18n.UNKNOWN, }: UserActionTitleProps) => { const { detailName: caseId } = useParams(); const urlSearch = useGetUrlSearch(navTabs.case); diff --git a/x-pack/plugins/case/common/api/cases/case.ts b/x-pack/plugins/case/common/api/cases/case.ts index 3c5d3405f395e5..1f08a410249057 100644 --- a/x-pack/plugins/case/common/api/cases/case.ts +++ b/x-pack/plugins/case/common/api/cases/case.ts @@ -167,6 +167,7 @@ export type CasesResponse = rt.TypeOf; export type CasesFindResponse = rt.TypeOf; export type CasePatchRequest = rt.TypeOf; export type CasesPatchRequest = rt.TypeOf; +export type Status = rt.TypeOf; export type CaseExternalServiceRequest = rt.TypeOf; export type ServiceConnectorCaseParams = rt.TypeOf; export type ServiceConnectorCaseResponse = rt.TypeOf; From 287d477f211e2ed7b92f78812c8f065c6e779de6 Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 14 Apr 2020 22:09:03 +0300 Subject: [PATCH 54/65] [SIEM][CASE] Tests for server's configuration API (#63099) * Test utils * Test get_configure * Test post_configure * Test get_connectors * Test patch_configure * Improve test * Fixes Co-authored-by: Elastic Machine --- .../__fixtures__/create_mock_so_repository.ts | 70 ++- .../api/__fixtures__/mock_saved_objects.ts | 32 +- .../routes/api/__fixtures__/route_contexts.ts | 6 + .../routes/api/__mocks__/request_responses.ts | 64 +++ .../api/cases/configure/get_configure.test.ts | 112 +++++ .../cases/configure/get_connectors.test.ts | 63 +++ .../cases/configure/patch_configure.test.ts | 156 +++++++ .../cases/configure/post_configure.test.ts | 294 ++++++++++++ .../case/server/routes/api/utils.test.ts | 418 ++++++++++++++++++ 9 files changed, 1213 insertions(+), 2 deletions(-) create mode 100644 x-pack/plugins/case/server/routes/api/__mocks__/request_responses.ts create mode 100644 x-pack/plugins/case/server/routes/api/cases/configure/get_configure.test.ts create mode 100644 x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.test.ts create mode 100644 x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.test.ts create mode 100644 x-pack/plugins/case/server/routes/api/cases/configure/post_configure.test.ts create mode 100644 x-pack/plugins/case/server/routes/api/utils.test.ts diff --git a/x-pack/plugins/case/server/routes/api/__fixtures__/create_mock_so_repository.ts b/x-pack/plugins/case/server/routes/api/__fixtures__/create_mock_so_repository.ts index 95cd66a9c51a25..e83dafc68ee691 100644 --- a/x-pack/plugins/case/server/routes/api/__fixtures__/create_mock_so_repository.ts +++ b/x-pack/plugins/case/server/routes/api/__fixtures__/create_mock_so_repository.ts @@ -11,14 +11,20 @@ import { SavedObjectsBulkUpdateObject, } from 'src/core/server'; -import { CASE_COMMENT_SAVED_OBJECT, CASE_SAVED_OBJECT } from '../../../saved_object_types'; +import { + CASE_COMMENT_SAVED_OBJECT, + CASE_SAVED_OBJECT, + CASE_CONFIGURE_SAVED_OBJECT, +} from '../../../saved_object_types'; export const createMockSavedObjectsRepository = ({ caseSavedObject = [], caseCommentSavedObject = [], + caseConfigureSavedObject = [], }: { caseSavedObject?: any[]; caseCommentSavedObject?: any[]; + caseConfigureSavedObject?: any[]; }) => { const mockSavedObjectsClientContract = ({ bulkGet: jest.fn((objects: SavedObjectsBulkGetObject[]) => { @@ -70,6 +76,7 @@ export const createMockSavedObjectsRepository = ({ } return result[0]; } + const result = caseSavedObject.filter(s => s.id === id); if (!result.length) { throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); @@ -81,6 +88,23 @@ export const createMockSavedObjectsRepository = ({ throw SavedObjectsErrorHelpers.createBadRequestError('Error thrown for testing'); } + if ( + findArgs.type === CASE_CONFIGURE_SAVED_OBJECT && + caseConfigureSavedObject[0] && + caseConfigureSavedObject[0].id === 'throw-error-find' + ) { + throw SavedObjectsErrorHelpers.createGenericNotFoundError('Error thrown for testing'); + } + + if (findArgs.type === CASE_CONFIGURE_SAVED_OBJECT) { + return { + page: 1, + per_page: 5, + total: caseConfigureSavedObject.length, + saved_objects: caseConfigureSavedObject, + }; + } + if (findArgs.type === CASE_COMMENT_SAVED_OBJECT) { return { page: 1, @@ -101,6 +125,13 @@ export const createMockSavedObjectsRepository = ({ throw SavedObjectsErrorHelpers.createBadRequestError('Error thrown for testing'); } + if ( + type === CASE_CONFIGURE_SAVED_OBJECT && + attributes.connector_id === 'throw-error-create' + ) { + throw SavedObjectsErrorHelpers.createBadRequestError('Error thrown for testing'); + } + if (type === CASE_COMMENT_SAVED_OBJECT) { const newCommentObj = { type, @@ -113,6 +144,20 @@ export const createMockSavedObjectsRepository = ({ caseCommentSavedObject = [...caseCommentSavedObject, newCommentObj]; return newCommentObj; } + + if (type === CASE_CONFIGURE_SAVED_OBJECT) { + const newConfiguration = { + type, + id: 'mock-configuration', + attributes, + updated_at: '2020-04-09T09:43:51.778Z', + version: attributes.connector_id === 'no-version' ? undefined : 'WzksMV0=', + }; + + caseConfigureSavedObject = [newConfiguration]; + return newConfiguration; + } + return { type, id: 'mock-it', @@ -143,6 +188,16 @@ export const createMockSavedObjectsRepository = ({ } } + if (type === CASE_CONFIGURE_SAVED_OBJECT) { + return { + id, + type, + updated_at: '2019-11-22T22:50:55.191Z', + attributes, + version: attributes.connector_id === 'no-version' ? undefined : 'WzE3LDFd', + }; + } + return { id, type, @@ -153,16 +208,29 @@ export const createMockSavedObjectsRepository = ({ }), delete: jest.fn((type: string, id: string) => { let result = caseSavedObject.filter(s => s.id === id); + if (type === CASE_COMMENT_SAVED_OBJECT) { result = caseCommentSavedObject.filter(s => s.id === id); } + + if (type === CASE_CONFIGURE_SAVED_OBJECT) { + result = caseConfigureSavedObject.filter(s => s.id === id); + } + if (type === CASE_COMMENT_SAVED_OBJECT && id === 'bad-guy') { throw SavedObjectsErrorHelpers.createBadRequestError('Error thrown for testing'); } + if (!result.length) { throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); } + if ( + type === CASE_CONFIGURE_SAVED_OBJECT && + caseConfigureSavedObject[0].id === 'throw-error-delete' + ) { + throw new Error('Error thrown for testing'); + } return {}; }), deleteByNamespace: jest.fn(), diff --git a/x-pack/plugins/case/server/routes/api/__fixtures__/mock_saved_objects.ts b/x-pack/plugins/case/server/routes/api/__fixtures__/mock_saved_objects.ts index 03da50f886fd5d..75e793a80272fe 100644 --- a/x-pack/plugins/case/server/routes/api/__fixtures__/mock_saved_objects.ts +++ b/x-pack/plugins/case/server/routes/api/__fixtures__/mock_saved_objects.ts @@ -5,7 +5,11 @@ */ import { SavedObject } from 'kibana/server'; -import { CaseAttributes, CommentAttributes } from '../../../../common/api'; +import { + CaseAttributes, + CommentAttributes, + CasesConfigureAttributes, +} from '../../../../common/api'; export const mockCases: Array> = [ { @@ -225,7 +229,33 @@ export const mockCaseComments: Array> = [ }, ], updated_at: '2019-11-25T22:32:30.608Z', + version: 'WzYsMV0=', + }, +]; +export const mockCaseConfigure: Array> = [ + { + type: 'cases-configure', + id: 'mock-configuration-1', + attributes: { + connector_id: '123', + connector_name: 'My connector', + closure_type: 'close-by-user', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + updated_at: '2020-04-09T09:43:51.778Z', + updated_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + }, + references: [], + updated_at: '2020-04-09T09:43:51.778Z', version: 'WzYsMV0=', }, ]; diff --git a/x-pack/plugins/case/server/routes/api/__fixtures__/route_contexts.ts b/x-pack/plugins/case/server/routes/api/__fixtures__/route_contexts.ts index b1881e394e796a..d947ffbaf181df 100644 --- a/x-pack/plugins/case/server/routes/api/__fixtures__/route_contexts.ts +++ b/x-pack/plugins/case/server/routes/api/__fixtures__/route_contexts.ts @@ -5,13 +5,19 @@ */ import { RequestHandlerContext } from 'src/core/server'; +import { actionsClientMock } from '../../../../../actions/server/mocks'; +import { getActions } from '../__mocks__/request_responses'; export const createRouteContext = (client: any) => { + const actionsMock = actionsClientMock.create(); + actionsMock.getAll.mockImplementation(() => Promise.resolve(getActions())); + return ({ core: { savedObjects: { client, }, }, + actions: { getActionsClient: () => actionsMock }, } as unknown) as RequestHandlerContext; }; diff --git a/x-pack/plugins/case/server/routes/api/__mocks__/request_responses.ts b/x-pack/plugins/case/server/routes/api/__mocks__/request_responses.ts new file mode 100644 index 00000000000000..846013674986e6 --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/__mocks__/request_responses.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { CasePostRequest, CasesConfigureRequest } from '../../../../common/api'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { FindActionResult } from '../../../../../actions/server/types'; + +export const newCase: CasePostRequest = { + title: 'My new case', + description: 'A description', + tags: ['new', 'case'], +}; + +export const getActions = (): FindActionResult[] => [ + { + id: 'e90075a5-c386-41e3-ae21-ba4e61510695', + actionTypeId: '.webhook', + name: 'Test', + config: { + method: 'post', + url: 'https://example.com', + headers: null, + }, + isPreconfigured: false, + referencedByCount: 0, + }, + { + id: 'd611af27-3532-4da9-8034-271fee81d634', + actionTypeId: '.servicenow', + name: 'ServiceNow', + config: { + casesConfiguration: { + mapping: [ + { + source: 'title', + target: 'short_description', + actionType: 'overwrite', + }, + { + source: 'description', + target: 'description', + actionType: 'overwrite', + }, + { + source: 'comments', + target: 'comments', + actionType: 'append', + }, + ], + }, + apiUrl: 'https://dev102283.service-now.com', + }, + isPreconfigured: false, + referencedByCount: 0, + }, +]; + +export const newConfiguration: CasesConfigureRequest = { + connector_id: '456', + connector_name: 'My connector 2', + closure_type: 'close-by-pushing', +}; diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.test.ts b/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.test.ts new file mode 100644 index 00000000000000..66d39c3f11d28e --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.test.ts @@ -0,0 +1,112 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { kibanaResponseFactory, RequestHandler } from 'src/core/server'; +import { httpServerMock } from 'src/core/server/mocks'; + +import { + createMockSavedObjectsRepository, + createRoute, + createRouteContext, +} from '../../__fixtures__'; + +import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; +import { initGetCaseConfigure } from './get_configure'; + +describe('GET configuration', () => { + let routeHandler: RequestHandler; + beforeAll(async () => { + routeHandler = await createRoute(initGetCaseConfigure, 'get'); + }); + + it('returns the configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(200); + expect(res.payload).toEqual({ + ...mockCaseConfigure[0].attributes, + version: mockCaseConfigure[0].version, + }); + }); + + it('handles undefined version correctly', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [{ ...mockCaseConfigure[0], version: undefined }], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(200); + expect(res.payload).toEqual({ + connector_id: '123', + connector_name: 'My connector', + closure_type: 'close-by-user', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + updated_at: '2020-04-09T09:43:51.778Z', + updated_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + version: '', + }); + }); + + it('returns an empty object when there is no configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(200); + expect(res.payload).toEqual({}); + }); + + it('returns an error if find throws an error', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [{ ...mockCaseConfigure[0], id: 'throw-error-find' }], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(404); + expect(res.payload.isBoom).toEqual(true); + }); +}); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.test.ts b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.test.ts new file mode 100644 index 00000000000000..62edaa0a4792aa --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.test.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { kibanaResponseFactory, RequestHandler } from 'src/core/server'; +import { httpServerMock } from 'src/core/server/mocks'; + +import { + createMockSavedObjectsRepository, + createRoute, + createRouteContext, +} from '../../__fixtures__'; + +import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; +import { initCaseConfigureGetActionConnector } from './get_connectors'; +import { getActions } from '../../__mocks__/request_responses'; + +describe('GET connectors', () => { + let routeHandler: RequestHandler; + beforeAll(async () => { + routeHandler = await createRoute(initCaseConfigureGetActionConnector, 'get'); + }); + + it('returns the connectors', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure/connectors/_find', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + getActions().filter(action => action.actionTypeId === '.servicenow') + ); + }); + + it('it throws an error when actions client is null', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure/connectors/_find', + method: 'get', + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + context.actions = undefined; + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(404); + expect(res.payload.isBoom).toEqual(true); + }); +}); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.test.ts b/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.test.ts new file mode 100644 index 00000000000000..5b3d68a2586644 --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.test.ts @@ -0,0 +1,156 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { kibanaResponseFactory, RequestHandler } from 'src/core/server'; +import { httpServerMock } from 'src/core/server/mocks'; + +import { + createMockSavedObjectsRepository, + createRoute, + createRouteContext, +} from '../../__fixtures__'; + +import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; +import { initPatchCaseConfigure } from './patch_configure'; + +describe('PATCH configuration', () => { + let routeHandler: RequestHandler; + + beforeAll(async () => { + routeHandler = await createRoute(initPatchCaseConfigure, 'patch'); + const spyOnDate = jest.spyOn(global, 'Date') as jest.SpyInstance<{}, []>; + spyOnDate.mockImplementation(() => ({ + toISOString: jest.fn().mockReturnValue('2020-04-09T09:43:51.778Z'), + })); + }); + + it('patch configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'patch', + body: { + closure_type: 'close-by-pushing', + version: mockCaseConfigure[0].version, + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + expect.objectContaining({ + ...mockCaseConfigure[0].attributes, + closure_type: 'close-by-pushing', + updated_at: '2020-04-09T09:43:51.778Z', + updated_by: { email: 'd00d@awesome.com', full_name: 'Awesome D00d', username: 'awesome' }, + version: 'WzE3LDFd', + }) + ); + }); + + it('patch configuration without authentication', async () => { + routeHandler = await createRoute(initPatchCaseConfigure, 'patch', true); + + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'patch', + body: { + closure_type: 'close-by-pushing', + version: mockCaseConfigure[0].version, + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + expect.objectContaining({ + ...mockCaseConfigure[0].attributes, + closure_type: 'close-by-pushing', + updated_at: '2020-04-09T09:43:51.778Z', + updated_by: { email: null, full_name: null, username: null }, + version: 'WzE3LDFd', + }) + ); + }); + + it('throw error when configuration have not being created', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'patch', + body: { + closure_type: 'close-by-pushing', + version: mockCaseConfigure[0].version, + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(409); + expect(res.payload.isBoom).toEqual(true); + }); + + it('throw error when the versions are different', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'patch', + body: { + closure_type: 'close-by-pushing', + version: 'different-version', + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(409); + expect(res.payload.isBoom).toEqual(true); + }); + + it('handles undefined version correctly', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'patch', + body: { connector_id: 'no-version', version: mockCaseConfigure[0].version }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.payload).toEqual( + expect.objectContaining({ + version: '', + }) + ); + }); +}); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.test.ts b/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.test.ts new file mode 100644 index 00000000000000..7e40cad5b12981 --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.test.ts @@ -0,0 +1,294 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { kibanaResponseFactory, RequestHandler } from 'src/core/server'; +import { httpServerMock } from 'src/core/server/mocks'; + +import { + createMockSavedObjectsRepository, + createRoute, + createRouteContext, +} from '../../__fixtures__'; + +import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; +import { initPostCaseConfigure } from './post_configure'; +import { newConfiguration } from '../../__mocks__/request_responses'; + +describe('POST configuration', () => { + let routeHandler: RequestHandler; + + beforeAll(async () => { + routeHandler = await createRoute(initPostCaseConfigure, 'post'); + const spyOnDate = jest.spyOn(global, 'Date') as jest.SpyInstance<{}, []>; + spyOnDate.mockImplementation(() => ({ + toISOString: jest.fn().mockReturnValue('2020-04-09T09:43:51.778Z'), + })); + }); + + it('create configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + expect.objectContaining({ + connector_id: '456', + connector_name: 'My connector 2', + closure_type: 'close-by-pushing', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: 'd00d@awesome.com', full_name: 'Awesome D00d', username: 'awesome' }, + updated_at: null, + updated_by: null, + }) + ); + }); + + it('create configuration without authentication', async () => { + routeHandler = await createRoute(initPostCaseConfigure, 'post', true); + + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + expect.objectContaining({ + connector_id: '456', + connector_name: 'My connector 2', + closure_type: 'close-by-pushing', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: null, full_name: null, username: null }, + updated_at: null, + updated_by: null, + }) + ); + }); + + it('throws when missing connector_id', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: { + connector_name: 'My connector 2', + closure_type: 'close-by-pushing', + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(400); + expect(res.payload.isBoom).toEqual(true); + }); + + it('throws when missing connector_name', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: { + connector_id: '456', + closure_type: 'close-by-pushing', + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(400); + expect(res.payload.isBoom).toEqual(true); + }); + + it('throws when missing closure_type', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: { + connector_id: '456', + connector_name: 'My connector 2', + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(400); + expect(res.payload.isBoom).toEqual(true); + }); + + it('it deletes the previous configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const savedObjectRepository = createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }); + + const context = createRouteContext(savedObjectRepository); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(savedObjectRepository.delete.mock.calls[0][1]).toBe(mockCaseConfigure[0].id); + }); + + it('it does NOT delete when not found', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const savedObjectRepository = createMockSavedObjectsRepository({ + caseConfigureSavedObject: [], + }); + + const context = createRouteContext(savedObjectRepository); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(savedObjectRepository.delete).not.toHaveBeenCalled(); + }); + + it('it deletes all configuration', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const savedObjectRepository = createMockSavedObjectsRepository({ + caseConfigureSavedObject: [ + mockCaseConfigure[0], + { ...mockCaseConfigure[0], id: 'mock-configuration-2' }, + ], + }); + + const context = createRouteContext(savedObjectRepository); + + const res = await routeHandler(context, req, kibanaResponseFactory); + + expect(res.status).toEqual(200); + expect(savedObjectRepository.delete.mock.calls[0][1]).toBe(mockCaseConfigure[0].id); + expect(savedObjectRepository.delete.mock.calls[1][1]).toBe('mock-configuration-2'); + }); + + it('returns an error if find throws an error', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [{ ...mockCaseConfigure[0], id: 'throw-error-find' }], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(404); + expect(res.payload.isBoom).toEqual(true); + }); + + it('returns an error if delete throws an error', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: newConfiguration, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: [{ ...mockCaseConfigure[0], id: 'throw-error-delete' }], + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(500); + expect(res.payload.isBoom).toEqual(true); + }); + + it('returns an error if post throws an error', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: { + connector_id: 'throw-error-create', + connector_name: 'My connector 2', + closure_type: 'close-by-pushing', + }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(400); + expect(res.payload.isBoom).toEqual(true); + }); + + it('handles undefined version correctly', async () => { + const req = httpServerMock.createKibanaRequest({ + path: '/api/cases/configure', + method: 'post', + body: { ...newConfiguration, connector_id: 'no-version' }, + }); + + const context = createRouteContext( + createMockSavedObjectsRepository({ + caseConfigureSavedObject: mockCaseConfigure, + }) + ); + + const res = await routeHandler(context, req, kibanaResponseFactory); + expect(res.status).toEqual(200); + expect(res.payload).toEqual( + expect.objectContaining({ + version: '', + }) + ); + }); +}); diff --git a/x-pack/plugins/case/server/routes/api/utils.test.ts b/x-pack/plugins/case/server/routes/api/utils.test.ts new file mode 100644 index 00000000000000..a22f4db30bf8de --- /dev/null +++ b/x-pack/plugins/case/server/routes/api/utils.test.ts @@ -0,0 +1,418 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + transformNewCase, + transformNewComment, + wrapError, + transformCases, + flattenCaseSavedObjects, + flattenCaseSavedObject, + flattenCommentSavedObjects, + transformComments, + flattenCommentSavedObject, + sortToSnake, +} from './utils'; +import { newCase } from './__mocks__/request_responses'; +import { isBoom, boomify } from 'boom'; +import { mockCases, mockCaseComments } from './__fixtures__/mock_saved_objects'; + +describe('Utils', () => { + describe('transformNewCase', () => { + it('transform correctly', () => { + const myCase = { + newCase, + createdDate: '2020-04-09T09:43:51.778Z', + email: 'elastic@elastic.co', + full_name: 'Elastic', + username: 'elastic', + }; + + const res = transformNewCase(myCase); + + expect(res).toEqual({ + ...myCase.newCase, + closed_at: null, + closed_by: null, + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: 'elastic@elastic.co', full_name: 'Elastic', username: 'elastic' }, + external_service: null, + status: 'open', + updated_at: null, + updated_by: null, + }); + }); + + it('transform correctly without optional fields', () => { + const myCase = { + newCase, + createdDate: '2020-04-09T09:43:51.778Z', + }; + + const res = transformNewCase(myCase); + + expect(res).toEqual({ + ...myCase.newCase, + closed_at: null, + closed_by: null, + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: undefined, full_name: undefined, username: undefined }, + external_service: null, + status: 'open', + updated_at: null, + updated_by: null, + }); + }); + + it('transform correctly with optional fields as null', () => { + const myCase = { + newCase, + createdDate: '2020-04-09T09:43:51.778Z', + email: null, + full_name: null, + username: null, + }; + + const res = transformNewCase(myCase); + + expect(res).toEqual({ + ...myCase.newCase, + closed_at: null, + closed_by: null, + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: null, full_name: null, username: null }, + external_service: null, + status: 'open', + updated_at: null, + updated_by: null, + }); + }); + }); + + describe('transformNewComment', () => { + it('transforms correctly', () => { + const comment = { + comment: 'A comment', + createdDate: '2020-04-09T09:43:51.778Z', + email: 'elastic@elastic.co', + full_name: 'Elastic', + username: 'elastic', + }; + + const res = transformNewComment(comment); + expect(res).toEqual({ + comment: 'A comment', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: 'elastic@elastic.co', full_name: 'Elastic', username: 'elastic' }, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + }); + }); + + it('transform correctly without optional fields', () => { + const comment = { + comment: 'A comment', + createdDate: '2020-04-09T09:43:51.778Z', + }; + + const res = transformNewComment(comment); + + expect(res).toEqual({ + comment: 'A comment', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: undefined, full_name: undefined, username: undefined }, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + }); + }); + + it('transform correctly with optional fields as null', () => { + const comment = { + comment: 'A comment', + createdDate: '2020-04-09T09:43:51.778Z', + email: null, + full_name: null, + username: null, + }; + + const res = transformNewComment(comment); + + expect(res).toEqual({ + comment: 'A comment', + created_at: '2020-04-09T09:43:51.778Z', + created_by: { email: null, full_name: null, username: null }, + pushed_at: null, + pushed_by: null, + updated_at: null, + updated_by: null, + }); + }); + }); + + describe('wrapError', () => { + it('wraps an error', () => { + const error = new Error('Something happened'); + const res = wrapError(error); + + expect(isBoom(res.body as Error)).toBe(true); + }); + + it('it set statusCode to 500', () => { + const error = new Error('Something happened'); + const res = wrapError(error); + + expect(res.statusCode).toBe(500); + }); + + it('it set statusCode to errors status code', () => { + const error = new Error('Something happened') as any; + error.statusCode = 404; + const res = wrapError(error); + + expect(res.statusCode).toBe(404); + }); + + it('it accepts a boom error', () => { + const error = boomify(new Error('Something happened')); + const res = wrapError(error); + + // Utils returns the same boom error as body + expect(res.body).toBe(error); + }); + + it('it accepts a boom error with status code', () => { + const error = boomify(new Error('Something happened'), { statusCode: 404 }); + const res = wrapError(error); + + expect(res.statusCode).toBe(404); + }); + + it('it returns empty headers', () => { + const error = new Error('Something happened'); + const res = wrapError(error); + + expect(res.headers).toEqual({}); + }); + }); + + describe('transformCases', () => { + it('transforms correctly', () => { + const totalCommentsByCase = [ + { caseId: mockCases[0].id, totalComments: 2 }, + { caseId: mockCases[1].id, totalComments: 2 }, + { caseId: mockCases[2].id, totalComments: 2 }, + { caseId: mockCases[3].id, totalComments: 2 }, + ]; + + const res = transformCases( + { saved_objects: mockCases, total: mockCases.length, per_page: 10, page: 1 }, + 2, + 2, + totalCommentsByCase + ); + expect(res).toEqual({ + page: 1, + per_page: 10, + total: mockCases.length, + cases: flattenCaseSavedObjects(mockCases, totalCommentsByCase), + count_open_cases: 2, + count_closed_cases: 2, + }); + }); + }); + + describe('flattenCaseSavedObjects', () => { + it('flattens correctly', () => { + const totalCommentsByCase = [{ caseId: mockCases[0].id, totalComments: 2 }]; + + const res = flattenCaseSavedObjects([mockCases[0]], totalCommentsByCase); + expect(res).toEqual([ + { + id: 'mock-id-1', + closed_at: null, + closed_by: null, + created_at: '2019-11-25T21:54:48.952Z', + created_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + description: 'This is a brand new case of a bad meanie defacing data', + external_service: null, + title: 'Super Bad Security Issue', + status: 'open', + tags: ['defacement'], + updated_at: '2019-11-25T21:54:48.952Z', + updated_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + comments: [], + totalComment: 2, + version: 'WzAsMV0=', + }, + ]); + }); + + it('it handles total comments correctly', () => { + const totalCommentsByCase = [{ caseId: 'not-exist', totalComments: 2 }]; + + const res = flattenCaseSavedObjects([mockCases[0]], totalCommentsByCase); + + expect(res).toEqual([ + { + id: 'mock-id-1', + closed_at: null, + closed_by: null, + created_at: '2019-11-25T21:54:48.952Z', + created_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + description: 'This is a brand new case of a bad meanie defacing data', + external_service: null, + title: 'Super Bad Security Issue', + status: 'open', + tags: ['defacement'], + updated_at: '2019-11-25T21:54:48.952Z', + updated_by: { + full_name: 'elastic', + email: 'testemail@elastic.co', + username: 'elastic', + }, + comments: [], + totalComment: 0, + version: 'WzAsMV0=', + }, + ]); + }); + }); + + describe('flattenCaseSavedObject', () => { + it('flattens correctly', () => { + const myCase = { ...mockCases[0] }; + const res = flattenCaseSavedObject(myCase, [], 2); + expect(res).toEqual({ + id: myCase.id, + version: myCase.version, + comments: [], + totalComment: 2, + ...myCase.attributes, + }); + }); + + it('flattens correctly without version', () => { + const myCase = { ...mockCases[0] }; + myCase.version = undefined; + const res = flattenCaseSavedObject(myCase, [], 2); + expect(res).toEqual({ + id: myCase.id, + version: '0', + comments: [], + totalComment: 2, + ...myCase.attributes, + }); + }); + + it('flattens correctly with comments', () => { + const myCase = { ...mockCases[0] }; + const comments = [{ ...mockCaseComments[0] }]; + const res = flattenCaseSavedObject(myCase, comments, 2); + expect(res).toEqual({ + id: myCase.id, + version: myCase.version, + comments: flattenCommentSavedObjects(comments), + totalComment: 2, + ...myCase.attributes, + }); + }); + }); + + describe('transformComments', () => { + it('transforms correctly', () => { + const comments = { + saved_objects: mockCaseComments, + total: mockCaseComments.length, + per_page: 10, + page: 1, + }; + + const res = transformComments(comments); + expect(res).toEqual({ + page: 1, + per_page: 10, + total: mockCaseComments.length, + comments: flattenCommentSavedObjects(comments.saved_objects), + }); + }); + }); + + describe('flattenCommentSavedObjects', () => { + it('flattens correctly', () => { + const comments = [{ ...mockCaseComments[0] }, { ...mockCaseComments[1] }]; + const res = flattenCommentSavedObjects(comments); + expect(res).toEqual([ + flattenCommentSavedObject(comments[0]), + flattenCommentSavedObject(comments[1]), + ]); + }); + }); + + describe('flattenCommentSavedObject', () => { + it('flattens correctly', () => { + const comment = { ...mockCaseComments[0] }; + const res = flattenCommentSavedObject(comment); + expect(res).toEqual({ + id: comment.id, + version: comment.version, + ...comment.attributes, + }); + }); + + it('flattens correctly without version', () => { + const comment = { ...mockCaseComments[0] }; + comment.version = undefined; + const res = flattenCommentSavedObject(comment); + expect(res).toEqual({ + id: comment.id, + version: '0', + ...comment.attributes, + }); + }); + }); + + describe('sortToSnake', () => { + it('it transforms status correctly', () => { + expect(sortToSnake('status')).toBe('status'); + }); + + it('it transforms createdAt correctly', () => { + expect(sortToSnake('createdAt')).toBe('created_at'); + }); + + it('it transforms created_at correctly', () => { + expect(sortToSnake('created_at')).toBe('created_at'); + }); + + it('it transforms closedAt correctly', () => { + expect(sortToSnake('closedAt')).toBe('closed_at'); + }); + + it('it transforms closed_at correctly', () => { + expect(sortToSnake('closed_at')).toBe('closed_at'); + }); + + it('it transforms default correctly', () => { + expect(sortToSnake('not-exist')).toBe('created_at'); + }); + }); +}); From 29aba88a0017abaf926140156fff4ffb42a6bd3c Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Tue, 14 Apr 2020 12:55:49 -0700 Subject: [PATCH 55/65] [Reporting] Improve functional test steps (#63259) * Start of refactoring * remove unused fixtuers * fix the refactoring bugs * update archive with better dashboard * important comment Co-authored-by: Elastic Machine --- .../reporting/ecommerce_kibana/data.json.gz | Bin 2039 -> 4138 bytes .../reporting/ecommerce_kibana/mappings.json | 1704 ++++++++++++++++- .../reporting/historic/data.json.gz | Bin 2269 -> 0 bytes .../reporting/historic/mappings.json | 386 ---- .../functional/page_objects/reporting_page.js | 30 +- x-pack/test/reporting/.gitignore | 1 + .../reporting/configs/chromium_functional.js | 1 + x-pack/test/reporting/functional/reporting.js | 139 +- .../baseline/dashboard_preserve_layout.pdf | Bin 301135 -> 0 bytes .../baseline/dashboard_preserve_layout.png | Bin 349976 -> 631719 bytes .../reports/baseline/dashboard_print.pdf | Bin 359189 -> 0 bytes .../reports/baseline/visualize_print.pdf | Bin 124146 -> 0 bytes 12 files changed, 1733 insertions(+), 528 deletions(-) delete mode 100644 x-pack/test/functional/es_archives/reporting/historic/data.json.gz delete mode 100644 x-pack/test/functional/es_archives/reporting/historic/mappings.json create mode 100644 x-pack/test/reporting/.gitignore delete mode 100644 x-pack/test/reporting/functional/reports/baseline/dashboard_preserve_layout.pdf delete mode 100644 x-pack/test/reporting/functional/reports/baseline/dashboard_print.pdf delete mode 100644 x-pack/test/reporting/functional/reports/baseline/visualize_print.pdf diff --git a/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/data.json.gz b/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/data.json.gz index 2b204d0bde2716e4813714d2a923ec611a0c2c2e..454d260a518cd39001004d026afd8dc00c5e01d6 100644 GIT binary patch literal 4138 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 literal 2039 zcmVQOZ*BnXTU&FRMihScuV8peXAA*dkf2W;w`tSX zPA68=PGS$Uf<@YzTbISLn(=?{S#DwxvXPWp#?uFl(AnE}?uXUxmlH{n*(%1eCCP5& z$fulei~N*RzQ7OoNnG9WV#F7)aDLVsB3`T!Q44TjcWVCe(ZFb}cxb%Z`3I6uZ)d)Q7BOn*YjCC1@J z#7H(Jqbc4HUCBweKu{OYKvT`(-~jPtGEid3Fqno`C(Z9HJz)(|L>|Gu%Y`a``f??Q zD8N^;btT)xy^>F_G9EHQ0tql&WHg*)sRYQMijLPnb$Ij!ng-8_LrDxmgP$Jq6U<2% zQD=$fKA(>30BC5jpm+hPQ=n3e+&44|zK@&_TwqB#%l)Z{kTca4WZw5EI1?wLSi~8o z!5q_!whNq+*uYbgI|It>Lqt?3ilQqUc9q>%0-Gc3q~yHEF?8%egjhs$)eR`acTB{o z?~QXuah5>U8@&1)(T+Y|b^gy~TQnuasX?H{QkbdV@i3Z=%|cV z-uBnWBfK?{CM*gtwdaJgrOoq<2)d#OkaOyj=wb_AkI;nKIekBi-yiX=7Qc!41sH#u zA~yY??3DU`-;`BCeo4Aot6{6E78nW@`W%_v0=R3L_$Im^N z3OlOln10}*l^uEZXN+%p1=c28Uq}SFB!nu9Hypujae#>b{H40U5s6iYu+7O-BO_!vS(n>?1&7>LG{! zQP8n|I%0aSgYAD}7e(Jp>3|mU`Tp;=Pn2zPn0+W`V;Z@s!xFVK+9O(e9c=$CT@-!O z(yP`vO0XSM(%fX-R%I=b@7bOoq2ok*5qBCA)<^J%?!i92OT3)T*cK&hbq)uX;{T^L zi=k(h4=TJaNwTGF6yyl{Ry#~t*Bp+cRyU{t-F!1j|rrgkh6!4 zLU0>yKjJp`91!t%HT zxV_ZxW2^_{K2DN8LeJjM`dE}6=95oU_7^72_<7_WSx0Hly~Ca1?N5Tq@q!Efo$?)? z+$DPeyYnHsW9CDCTK8F^yp|g`65jAbvloDypPOB8aEslTpEYAA3IhK2y?J0eAPbuP zE%X7?1ir+Rxy?hn@;&k1PH;*iRs1B!x9J$ZMZyB1YgLpMXcMO-GYeovv zHBFh0r{;Wax)aBk?{Q`4K>_AV=aL(BmYgKs?8&*<;aGMtE-b7gXWb@1xgaRg+$wBL`AX)Bp=f9pxKDoitkJ!11zLCzB zkX-QViK%Mp&>W4`i78zo4^dK#`uf*m3L#W%)+Aez8u22(gSV-oM^rJ=Rqdc_LM}>{ z^9WJbGMs@i#M)QR71jJA!%r7MYN4Sm7MzL^qY)amIChi)PlPz-;@?n+{TcVjq*e%l zfuAF~AYoP4)R~R>m}(+^7ib;ZuH@{-T!wK$iOW4ZXXLJ^yH>^bXZRjX;b93615P2? zcyol&Tr)hy(2%2y&~&WKClg&6qA7Mqld%Je&3Vpnyv?Io=YhOFgsR(hc|muU-EZUg zs`=^xH6z%-j9AuzCsCX%xr%$B6uJX;pV7sIG>G zRaZL{hsC(Ex+;{}UN{xW*J7003?*^&bEL diff --git a/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/mappings.json b/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/mappings.json index cf647f5c532122..fbcfa4cbe49b38 100644 --- a/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/mappings.json +++ b/x-pack/test/functional/es_archives/reporting/ecommerce_kibana/mappings.json @@ -9,45 +9,62 @@ "mappings": { "_meta": { "migrationMappingPropertyHashes": { - "action": "c0c235fba02ebd2a2412bcda79009b58", + "action": "6e96ac5e648f57523879661ea72525b7", "action_task_params": "a9d49f184ee89641044be0ca2950fa3a", - "alert": "d49f9b8d1277c6004506eec20dc0b108", + "agent_actions": "ed270b46812f0fa1439366c428a2cf17", + "agent_configs": "38abaf89513877745c359e7700c0c66a", + "agent_events": "3231653fafe4ef3196fe3b32ab774bf2", + "agents": "c3eeb7b9d97176f15f6d126370ab23c7", + "alert": "7b44fba6773e37c806ce290ea9b7024e", "apm-indices": "9bb9b2bf1fa636ed8619cbab5ce6a1dd", - "apm-services-telemetry": "07ee1939fa4302c62ddc052ec03fed90", + "apm-telemetry": "3525d7c22c42bc80f5e6e9cb3f2b26a2", + "application_usage_totals": "c897e4310c5f24b07caaff3db53ae2c1", + "application_usage_transactional": "965839e75f809fefe04f92dc4d99722a", "canvas-element": "7390014e1091044523666d97247392fc", "canvas-workpad": "b0a1706d356228dbdcb4a17e6b9eb231", - "config": "87aca8fdb053154f11383fce3dbf3edf", + "cases": "08b8b110dbca273d37e8aef131ecab61", + "cases-comments": "c2061fb929f585df57425102fa928b4b", + "cases-configure": "42711cbb311976c0687853f4c1354572", + "cases-user-actions": "32277330ec6b721abe3b846cfd939a71", + "config": "ae24d22d5986d04124cc6568f771066f", "dashboard": "d00f614b29a80360e1190193fd333bab", + "datasources": "d4bc0c252b2b5683ff21ea32d00acffc", + "enrollment_api_keys": "28b91e20b105b6f928e2012600085d8f", + "epm-package": "0be91c6758421dd5d0f1a58e9e5bc7c3", "file-upload-telemetry": "0ed4d3e1983d1217a30982630897092e", "graph-workspace": "cd7ba1330e6682e9cc00b78850874be1", "index-pattern": "66eccb05066c5a89924f48a9e9736499", "infrastructure-ui-source": "ddc0ecb18383f6b26101a2fadb2dab0c", - "inventory-view": "84b320fd67209906333ffce261128462", + "inventory-view": "9ecce5b58867403613d82fe496470b34", "kql-telemetry": "d12a98a6f19a2d273696597547e064ee", "lens": "21c3ea0763beb1ecb0162529706b88c5", "lens-ui-telemetry": "509bfa5978586998e05f9e303c07a327", "map": "23d7aa4a720d4938ccde3983f87bd58d", - "maps-telemetry": "a4229f8b16a6820c6d724b7e0c1f729d", + "maps-telemetry": "268da3a48066123fc5baf35abaa55014", "metrics-explorer-view": "53c5365793677328df0ccb6138bf3cdd", "migrationVersion": "4a1746014a75ade3a714e1db5763276f", "ml-telemetry": "257fd1d4b4fdbb9cb4b8a3b27da201e9", "namespace": "2f4316de49999235636386fe51dc06c1", + "outputs": "aee9782e0d500b867859650a36280165", "query": "11aaeb7f5f7fa5bb43f25e18ce26e7d9", "references": "7997cf5a56cc02bdc9c93361bde732b0", "sample-data-telemetry": "7d3cfeb915303c9641c59681967ffeb4", "search": "181661168bbadd1eff5902361e2a0d5c", "server": "ec97f1c5da1a19609a60874e5af1100c", - "siem-ui-timeline": "6485ab095be8d15246667b98a1a34295", + "siem-detection-engine-rule-actions": "90eee2e4635260f4be0a1da8f5bc0aa0", + "siem-detection-engine-rule-status": "ae783f41c6937db6b7a2ef5c93a9e9b0", + "siem-ui-timeline": "ac8020190f5950dd3250b6499144e7fb", "siem-ui-timeline-note": "8874706eedc49059d4cf0f5094559084", "siem-ui-timeline-pinned-event": "20638091112f0e14f0e443d512301c29", - "space": "c5ca8acafa0beaa4d08d014a97b6bc6b", - "telemetry": "358ffaa88ba34a97d55af0933a117de4", + "telemetry": "36a616f7026dfa617d6655df850fe16d", "timelion-sheet": "9a2a2748877c7a7b582fef201ab1d4cf", + "tsvb-validation-telemetry": "3a37ef6c8700ae6fc97d5c7da00e9215", "type": "2f4316de49999235636386fe51dc06c1", "ui-metric": "0d409297dc5ebe1e3a1da691c6ee32e3", "updated_at": "00da57df13e94e9d98437d13ace4bfe0", "upgrade-assistant-reindex-operation": "a53a20fe086b72c9a86da3cc12dad8a6", "upgrade-assistant-telemetry": "56702cec857e0a9dacfb696655b4ff7b", + "uptime-dynamic-settings": "b6289473c8985c79b6c47eebc19a0ca5", "url": "c7f66a0df8b1b52f17c28c4adb111105", "visualization": "52d7a13ad68a150c4525b292d23e12cc" } @@ -64,6 +81,11 @@ "type": "object" }, "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, "type": "text" }, "secrets": { @@ -85,6 +107,145 @@ } } }, + "agent_actions": { + "properties": { + "agent_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "data": { + "type": "flattened" + }, + "sent_at": { + "type": "date" + }, + "type": { + "type": "keyword" + } + } + }, + "agent_configs": { + "properties": { + "datasources": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "is_default": { + "type": "boolean" + }, + "name": { + "type": "text" + }, + "namespace": { + "type": "keyword" + }, + "revision": { + "type": "integer" + }, + "status": { + "type": "keyword" + }, + "updated_by": { + "type": "keyword" + }, + "updated_on": { + "type": "keyword" + } + } + }, + "agent_events": { + "properties": { + "action_id": { + "type": "keyword" + }, + "agent_id": { + "type": "keyword" + }, + "config_id": { + "type": "keyword" + }, + "data": { + "type": "text" + }, + "message": { + "type": "text" + }, + "payload": { + "type": "text" + }, + "stream_id": { + "type": "keyword" + }, + "subtype": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + } + } + }, + "agents": { + "properties": { + "access_api_key_id": { + "type": "keyword" + }, + "active": { + "type": "boolean" + }, + "config_id": { + "type": "keyword" + }, + "config_newest_revision": { + "type": "integer" + }, + "config_revision": { + "type": "integer" + }, + "current_error_events": { + "type": "text" + }, + "default_api_key": { + "type": "keyword" + }, + "enrolled_at": { + "type": "date" + }, + "last_checkin": { + "type": "date" + }, + "last_updated": { + "type": "date" + }, + "local_metadata": { + "type": "text" + }, + "shared_id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "user_provided_metadata": { + "type": "text" + }, + "version": { + "type": "keyword" + } + } + }, "alert": { "properties": { "actions": { @@ -114,15 +275,18 @@ "apiKeyOwner": { "type": "keyword" }, + "consumer": { + "type": "keyword" + }, + "createdAt": { + "type": "date" + }, "createdBy": { "type": "keyword" }, "enabled": { "type": "boolean" }, - "interval": { - "type": "keyword" - }, "muteAll": { "type": "boolean" }, @@ -130,12 +294,24 @@ "type": "keyword" }, "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, "type": "text" }, "params": { "enabled": false, "type": "object" }, + "schedule": { + "properties": { + "interval": { + "type": "keyword" + } + } + }, "scheduledTaskId": { "type": "keyword" }, @@ -221,52 +397,947 @@ }, "apm-telemetry": { "properties": { - "has_any_services": { - "type": "boolean" - }, - "services_per_agent": { + "agents": { "properties": { "dotnet": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "go": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "java": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "js-base": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "nodejs": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "python": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "ruby": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } }, "rum-js": { - "null_value": 0, - "type": "long" + "properties": { + "agent": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "service": { + "properties": { + "framework": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "language": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "composite": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } } } - } - } - }, - "canvas-element": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" + }, + "cardinality": { + "properties": { + "transaction": { + "properties": { + "name": { + "properties": { + "all_agents": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "rum": { + "properties": { + "1d": { + "type": "long" + } + } + } + } + } + } + }, + "user_agent": { + "properties": { + "original": { + "properties": { + "all_agents": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "rum": { + "properties": { + "1d": { + "type": "long" + } + } + } + } + } + } + } + } + }, + "counts": { + "properties": { + "agent_configuration": { + "properties": { + "all": { + "type": "long" + } + } + }, + "error": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + }, + "max_error_groups_per_service": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "max_transaction_groups_per_service": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "metric": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + }, + "onboarding": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + }, + "services": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "sourcemap": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + }, + "span": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + }, + "traces": { + "properties": { + "1d": { + "type": "long" + } + } + }, + "transaction": { + "properties": { + "1d": { + "type": "long" + }, + "all": { + "type": "long" + } + } + } + } + }, + "has_any_services": { + "type": "boolean" + }, + "indices": { + "properties": { + "all": { + "properties": { + "total": { + "properties": { + "docs": { + "properties": { + "count": { + "type": "long" + } + } + }, + "store": { + "properties": { + "size_in_bytes": { + "type": "long" + } + } + } + } + } + } + }, + "shards": { + "properties": { + "total": { + "type": "long" + } + } + } + } + }, + "integrations": { + "properties": { + "ml": { + "properties": { + "all_jobs_count": { + "type": "long" + } + } + } + } + }, + "retainment": { + "properties": { + "error": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "metric": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "onboarding": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "span": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "transaction": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "services_per_agent": { + "properties": { + "dotnet": { + "null_value": 0, + "type": "long" + }, + "go": { + "null_value": 0, + "type": "long" + }, + "java": { + "null_value": 0, + "type": "long" + }, + "js-base": { + "null_value": 0, + "type": "long" + }, + "nodejs": { + "null_value": 0, + "type": "long" + }, + "python": { + "null_value": 0, + "type": "long" + }, + "ruby": { + "null_value": 0, + "type": "long" + }, + "rum-js": { + "null_value": 0, + "type": "long" + } + } + }, + "tasks": { + "properties": { + "agent_configuration": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "agents": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "cardinality": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "groupings": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "indices_stats": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "integrations": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "processor_events": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "services": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + }, + "versions": { + "properties": { + "took": { + "properties": { + "ms": { + "type": "long" + } + } + } + } + } + } + }, + "version": { + "properties": { + "apm_server": { + "properties": { + "major": { + "type": "long" + }, + "minor": { + "type": "long" + }, + "patch": { + "type": "long" + } + } + } + } + } + } + }, + "application_usage_totals": { + "properties": { + "appId": { + "type": "keyword" + }, + "minutesOnScreen": { + "type": "float" + }, + "numberOfClicks": { + "type": "long" + } + } + }, + "application_usage_transactional": { + "properties": { + "appId": { + "type": "keyword" + }, + "minutesOnScreen": { + "type": "float" + }, + "numberOfClicks": { + "type": "long" + }, + "timestamp": { + "type": "date" + } + } + }, + "canvas-element": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" }, "@timestamp": { "type": "date" @@ -285,26 +1356,257 @@ "keyword": { "type": "keyword" } - }, - "type": "text" + }, + "type": "text" + } + } + }, + "canvas-workpad": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" + }, + "@timestamp": { + "type": "date" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "cases": { + "properties": { + "closed_at": { + "type": "date" + }, + "closed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "description": { + "type": "text" + }, + "external_service": { + "properties": { + "connector_id": { + "type": "keyword" + }, + "connector_name": { + "type": "keyword" + }, + "external_id": { + "type": "keyword" + }, + "external_title": { + "type": "text" + }, + "external_url": { + "type": "text" + }, + "pushed_at": { + "type": "date" + }, + "pushed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "status": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "cases-comments": { + "properties": { + "comment": { + "type": "text" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "pushed_at": { + "type": "date" + }, + "pushed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "cases-configure": { + "properties": { + "closure_type": { + "type": "keyword" + }, + "connector_id": { + "type": "keyword" + }, + "connector_name": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } } } }, - "canvas-workpad": { - "dynamic": "false", + "cases-user-actions": { "properties": { - "@created": { - "type": "date" + "action": { + "type": "keyword" }, - "@timestamp": { + "action_at": { "type": "date" }, - "name": { - "fields": { - "keyword": { + "action_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { "type": "keyword" } - }, + } + }, + "action_field": { + "type": "keyword" + }, + "new_value": { + "type": "text" + }, + "old_value": { "type": "text" } } @@ -389,6 +1691,136 @@ } } }, + "datasources": { + "properties": { + "config_id": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "enabled": { + "type": "boolean" + }, + "inputs": { + "properties": { + "config": { + "type": "flattened" + }, + "enabled": { + "type": "boolean" + }, + "processors": { + "type": "keyword" + }, + "streams": { + "properties": { + "config": { + "type": "flattened" + }, + "dataset": { + "type": "keyword" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "processors": { + "type": "keyword" + } + }, + "type": "nested" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "name": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "output_id": { + "type": "keyword" + }, + "package": { + "properties": { + "name": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "revision": { + "type": "integer" + } + } + }, + "enrollment_api_keys": { + "properties": { + "active": { + "type": "boolean" + }, + "api_key": { + "type": "binary" + }, + "api_key_id": { + "type": "keyword" + }, + "config_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "expire_at": { + "type": "date" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + } + } + }, + "epm-package": { + "properties": { + "installed": { + "properties": { + "id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "internal": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, "file-upload-telemetry": { "properties": { "filesUploadedTotalCount": { @@ -538,6 +1970,26 @@ } } }, + "customMetrics": { + "properties": { + "aggregation": { + "type": "keyword" + }, + "field": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "label": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, "customOptions": { "properties": { "field": { @@ -572,6 +2024,18 @@ }, "metric": { "properties": { + "aggregation": { + "type": "keyword" + }, + "field": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "label": { + "type": "keyword" + }, "type": { "type": "keyword" } @@ -699,9 +2163,19 @@ } } }, + "indexPatternsWithGeoFieldCount": { + "type": "long" + }, "mapsTotalCount": { "type": "long" }, + "settings": { + "properties": { + "showMapVisualizationTypes": { + "type": "boolean" + } + } + }, "timeCaptured": { "type": "date" } @@ -803,7 +2277,7 @@ }, "type": "text" }, - "space": { + "visualization": { "fields": { "keyword": { "ignore_above": 256, @@ -828,6 +2302,37 @@ "namespace": { "type": "keyword" }, + "outputs": { + "properties": { + "api_key": { + "type": "keyword" + }, + "ca_sha256": { + "type": "keyword" + }, + "config": { + "type": "flattened" + }, + "fleet_enroll_password": { + "type": "binary" + }, + "fleet_enroll_username": { + "type": "binary" + }, + "hosts": { + "type": "keyword" + }, + "is_default": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, "query": { "properties": { "description": { @@ -917,6 +2422,73 @@ } } }, + "siem-detection-engine-rule-actions": { + "properties": { + "actions": { + "properties": { + "action_type_id": { + "type": "keyword" + }, + "group": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "params": { + "dynamic": "true", + "type": "object" + } + } + }, + "alertThrottle": { + "type": "keyword" + }, + "ruleAlertId": { + "type": "keyword" + }, + "ruleThrottle": { + "type": "keyword" + } + } + }, + "siem-detection-engine-rule-status": { + "properties": { + "alertId": { + "type": "keyword" + }, + "bulkCreateTimeDurations": { + "type": "float" + }, + "gap": { + "type": "text" + }, + "lastFailureAt": { + "type": "date" + }, + "lastFailureMessage": { + "type": "text" + }, + "lastLookBackDate": { + "type": "date" + }, + "lastSuccessAt": { + "type": "date" + }, + "lastSuccessMessage": { + "type": "text" + }, + "searchAfterTimeDurations": { + "type": "float" + }, + "status": { + "type": "keyword" + }, + "statusDate": { + "type": "date" + } + } + }, "siem-ui-timeline": { "properties": { "columns": { @@ -1051,6 +2623,9 @@ "description": { "type": "text" }, + "eventType": { + "type": "keyword" + }, "favorite": { "properties": { "favoriteDate": { @@ -1255,6 +2830,9 @@ }, "telemetry": { "properties": { + "allowChangingOptInStatus": { + "type": "boolean" + }, "enabled": { "type": "boolean" }, @@ -1262,11 +2840,15 @@ "type": "date" }, "lastVersionChecked": { - "ignore_above": 256, + "type": "keyword" + }, + "reportFailureCount": { + "type": "integer" + }, + "reportFailureVersion": { "type": "keyword" }, "sendUsageFrom": { - "ignore_above": 256, "type": "keyword" }, "userHasSeenNotice": { @@ -1315,6 +2897,13 @@ } } }, + "tsvb-validation-telemetry": { + "properties": { + "failedRequests": { + "type": "long" + } + } + }, "type": { "type": "keyword" }, @@ -1391,6 +2980,13 @@ } } }, + "uptime-dynamic-settings": { + "properties": { + "heartbeatIndices": { + "type": "keyword" + } + } + }, "url": { "properties": { "accessCount": { diff --git a/x-pack/test/functional/es_archives/reporting/historic/data.json.gz b/x-pack/test/functional/es_archives/reporting/historic/data.json.gz deleted file mode 100644 index ecb85ec6faca43ba103d37e3173f383a6fa73b37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2269 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 diff --git a/x-pack/test/functional/es_archives/reporting/historic/mappings.json b/x-pack/test/functional/es_archives/reporting/historic/mappings.json deleted file mode 100644 index 3a5af0158ce001..00000000000000 --- a/x-pack/test/functional/es_archives/reporting/historic/mappings.json +++ /dev/null @@ -1,386 +0,0 @@ -{ - "type": "index", - "value": { - "index": ".kibana", - "mappings": { - "properties": { - "config": { - "dynamic": "true", - "properties": { - "buildNum": { - "type": "keyword" - }, - "defaultIndex": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "xPackMonitoring:showBanner": { - "type": "boolean" - } - } - }, - "dashboard": { - "dynamic": "strict", - "properties": { - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "optionsJSON": { - "type": "text" - }, - "panelsJSON": { - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "type": "keyword" - }, - "pause": { - "type": "boolean" - }, - "section": { - "type": "integer" - }, - "value": { - "type": "integer" - } - } - }, - "timeFrom": { - "type": "keyword" - }, - "timeRestore": { - "type": "boolean" - }, - "timeTo": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "graph-workspace": { - "dynamic": "strict", - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "numLinks": { - "type": "integer" - }, - "numVertices": { - "type": "integer" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "wsState": { - "type": "text" - } - } - }, - "index-pattern": { - "dynamic": "strict", - "properties": { - "fieldFormatMap": { - "type": "text" - }, - "fields": { - "type": "text" - }, - "intervalName": { - "type": "keyword" - }, - "notExpandable": { - "type": "boolean" - }, - "sourceFilters": { - "type": "text" - }, - "timeFieldName": { - "type": "keyword" - }, - "title": { - "type": "text" - } - } - }, - "search": { - "dynamic": "strict", - "properties": { - "columns": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "sort": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "server": { - "dynamic": "strict", - "properties": { - "uuid": { - "type": "keyword" - } - } - }, - "space": { - "properties": { - "_reserved": { - "type": "boolean" - }, - "color": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "initials": { - "type": "keyword" - }, - "name": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "spaceId": { - "type": "keyword" - }, - "timelion-sheet": { - "dynamic": "strict", - "properties": { - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "timelion_chart_height": { - "type": "integer" - }, - "timelion_columns": { - "type": "integer" - }, - "timelion_interval": { - "type": "keyword" - }, - "timelion_other_interval": { - "type": "keyword" - }, - "timelion_rows": { - "type": "integer" - }, - "timelion_sheet": { - "type": "text" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "url": { - "dynamic": "strict", - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "url": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "visualization": { - "dynamic": "strict", - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "savedSearchId": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "type": "text" - } - } - } - } - }, - "settings": { - "index": { - "number_of_replicas": "1", - "number_of_shards": "1" - } - } - } -} - -{ - "type": "index", - "value": { - "index": ".reporting-2018.03.11", - "mappings": { - "properties": { - "attempts": { - "type": "short" - }, - "completed_at": { - "type": "date" - }, - "created_at": { - "type": "date" - }, - "created_by": { - "type": "keyword" - }, - "jobtype": { - "type": "keyword" - }, - "max_attempts": { - "type": "short" - }, - "output": { - "properties": { - "content": { - "enabled": false, - "type": "object" - }, - "content_type": { - "type": "keyword" - }, - "max_size_reached": { - "type": "boolean" - } - } - }, - "payload": { - "enabled": false, - "type": "object" - }, - "priority": { - "type": "byte" - }, - "process_expiration": { - "type": "date" - }, - "started_at": { - "type": "date" - }, - "status": { - "type": "keyword" - }, - "timeout": { - "type": "long" - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "number_of_replicas": "0", - "number_of_shards": "1" - } - } - } -} \ No newline at end of file diff --git a/x-pack/test/functional/page_objects/reporting_page.js b/x-pack/test/functional/page_objects/reporting_page.js index 7cdd1c083239bd..cdfafeec1bf468 100644 --- a/x-pack/test/functional/page_objects/reporting_page.js +++ b/x-pack/test/functional/page_objects/reporting_page.js @@ -19,24 +19,10 @@ export function ReportingPageProvider({ getService, getPageObjects }) { const log = getService('log'); const config = getService('config'); const testSubjects = getService('testSubjects'); - const esArchiver = getService('esArchiver'); const browser = getService('browser'); - const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'security', 'settings', 'share', 'timePicker']); + const PageObjects = getPageObjects(['common', 'security', 'share', 'timePicker']); class ReportingPage { - async initTests() { - log.debug('ReportingPage:initTests'); - await PageObjects.settings.navigateTo(); - await esArchiver.loadIfNeeded('../../functional/es_archives/logstash_functional'); - await esArchiver.load('reporting/historic'); - await kibanaServer.uiSettings.replace({ - defaultIndex: 'logstash-*', - }); - - await browser.setWindowSize(1600, 850); - } - async forceSharedItemsContainerSize({ width }) { await browser.execute(` var el = document.querySelector('[data-shared-items-container]'); @@ -130,6 +116,20 @@ export function ReportingPageProvider({ getService, getPageObjects }) { return await retry.try(async () => await testSubjects.find('generateReportButton')); } + async isGenerateReportButtonDisabled() { + const generateReportButton = await this.getGenerateReportButton(); + return await retry.try(async () => { + const isDisabled = await generateReportButton.getAttribute('disabled'); + return isDisabled; + }); + } + + async canReportBeCreated() { + await this.clickGenerateReportButton(); + const success = await this.checkForReportingToasts(); + return success; + } + async checkUsePrintLayout() { // The print layout checkbox slides in as part of an animation, and tests can // attempt to click it too quickly, leading to flaky tests. The 500ms wait allows diff --git a/x-pack/test/reporting/.gitignore b/x-pack/test/reporting/.gitignore new file mode 100644 index 00000000000000..99ee4c44686a0c --- /dev/null +++ b/x-pack/test/reporting/.gitignore @@ -0,0 +1 @@ +functional/reports/session/ diff --git a/x-pack/test/reporting/configs/chromium_functional.js b/x-pack/test/reporting/configs/chromium_functional.js index 05c3b6c142946d..753d2b2a20ab95 100644 --- a/x-pack/test/reporting/configs/chromium_functional.js +++ b/x-pack/test/reporting/configs/chromium_functional.js @@ -5,6 +5,7 @@ */ export default async function({ readConfigFile }) { + // TODO move reporting tests to x-pack/test/functional/apps//reporting const functionalConfig = await readConfigFile(require.resolve('../../functional/config.js')); return { diff --git a/x-pack/test/reporting/functional/reporting.js b/x-pack/test/reporting/functional/reporting.js index 012f0922c28cfc..6107363986a409 100644 --- a/x-pack/test/reporting/functional/reporting.js +++ b/x-pack/test/reporting/functional/reporting.js @@ -15,8 +15,14 @@ const mkdirAsync = promisify(fs.mkdir); const REPORTS_FOLDER = path.resolve(__dirname, 'reports'); +/* + * TODO Remove this file and spread the tests to various apps + */ + export default function({ getService, getPageObjects }) { - const retry = getService('retry'); + const esArchiver = getService('esArchiver'); + const browser = getService('browser'); + const log = getService('log'); const config = getService('config'); const PageObjects = getPageObjects([ 'reporting', @@ -27,65 +33,32 @@ export default function({ getService, getPageObjects }) { 'visualize', 'visEditor', ]); - const log = getService('log'); describe('Reporting', () => { - before('initialize tests', async () => { - await PageObjects.reporting.initTests(); - }); - - const expectDisabledGenerateReportButton = async () => { - const generateReportButton = await PageObjects.reporting.getGenerateReportButton(); - await retry.try(async () => { - const isDisabled = await generateReportButton.getAttribute('disabled'); - expect(isDisabled).to.be('true'); + describe('Dashboard', () => { + before('initialize tests', async () => { + log.debug('ReportingPage:initTests'); + await esArchiver.loadIfNeeded('reporting/ecommerce'); + await esArchiver.loadIfNeeded('reporting/ecommerce_kibana'); + await browser.setWindowSize(1600, 850); }); - }; - - const expectEnabledGenerateReportButton = async () => { - const generateReportButton = await PageObjects.reporting.getGenerateReportButton(); - await retry.try(async () => { - const isDisabled = await generateReportButton.getAttribute('disabled'); - expect(isDisabled).to.be(null); + after('clean up archives', async () => { + await esArchiver.unload('reporting/ecommerce'); + await esArchiver.unload('reporting/ecommerce_kibana'); }); - }; - - const expectReportCanBeCreated = async () => { - await PageObjects.reporting.clickGenerateReportButton(); - const success = await PageObjects.reporting.checkForReportingToasts(); - expect(success).to.be(true); - }; - - const writeSessionReport = async (name, rawPdf, reportExt = 'pdf') => { - const sessionDirectory = path.resolve(REPORTS_FOLDER, 'session'); - await mkdirAsync(sessionDirectory, { recursive: true }); - const sessionReportPath = path.resolve(sessionDirectory, `${name}.${reportExt}`); - await writeFileAsync(sessionReportPath, rawPdf); - return sessionReportPath; - }; - - const getBaselineReportPath = (fileName, reportExt = 'pdf') => { - const baselineFolder = path.resolve(REPORTS_FOLDER, 'baseline'); - const fullPath = path.resolve(baselineFolder, `${fileName}.${reportExt}`); - log.debug(`getBaselineReportPath (${fullPath})`); - return fullPath; - }; - - describe('Dashboard', () => { - beforeEach(() => PageObjects.reporting.clearToastNotifications()); describe('Print PDF button', () => { it('is not available if new', async () => { await PageObjects.common.navigateToApp('dashboard'); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.reporting.openPdfReportingPanel(); - await expectDisabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); }); it('becomes available when saved', async () => { await PageObjects.dashboard.saveDashboard('My PDF Dashboard'); await PageObjects.reporting.openPdfReportingPanel(); - await expectEnabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); }); @@ -95,15 +68,7 @@ export default function({ getService, getPageObjects }) { // function is taking about 15 seconds per comparison in jenkins. this.timeout(300000); await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.gotoDashboardEditMode('My PDF Dashboard'); - await PageObjects.reporting.setTimepickerInDataRange(); - const visualizations = PageObjects.dashboard.getTestVisualizationNames(); - - const tileMapIndex = visualizations.indexOf('Visualization TileMap'); - visualizations.splice(tileMapIndex, 1); - - await PageObjects.dashboard.addVisualizations(visualizations); - await PageObjects.dashboard.saveDashboard('report test'); + await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.checkUsePrintLayout(); await PageObjects.reporting.clickGenerateReportButton(); @@ -121,30 +86,36 @@ export default function({ getService, getPageObjects }) { await PageObjects.common.navigateToApp('dashboard'); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.reporting.openPngReportingPanel(); - await expectDisabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); }); it('becomes available when saved', async () => { await PageObjects.dashboard.saveDashboard('My PNG Dash'); await PageObjects.reporting.openPngReportingPanel(); - await expectEnabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); }); describe('Preserve Layout', () => { it('matches baseline report', async function() { + const writeSessionReport = async (name, rawPdf, reportExt) => { + const sessionDirectory = path.resolve(REPORTS_FOLDER, 'session'); + await mkdirAsync(sessionDirectory, { recursive: true }); + const sessionReportPath = path.resolve(sessionDirectory, `${name}.${reportExt}`); + await writeFileAsync(sessionReportPath, rawPdf); + return sessionReportPath; + }; + const getBaselineReportPath = (fileName, reportExt) => { + const baselineFolder = path.resolve(REPORTS_FOLDER, 'baseline'); + const fullPath = path.resolve(baselineFolder, `${fileName}.${reportExt}`); + log.debug(`getBaselineReportPath (${fullPath})`); + return fullPath; + }; + this.timeout(300000); await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.gotoDashboardEditMode('My PNG Dash'); - await PageObjects.reporting.setTimepickerInDataRange(); - - const visualizations = PageObjects.dashboard.getTestVisualizationNames(); - const tileMapIndex = visualizations.indexOf('Visualization TileMap'); - visualizations.splice(tileMapIndex, 1); - - await PageObjects.dashboard.addVisualizations(visualizations); - await PageObjects.dashboard.saveDashboard('PNG report test'); + await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); await PageObjects.reporting.openPngReportingPanel(); await PageObjects.reporting.forceSharedItemsContainerSize({ width: 1405 }); await PageObjects.reporting.clickGenerateReportButton(); @@ -167,44 +138,64 @@ export default function({ getService, getPageObjects }) { }); describe('Discover', () => { + before('initialize tests', async () => { + log.debug('ReportingPage:initTests'); + await esArchiver.loadIfNeeded('reporting/ecommerce'); + await browser.setWindowSize(1600, 850); + }); + after('clean up archives', async () => { + await esArchiver.unload('reporting/ecommerce'); + }); + describe('Generate CSV button', () => { beforeEach(() => PageObjects.common.navigateToApp('discover')); it('is not available if new', async () => { await PageObjects.reporting.openCsvReportingPanel(); - await expectDisabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); }); it('becomes available when saved', async () => { await PageObjects.discover.saveSearch('my search - expectEnabledGenerateReportButton'); await PageObjects.reporting.openCsvReportingPanel(); - await expectEnabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); it('generates a report with data', async () => { await PageObjects.reporting.setTimepickerInDataRange(); await PageObjects.discover.saveSearch('my search - with data - expectReportCanBeCreated'); await PageObjects.reporting.openCsvReportingPanel(); - await expectReportCanBeCreated(); + expect(await PageObjects.reporting.canReportBeCreated()).to.be(true); }); it('generates a report with no data', async () => { await PageObjects.reporting.setTimepickerInNoDataRange(); await PageObjects.discover.saveSearch('my search - no data - expectReportCanBeCreated'); await PageObjects.reporting.openCsvReportingPanel(); - await expectReportCanBeCreated(); + expect(await PageObjects.reporting.canReportBeCreated()).to.be(true); }); }); }); describe('Visualize', () => { + before('initialize tests', async () => { + log.debug('ReportingPage:initTests'); + await esArchiver.loadIfNeeded('reporting/ecommerce'); + await esArchiver.loadIfNeeded('reporting/ecommerce_kibana'); + await browser.setWindowSize(1600, 850); + }); + after('clean up archives', async () => { + await esArchiver.unload('reporting/ecommerce'); + await esArchiver.unload('reporting/ecommerce_kibana'); + }); + describe('Print PDF button', () => { it('is not available if new', async () => { await PageObjects.common.navigateToUrl('visualize', 'new'); await PageObjects.visualize.clickAreaChart(); - await PageObjects.visualize.clickNewSearch(); + await PageObjects.visualize.clickNewSearch('ecommerce'); await PageObjects.reporting.openPdfReportingPanel(); - await expectDisabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); }); it('becomes available when saved', async () => { @@ -214,14 +205,16 @@ export default function({ getService, getPageObjects }) { await PageObjects.visEditor.clickGo(); await PageObjects.visualize.saveVisualization('my viz'); await PageObjects.reporting.openPdfReportingPanel(); - await expectEnabledGenerateReportButton(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); - it('matches baseline report', async function() { + it('downloaded PDF has OK status', async function() { // Generating and then comparing reports can take longer than the default 60s timeout because the comparePngs // function is taking about 15 seconds per comparison in jenkins. this.timeout(180000); + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); diff --git a/x-pack/test/reporting/functional/reports/baseline/dashboard_preserve_layout.pdf b/x-pack/test/reporting/functional/reports/baseline/dashboard_preserve_layout.pdf deleted file mode 100644 index b7370109c687c8488b8e4964f3d7f1f5e8f3fec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301135 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%0D5&n!cH9#og^ob-Y5)k9a(rN;xz|c1H5&;RQCV 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

KM{mT+s1LSB1GI3zkh{o+$uq@ysZ5eKYRc} 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®9`o0N!(ZQO5jo{bv(yyUU2>cy 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 diff --git a/x-pack/test/reporting/functional/reports/baseline/dashboard_preserve_layout.png b/x-pack/test/reporting/functional/reports/baseline/dashboard_preserve_layout.png index a0dfea9ef4fa799e8dbd6e512fe74031f5e6f79f..1eb5f29d212c230c984be34e4aec189dbd2aa751 100644 GIT binary patch literal 631719 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 H4o>~~{=zoe1dOR-CgddY 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�ck23=W9#bmJtC}m({+zQt~uGdUY9S2f&ebBqL!%F_3 zzVKDv(e?b8)u74y4aC1Der2(gyg^B6)*ns2Ju5p0J%j6&7;3N(T7kxAv#qQgx7o?E zL~1eaGqhRo=2OUe~&8qlk!#s(g4T=0MsG~!@`AF~S%f z9ncYidCv9Lb|!}NVxy>I-!{|X_uEJQ(}=f0mly=ZN3|2{J_liGGs{OQo^+3fb8 zWrxURxgK6S)&?IMzo1UM~cx)C_Ehl(Yc&T z_|@53qCJ${>DAR=D;$eH%x@Ry5pT~R48u?GbMoR`=AA5ZUfsL4sRexU62TYy9o71^ zS6AUuvoi*EuX!JJ~GBsEsOPXCDk>h@OjwWb*dK)qKM~Cb-gP8Ee*0jd~ z4G${xeQ%&aQl`}WVB~im-T0360@fSo!)_uzsWjpw3tE0G>njkTEc0$DLHK4+2z(2* zj0sgEc{=LRuKr0y0$dtMqM`*--%t>|yk&_rr2sIa%3zU7 z!car);`C3IVWgVc-wF=My1&bG(*G@qf7SwHb+iNf;`GorE{+(UKIfG9jK_5aiq}l! z!(s!Gbl2L$soAim@}YM$U5mwB9e&Q^`!>c1b`C|Ao?5;^16F}n32M@tYl5#HuO3Z( zy}ISJ{_C!r&c~NcfZO~F?a-bf{;N}AA(1gNJ(&Mg_t)nPp6r(F(vG0_?*r2GC$NJd ztp}~d;GgROZzIHdy!_>Ku}Y>t8Q&+G_|Mwd2<--E!ejxPSTp@%E|GK238xK|IuR_y z&U&r}%S#DWd6f9}jMR{bc`ynQ&0vbPvcN2v+oNY?0$$(QSg%2MZ>0_^T+)S}o<5`&Aug2BO zkK%)?sswV6!{2EQptxQxFoxeqdkb03I|m%0q}+zat30+MZpo3?Ibwv3y0V193ixA^ zB4=17#q-gcClaT;&U#Om|EAcTpPmWMAA+}0)Sa&}sxu)$YO)!%4P5X}^~9GDzjFEW z3wOCYKE6J5ws1!DD;>iUF7j0S&26yoV?O%@{4xMBg{I8CQ@k>SW$5Wu|5F`@zpT=} z|52uj(a;jPq|VPZr5@y7HkXIJoR9SRTx5O>fEGt2jbcKt%$8n%t=&9d@dY6cEnNxZ ztz@pSF*#6$7D;{8eE3xp1KWc>wZi9oiM8B;N?Kk{>wP0wjFQCn2}tLK+a#{0Jc7^< zSt6sWzehHu6*Vmg(Gok=g51JK-Fz#3^T+R>BGJ2t&6u&@-<*1*kb7uDN=|CObQu*EzN1#Sd&mg#|k8eKste za)w?5E_kBB+pfQgHAFScqy34_e(x<8B7vuWq_aGdKk&L-$hmcn;+yYH*!Z=uj9%Q6 z$ooP1)pSB7Ar<)v3UIhc9COQD<2Q zkd{IKt|s&dhteo^Tt-=coBZcjmu+6lJx60Z3^}S?tZZ{xrJEzJ*kHV;MT#o#aJ$rw@@E~}}gpEepdwysfc!#r= z=a7-Wp^DSs?noSMo=~Fw4z575gPB~&VsPSkR*sdKdGz*7B*azjl={@0My+brWh*c^ zJY%+ItMrq!Az~-xK6qkXa84cW*gdI`kIWlLB@NHW&=pkXW6jeY#T9zJhXbIgjI=aE z_4X7tBq|)ZXJkt-2Ylp12-&U56%cq0N63D2=IvREfTdZr zv?1$c!hxe_Va!X<7s1scjAePT2W3Mczgkx~cn@C`CCWhcdj6dATV{)_%uxn}4Q$VZ zwfUd$1LpCLD{bQYNI!{}hYP9A^I~_+lp>u9qnRnou`>R7Ay|v#MK(peuB+OEd@1&B zM5l)|fo=}DNy{e8tU1d<9tx*Kv;1C7cTC#_hM_h~**S{1x%SMAAc}Ehe)igyOHY*E zlo%_ZI9#bMb`DP8fq56E)?O*Owm8w=P64qJt-*2Ynd)r2mtNPwO88snAfW)$S)!mR z*GxU8Y=*QKw*$XZZ$~0guq*IbW#z)rd@*BkzxR*eR#`FAh{vBE%WbZcp9(95ZOTkU zYnslfja7TyTS4a_oIU~=_sh{S8q~7ieskM9!tO@=$n;{bFp%z}LSH;Jo#e8ftfm|= ztiO(cfOT&z%j%ZgnwXqPNbn}>!@10>HO5yIvqK)DLDEO1!XTP0+ z=(e^t-A#~u%_3|Q2(&o1*~&yIHq196T>9&?0K@nS&D3`OT) z-jxbugm?Ec{+b0EYT1<$?I8_LYj~PRz}bLdEyq+7{0(Fipioj;L7}e-hC0Imq^qkE zToD9}C)JkIs9qi(NoCT3Q9apni|Y|il+_GPWl^5C9a%X(Gc#WAFfMALRl8rKIB

aqj( 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

MO@DJ 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%0DJe6e~ri(hHiORo+8e$t9mMhHpbGKH| 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 literal 349976 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 }xd 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ä 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 SHZ&=l;(XBk0PXuTSN;tnrO4(0 diff --git a/x-pack/test/reporting/functional/reports/baseline/dashboard_print.pdf b/x-pack/test/reporting/functional/reports/baseline/dashboard_print.pdf deleted file mode 100644 index bf2bca54ca2d77f545192b3f89dfe7063863ea36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359189 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�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 yIr>5Q`6UWKPbdU&>3im-OB0#He6zY-DEW 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ⅆF(fW>_>;(9~Q-{Sw`?C-s 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 From f9e8c1bfff15365c8e89c6843322b246db473e22 Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Tue, 14 Apr 2020 14:11:50 -0600 Subject: [PATCH 56/65] [SIEM] [Cases] Removed double pasted line (#63507) --- x-pack/legacy/plugins/siem/public/pages/case/case.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/x-pack/legacy/plugins/siem/public/pages/case/case.tsx b/x-pack/legacy/plugins/siem/public/pages/case/case.tsx index aefb0a93366b8f..2b613f6692df12 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/case.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/case.tsx @@ -26,7 +26,6 @@ export const CasesPage = React.memo(() => { message={savedObjectReadOnly.description} /> )} - From 7cd746bc2f24530ba8a3375798188e017747eddc Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Tue, 14 Apr 2020 17:20:18 -0400 Subject: [PATCH 57/65] [Lens] Fix missing formatting bug in "break down by" (#63288) * [Lens] Fix missing formatting bug in "break down by" * Stop showing UUIDs, make logic more explicit Co-authored-by: Elastic Machine --- .../xy_visualization/xy_expression.test.tsx | 294 ++++++++++++++---- .../public/xy_visualization/xy_expression.tsx | 23 +- 2 files changed, 254 insertions(+), 63 deletions(-) diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx b/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx index 54abc2c2bb6673..0a6945dd0c1f0d 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx +++ b/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx @@ -633,70 +633,242 @@ describe('xy_expression', () => { expect(component.find(BarSeries).prop('enableHistogramMode')).toEqual(false); }); - test('it names the series for multiple accessors', () => { - const { data, args } = sampleArgs(); - - const component = shallow( - - ); - const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; - - expect( - nameFn( - { - seriesKeys: ['a', 'b', 'c', 'd'], - key: '', - specId: 'a', - yAccessor: '', - splitAccessors: new Map(), + describe('provides correct series naming', () => { + const dataWithoutFormats: LensMultiTable = { + type: 'lens_multitable', + tables: { + first: { + type: 'kibana_datatable', + columns: [ + { id: 'a', name: 'a' }, + { id: 'b', name: 'b' }, + { id: 'c', name: 'c' }, + { id: 'd', name: 'd' }, + ], + rows: [ + { a: 1, b: 2, c: 'I', d: 'Row 1' }, + { a: 1, b: 5, c: 'J', d: 'Row 2' }, + ], }, - false - ) - ).toEqual('Label A - Label B - c - Label D'); - }); - - test('it names the series for a single accessor', () => { - const { data, args } = sampleArgs(); - - const component = shallow( - - ); - const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; - - expect( - nameFn( - { - seriesKeys: ['a', 'b', 'c', 'd'], - key: '', - specId: 'a', - yAccessor: '', - splitAccessors: new Map(), }, - false - ) - ).toEqual('Label A'); + }, + }; + + const nameFnArgs = { + seriesKeys: [], + key: '', + specId: 'a', + yAccessor: '', + splitAccessors: new Map(), + }; + + const getRenderedComponent = (data: LensMultiTable, args: XYArgs) => { + return shallow( + + ); + }; + + test('simplest xy chart without human-readable name', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a'], + splitAccessor: undefined, + columnToLabel: '', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + // In this case, the ID is used as the name. This shouldn't happen in practice + expect(nameFn({ ...nameFnArgs, seriesKeys: ['a'] }, false)).toEqual(''); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['nonsense'] }, false)).toEqual(''); + }); + + test('simplest xy chart with empty name', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a'], + splitAccessor: undefined, + columnToLabel: '{"a":""}', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + // In this case, the ID is used as the name. This shouldn't happen in practice + expect(nameFn({ ...nameFnArgs, seriesKeys: ['a'] }, false)).toEqual(''); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['nonsense'] }, false)).toEqual(''); + }); + + test('simplest xy chart with human-readable name', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a'], + splitAccessor: undefined, + columnToLabel: '{"a":"Column A"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + expect(nameFn({ ...nameFnArgs, seriesKeys: ['a'] }, false)).toEqual('Column A'); + }); + + test('multiple y accessors', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a', 'b'], + splitAccessor: undefined, + columnToLabel: '{"a": "Label A"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + // This accessor has a human-readable name + expect(nameFn({ ...nameFnArgs, seriesKeys: ['a'] }, false)).toEqual('Label A'); + // This accessor does not + expect(nameFn({ ...nameFnArgs, seriesKeys: ['b'] }, false)).toEqual(''); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['nonsense'] }, false)).toEqual(''); + }); + + test('split series without formatting and single y accessor', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a'], + splitAccessor: 'd', + columnToLabel: '{"a": "Label A"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + expect(nameFn({ ...nameFnArgs, seriesKeys: ['split1', 'a'] }, false)).toEqual('split1'); + }); + + test('split series with formatting and single y accessor', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a'], + splitAccessor: 'd', + columnToLabel: '{"a": "Label A"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + convertSpy.mockReturnValueOnce('formatted'); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['split1', 'a'] }, false)).toEqual('formatted'); + expect(getFormatSpy).toHaveBeenCalledWith({ id: 'custom' }); + }); + + test('split series without formatting with multiple y accessors', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a', 'b'], + splitAccessor: 'd', + columnToLabel: '{"a": "Label A","b": "Label B"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithoutFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + expect(nameFn({ ...nameFnArgs, seriesKeys: ['split1', 'b'] }, false)).toEqual( + 'split1 - Label B' + ); + }); + + test('split series with formatting with multiple y accessors', () => { + const args = createArgsWithLayers(); + const newArgs = { + ...args, + layers: [ + { + ...args.layers[0], + accessors: ['a', 'b'], + splitAccessor: 'd', + columnToLabel: '{"a": "Label A","b": "Label B"}', + }, + ], + }; + + const component = getRenderedComponent(dataWithFormats, newArgs); + const nameFn = component.find(LineSeries).prop('name') as SeriesNameFn; + + convertSpy.mockReturnValueOnce('formatted1').mockReturnValueOnce('formatted2'); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['split1', 'a'] }, false)).toEqual( + 'formatted1 - Label A' + ); + expect(nameFn({ ...nameFnArgs, seriesKeys: ['split1', 'b'] }, false)).toEqual( + 'formatted2 - Label B' + ); + }); }); test('it set the scale of the x axis according to the args prop', () => { diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx b/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx index f5798688badc5f..527eedf1083c29 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx +++ b/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx @@ -361,12 +361,31 @@ export function XYChart({ enableHistogramMode: isHistogram && (seriesType.includes('stacked') || !splitAccessor), timeZone, name(d) { + const splitHint = table.columns.find(col => col.id === splitAccessor)?.formatHint; + + // For multiple y series, the name of the operation is used on each, either: + // * Key - Y name + // * Formatted value - Y name if (accessors.length > 1) { return d.seriesKeys - .map((key: string | number) => columnToLabelMap[key] || key) + .map((key: string | number, i) => { + if (i === 0 && splitHint) { + return formatFactory(splitHint).convert(key); + } + return splitAccessor && i === 0 ? key : columnToLabelMap[key] ?? ''; + }) .join(' - '); } - return columnToLabelMap[d.seriesKeys[0]] ?? d.seriesKeys[0]; + + // For formatted split series, format the key + // This handles splitting by dates, for example + if (splitHint) { + return formatFactory(splitHint).convert(d.seriesKeys[0]); + } + // This handles both split and single-y cases: + // * If split series without formatting, show the value literally + // * If single Y, the seriesKey will be the acccessor, so we show the human-readable name + return splitAccessor ? d.seriesKeys[0] : columnToLabelMap[d.seriesKeys[0]] ?? ''; }, }; From 5aa93be77d7e03802a5cfc2dcd020e57d80a27dd Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 14 Apr 2020 15:41:50 -0600 Subject: [PATCH 58/65] [Maps] fix double fetch when filter pill is added (#63024) * [Maps] fix double fetch when filter pill is added * remove isDataSyncActive * set dataMetaAtStart to null instead of deleting Co-authored-by: Elastic Machine --- .../data_request_descriptor_types.d.ts | 2 +- x-pack/plugins/maps/public/layers/util/data_request.ts | 10 +++++++--- x-pack/plugins/maps/public/reducers/map.js | 5 +++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.d.ts b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.d.ts index ceba2fe56db12c..26044d28d53a32 100644 --- a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.d.ts +++ b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.d.ts @@ -65,7 +65,7 @@ export type DataMeta = Partial & export type DataRequestDescriptor = { dataId: string; - dataMetaAtStart?: DataMeta; + dataMetaAtStart?: DataMeta | null; dataRequestToken?: symbol; data?: object; dataMeta?: DataMeta; diff --git a/x-pack/plugins/maps/public/layers/util/data_request.ts b/x-pack/plugins/maps/public/layers/util/data_request.ts index eeef5c49c6ef84..44b7b2ffb6ae71 100644 --- a/x-pack/plugins/maps/public/layers/util/data_request.ts +++ b/x-pack/plugins/maps/public/layers/util/data_request.ts @@ -26,9 +26,13 @@ export class DataRequest { } getMeta(): DataMeta { - return this.hasData() - ? _.get(this._descriptor, 'dataMeta', {}) - : _.get(this._descriptor, 'dataMetaAtStart', {}); + if (this._descriptor.dataMetaAtStart) { + return this._descriptor.dataMetaAtStart; + } else if (this._descriptor.dataMeta) { + return this._descriptor.dataMeta; + } else { + return {}; + } } hasData(): boolean { diff --git a/x-pack/plugins/maps/public/reducers/map.js b/x-pack/plugins/maps/public/reducers/map.js index 7e07569b44b830..251a2304538ed7 100644 --- a/x-pack/plugins/maps/public/reducers/map.js +++ b/x-pack/plugins/maps/public/reducers/map.js @@ -57,8 +57,13 @@ const updateLayerInList = (state, layerId, attribute, newValue) => { if (!layerId) { return state; } + const { layerList } = state; const layerIdx = getLayerIndex(layerList, layerId); + if (layerIdx === -1) { + return state; + } + const updatedLayer = { ...layerList[layerIdx], // Update layer w/ new value. If no value provided, toggle boolean value From 0abbb1d9c4b22904eed969b28778715eb3ea33fa Mon Sep 17 00:00:00 2001 From: Candace Park <56409205+parkiino@users.noreply.github.com> Date: Tue, 14 Apr 2020 18:19:31 -0400 Subject: [PATCH 59/65] adding useMemo (#63504) --- .../view/policy/policy_forms/events/linux.tsx | 26 ++++++++++--------- .../view/policy/policy_forms/events/mac.tsx | 26 ++++++++++--------- .../policy/policy_forms/events/windows.tsx | 7 ++--- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx index 9d2ce03c204626..ca2215d3d0a59c 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/linux.tsx @@ -8,18 +8,19 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiTitle, EuiText, EuiSpacer } from '@elastic/eui'; +import { ImmutableArray } from '../../../../../../../common/types'; +import { getIn, setIn } from '../../../../models/policy_details_config'; import { EventsCheckbox } from './checkbox'; import { OS, UIPolicyConfig } from '../../../../types'; import { usePolicyDetailsSelector } from '../../policy_hooks'; import { selectedLinuxEvents, totalLinuxEvents } from '../../../../store/policy_details/selectors'; import { ConfigForm } from '../config_form'; -import { getIn, setIn } from '../../../../models/policy_details_config'; export const LinuxEvents = React.memo(() => { const selected = usePolicyDetailsSelector(selectedLinuxEvents); const total = usePolicyDetailsSelector(totalLinuxEvents); - const checkboxes: Array<{ + const checkboxes: ImmutableArray<{ name: string; os: 'linux'; protectionField: keyof UIPolicyConfig['linux']['events']; @@ -50,7 +51,7 @@ export const LinuxEvents = React.memo(() => { [] ); - const renderCheckboxes = () => { + const renderCheckboxes = useMemo(() => { return ( <> @@ -76,9 +77,9 @@ export const LinuxEvents = React.memo(() => { })} ); - }; + }, [checkboxes]); - const collectionsEnabled = () => { + const collectionsEnabled = useMemo(() => { return ( { /> ); - }; + }, [selected, total]); return ( [i18n.translate('xpack.endpoint.policy.details.linux', { defaultMessage: 'Linux' })], + [] + )} + id="linuxEventsForm" + rightCorner={collectionsEnabled} + children={renderCheckboxes} /> ); }); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/mac.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/mac.tsx index 3b69c21d2b1501..5024d02603d770 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/mac.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/mac.tsx @@ -8,18 +8,19 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiTitle, EuiText, EuiSpacer } from '@elastic/eui'; +import { ImmutableArray } from '../../../../../../../common/types'; +import { getIn, setIn } from '../../../../models/policy_details_config'; import { EventsCheckbox } from './checkbox'; import { OS, UIPolicyConfig } from '../../../../types'; import { usePolicyDetailsSelector } from '../../policy_hooks'; import { selectedMacEvents, totalMacEvents } from '../../../../store/policy_details/selectors'; import { ConfigForm } from '../config_form'; -import { getIn, setIn } from '../../../../models/policy_details_config'; export const MacEvents = React.memo(() => { const selected = usePolicyDetailsSelector(selectedMacEvents); const total = usePolicyDetailsSelector(totalMacEvents); - const checkboxes: Array<{ + const checkboxes: ImmutableArray<{ name: string; os: 'mac'; protectionField: keyof UIPolicyConfig['mac']['events']; @@ -50,7 +51,7 @@ export const MacEvents = React.memo(() => { [] ); - const renderCheckboxes = () => { + const renderCheckboxes = useMemo(() => { return ( <> @@ -76,9 +77,9 @@ export const MacEvents = React.memo(() => { })} ); - }; + }, [checkboxes]); - const collectionsEnabled = () => { + const collectionsEnabled = useMemo(() => { return ( { /> ); - }; + }, [selected, total]); return ( [i18n.translate('xpack.endpoint.policy.details.mac', { defaultMessage: 'Mac' })], + [] + )} + id="macEventsForm" + rightCorner={collectionsEnabled} + children={renderCheckboxes} /> ); }); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx index da675dc1e23938..5b347ec387f48f 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_forms/events/windows.tsx @@ -8,6 +8,8 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiTitle, EuiText, EuiSpacer } from '@elastic/eui'; +import { ImmutableArray } from '../../../../../../../common/types'; +import { setIn, getIn } from '../../../../models/policy_details_config'; import { EventsCheckbox } from './checkbox'; import { OS, UIPolicyConfig } from '../../../../types'; import { usePolicyDetailsSelector } from '../../policy_hooks'; @@ -16,13 +18,12 @@ import { totalWindowsEvents, } from '../../../../store/policy_details/selectors'; import { ConfigForm } from '../config_form'; -import { setIn, getIn } from '../../../../models/policy_details_config'; export const WindowsEvents = React.memo(() => { const selected = usePolicyDetailsSelector(selectedWindowsEvents); const total = usePolicyDetailsSelector(totalWindowsEvents); - const checkboxes: Array<{ + const checkboxes: ImmutableArray<{ name: string; os: 'windows'; protectionField: keyof UIPolicyConfig['windows']['events']; @@ -132,7 +133,7 @@ export const WindowsEvents = React.memo(() => { ], [] )} - id="windowsEventingForm" + id="windowsEventsForm" rightCorner={collectionsEnabled} children={renderCheckboxes} /> From 7677764c6597d0920b7d14a2d0e5773f9c32d2b7 Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Tue, 14 Apr 2020 18:20:50 -0400 Subject: [PATCH 60/65] [Alerting] fixes to allow pre-configured actions to be executed (#63432) resolves https://github.com/elastic/kibana/issues/63162 Most of the support for pre-configured actions has already been added to Kibana, except for one small piece. The ability for them to be executed. This PR adds that support. --- .../server/create_execute_function.test.ts | 67 +++++++++++++ .../actions/server/create_execute_function.ts | 25 ++++- .../server/lib/action_executor.test.ts | 2 + .../actions/server/lib/action_executor.ts | 72 +++++++++++--- .../server/lib/task_runner_factory.test.ts | 1 + x-pack/plugins/actions/server/plugin.ts | 2 + .../alerting_api_integration/common/config.ts | 21 +++++ .../es_index_preconfigured.ts | 68 ++++++++++++++ .../tests/actions/get_all.ts | 66 +++++++++++++ .../tests/actions/index.ts | 1 + .../tests/alerting/alerts.ts | 94 +++++++++++++++++++ .../spaces_only/tests/actions/get_all.ts | 44 +++++++++ 12 files changed, 445 insertions(+), 18 deletions(-) create mode 100644 x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index_preconfigured.ts diff --git a/x-pack/plugins/actions/server/create_execute_function.test.ts b/x-pack/plugins/actions/server/create_execute_function.test.ts index 68c3967359ff4b..6bdd30848e4b73 100644 --- a/x-pack/plugins/actions/server/create_execute_function.test.ts +++ b/x-pack/plugins/actions/server/create_execute_function.test.ts @@ -23,6 +23,7 @@ describe('execute()', () => { actionTypeRegistry: actionTypeRegistryMock.create(), getScopedSavedObjectsClient: jest.fn().mockReturnValueOnce(savedObjectsClient), isESOUsingEphemeralEncryptionKey: false, + preconfiguredActions: [], }); savedObjectsClient.get.mockResolvedValueOnce({ id: '123', @@ -68,6 +69,68 @@ describe('execute()', () => { }); }); + test('schedules the action with all given parameters with a preconfigured action', async () => { + const executeFn = createExecuteFunction({ + getBasePath, + taskManager: mockTaskManager, + actionTypeRegistry: actionTypeRegistryMock.create(), + getScopedSavedObjectsClient: jest.fn().mockReturnValueOnce(savedObjectsClient), + isESOUsingEphemeralEncryptionKey: false, + preconfiguredActions: [ + { + id: '123', + actionTypeId: 'mock-action-preconfigured', + config: {}, + isPreconfigured: true, + name: 'x', + secrets: {}, + }, + ], + }); + savedObjectsClient.get.mockResolvedValueOnce({ + id: '123', + type: 'action', + attributes: { + actionTypeId: 'mock-action', + }, + references: [], + }); + savedObjectsClient.create.mockResolvedValueOnce({ + id: '234', + type: 'action_task_params', + attributes: {}, + references: [], + }); + await executeFn({ + id: '123', + params: { baz: false }, + spaceId: 'default', + apiKey: Buffer.from('123:abc').toString('base64'), + }); + expect(mockTaskManager.schedule).toHaveBeenCalledTimes(1); + expect(mockTaskManager.schedule.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "params": Object { + "actionTaskParamsId": "234", + "spaceId": "default", + }, + "scope": Array [ + "actions", + ], + "state": Object {}, + "taskType": "actions:mock-action-preconfigured", + }, + ] + `); + expect(savedObjectsClient.get).not.toHaveBeenCalled(); + expect(savedObjectsClient.create).toHaveBeenCalledWith('action_task_params', { + actionId: '123', + params: { baz: false }, + apiKey: Buffer.from('123:abc').toString('base64'), + }); + }); + test('uses API key when provided', async () => { const getScopedSavedObjectsClient = jest.fn().mockReturnValueOnce(savedObjectsClient); const executeFn = createExecuteFunction({ @@ -76,6 +139,7 @@ describe('execute()', () => { getScopedSavedObjectsClient, isESOUsingEphemeralEncryptionKey: false, actionTypeRegistry: actionTypeRegistryMock.create(), + preconfiguredActions: [], }); savedObjectsClient.get.mockResolvedValueOnce({ id: '123', @@ -125,6 +189,7 @@ describe('execute()', () => { getScopedSavedObjectsClient, isESOUsingEphemeralEncryptionKey: false, actionTypeRegistry: actionTypeRegistryMock.create(), + preconfiguredActions: [], }); savedObjectsClient.get.mockResolvedValueOnce({ id: '123', @@ -171,6 +236,7 @@ describe('execute()', () => { getScopedSavedObjectsClient, isESOUsingEphemeralEncryptionKey: true, actionTypeRegistry: actionTypeRegistryMock.create(), + preconfiguredActions: [], }); await expect( executeFn({ @@ -193,6 +259,7 @@ describe('execute()', () => { getScopedSavedObjectsClient, isESOUsingEphemeralEncryptionKey: false, actionTypeRegistry: mockedActionTypeRegistry, + preconfiguredActions: [], }); mockedActionTypeRegistry.ensureActionTypeEnabled.mockImplementation(() => { throw new Error('Fail'); diff --git a/x-pack/plugins/actions/server/create_execute_function.ts b/x-pack/plugins/actions/server/create_execute_function.ts index 4bbcda4cba7fc1..4a9ddf412b7cc7 100644 --- a/x-pack/plugins/actions/server/create_execute_function.ts +++ b/x-pack/plugins/actions/server/create_execute_function.ts @@ -6,7 +6,12 @@ import { SavedObjectsClientContract } from '../../../../src/core/server'; import { TaskManagerStartContract } from '../../task_manager/server'; -import { GetBasePathFunction, RawAction, ActionTypeRegistryContract } from './types'; +import { + GetBasePathFunction, + RawAction, + ActionTypeRegistryContract, + PreConfiguredAction, +} from './types'; interface CreateExecuteFunctionOptions { taskManager: TaskManagerStartContract; @@ -14,6 +19,7 @@ interface CreateExecuteFunctionOptions { getBasePath: GetBasePathFunction; isESOUsingEphemeralEncryptionKey: boolean; actionTypeRegistry: ActionTypeRegistryContract; + preconfiguredActions: PreConfiguredAction[]; } export interface ExecuteOptions { @@ -29,6 +35,7 @@ export function createExecuteFunction({ actionTypeRegistry, getScopedSavedObjectsClient, isESOUsingEphemeralEncryptionKey, + preconfiguredActions, }: CreateExecuteFunctionOptions) { return async function execute({ id, params, spaceId, apiKey }: ExecuteOptions) { if (isESOUsingEphemeralEncryptionKey === true) { @@ -61,9 +68,9 @@ export function createExecuteFunction({ }; const savedObjectsClient = getScopedSavedObjectsClient(fakeRequest); - const actionSavedObject = await savedObjectsClient.get('action', id); + const actionTypeId = await getActionTypeId(id); - actionTypeRegistry.ensureActionTypeEnabled(actionSavedObject.attributes.actionTypeId); + actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); const actionTaskParamsRecord = await savedObjectsClient.create('action_task_params', { actionId: id, @@ -72,7 +79,7 @@ export function createExecuteFunction({ }); await taskManager.schedule({ - taskType: `actions:${actionSavedObject.attributes.actionTypeId}`, + taskType: `actions:${actionTypeId}`, params: { spaceId, actionTaskParamsId: actionTaskParamsRecord.id, @@ -80,5 +87,15 @@ export function createExecuteFunction({ state: {}, scope: ['actions'], }); + + async function getActionTypeId(actionId: string): Promise { + const pcAction = preconfiguredActions.find(action => action.id === actionId); + if (pcAction) { + return pcAction.actionTypeId; + } + + const actionSO = await savedObjectsClient.get('action', actionId); + return actionSO.attributes.actionTypeId; + } }; } diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index bbcb0457fc1d1a..124e5951c714bb 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -43,6 +43,7 @@ actionExecutor.initialize({ actionTypeRegistry, encryptedSavedObjectsPlugin, eventLogger: eventLoggerMock.create(), + preconfiguredActions: [], }); beforeEach(() => { @@ -232,6 +233,7 @@ test('throws an error when passing isESOUsingEphemeralEncryptionKey with value o actionTypeRegistry, encryptedSavedObjectsPlugin, eventLogger: eventLoggerMock.create(), + preconfiguredActions: [], }); await expect( customActionExecutor.execute(executeParams) diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index ba8bb79170c63b..a33fb8830a9309 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -11,6 +11,8 @@ import { ActionTypeRegistryContract, GetServicesFunction, RawAction, + PreConfiguredAction, + Services, } from '../types'; import { EncryptedSavedObjectsPluginStart } from '../../../encrypted_saved_objects/server'; import { SpacesServiceSetup } from '../../../spaces/server'; @@ -24,6 +26,7 @@ export interface ActionExecutorContext { encryptedSavedObjectsPlugin: EncryptedSavedObjectsPluginStart; actionTypeRegistry: ActionTypeRegistryContract; eventLogger: IEventLogger; + preconfiguredActions: PreConfiguredAction[]; } export interface ExecuteOptions { @@ -72,28 +75,22 @@ export class ActionExecutor { encryptedSavedObjectsPlugin, actionTypeRegistry, eventLogger, + preconfiguredActions, } = this.actionExecutorContext!; const services = getServices(request); const spaceId = spaces && spaces.getSpaceId(request); const namespace = spaceId && spaceId !== 'default' ? { namespace: spaceId } : {}; - // Ensure user can read the action before processing - const { - attributes: { actionTypeId, config, name }, - } = await services.savedObjectsClient.get('action', actionId); - - actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); - - // Only get encrypted attributes here, the remaining attributes can be fetched in - // the savedObjectsClient call - const { - attributes: { secrets }, - } = await encryptedSavedObjectsPlugin.getDecryptedAsInternalUser( - 'action', + const { actionTypeId, name, config, secrets } = await getActionInfo( + services, + encryptedSavedObjectsPlugin, + preconfiguredActions, actionId, - namespace + namespace.namespace ); + + actionTypeRegistry.ensureActionTypeEnabled(actionTypeId); const actionType = actionTypeRegistry.get(actionTypeId); let validatedParams: Record; @@ -173,3 +170,50 @@ function actionErrorToMessage(result: ActionTypeExecutorResult): string { return message; } + +interface ActionInfo { + actionTypeId: string; + name: string; + config: any; + secrets: any; +} + +async function getActionInfo( + services: Services, + encryptedSavedObjectsPlugin: EncryptedSavedObjectsPluginStart, + preconfiguredActions: PreConfiguredAction[], + actionId: string, + namespace: string | undefined +): Promise { + // check to see if it's a pre-configured action first + const pcAction = preconfiguredActions.find( + preconfiguredAction => preconfiguredAction.id === actionId + ); + if (pcAction) { + return { + actionTypeId: pcAction.actionTypeId, + name: pcAction.name, + config: pcAction.config, + secrets: pcAction.secrets, + }; + } + + // if not pre-configured action, should be a saved object + // ensure user can read the action before processing + const { + attributes: { actionTypeId, config, name }, + } = await services.savedObjectsClient.get('action', actionId); + + const { + attributes: { secrets }, + } = await encryptedSavedObjectsPlugin.getDecryptedAsInternalUser('action', actionId, { + namespace: namespace === 'default' ? undefined : namespace, + }); + + return { + actionTypeId, + name, + config, + secrets, + }; +} diff --git a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts index 43882cef211709..f070f714ee508d 100644 --- a/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts +++ b/x-pack/plugins/actions/server/lib/task_runner_factory.test.ts @@ -61,6 +61,7 @@ const actionExecutorInitializerParams = { actionTypeRegistry, encryptedSavedObjectsPlugin: mockedEncryptedSavedObjectsPlugin, eventLogger: eventLoggerMock.create(), + preconfiguredActions: [], }; const taskRunnerFactoryInitializerParams = { spaceIdToNamespace, diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index 34c9e7aa9e8b8f..ef3716070ab04e 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -245,6 +245,7 @@ export class ActionsPlugin implements Plugin, Plugi getServices: this.getServicesFactory(core.savedObjects), encryptedSavedObjectsPlugin: plugins.encryptedSavedObjects, actionTypeRegistry: actionTypeRegistry!, + preconfiguredActions, }); taskRunnerFactory!.initialize({ @@ -265,6 +266,7 @@ export class ActionsPlugin implements Plugin, Plugi getScopedSavedObjectsClient: core.savedObjects.getScopedClient, getBasePath: this.getBasePath, isESOUsingEphemeralEncryptionKey: isESOUsingEphemeralEncryptionKey!, + preconfiguredActions, }), isActionTypeEnabled: id => { return this.actionTypeRegistry!.isActionTypeEnabled(id); diff --git a/x-pack/test/alerting_api_integration/common/config.ts b/x-pack/test/alerting_api_integration/common/config.ts index 4d32a5ae9f53c4..457b7621e84bd6 100644 --- a/x-pack/test/alerting_api_integration/common/config.ts +++ b/x-pack/test/alerting_api_integration/common/config.ts @@ -100,6 +100,27 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions) xyzSecret2: 'credential2', }, }, + { + id: 'preconfigured-es-index-action', + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + }, + { + id: 'preconfigured.test.index-record', + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + secrets: { + encrypted: 'this-is-also-ignored-and-also-required', + }, + }, ])}`, ...disabledPlugins.map(key => `--xpack.${key}.enabled=false`), `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'alerts')}`, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index_preconfigured.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index_preconfigured.ts new file mode 100644 index 00000000000000..b04bc13ffc5e47 --- /dev/null +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index_preconfigured.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +// from: x-pack/test/alerting_api_integration/common/config.ts +const ACTION_ID = 'preconfigured-es-index-action'; +const ES_TEST_INDEX_NAME = 'functional-test-actions-index-preconfigured'; + +// eslint-disable-next-line import/no-default-export +export default function indexTest({ getService }: FtrProviderContext) { + const es = getService('legacyEs'); + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + describe('preconfigured index action', () => { + after(() => esArchiver.unload('empty_kibana')); + beforeEach(() => clearTestIndex(es)); + + it('should execute successfully when expected for a single body', async () => { + const { body: result } = await supertest + .post(`/api/action/${ACTION_ID}/_execute`) + .set('kbn-xsrf', 'foo') + .send({ + params: { + documents: [{ testing: [4, 5, 6] }], + }, + }) + .expect(200); + expect(result.status).to.eql('ok'); + + const items = await getTestIndexItems(es); + expect(items.length).to.eql(1); + + // check document sans timestamp + const document = items[0]._source; + const timestamp = document.timestamp; + delete document.timestamp; + expect(document).to.eql({ testing: [4, 5, 6] }); + + // check timestamp + const timestampTime = new Date(timestamp).getTime(); + const timeNow = Date.now(); + const timeMinuteAgo = timeNow - 1000 * 60; + expect(timestampTime).to.be.within(timeMinuteAgo, timeNow); + }); + }); +} + +async function clearTestIndex(es: any) { + return await es.indices.delete({ + index: ES_TEST_INDEX_NAME, + ignoreUnavailable: true, + }); +} + +async function getTestIndexItems(es: any) { + const result = await es.search({ + index: ES_TEST_INDEX_NAME, + }); + + return result.hits.hits; +} diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts index 80b512f3fb5e3f..0b637326d46678 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts @@ -68,6 +68,18 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured-es-index-action', + isPreconfigured: true, + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + referencedByCount: 0, + }, { id: 'my-slack1', isPreconfigured: true, @@ -90,6 +102,16 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured.test.index-record', + isPreconfigured: true, + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + referencedByCount: 0, + }, ]); break; default: @@ -167,6 +189,18 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 1, }, + { + id: 'preconfigured-es-index-action', + isPreconfigured: true, + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + referencedByCount: 0, + }, { id: 'my-slack1', isPreconfigured: true, @@ -189,6 +223,16 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured.test.index-record', + isPreconfigured: true, + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + referencedByCount: 0, + }, ]); break; default: @@ -232,6 +276,18 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { case 'superuser at space1': expect(response.statusCode).to.eql(200); expect(response.body).to.eql([ + { + id: 'preconfigured-es-index-action', + isPreconfigured: true, + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + referencedByCount: 0, + }, { id: 'my-slack1', isPreconfigured: true, @@ -254,6 +310,16 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured.test.index-record', + isPreconfigured: true, + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + referencedByCount: 0, + }, ]); break; default: diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts index d7ec2e78ccb308..8e002bcc8d3daf 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts @@ -11,6 +11,7 @@ export default function actionsTests({ loadTestFile }: FtrProviderContext) { describe('Actions', () => { loadTestFile(require.resolve('./builtin_action_types/email')); loadTestFile(require.resolve('./builtin_action_types/es_index')); + loadTestFile(require.resolve('./builtin_action_types/es_index_preconfigured')); loadTestFile(require.resolve('./builtin_action_types/pagerduty')); loadTestFile(require.resolve('./builtin_action_types/server_log')); loadTestFile(require.resolve('./builtin_action_types/servicenow')); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/alerts.ts index 6eed28cc381dd2..d8e4f808f5cd23 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/alerts.ts @@ -165,6 +165,100 @@ instanceStateValue: true } }); + it('should schedule task, run alert and schedule preconfigured actions when appropriate', async () => { + const testStart = new Date(); + const reference = alertUtils.generateReference(); + const response = await alertUtils.createAlwaysFiringAction({ + reference, + indexRecordActionId: 'preconfigured.test.index-record', + }); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'global_read at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(404); + expect(response.body).to.eql({ + statusCode: 404, + error: 'Not Found', + message: 'Not Found', + }); + break; + case 'superuser at space1': + case 'space_1_all at space1': + expect(response.statusCode).to.eql(200); + + // Wait for the action to index a document before disabling the alert and waiting for tasks to finish + await esTestIndexTool.waitForDocs('action:test.index-record', reference); + + await taskManagerUtils.waitForAllTasksIdle(testStart); + + const alertId = response.body.id; + await alertUtils.disable(alertId); + await taskManagerUtils.waitForEmpty(testStart); + + // Ensure only 1 alert executed with proper params + const alertSearchResult = await esTestIndexTool.search( + 'alert:test.always-firing', + reference + ); + expect(alertSearchResult.hits.total.value).to.eql(1); + expect(alertSearchResult.hits.hits[0]._source).to.eql({ + source: 'alert:test.always-firing', + reference, + state: {}, + params: { + index: ES_TEST_INDEX_NAME, + reference, + }, + alertInfo: { + alertId, + spaceId: space.id, + namespace: space.id, + name: 'abc', + tags: ['tag-A', 'tag-B'], + createdBy: user.fullName, + updatedBy: user.fullName, + }, + }); + + // Ensure only 1 action executed with proper params + const actionSearchResult = await esTestIndexTool.search( + 'action:test.index-record', + reference + ); + expect(actionSearchResult.hits.total.value).to.eql(1); + expect(actionSearchResult.hits.hits[0]._source).to.eql({ + config: { + unencrypted: 'ignored-but-required', + }, + secrets: { + encrypted: 'this-is-also-ignored-and-also-required', + }, + params: { + index: ES_TEST_INDEX_NAME, + reference, + message: ` +alertId: ${alertId}, +alertName: abc, +spaceId: ${space.id}, +tags: tag-A,tag-B, +alertInstanceId: 1, +instanceContextValue: true, +instanceStateValue: true +`.trim(), + }, + reference, + source: 'action:test.index-record', + }); + + await taskManagerUtils.waitForActionTaskParamsToBeCleanedUp(testStart); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); + it('should pass updated alert params to executor', async () => { const testStart = new Date(); // create an alert diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts index 517c64f178af5b..ec59e56b08308b 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts @@ -45,6 +45,18 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured-es-index-action', + isPreconfigured: true, + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + referencedByCount: 0, + }, { id: 'my-slack1', isPreconfigured: true, @@ -67,6 +79,16 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured.test.index-record', + isPreconfigured: true, + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + referencedByCount: 0, + }, ]); }); @@ -88,6 +110,18 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { objectRemover.add(Spaces.space1.id, createdAction.id, 'action'); await supertest.get(`${getUrlPrefix(Spaces.other.id)}/api/action/_getAll`).expect(200, [ + { + id: 'preconfigured-es-index-action', + isPreconfigured: true, + actionTypeId: '.index', + name: 'preconfigured_es_index_action', + config: { + index: 'functional-test-actions-index-preconfigured', + refresh: true, + executionTimeField: 'timestamp', + }, + referencedByCount: 0, + }, { id: 'my-slack1', isPreconfigured: true, @@ -110,6 +144,16 @@ export default function getAllActionTests({ getService }: FtrProviderContext) { }, referencedByCount: 0, }, + { + id: 'preconfigured.test.index-record', + isPreconfigured: true, + actionTypeId: 'test.index-record', + name: 'Test:_Preconfigured_Index_Record', + config: { + unencrypted: 'ignored-but-required', + }, + referencedByCount: 0, + }, ]); }); }); From bf63b56f833c8657cb249c0a69805acc47608550 Mon Sep 17 00:00:00 2001 From: Phillip Burch Date: Tue, 14 Apr 2020 18:32:05 -0500 Subject: [PATCH 61/65] Disable adding conditions when in alert management context. (#63514) * Disable adding conditions when in alert manament context. * Fix typo * Change id for i18n string --- .../alerting/metrics/expression.tsx | 179 ++++++++++++------ 1 file changed, 117 insertions(+), 62 deletions(-) diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx index 2430fe78e20533..6cf4e5bed2e6f9 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx @@ -17,6 +17,9 @@ import { import { IFieldType } from 'src/plugins/data/public'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; +import { EuiExpression } from '@elastic/eui'; +import { EuiCallOut } from '@elastic/eui'; +import { EuiLink } from '@elastic/eui'; import { MetricExpressionParams, Comparator, @@ -208,6 +211,37 @@ export const Expressions: React.FC = props => { } }, [alertsContext.metadata, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps + // INFO: If there is metadata, you're in the metrics explorer context + const canAddConditions = !!alertsContext.metadata; + + if (!canAddConditions && !alertParams.criteria) { + return ( + <> + + + {' '} + + + + . + + } + color="warning" + iconType="help" + /> + + + ); + } + return ( <> @@ -224,6 +258,7 @@ export const Expressions: React.FC = props => { alertParams.criteria.map((e, idx) => { return ( 1} fields={derivedIndexPattern.fields} remove={removeExpression} @@ -246,62 +281,65 @@ export const Expressions: React.FC = props => { />

- - - - - - {alertsContext.metadata && ( - - - + <> + + + + + + + + + )} ); @@ -309,6 +347,7 @@ export const Expressions: React.FC = props => { interface ExpressionRowProps { fields: IFieldType[]; + canEditAggField: boolean; expressionId: number; expression: MetricExpression; errors: IErrorObject; @@ -379,17 +418,20 @@ export const ExpressionRow: React.FC = props => { {aggType !== 'count' && ( - ({ - normalizedType: f.type, - name: f.name, - }))} - aggType={aggType} - errors={errors} - onChangeSelectedAggField={updateMetric} - /> + {!props.canEditAggField && } + {props.canEditAggField && ( + ({ + normalizedType: f.type, + name: f.name, + }))} + aggType={aggType} + errors={errors} + onChangeSelectedAggField={updateMetric} + /> + )} )} @@ -421,6 +463,19 @@ export const ExpressionRow: React.FC = props => { ); }; +export const DisabledAggField = ({ text }: { text: string }) => { + return ( + + ); +}; + export const aggregationType: { [key: string]: any } = { avg: { text: i18n.translate('xpack.infra.metrics.alertFlyout.aggregationText.avg', { From 8264352bbe27c527e2738aaf95bf9c4e51fa294b Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Wed, 15 Apr 2020 08:33:10 +0200 Subject: [PATCH 62/65] [Discover] Fix broken setting of bucketInterval (#62939) * Fix broken setting of bucketInterval, remove $watch * Fix and adapt functional tests --- .../discover/np_ready/angular/discover.html | 1 + .../discover/np_ready/angular/discover.js | 14 +++---------- .../apps/discover/_discover_histogram.js | 20 +++++++++---------- test/functional/page_objects/discover_page.ts | 5 +++++ 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.html b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.html index d068e824a3e0a8..1221b01657e45f 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.html +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.html @@ -140,6 +140,7 @@

{{screenTitle}}

position="'top'" > Date: Wed, 15 Apr 2020 11:16:36 +0300 Subject: [PATCH 63/65] [data.search.aggs] Remove service getters from agg types (AggConfig part) (#62548) * removed getFieldFormats from aggConfig * made new properties is private * Fixed ci * Fixed tests * Fixes clone method * move filedFotmats inside opt fro AggConfigs * Added readonly Co-authored-by: Elastic Machine --- .../new_platform/new_platform.karma_mock.js | 1 + src/plugins/data/public/plugin.ts | 2 +- .../public/search/aggs/agg_config.test.ts | 34 +++++++------- .../data/public/search/aggs/agg_config.ts | 19 +++++--- .../public/search/aggs/agg_configs.test.ts | 44 +++++++++++-------- .../data/public/search/aggs/agg_configs.ts | 17 +++++-- .../_terms_other_bucket_helper.test.ts | 5 ++- .../create_filter/date_histogram.test.ts | 5 ++- .../buckets/create_filter/date_range.test.ts | 5 ++- .../buckets/create_filter/filters.test.ts | 5 ++- .../buckets/create_filter/histogram.test.ts | 4 +- .../buckets/create_filter/ip_range.test.ts | 5 ++- .../aggs/buckets/create_filter/range.test.ts | 5 ++- .../aggs/buckets/create_filter/terms.test.ts | 1 + .../search/aggs/buckets/date_range.test.ts | 5 ++- .../search/aggs/buckets/geo_hash.test.ts | 5 ++- .../search/aggs/buckets/histogram.test.ts | 5 ++- .../public/search/aggs/buckets/range.test.ts | 5 ++- .../aggs/buckets/significant_terms.test.ts | 1 + .../public/search/aggs/buckets/terms.test.ts | 4 +- .../public/search/aggs/metrics/median.test.ts | 5 ++- .../aggs/metrics/parent_pipeline.test.ts | 2 +- .../aggs/metrics/percentile_ranks.test.ts | 2 +- .../search/aggs/metrics/percentiles.test.ts | 2 +- .../aggs/metrics/sibling_pipeline.test.ts | 2 +- .../search/aggs/metrics/std_deviation.test.ts | 2 +- .../search/aggs/metrics/top_hit.test.ts | 2 +- src/plugins/data/public/search/aggs/mocks.ts | 2 + .../search/expressions/create_filter.test.ts | 4 +- .../data/public/search/search_service.ts | 13 +++++- .../public/search/tabify/get_columns.test.ts | 3 ++ .../search/tabify/response_writer.test.ts | 3 ++ .../data/public/search/tabify/tabify.test.ts | 3 ++ 33 files changed, 156 insertions(+), 66 deletions(-) diff --git a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js index 33a7fdad065b45..f577a29ce90b91 100644 --- a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js +++ b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js @@ -453,6 +453,7 @@ export const npStart = { createAggConfigs: (indexPattern, configStates = []) => { return new AggConfigs(indexPattern, configStates, { typesRegistry: aggTypesRegistry.start(), + fieldFormats: getFieldFormatsRegistry(mockCoreStart), }); }, types: aggTypesRegistry.start(), diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index 2ebe377b3b32fe..1723545b32522b 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -155,7 +155,7 @@ export class DataPublicPlugin implements Plugin { let indexPattern: IndexPattern; let typesRegistry: AggTypesRegistryStart; + const fieldFormats = fieldFormatsServiceMock.createStartContract(); beforeEach(() => { jest.restoreAllMocks(); @@ -40,7 +42,7 @@ describe('AggConfig', () => { describe('#toDsl', () => { it('calls #write()', () => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); const configStates = { enabled: true, type: 'date_histogram', @@ -55,7 +57,7 @@ describe('AggConfig', () => { }); it('uses the type name as the agg name', () => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); const configStates = { enabled: true, type: 'date_histogram', @@ -70,7 +72,7 @@ describe('AggConfig', () => { }); it('uses the params from #write() output as the agg params', () => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); const configStates = { enabled: true, type: 'date_histogram', @@ -100,7 +102,7 @@ describe('AggConfig', () => { params: {}, }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const histoConfig = ac.byName('date_histogram')[0]; const avgConfig = ac.byName('avg')[0]; @@ -210,8 +212,8 @@ describe('AggConfig', () => { testsIdentical.forEach((configState, index) => { it(`identical aggregations (${index})`, () => { - const ac1 = new AggConfigs(indexPattern, configState, { typesRegistry }); - const ac2 = new AggConfigs(indexPattern, configState, { typesRegistry }); + const ac1 = new AggConfigs(indexPattern, configState, { typesRegistry, fieldFormats }); + const ac2 = new AggConfigs(indexPattern, configState, { typesRegistry, fieldFormats }); expect(ac1.jsonDataEquals(ac2.aggs)).toBe(true); }); }); @@ -251,8 +253,8 @@ describe('AggConfig', () => { testsIdenticalDifferentOrder.forEach((test, index) => { it(`identical aggregations (${index}) - init json is in different order`, () => { - const ac1 = new AggConfigs(indexPattern, test.config1, { typesRegistry }); - const ac2 = new AggConfigs(indexPattern, test.config2, { typesRegistry }); + const ac1 = new AggConfigs(indexPattern, test.config1, { typesRegistry, fieldFormats }); + const ac2 = new AggConfigs(indexPattern, test.config2, { typesRegistry, fieldFormats }); expect(ac1.jsonDataEquals(ac2.aggs)).toBe(true); }); }); @@ -316,8 +318,8 @@ describe('AggConfig', () => { testsDifferent.forEach((test, index) => { it(`different aggregations (${index})`, () => { - const ac1 = new AggConfigs(indexPattern, test.config1, { typesRegistry }); - const ac2 = new AggConfigs(indexPattern, test.config2, { typesRegistry }); + const ac1 = new AggConfigs(indexPattern, test.config1, { typesRegistry, fieldFormats }); + const ac2 = new AggConfigs(indexPattern, test.config2, { typesRegistry, fieldFormats }); expect(ac1.jsonDataEquals(ac2.aggs)).toBe(false); }); }); @@ -325,7 +327,7 @@ describe('AggConfig', () => { describe('#toJSON', () => { it('includes the aggs id, params, type and schema', () => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); const configStates = { enabled: true, type: 'date_histogram', @@ -356,8 +358,8 @@ describe('AggConfig', () => { params: {}, }, ]; - const ac1 = new AggConfigs(indexPattern, configStates, { typesRegistry }); - const ac2 = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac1 = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); + const ac2 = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); // this relies on the assumption that js-engines consistently loop over properties in insertion order. // most likely the case, but strictly speaking not guaranteed by the JS and JSON specifications. @@ -369,7 +371,7 @@ describe('AggConfig', () => { let aggConfig: AggConfig; beforeEach(() => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); aggConfig = ac.createAggConfig({ type: 'count' } as CreateAggConfigParams); }); @@ -398,7 +400,7 @@ describe('AggConfig', () => { describe('#fieldFormatter - custom getFormat handler', () => { it('returns formatter from getFormat handler', () => { - const ac = new AggConfigs(indexPattern, [], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [], { typesRegistry, fieldFormats }); const configStates = { enabled: true, type: 'count', @@ -439,7 +441,7 @@ describe('AggConfig', () => { }, }, }; - const ac = new AggConfigs(indexPattern, [configStates], { typesRegistry }); + const ac = new AggConfigs(indexPattern, [configStates], { typesRegistry, fieldFormats }); aggConfig = ac.createAggConfig(configStates); }); diff --git a/src/plugins/data/public/search/aggs/agg_config.ts b/src/plugins/data/public/search/aggs/agg_config.ts index d6948aaade63d7..6188849e0e6d44 100644 --- a/src/plugins/data/public/search/aggs/agg_config.ts +++ b/src/plugins/data/public/search/aggs/agg_config.ts @@ -25,7 +25,7 @@ import { IAggConfigs } from './agg_configs'; import { FetchOptions } from '../fetch'; import { ISearchSource } from '../search_source'; import { FieldFormatsContentType, KBN_FIELD_TYPES } from '../../../common'; -import { getFieldFormats } from '../../../public/services'; +import { FieldFormatsStart } from '../../field_formats'; export interface AggConfigOptions { type: IAggType; @@ -35,6 +35,10 @@ export interface AggConfigOptions { schema?: string; } +export interface AggConfigDependencies { + fieldFormats: FieldFormatsStart; +} + /** * @name AggConfig * @@ -93,8 +97,13 @@ export class AggConfig { private __type: IAggType; private __typeDecorations: any; private subAggs: AggConfig[] = []; + private readonly fieldFormats: FieldFormatsStart; - constructor(aggConfigs: IAggConfigs, opts: AggConfigOptions) { + constructor( + aggConfigs: IAggConfigs, + opts: AggConfigOptions, + { fieldFormats }: AggConfigDependencies + ) { this.aggConfigs = aggConfigs; this.id = String(opts.id || AggConfig.nextId(aggConfigs.aggs as any)); this.enabled = typeof opts.enabled === 'boolean' ? opts.enabled : true; @@ -115,6 +124,8 @@ export class AggConfig { // @ts-ignore this.__type = this.__type; + + this.fieldFormats = fieldFormats; } /** @@ -341,12 +352,10 @@ export class AggConfig { } fieldOwnFormatter(contentType?: FieldFormatsContentType, defaultFormat?: any) { - const fieldFormatsService = getFieldFormats(); - const field = this.getField(); let format = field && field.format; if (!format) format = defaultFormat; - if (!format) format = fieldFormatsService.getDefaultInstance(KBN_FIELD_TYPES.STRING); + if (!format) format = this.fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.STRING); return format.getConverterFor(contentType); } diff --git a/src/plugins/data/public/search/aggs/agg_configs.test.ts b/src/plugins/data/public/search/aggs/agg_configs.test.ts index e20e6de6112a8a..653bf6a266df60 100644 --- a/src/plugins/data/public/search/aggs/agg_configs.test.ts +++ b/src/plugins/data/public/search/aggs/agg_configs.test.ts @@ -24,10 +24,12 @@ import { AggTypesRegistryStart } from './agg_types_registry'; import { mockDataServices, mockAggTypesRegistry } from './test_helpers'; import { Field as IndexPatternField, IndexPattern } from '../../index_patterns'; import { stubIndexPattern, stubIndexPatternWithFields } from '../../../public/stubs'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; describe('AggConfigs', () => { let indexPattern: IndexPattern; let typesRegistry: AggTypesRegistryStart; + const fieldFormats = fieldFormatsServiceMock.createStartContract(); beforeEach(() => { mockDataServices(); @@ -45,7 +47,7 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); expect(ac.aggs).toHaveLength(1); }); @@ -70,7 +72,7 @@ describe('AggConfigs', () => { ]; const spy = jest.spyOn(AggConfig, 'ensureIds'); - new AggConfigs(indexPattern, configStates, { typesRegistry }); + new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); expect(spy).toHaveBeenCalledTimes(1); expect(spy.mock.calls[0]).toEqual([configStates]); spy.mockRestore(); @@ -92,16 +94,20 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); expect(ac.aggs).toHaveLength(2); ac.createAggConfig( - new AggConfig(ac, { - enabled: true, - type: typesRegistry.get('terms'), - params: {}, - schema: 'split', - }) + new AggConfig( + ac, + { + enabled: true, + type: typesRegistry.get('terms'), + params: {}, + schema: 'split', + }, + { fieldFormats } + ) ); expect(ac.aggs).toHaveLength(3); }); @@ -115,7 +121,7 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); expect(ac.aggs).toHaveLength(1); ac.createAggConfig({ @@ -136,7 +142,7 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); expect(ac.aggs).toHaveLength(1); ac.createAggConfig( @@ -164,7 +170,7 @@ describe('AggConfigs', () => { { type: 'percentiles', enabled: true, params: {}, schema: 'metric' }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const sorted = ac.getRequestAggs(); const aggs = indexBy(ac.aggs, agg => agg.type.name); @@ -187,7 +193,7 @@ describe('AggConfigs', () => { { type: 'count', enabled: true, params: {}, schema: 'metric' }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const sorted = ac.getResponseAggs(); const aggs = indexBy(ac.aggs, agg => agg.type.name); @@ -204,7 +210,7 @@ describe('AggConfigs', () => { { type: 'percentiles', enabled: true, params: { percents: [1, 2, 3] }, schema: 'metric' }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const sorted = ac.getResponseAggs(); const aggs = indexBy(ac.aggs, agg => agg.type.name); @@ -225,7 +231,7 @@ describe('AggConfigs', () => { it('uses the sorted aggs', () => { const configStates = [{ enabled: true, type: 'avg', params: { field: 'bytes' } }]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const spy = jest.spyOn(AggConfigs.prototype, 'getRequestAggs'); ac.toDsl(); expect(spy).toHaveBeenCalledTimes(1); @@ -241,6 +247,7 @@ describe('AggConfigs', () => { const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, + fieldFormats, }); const aggInfos = ac.aggs.map(aggConfig => { @@ -284,7 +291,7 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const dsl = ac.toDsl(); const histo = ac.byName('date_histogram')[0]; const count = ac.byName('count')[0]; @@ -311,6 +318,7 @@ describe('AggConfigs', () => { const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, + fieldFormats, }); const dsl = ac.toDsl(); const histo = ac.byName('date_histogram')[0]; @@ -336,7 +344,7 @@ describe('AggConfigs', () => { { enabled: true, type: 'max', schema: 'metric', params: { field: 'bytes' } }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const topLevelDsl = ac.toDsl(true); const buckets = ac.bySchemaName('buckets'); const metrics = ac.bySchemaName('metrics'); @@ -406,7 +414,7 @@ describe('AggConfigs', () => { }, ]; - const ac = new AggConfigs(indexPattern, configStates, { typesRegistry }); + const ac = new AggConfigs(indexPattern, configStates, { typesRegistry, fieldFormats }); const topLevelDsl = ac.toDsl(true)['2']; expect(Object.keys(topLevelDsl.aggs)).toContain('1'); diff --git a/src/plugins/data/public/search/aggs/agg_configs.ts b/src/plugins/data/public/search/aggs/agg_configs.ts index c441b2a0eb46f8..5ad09f824d3e4d 100644 --- a/src/plugins/data/public/search/aggs/agg_configs.ts +++ b/src/plugins/data/public/search/aggs/agg_configs.ts @@ -28,6 +28,7 @@ import { IndexPattern } from '../../index_patterns'; import { ISearchSource } from '../search_source'; import { FetchOptions } from '../fetch'; import { TimeRange } from '../../../common'; +import { FieldFormatsStart } from '../../field_formats'; function removeParentAggs(obj: any) { for (const prop in obj) { @@ -47,6 +48,7 @@ function parseParentAggs(dslLvlCursor: any, dsl: any) { export interface AggConfigsOptions { typesRegistry: AggTypesRegistryStart; + fieldFormats: FieldFormatsStart; } export type CreateAggConfigParams = Assign; @@ -68,6 +70,7 @@ export type IAggConfigs = AggConfigs; export class AggConfigs { public indexPattern: IndexPattern; public timeRange?: TimeRange; + private readonly fieldFormats: FieldFormatsStart; private readonly typesRegistry: AggTypesRegistryStart; aggs: IAggConfig[]; @@ -83,6 +86,7 @@ export class AggConfigs { this.aggs = []; this.indexPattern = indexPattern; + this.fieldFormats = opts.fieldFormats; configStates.forEach((params: any) => this.createAggConfig(params)); } @@ -113,6 +117,7 @@ export class AggConfigs { const aggConfigs = new AggConfigs(this.indexPattern, this.aggs.filter(filterAggs), { typesRegistry: this.typesRegistry, + fieldFormats: this.fieldFormats, }); return aggConfigs; @@ -129,10 +134,14 @@ export class AggConfigs { aggConfig = params; params.parent = this; } else { - aggConfig = new AggConfig(this, { - ...params, - type: typeof type === 'string' ? this.typesRegistry.get(type) : type, - }); + aggConfig = new AggConfig( + this, + { + ...params, + type: typeof type === 'string' ? this.typesRegistry.get(type) : type, + }, + { fieldFormats: this.fieldFormats } + ); } if (addToAggConfigs) { diff --git a/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts index c664325a168b17..44d99375bbd302 100644 --- a/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/_terms_other_bucket_helper.test.ts @@ -26,6 +26,7 @@ import { AggConfigs, CreateAggConfigParams } from '../agg_configs'; import { BUCKET_TYPES } from './bucket_agg_types'; import { IBucketAggConfig } from './bucket_agg_type'; import { mockAggTypesRegistry } from '../test_helpers'; +import { fieldFormatsServiceMock } from '../../../field_formats/mocks'; const indexPattern = { id: '1234', @@ -219,8 +220,10 @@ const nestedOtherResponse = { describe('Terms Agg Other bucket helper', () => { const typesRegistry = mockAggTypesRegistry(); + const fieldFormats = fieldFormatsServiceMock.createStartContract(); + const getAggConfigs = (aggs: CreateAggConfigParams[] = []) => { - return new AggConfigs(indexPattern, [...aggs], { typesRegistry }); + return new AggConfigs(indexPattern, [...aggs], { typesRegistry, fieldFormats }); }; describe('buildOtherBucketAgg', () => { diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts index 97c940b4ff4b16..7778fcb36bcd6f 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts @@ -78,7 +78,10 @@ describe('AggConfig Filters', () => { params: { field: field.name, interval, customInterval: '5d' }, }, ], - { typesRegistry: mockAggTypesRegistry([getDateHistogramBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getDateHistogramBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); const bucketKey = 1422579600000; diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts index 8c0466b769a7e0..4207fa92736f88 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/date_range.test.ts @@ -72,7 +72,10 @@ describe('AggConfig Filters', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry([getDateRangeBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getDateRangeBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts index f5a0b5a7b90940..bf05f7463db6c2 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/filters.test.ts @@ -69,7 +69,10 @@ describe('AggConfig Filters', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry([getFiltersBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getFiltersBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts index 18b388be748773..396d515f3b5809 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/histogram.test.ts @@ -23,10 +23,12 @@ import { mockAggTypesRegistry } from '../../test_helpers'; import { BUCKET_TYPES } from '../bucket_agg_types'; import { IBucketAggConfig } from '../bucket_agg_type'; import { BytesFormat, FieldFormatsGetConfigFn } from '../../../../../common'; +import { fieldFormatsServiceMock } from '../../../../field_formats/mocks'; describe('AggConfig Filters', () => { describe('histogram', () => { const getConfig = (() => {}) as FieldFormatsGetConfigFn; + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const getAggConfigs = () => { const field = { name: 'bytes', @@ -55,7 +57,7 @@ describe('AggConfig Filters', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry() } + { typesRegistry: mockAggTypesRegistry(), fieldFormats } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts index b528313b080d03..d85576a0ccb144 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/ip_range.test.ts @@ -29,10 +29,11 @@ import { notificationServiceMock } from '../../../../../../../core/public/mocks' describe('AggConfig Filters', () => { describe('IP range', () => { + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const typesRegistry = mockAggTypesRegistry([ getIpRangeBucketAgg({ getInternalStartServices: () => ({ - fieldFormats: fieldFormatsServiceMock.createStartContract(), + fieldFormats, notifications: notificationServiceMock.createStartContract(), }), }), @@ -52,7 +53,7 @@ describe('AggConfig Filters', () => { }, } as any; - return new AggConfigs(indexPattern, aggs, { typesRegistry }); + return new AggConfigs(indexPattern, aggs, { typesRegistry, fieldFormats }); }; test('should return a range filter for ip_range agg', () => { diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts index 14a7538aa95a47..cadd8e9fe13ed9 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/range.test.ts @@ -71,7 +71,10 @@ describe('AggConfig Filters', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry([getRangeBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getRangeBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts index c11a7d1a4e6b81..d9ff63613b640b 100644 --- a/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts @@ -58,6 +58,7 @@ describe('AggConfig Filters', () => { return new AggConfigs(indexPattern, aggs, { typesRegistry: mockAggTypesRegistry([getTermsBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, }); }; diff --git a/src/plugins/data/public/search/aggs/buckets/date_range.test.ts b/src/plugins/data/public/search/aggs/buckets/date_range.test.ts index c050620c3a856f..f78f0cce732e7b 100644 --- a/src/plugins/data/public/search/aggs/buckets/date_range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/date_range.test.ts @@ -74,7 +74,10 @@ describe('date_range params', () => { params, }, ], - { typesRegistry: mockAggTypesRegistry([getDateRangeBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getDateRangeBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts b/src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts index 24270dd33a5763..226faefe434821 100644 --- a/src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/geo_hash.test.ts @@ -77,7 +77,10 @@ describe('Geohash Agg', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry() } + { + typesRegistry: mockAggTypesRegistry(), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/histogram.test.ts b/src/plugins/data/public/search/aggs/buckets/histogram.test.ts index bbfc263df4268b..a55c32951232a3 100644 --- a/src/plugins/data/public/search/aggs/buckets/histogram.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/histogram.test.ts @@ -70,7 +70,10 @@ describe('Histogram Agg', () => { params, }, ], - { typesRegistry: mockAggTypesRegistry([getHistogramBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getHistogramBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/range.test.ts b/src/plugins/data/public/search/aggs/buckets/range.test.ts index a1f0ab6a2326a2..144d2b779e950b 100644 --- a/src/plugins/data/public/search/aggs/buckets/range.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/range.test.ts @@ -95,7 +95,10 @@ describe('Range Agg', () => { }, }, ], - { typesRegistry: mockAggTypesRegistry([getRangeBucketAgg(aggTypesDependencies)]) } + { + typesRegistry: mockAggTypesRegistry([getRangeBucketAgg(aggTypesDependencies)]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts b/src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts index 761d0ced6a1146..d0ace5a50c28da 100644 --- a/src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/significant_terms.test.ts @@ -70,6 +70,7 @@ describe('Significant Terms Agg', () => { typesRegistry: mockAggTypesRegistry([ getSignificantTermsBucketAgg(aggTypesDependencies), ]), + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, } ); }; diff --git a/src/plugins/data/public/search/aggs/buckets/terms.test.ts b/src/plugins/data/public/search/aggs/buckets/terms.test.ts index 5afe7d0b0c35c0..0dc052bd1fdf6d 100644 --- a/src/plugins/data/public/search/aggs/buckets/terms.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/terms.test.ts @@ -20,9 +20,11 @@ import { AggConfigs } from '../agg_configs'; import { mockAggTypesRegistry } from '../test_helpers'; import { BUCKET_TYPES } from './bucket_agg_types'; +import { fieldFormatsServiceMock } from '../../../field_formats/mocks'; describe('Terms Agg', () => { describe('order agg editor UI', () => { + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const getAggConfigs = (params: Record = {}) => { const indexPattern = { id: '1234', @@ -47,7 +49,7 @@ describe('Terms Agg', () => { type: BUCKET_TYPES.TERMS, }, ], - { typesRegistry: mockAggTypesRegistry() } + { typesRegistry: mockAggTypesRegistry(), fieldFormats } ); }; diff --git a/src/plugins/data/public/search/aggs/metrics/median.test.ts b/src/plugins/data/public/search/aggs/metrics/median.test.ts index f80c46026f50ab..de3ca646ead9ee 100644 --- a/src/plugins/data/public/search/aggs/metrics/median.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/median.test.ts @@ -59,7 +59,10 @@ describe('AggTypeMetricMedianProvider class', () => { }, }, ], - { typesRegistry } + { + typesRegistry, + fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats, + } ); }); diff --git a/src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts b/src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts index af983a50f6c234..3beb92a2fa000d 100644 --- a/src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/parent_pipeline.test.ts @@ -110,7 +110,7 @@ describe('parent pipeline aggs', function() { schema: 'metric', }, ], - { typesRegistry } + { typesRegistry, fieldFormats: getInternalStartServices().fieldFormats } ); // Grab the aggConfig off the vis (we don't actually use the vis for anything else) diff --git a/src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts b/src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts index 2944fc8c11b230..1b94ecd602075a 100644 --- a/src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/percentile_ranks.test.ts @@ -70,7 +70,7 @@ describe('AggTypesMetricsPercentileRanksProvider class', function() { }, }, ], - { typesRegistry } + { typesRegistry, fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats } ); }); diff --git a/src/plugins/data/public/search/aggs/metrics/percentiles.test.ts b/src/plugins/data/public/search/aggs/metrics/percentiles.test.ts index 33bd42df74cc7a..76da2fe3eb62c7 100644 --- a/src/plugins/data/public/search/aggs/metrics/percentiles.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/percentiles.test.ts @@ -70,7 +70,7 @@ describe('AggTypesMetricsPercentilesProvider class', () => { }, }, ], - { typesRegistry } + { typesRegistry, fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats } ); }); diff --git a/src/plugins/data/public/search/aggs/metrics/sibling_pipeline.test.ts b/src/plugins/data/public/search/aggs/metrics/sibling_pipeline.test.ts index ab480fe44227ec..a47aa2c677ade9 100644 --- a/src/plugins/data/public/search/aggs/metrics/sibling_pipeline.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/sibling_pipeline.test.ts @@ -111,7 +111,7 @@ describe('sibling pipeline aggs', () => { }, }, ], - { typesRegistry } + { typesRegistry, fieldFormats: getInternalStartServices().fieldFormats } ); // Grab the aggConfig off the vis (we don't actually use the vis for anything else) diff --git a/src/plugins/data/public/search/aggs/metrics/std_deviation.test.ts b/src/plugins/data/public/search/aggs/metrics/std_deviation.test.ts index 6bbff3009cc118..d2370e1fed02c6 100644 --- a/src/plugins/data/public/search/aggs/metrics/std_deviation.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/std_deviation.test.ts @@ -64,7 +64,7 @@ describe('AggTypeMetricStandardDeviationProvider class', () => { }, }, ], - { typesRegistry } + { typesRegistry, fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats } ); }; diff --git a/src/plugins/data/public/search/aggs/metrics/top_hit.test.ts b/src/plugins/data/public/search/aggs/metrics/top_hit.test.ts index 8294ad09bae228..142b8e4c83301f 100644 --- a/src/plugins/data/public/search/aggs/metrics/top_hit.test.ts +++ b/src/plugins/data/public/search/aggs/metrics/top_hit.test.ts @@ -89,7 +89,7 @@ describe('Top hit metric', () => { params, }, ], - { typesRegistry } + { typesRegistry, fieldFormats: aggTypesDependencies.getInternalStartServices().fieldFormats } ); // Grab the aggConfig off the vis (we don't actually use the vis for anything else) diff --git a/src/plugins/data/public/search/aggs/mocks.ts b/src/plugins/data/public/search/aggs/mocks.ts index 7a5dcc9be45929..16544fd8f46b08 100644 --- a/src/plugins/data/public/search/aggs/mocks.ts +++ b/src/plugins/data/public/search/aggs/mocks.ts @@ -27,6 +27,7 @@ import { } from './'; import { SearchAggsSetup, SearchAggsStart } from './types'; import { mockAggTypesRegistry } from './test_helpers'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; const aggTypeBaseParamMock = () => ({ name: 'some_param', @@ -72,6 +73,7 @@ export const searchAggsStartMock = (): SearchAggsStart => ({ createAggConfigs: jest.fn().mockImplementation((indexPattern, configStates = [], schemas) => { return new AggConfigs(indexPattern, configStates, { typesRegistry: mockAggTypesRegistry(), + fieldFormats: fieldFormatsServiceMock.createStartContract(), }); }), types: mockAggTypesRegistry(), diff --git a/src/plugins/data/public/search/expressions/create_filter.test.ts b/src/plugins/data/public/search/expressions/create_filter.test.ts index 23da060cba2032..51b5e175761bd7 100644 --- a/src/plugins/data/public/search/expressions/create_filter.test.ts +++ b/src/plugins/data/public/search/expressions/create_filter.test.ts @@ -22,10 +22,12 @@ import { AggConfigs, IAggConfig } from '../aggs'; import { TabbedTable } from '../tabify'; import { isRangeFilter, BytesFormat, FieldFormatsGetConfigFn } from '../../../common'; import { mockDataServices, mockAggTypesRegistry } from '../aggs/test_helpers'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; describe('createFilter', () => { let table: TabbedTable; let aggConfig: IAggConfig; + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const typesRegistry = mockAggTypesRegistry(); @@ -58,7 +60,7 @@ describe('createFilter', () => { params, }, ], - { typesRegistry } + { typesRegistry, fieldFormats } ); }; diff --git a/src/plugins/data/public/search/search_service.ts b/src/plugins/data/public/search/search_service.ts index 61246821848213..a539736991adb4 100644 --- a/src/plugins/data/public/search/search_service.ts +++ b/src/plugins/data/public/search/search_service.ts @@ -44,12 +44,19 @@ import { siblingPipelineAggHelper, } from './aggs'; +import { FieldFormatsStart } from '../field_formats'; + interface SearchServiceSetupDependencies { packageInfo: PackageInfo; query: QuerySetup; getInternalStartServices: GetInternalStartServicesFn; } +interface SearchStartDependencies { + fieldFormats: FieldFormatsStart; + indexPatterns: IndexPatternsContract; +} + /** * The search plugin exposes two registration methods for other plugins: * - registerSearchStrategyProvider for plugins to add their own custom @@ -110,7 +117,10 @@ export class SearchService implements Plugin { }; } - public start(core: CoreStart, indexPatterns: IndexPatternsContract): ISearchStart { + public start( + core: CoreStart, + { fieldFormats, indexPatterns }: SearchStartDependencies + ): ISearchStart { /** * A global object that intercepts all searches and provides convenience methods for cancelling * all pending search requests, as well as getting the number of pending search requests. @@ -131,6 +141,7 @@ export class SearchService implements Plugin { createAggConfigs: (indexPattern, configStates = [], schemas) => { return new AggConfigs(indexPattern, configStates, { typesRegistry: aggTypesStart, + fieldFormats, }); }, types: aggTypesStart, diff --git a/src/plugins/data/public/search/tabify/get_columns.test.ts b/src/plugins/data/public/search/tabify/get_columns.test.ts index b7dadc3f65d82a..1072e9318b40e9 100644 --- a/src/plugins/data/public/search/tabify/get_columns.test.ts +++ b/src/plugins/data/public/search/tabify/get_columns.test.ts @@ -21,6 +21,7 @@ import { tabifyGetColumns } from './get_columns'; import { TabbedAggColumn } from './types'; import { AggConfigs } from '../aggs'; import { mockAggTypesRegistry, mockDataServices } from '../aggs/test_helpers'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; describe('get columns', () => { beforeEach(() => { @@ -28,6 +29,7 @@ describe('get columns', () => { }); const typesRegistry = mockAggTypesRegistry(); + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const createAggConfigs = (aggs: any[] = []) => { const field = { @@ -45,6 +47,7 @@ describe('get columns', () => { return new AggConfigs(indexPattern, aggs, { typesRegistry, + fieldFormats, }); }; diff --git a/src/plugins/data/public/search/tabify/response_writer.test.ts b/src/plugins/data/public/search/tabify/response_writer.test.ts index 52338ae79ccbb6..3334d858ce54e9 100644 --- a/src/plugins/data/public/search/tabify/response_writer.test.ts +++ b/src/plugins/data/public/search/tabify/response_writer.test.ts @@ -21,6 +21,7 @@ import { TabbedAggResponseWriter } from './response_writer'; import { AggConfigs, BUCKET_TYPES } from '../aggs'; import { mockDataServices, mockAggTypesRegistry } from '../aggs/test_helpers'; import { TabbedResponseWriterOptions } from './types'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; describe('TabbedAggResponseWriter class', () => { beforeEach(() => { @@ -30,6 +31,7 @@ describe('TabbedAggResponseWriter class', () => { let responseWriter: TabbedAggResponseWriter; const typesRegistry = mockAggTypesRegistry(); + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const splitAggConfig = [ { @@ -74,6 +76,7 @@ describe('TabbedAggResponseWriter class', () => { return new TabbedAggResponseWriter( new AggConfigs(indexPattern, aggs, { typesRegistry, + fieldFormats, }), { metricsAtAllLevels: false, diff --git a/src/plugins/data/public/search/tabify/tabify.test.ts b/src/plugins/data/public/search/tabify/tabify.test.ts index c9bf04ae9f0fc3..63685cc87f5cfe 100644 --- a/src/plugins/data/public/search/tabify/tabify.test.ts +++ b/src/plugins/data/public/search/tabify/tabify.test.ts @@ -22,9 +22,11 @@ import { IndexPattern } from '../../index_patterns'; import { AggConfigs, IAggConfig, IAggConfigs } from '../aggs'; import { mockAggTypesRegistry } from '../aggs/test_helpers'; import { metricOnly, threeTermBuckets } from 'fixtures/fake_hierarchical_data'; +import { fieldFormatsServiceMock } from '../../field_formats/mocks'; describe('tabifyAggResponse Integration', () => { const typesRegistry = mockAggTypesRegistry(); + const fieldFormats = fieldFormatsServiceMock.createStartContract(); const createAggConfigs = (aggs: IAggConfig[] = []) => { const field = { @@ -42,6 +44,7 @@ describe('tabifyAggResponse Integration', () => { return new AggConfigs(indexPattern, aggs, { typesRegistry, + fieldFormats, }); }; From cf87efb9d0856acea74c64803f858409fcbc5461 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 15 Apr 2020 10:20:01 +0200 Subject: [PATCH 64/65] Add test:jest_integration npm script (#62938) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 388e46aedf37d2..c60cf5234c9f7c 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "test:karma": "grunt test:karma", "test:karma:debug": "grunt test:karmaDebug", "test:jest": "node scripts/jest", + "test:jest_integration": "node scripts/jest_integration", "test:mocha": "node scripts/mocha", "test:mocha:coverage": "grunt test:mochaCoverage", "test:ftr": "node scripts/functional_tests", From ebbc062689e3b130b6ea7dbd585a976fde406036 Mon Sep 17 00:00:00 2001 From: Tim Roes Date: Wed, 15 Apr 2020 12:22:37 +0200 Subject: [PATCH 65/65] Move Lens frontend to Kibana Platform (#62965) * Move Lens frontend to Kibana platform * Fix line breaks * Fix jest tests * Fix remaining test * Remove old Lens plugin entry * Fix i18n prefix * Add config schema * Address review --- .eslintrc.js | 4 +- .github/CODEOWNERS | 2 +- .sass-lint.yml | 2 +- x-pack/.i18nrc.json | 2 +- x-pack/index.js | 2 - x-pack/legacy/plugins/lens/index.ts | 38 ------------------ .../lens/public/app_plugin/_index.scss | 1 - .../datatable_visualization/_index.scss | 1 - .../plugins/lens/public/drag_drop/_index.scss | 1 - .../public/editor_frame_service/_index.scss | 1 - .../editor_frame/index.scss | 8 ---- .../indexpattern_datasource/_index.scss | 4 -- .../dimension_panel/_index.scss | 2 - x-pack/legacy/plugins/lens/public/legacy.ts | 17 -------- x-pack/legacy/plugins/lens/public/redirect.ts | 19 --------- .../lens/public/xy_visualization/_index.scss | 1 - x-pack/plugins/lens/config.ts | 13 ++++++ x-pack/plugins/lens/kibana.json | 12 +++++- .../plugins/lens/public/_mixins.scss | 0 .../plugins/lens/public/_variables.scss | 0 .../plugins/lens/public/app_plugin/_app.scss | 0 .../lens/public/app_plugin/_index.scss | 1 + .../lens/public/app_plugin/app.test.tsx | 28 +++++++------ .../plugins/lens/public/app_plugin/app.tsx | 14 ++++--- .../plugins/lens/public/app_plugin/index.ts | 0 .../plugins/lens/public/assets/chart_area.svg | 0 .../lens/public/assets/chart_area_stacked.svg | 0 .../plugins/lens/public/assets/chart_bar.svg | 0 .../public/assets/chart_bar_horizontal.svg | 0 .../assets/chart_bar_horizontal_stacked.svg | 0 .../lens/public/assets/chart_bar_stacked.svg | 0 .../lens/public/assets/chart_datatable.svg | 0 .../plugins/lens/public/assets/chart_line.svg | 0 .../lens/public/assets/chart_metric.svg | 0 .../lens/public/assets/chart_mixed_xy.svg | 0 .../assets/lens_app_graphic_dark_2x.png | Bin .../assets/lens_app_graphic_light_2x.png | Bin .../datatable_visualization/_index.scss | 1 + .../_visualization.scss | 0 .../datatable_visualization/expression.tsx | 2 +- .../public/datatable_visualization/index.ts | 4 +- .../visualization.test.tsx | 0 .../datatable_visualization/visualization.tsx | 0 .../debounced_component.test.tsx | 0 .../debounced_component.tsx | 0 .../lens/public/debounced_component/index.ts | 0 .../__snapshots__/drag_drop.test.tsx.snap | 0 .../lens/public/drag_drop/_drag_drop.scss | 0 .../plugins/lens/public/drag_drop/_index.scss | 1 + .../lens/public/drag_drop/drag_drop.test.tsx | 0 .../lens/public/drag_drop/drag_drop.tsx | 0 .../plugins/lens/public/drag_drop/index.ts | 0 .../lens/public/drag_drop/providers.test.tsx | 0 .../lens/public/drag_drop/providers.tsx | 0 .../plugins/lens/public/drag_drop/readme.md | 0 .../public/editor_frame_service/_index.scss | 1 + .../__mocks__/suggestion_helpers.ts | 0 .../editor_frame/_chart_switch.scss | 0 .../editor_frame/_config_panel_wrapper.scss | 0 .../editor_frame/_data_panel_wrapper.scss | 0 .../editor_frame/_expression_renderer.scss | 0 .../editor_frame/_frame_layout.scss | 0 .../editor_frame/_suggestion_panel.scss | 0 .../_workspace_panel_wrapper.scss | 0 .../editor_frame/chart_switch.test.tsx | 0 .../editor_frame/chart_switch.tsx | 0 .../editor_frame/config_panel_wrapper.tsx | 0 .../editor_frame/data_panel_wrapper.tsx | 5 +-- .../editor_frame/editor_frame.test.tsx | 0 .../editor_frame/editor_frame.tsx | 6 +-- .../editor_frame/expression_helpers.ts | 2 +- .../editor_frame/frame_layout.tsx | 0 .../editor_frame/index.scss | 8 ++++ .../editor_frame/index.ts | 0 .../editor_frame/layer_actions.test.ts | 0 .../editor_frame/layer_actions.ts | 0 .../editor_frame/save.test.ts | 2 +- .../editor_frame_service/editor_frame/save.ts | 0 .../editor_frame/state_management.test.ts | 2 +- .../editor_frame/state_management.ts | 2 +- .../editor_frame/suggestion_helpers.test.ts | 0 .../editor_frame/suggestion_helpers.ts | 0 .../editor_frame/suggestion_panel.test.tsx | 4 +- .../editor_frame/suggestion_panel.tsx | 2 +- .../editor_frame/workspace_panel.test.tsx | 4 +- .../editor_frame/workspace_panel.tsx | 4 +- .../editor_frame/workspace_panel_wrapper.tsx | 0 .../embeddable/embeddable.test.tsx | 4 +- .../embeddable/embeddable.tsx | 6 +-- .../embeddable/embeddable_factory.ts | 8 ++-- .../embeddable/expression_wrapper.tsx | 0 .../editor_frame_service/format_column.ts | 0 .../lens/public/editor_frame_service/index.ts | 0 .../editor_frame_service/merge_tables.test.ts | 2 - .../editor_frame_service/merge_tables.ts | 2 +- .../public/editor_frame_service/mocks.tsx | 8 ++-- .../editor_frame_service/service.test.tsx | 2 - .../public/editor_frame_service/service.tsx | 19 +++++---- .../plugins/lens/public/help_menu_util.tsx | 7 ++-- .../plugins/lens/public/helpers/index.ts | 0 .../lens/public/helpers/url_helper.test.ts | 2 +- .../plugins/lens/public/helpers/url_helper.ts | 2 +- .../public/id_generator/id_generator.test.ts | 0 .../lens/public/id_generator/id_generator.ts | 0 .../plugins/lens/public/id_generator/index.ts | 0 .../plugins/lens/public/index.scss | 11 ++--- .../{legacy => }/plugins/lens/public/index.ts | 0 .../__mocks__/loader.ts | 0 .../__mocks__/state_helpers.ts | 0 .../lens_field_icon.test.tsx.snap | 0 .../indexpattern_datasource/_datapanel.scss | 0 .../indexpattern_datasource/_field_item.scss | 2 +- .../indexpattern_datasource/_index.scss | 4 ++ .../indexpattern_datasource/auto_date.test.ts | 2 +- .../indexpattern_datasource/auto_date.ts | 4 +- .../change_indexpattern.tsx | 0 .../datapanel.test.tsx | 4 +- .../indexpattern_datasource/datapanel.tsx | 10 ++++- .../dimension_panel/_field_select.scss | 0 .../dimension_panel/_index.scss | 2 + .../dimension_panel/_popover.scss | 0 .../bucket_nesting_editor.test.tsx | 0 .../dimension_panel/bucket_nesting_editor.tsx | 0 .../dimension_panel/dimension_panel.test.tsx | 10 +---- .../dimension_panel/dimension_panel.tsx | 6 +-- .../dimension_panel/field_select.tsx | 0 .../dimension_panel/format_selector.tsx | 0 .../dimension_panel/index.ts | 0 .../dimension_panel/popover_editor.tsx | 0 .../indexpattern_datasource/document_field.ts | 0 .../field_item.test.tsx | 11 ++--- .../indexpattern_datasource/field_item.tsx | 19 ++++++--- .../public/indexpattern_datasource/index.ts | 8 ++-- .../indexpattern.test.ts | 6 +-- .../indexpattern_datasource/indexpattern.tsx | 11 ++--- .../indexpattern_suggestions.test.tsx | 1 - .../indexpattern_suggestions.ts | 0 .../layerpanel.test.tsx | 1 - .../indexpattern_datasource/layerpanel.tsx | 0 .../lens_field_icon.test.tsx | 0 .../lens_field_icon.tsx | 2 +- .../indexpattern_datasource/loader.test.ts | 2 - .../public/indexpattern_datasource/loader.ts | 10 ++--- .../public/indexpattern_datasource/mocks.ts | 0 .../operations/__mocks__/index.ts | 0 .../operations/definitions/cardinality.tsx | 2 +- .../operations/definitions/column_types.ts | 0 .../operations/definitions/count.tsx | 2 +- .../definitions/date_histogram.test.tsx | 8 ++-- .../operations/definitions/date_histogram.tsx | 7 +--- .../operations/definitions/index.ts | 6 +-- .../operations/definitions/metrics.tsx | 2 +- .../operations/definitions/terms.test.tsx | 8 ++-- .../operations/definitions/terms.tsx | 2 +- .../operations/index.ts | 0 .../operations/operations.test.ts | 3 +- .../operations/operations.ts | 0 .../pure_helpers.test.ts | 0 .../indexpattern_datasource/pure_helpers.ts | 0 .../rename_columns.test.ts | 4 +- .../indexpattern_datasource/rename_columns.ts | 0 .../state_helpers.test.ts | 1 - .../indexpattern_datasource/state_helpers.ts | 0 .../indexpattern_datasource/to_expression.ts | 0 .../public/indexpattern_datasource/types.ts | 2 +- .../public/indexpattern_datasource/utils.ts | 0 .../public/lens_ui_telemetry/factory.test.ts | 0 .../lens/public/lens_ui_telemetry/factory.ts | 4 +- .../lens/public/lens_ui_telemetry/index.ts | 0 .../plugins/lens/public/loader.test.tsx | 0 .../plugins/lens/public/loader.tsx | 0 .../metric_visualization/auto_scale.test.tsx | 0 .../metric_visualization/auto_scale.tsx | 0 .../public/metric_visualization/index.scss | 0 .../lens/public/metric_visualization/index.ts | 4 +- .../metric_expression.test.tsx | 4 +- .../metric_expression.tsx | 2 +- .../metric_suggestions.test.ts | 2 +- .../metric_suggestions.ts | 0 .../metric_visualization.test.ts | 0 .../metric_visualization.tsx | 0 .../lens/public/metric_visualization/types.ts | 0 .../lens/public/native_renderer/index.ts | 0 .../native_renderer/native_renderer.test.tsx | 0 .../native_renderer/native_renderer.tsx | 0 .../plugins/lens/public/persistence/index.ts | 0 .../persistence/saved_object_store.test.ts | 0 .../public/persistence/saved_object_store.ts | 4 +- .../plugins/lens/public/plugin.tsx | 23 ++++++----- .../{legacy => }/plugins/lens/public/types.ts | 11 ++--- .../plugins/lens/public/vis_type_alias.ts | 2 +- .../public/visualization_container.test.tsx | 0 .../lens/public/visualization_container.tsx | 0 .../__snapshots__/to_expression.test.ts.snap | 0 .../__snapshots__/xy_expression.test.tsx.snap | 0 .../lens/public/xy_visualization/_index.scss | 1 + .../xy_visualization/_xy_expression.scss | 0 .../lens/public/xy_visualization/index.ts | 6 +-- .../lens/public/xy_visualization/services.ts | 4 +- .../public/xy_visualization/state_helpers.ts | 0 .../xy_visualization/to_expression.test.ts | 0 .../public/xy_visualization/to_expression.ts | 0 .../lens/public/xy_visualization/types.ts | 2 +- .../xy_visualization/xy_config_panel.test.tsx | 0 .../xy_visualization/xy_config_panel.tsx | 0 .../xy_visualization/xy_expression.test.tsx | 7 +--- .../public/xy_visualization/xy_expression.tsx | 8 ++-- .../xy_visualization/xy_suggestions.test.ts | 0 .../public/xy_visualization/xy_suggestions.ts | 0 .../xy_visualization/xy_visualization.test.ts | 0 .../xy_visualization/xy_visualization.tsx | 0 x-pack/{legacy => }/plugins/lens/readme.md | 0 x-pack/plugins/lens/server/index.ts | 8 +++- 213 files changed, 249 insertions(+), 301 deletions(-) delete mode 100644 x-pack/legacy/plugins/lens/index.ts delete mode 100644 x-pack/legacy/plugins/lens/public/app_plugin/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/datatable_visualization/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/drag_drop/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/editor_frame_service/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/indexpattern_datasource/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/_index.scss delete mode 100644 x-pack/legacy/plugins/lens/public/legacy.ts delete mode 100644 x-pack/legacy/plugins/lens/public/redirect.ts delete mode 100644 x-pack/legacy/plugins/lens/public/xy_visualization/_index.scss create mode 100644 x-pack/plugins/lens/config.ts rename x-pack/{legacy => }/plugins/lens/public/_mixins.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/_variables.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/app_plugin/_app.scss (100%) create mode 100644 x-pack/plugins/lens/public/app_plugin/_index.scss rename x-pack/{legacy => }/plugins/lens/public/app_plugin/app.test.tsx (96%) rename x-pack/{legacy => }/plugins/lens/public/app_plugin/app.tsx (96%) rename x-pack/{legacy => }/plugins/lens/public/app_plugin/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_area.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_area_stacked.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_bar.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_bar_horizontal.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_bar_horizontal_stacked.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_bar_stacked.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_datatable.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_line.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_metric.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/chart_mixed_xy.svg (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/lens_app_graphic_dark_2x.png (100%) rename x-pack/{legacy => }/plugins/lens/public/assets/lens_app_graphic_light_2x.png (100%) create mode 100644 x-pack/plugins/lens/public/datatable_visualization/_index.scss rename x-pack/{legacy => }/plugins/lens/public/datatable_visualization/_visualization.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/datatable_visualization/expression.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/datatable_visualization/index.ts (89%) rename x-pack/{legacy => }/plugins/lens/public/datatable_visualization/visualization.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/datatable_visualization/visualization.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/debounced_component/debounced_component.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/debounced_component/debounced_component.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/debounced_component/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/__snapshots__/drag_drop.test.tsx.snap (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/_drag_drop.scss (100%) create mode 100644 x-pack/plugins/lens/public/drag_drop/_index.scss rename x-pack/{legacy => }/plugins/lens/public/drag_drop/drag_drop.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/drag_drop.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/providers.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/providers.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/drag_drop/readme.md (100%) create mode 100644 x-pack/plugins/lens/public/editor_frame_service/_index.scss rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/__mocks__/suggestion_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_chart_switch.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_config_panel_wrapper.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_data_panel_wrapper.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_expression_renderer.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_frame_layout.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_suggestion_panel.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/_workspace_panel_wrapper.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/chart_switch.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/chart_switch.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/config_panel_wrapper.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx (94%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/editor_frame.tsx (97%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/expression_helpers.ts (97%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.tsx (100%) create mode 100644 x-pack/plugins/lens/public/editor_frame_service/editor_frame/index.scss rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/layer_actions.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/layer_actions.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/save.test.ts (98%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/save.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel_wrapper.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx (96%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx (94%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts (91%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/embeddable/expression_wrapper.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/format_column.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/merge_tables.test.ts (98%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/merge_tables.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/mocks.tsx (92%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/service.test.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/editor_frame_service/service.tsx (91%) rename x-pack/{legacy => }/plugins/lens/public/help_menu_util.tsx (63%) rename x-pack/{legacy => }/plugins/lens/public/helpers/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/helpers/url_helper.test.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/helpers/url_helper.ts (95%) rename x-pack/{legacy => }/plugins/lens/public/id_generator/id_generator.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/id_generator/id_generator.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/id_generator/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/index.scss (54%) rename x-pack/{legacy => }/plugins/lens/public/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/__mocks__/loader.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/__mocks__/state_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/__snapshots__/lens_field_icon.test.tsx.snap (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/_datapanel.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/_field_item.scss (98%) create mode 100644 x-pack/plugins/lens/public/indexpattern_datasource/_index.scss rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/auto_date.test.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/auto_date.ts (92%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/change_indexpattern.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/datapanel.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/_field_select.scss (100%) create mode 100644 x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/_index.scss rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/_popover.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/bucket_nesting_editor.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.tsx (97%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/field_select.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/format_selector.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/dimension_panel/popover_editor.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/document_field.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/field_item.test.tsx (95%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/field_item.tsx (97%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/index.ts (84%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/indexpattern.tsx (96%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/layerpanel.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/lens_field_icon.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx (86%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/loader.test.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/loader.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/mocks.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/__mocks__/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx (97%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts (97%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/operations/operations.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/pure_helpers.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/pure_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/rename_columns.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/state_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/to_expression.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/types.ts (94%) rename x-pack/{legacy => }/plugins/lens/public/indexpattern_datasource/utils.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/lens_ui_telemetry/factory.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/lens_ui_telemetry/factory.ts (96%) rename x-pack/{legacy => }/plugins/lens/public/lens_ui_telemetry/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/loader.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/loader.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/auto_scale.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/auto_scale.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/index.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/index.ts (88%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_expression.test.tsx (94%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_expression.tsx (98%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_suggestions.test.ts (98%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_suggestions.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_visualization.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/metric_visualization.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/metric_visualization/types.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/native_renderer/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/native_renderer/native_renderer.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/native_renderer/native_renderer.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/persistence/index.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/persistence/saved_object_store.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/persistence/saved_object_store.ts (94%) rename x-pack/{legacy => }/plugins/lens/public/plugin.tsx (90%) rename x-pack/{legacy => }/plugins/lens/public/types.ts (98%) rename x-pack/{legacy => }/plugins/lens/public/vis_type_alias.ts (95%) rename x-pack/{legacy => }/plugins/lens/public/visualization_container.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/visualization_container.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap (100%) create mode 100644 x-pack/plugins/lens/public/xy_visualization/_index.scss rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/_xy_expression.scss (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/index.ts (89%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/services.ts (70%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/state_helpers.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/to_expression.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/to_expression.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/types.ts (99%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_config_panel.test.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_config_panel.tsx (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_expression.test.tsx (99%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_expression.tsx (97%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_suggestions.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_suggestions.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_visualization.test.ts (100%) rename x-pack/{legacy => }/plugins/lens/public/xy_visualization/xy_visualization.tsx (100%) rename x-pack/{legacy => }/plugins/lens/readme.md (100%) diff --git a/.eslintrc.js b/.eslintrc.js index 2ce6d279d93a9f..246702aedf8636 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -109,7 +109,7 @@ module.exports = { }, }, { - files: ['x-pack/legacy/plugins/lens/**/*.{js,ts,tsx}'], + files: ['x-pack/plugins/lens/**/*.{js,ts,tsx}'], rules: { 'react-hooks/exhaustive-deps': 'off', 'react-hooks/rules-of-hooks': 'off', @@ -728,7 +728,7 @@ module.exports = { * Lens overrides */ { - files: ['x-pack/legacy/plugins/lens/**/*.{ts,tsx}', 'x-pack/plugins/lens/**/*.{ts,tsx}'], + files: ['x-pack/plugins/lens/**/*.{ts,tsx}'], rules: { '@typescript-eslint/no-explicit-any': 'error', }, diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 267f3dde0b66f9..71d857c1c90414 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,7 +3,7 @@ # For more info, see https://help.github.com/articles/about-codeowners/ # App -/x-pack/legacy/plugins/lens/ @elastic/kibana-app +/x-pack/plugins/lens/ @elastic/kibana-app /x-pack/legacy/plugins/graph/ @elastic/kibana-app /src/legacy/server/url_shortening/ @elastic/kibana-app /src/legacy/server/sample_data/ @elastic/kibana-app diff --git a/.sass-lint.yml b/.sass-lint.yml index dd7bc0576692b5..0c33eaf794c69c 100644 --- a/.sass-lint.yml +++ b/.sass-lint.yml @@ -8,9 +8,9 @@ files: - 'x-pack/legacy/plugins/security/**/*.s+(a|c)ss' - 'x-pack/legacy/plugins/canvas/**/*.s+(a|c)ss' - 'x-pack/plugins/triggers_actions_ui/**/*.s+(a|c)ss' + - 'x-pack/plugins/lens/**/*.s+(a|c)ss' ignore: - 'x-pack/legacy/plugins/canvas/shareable_runtime/**/*.s+(a|c)ss' - - 'x-pack/legacy/plugins/lens/**/*.s+(a|c)ss' - 'x-pack/legacy/plugins/maps/**/*.s+(a|c)ss' rules: quotes: diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index b3744f7cf93ab6..50f36ddd21c97d 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -21,7 +21,7 @@ "xpack.indexLifecycleMgmt": "plugins/index_lifecycle_management", "xpack.infra": "plugins/infra", "xpack.ingestManager": "plugins/ingest_manager", - "xpack.lens": "legacy/plugins/lens", + "xpack.lens": "plugins/lens", "xpack.licenseMgmt": "plugins/license_management", "xpack.licensing": "plugins/licensing", "xpack.logstash": ["plugins/logstash", "legacy/plugins/logstash"], diff --git a/x-pack/index.js b/x-pack/index.js index 3126dc17a71073..61fd4f17523160 100644 --- a/x-pack/index.js +++ b/x-pack/index.js @@ -29,7 +29,6 @@ import { uptime } from './legacy/plugins/uptime'; import { encryptedSavedObjects } from './legacy/plugins/encrypted_saved_objects'; import { actions } from './legacy/plugins/actions'; import { alerting } from './legacy/plugins/alerting'; -import { lens } from './legacy/plugins/lens'; import { ingestManager } from './legacy/plugins/ingest_manager'; import { triggersActionsUI } from './legacy/plugins/triggers_actions_ui'; @@ -58,7 +57,6 @@ module.exports = function(kibana) { upgradeAssistant(kibana), uptime(kibana), encryptedSavedObjects(kibana), - lens(kibana), actions(kibana), alerting(kibana), ingestManager(kibana), diff --git a/x-pack/legacy/plugins/lens/index.ts b/x-pack/legacy/plugins/lens/index.ts deleted file mode 100644 index e9a901c58cd90e..00000000000000 --- a/x-pack/legacy/plugins/lens/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import * as Joi from 'joi'; -import { resolve } from 'path'; -import { LegacyPluginInitializer } from 'src/legacy/types'; -import { PLUGIN_ID, NOT_INTERNATIONALIZED_PRODUCT_NAME } from '../../../plugins/lens/common'; - -export const lens: LegacyPluginInitializer = kibana => { - return new kibana.Plugin({ - id: PLUGIN_ID, - configPrefix: `xpack.${PLUGIN_ID}`, - // task_manager could be required, but is only used for telemetry - require: ['kibana', 'elasticsearch', 'xpack_main', 'interpreter'], - publicDir: resolve(__dirname, 'public'), - - uiExports: { - app: { - title: NOT_INTERNATIONALIZED_PRODUCT_NAME, - description: 'Explore and visualize data.', - main: `plugins/${PLUGIN_ID}/redirect`, - listed: false, - }, - visualize: [`plugins/${PLUGIN_ID}/legacy`], - embeddableFactories: [`plugins/${PLUGIN_ID}/legacy`], - styleSheetPaths: resolve(__dirname, 'public/index.scss'), - }, - - config: () => { - return Joi.object({ - enabled: Joi.boolean().default(true), - }).default(); - }, - }); -}; diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/_index.scss b/x-pack/legacy/plugins/lens/public/app_plugin/_index.scss deleted file mode 100644 index 2ac86f0e58a61f..00000000000000 --- a/x-pack/legacy/plugins/lens/public/app_plugin/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './app'; diff --git a/x-pack/legacy/plugins/lens/public/datatable_visualization/_index.scss b/x-pack/legacy/plugins/lens/public/datatable_visualization/_index.scss deleted file mode 100644 index 99c357b53952f6..00000000000000 --- a/x-pack/legacy/plugins/lens/public/datatable_visualization/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './visualization'; diff --git a/x-pack/legacy/plugins/lens/public/drag_drop/_index.scss b/x-pack/legacy/plugins/lens/public/drag_drop/_index.scss deleted file mode 100644 index 1b3d0cf0a3c2a9..00000000000000 --- a/x-pack/legacy/plugins/lens/public/drag_drop/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './drag_drop' diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/_index.scss b/x-pack/legacy/plugins/lens/public/editor_frame_service/_index.scss deleted file mode 100644 index 4d7e054ff03c30..00000000000000 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './editor_frame/index'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/index.scss b/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/index.scss deleted file mode 100644 index 6c6a63c8c7eb6d..00000000000000 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/index.scss +++ /dev/null @@ -1,8 +0,0 @@ -@import './chart_switch'; -@import './config_panel_wrapper'; -@import './data_panel_wrapper'; -@import './expression_renderer'; -@import './frame_layout'; -@import './suggestion_panel'; -@import './workspace_panel_wrapper'; - diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_index.scss b/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_index.scss deleted file mode 100644 index a283198d6cf73c..00000000000000 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_index.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import './datapanel'; -@import './field_item'; - -@import './dimension_panel/index'; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/_index.scss b/x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/_index.scss deleted file mode 100644 index 26f805fe735f02..00000000000000 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/dimension_panel/_index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import './field_select'; -@import './popover'; diff --git a/x-pack/legacy/plugins/lens/public/legacy.ts b/x-pack/legacy/plugins/lens/public/legacy.ts deleted file mode 100644 index 3b7b6a7a1b5108..00000000000000 --- a/x-pack/legacy/plugins/lens/public/legacy.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { npSetup, npStart } from 'ui/new_platform'; - -export * from './types'; - -import { plugin } from './index'; - -const pluginInstance = plugin(); -pluginInstance.setup(npSetup.core, { - ...npSetup.plugins, -}); -pluginInstance.start(npStart.core, npStart.plugins); diff --git a/x-pack/legacy/plugins/lens/public/redirect.ts b/x-pack/legacy/plugins/lens/public/redirect.ts deleted file mode 100644 index 25b0188214c5e4..00000000000000 --- a/x-pack/legacy/plugins/lens/public/redirect.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -// This file redirects lens urls starting with app/lens#... to their counterpart on app/kibana#lens/... to -// make sure it's compatible with the 7.5 release - -import { npSetup } from 'ui/new_platform'; -import chrome from 'ui/chrome'; - -chrome.setRootController('lens', () => { - // prefix the path in the hash with lens/ - const prefixedHashRoute = window.location.hash.replace(/^#\//, '#/lens/'); - - // redirect to the new lens url `app/kibana#/lens/...` - window.location.href = npSetup.core.http.basePath.prepend('/app/kibana' + prefixedHashRoute); -}); diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/_index.scss b/x-pack/legacy/plugins/lens/public/xy_visualization/_index.scss deleted file mode 100644 index 794ed4aed82ec6..00000000000000 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './_xy_expression'; diff --git a/x-pack/plugins/lens/config.ts b/x-pack/plugins/lens/config.ts new file mode 100644 index 00000000000000..84cf02a7ea541b --- /dev/null +++ b/x-pack/plugins/lens/config.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +export const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: true }), +}); + +export type ConfigSchema = TypeOf; diff --git a/x-pack/plugins/lens/kibana.json b/x-pack/plugins/lens/kibana.json index 6abdaad7903be8..ce544b31b88ef4 100644 --- a/x-pack/plugins/lens/kibana.json +++ b/x-pack/plugins/lens/kibana.json @@ -3,7 +3,15 @@ "version": "8.0.0", "kibanaVersion": "kibana", "server": true, - "ui": false, - "optionalPlugins": ["usageCollection", "taskManager"], + "ui": true, + "requiredPlugins": [ + "data", + "expressions", + "navigation", + "kibanaLegacy", + "uiActions", + "visualizations" + ], + "optionalPlugins": ["embeddable", "usageCollection", "taskManager"], "configPath": ["xpack", "lens"] } diff --git a/x-pack/legacy/plugins/lens/public/_mixins.scss b/x-pack/plugins/lens/public/_mixins.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/_mixins.scss rename to x-pack/plugins/lens/public/_mixins.scss diff --git a/x-pack/legacy/plugins/lens/public/_variables.scss b/x-pack/plugins/lens/public/_variables.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/_variables.scss rename to x-pack/plugins/lens/public/_variables.scss diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/_app.scss b/x-pack/plugins/lens/public/app_plugin/_app.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/app_plugin/_app.scss rename to x-pack/plugins/lens/public/app_plugin/_app.scss diff --git a/x-pack/plugins/lens/public/app_plugin/_index.scss b/x-pack/plugins/lens/public/app_plugin/_index.scss new file mode 100644 index 00000000000000..e72e8242249562 --- /dev/null +++ b/x-pack/plugins/lens/public/app_plugin/_index.scss @@ -0,0 +1 @@ +@import 'app'; diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/app.test.tsx b/x-pack/plugins/lens/public/app_plugin/app.test.tsx similarity index 96% rename from x-pack/legacy/plugins/lens/public/app_plugin/app.test.tsx rename to x-pack/plugins/lens/public/app_plugin/app.test.tsx index be72dd4b4edefe..d49c128dff604a 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/app.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.test.tsx @@ -9,7 +9,7 @@ import { ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { App } from './app'; import { EditorFrameInstance } from '../types'; -import { Storage } from '../../../../../../src/plugins/kibana_utils/public'; +import { Storage } from '../../../../../src/plugins/kibana_utils/public'; import { Document, SavedObjectStore } from '../persistence'; import { mount } from 'enzyme'; import { @@ -17,25 +17,24 @@ import { FilterManager, IFieldType, IIndexPattern, -} from '../../../../../../src/plugins/data/public'; -import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; +} from '../../../../../src/plugins/data/public'; +import { dataPluginMock } from '../../../../../src/plugins/data/public/mocks'; const dataStartMock = dataPluginMock.createStartContract(); -import { TopNavMenuData } from '../../../../../../src/plugins/navigation/public'; +import { navigationPluginMock } from '../../../../../src/plugins/navigation/public/mocks'; +import { TopNavMenuData } from '../../../../../src/plugins/navigation/public'; import { coreMock } from 'src/core/public/mocks'; -jest.mock('ui/new_platform'); jest.mock('../persistence'); jest.mock('src/core/public'); -import { npStart } from 'ui/new_platform'; -jest - .spyOn(npStart.plugins.navigation.ui.TopNavMenu.prototype, 'constructor') - .mockImplementation(() => { - return
; - }); +const navigationStartMock = navigationPluginMock.createStartContract(); + +jest.spyOn(navigationStartMock.ui.TopNavMenu.prototype, 'constructor').mockImplementation(() => { + return
; +}); -const { TopNavMenu } = npStart.plugins.navigation.ui; +const { TopNavMenu } = navigationStartMock.ui; function createMockFrame(): jest.Mocked { return { @@ -99,6 +98,7 @@ describe('Lens App', () => { function makeDefaultArgs(): jest.Mocked<{ editorFrame: EditorFrameInstance; data: typeof dataStartMock; + navigation: typeof navigationStartMock; core: typeof core; storage: Storage; docId?: string; @@ -107,6 +107,7 @@ describe('Lens App', () => { addToDashboardMode?: boolean; }> { return ({ + navigation: navigationStartMock, editorFrame: createMockFrame(), core: { ...core, @@ -140,6 +141,7 @@ describe('Lens App', () => { }, redirectTo: jest.fn(id => {}), } as unknown) as jest.Mocked<{ + navigation: typeof navigationStartMock; editorFrame: EditorFrameInstance; data: typeof dataStartMock; core: typeof core; @@ -338,6 +340,7 @@ describe('Lens App', () => { let defaultArgs: jest.Mocked<{ editorFrame: EditorFrameInstance; + navigation: typeof navigationStartMock; data: typeof dataStartMock; core: typeof core; storage: Storage; @@ -654,6 +657,7 @@ describe('Lens App', () => { let defaultArgs: jest.Mocked<{ editorFrame: EditorFrameInstance; data: typeof dataStartMock; + navigation: typeof navigationStartMock; core: typeof core; storage: Storage; docId?: string; diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx b/x-pack/plugins/lens/public/app_plugin/app.tsx similarity index 96% rename from x-pack/legacy/plugins/lens/public/app_plugin/app.tsx rename to x-pack/plugins/lens/public/app_plugin/app.tsx index dfea2e39fcbc5f..2d8f1650e40082 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.tsx @@ -9,12 +9,12 @@ import React, { useState, useEffect, useCallback } from 'react'; import { I18nProvider } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; import { Query, DataPublicPluginStart } from 'src/plugins/data/public'; -import { AppMountContext, NotificationsStart } from 'src/core/public'; +import { NavigationPublicPluginStart } from 'src/plugins/navigation/public'; +import { AppMountContext, NotificationsStart } from 'kibana/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; -import { npStart } from 'ui/new_platform'; import { FormattedMessage } from '@kbn/i18n/react'; -import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; -import { SavedObjectSaveModal } from '../../../../../../src/plugins/saved_objects/public'; +import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/public'; +import { SavedObjectSaveModal } from '../../../../../src/plugins/saved_objects/public'; import { Document, SavedObjectStore } from '../persistence'; import { EditorFrameInstance } from '../types'; import { NativeRenderer } from '../native_renderer'; @@ -25,7 +25,7 @@ import { IndexPattern as IndexPatternInstance, IndexPatternsContract, SavedQuery, -} from '../../../../../../src/plugins/data/public'; +} from '../../../../../src/plugins/data/public'; interface State { isLoading: boolean; @@ -53,9 +53,11 @@ export function App({ docStorage, redirectTo, addToDashboardMode, + navigation, }: { editorFrame: EditorFrameInstance; data: DataPublicPluginStart; + navigation: NavigationPublicPluginStart; core: AppMountContext['core']; storage: IStorageWrapper; docId?: string; @@ -188,7 +190,7 @@ export function App({ [] ); - const { TopNavMenu } = npStart.plugins.navigation.ui; + const { TopNavMenu } = navigation.ui; const confirmButton = addToDashboardMode ? ( { const mockVisualization = createMockVisualization(); diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/save.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/save.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/save.ts rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/save.ts diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts index 4aaf2a3ee9e81e..1f62929783b631 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.test.ts @@ -5,7 +5,7 @@ */ import { getInitialState, reducer } from './state_management'; -import { EditorFrameProps } from '.'; +import { EditorFrameProps } from './index'; import { Datasource, Visualization } from '../../types'; import { createExpressionRendererMock } from '../mocks'; import { coreMock } from 'src/core/public/mocks'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts index 7d763bcac2cc9b..bb6daf5641a64a 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/state_management.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EditorFrameProps } from '../editor_frame'; +import { EditorFrameProps } from './index'; import { Document } from '../../persistence/saved_object_store'; export interface PreviewState { diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.test.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.test.ts rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.test.ts diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_helpers.ts diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx index 0e32f1f053b9d5..240bdff40b51ce 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.test.tsx @@ -15,8 +15,8 @@ import { createMockFramePublicAPI, } from '../mocks'; import { act } from 'react-dom/test-utils'; -import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; -import { esFilters, IFieldType, IIndexPattern } from '../../../../../../../src/plugins/data/public'; +import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; +import { esFilters, IFieldType, IIndexPattern } from '../../../../../../src/plugins/data/public'; import { SuggestionPanel, SuggestionPanelProps } from './suggestion_panel'; import { getSuggestions, Suggestion } from './suggestion_helpers'; import { EuiIcon, EuiPanel, EuiToolTip } from '@elastic/eui'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx index 76443027ab88a9..867214d15578a2 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx @@ -24,7 +24,7 @@ import classNames from 'classnames'; import { Action, PreviewState } from './state_management'; import { Datasource, Visualization, FramePublicAPI, DatasourcePublicAPI } from '../../types'; import { getSuggestions, switchToSuggestion } from './suggestion_helpers'; -import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; +import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; import { prependDatasourceExpression, prependKibanaContext } from './expression_helpers'; import { debouncedComponent } from '../../debounced_component'; import { trackUiEvent, trackSuggestionEvent } from '../../lens_ui_telemetry'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx index 748e5b876da951..33ecee53fa3bc2 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.test.tsx @@ -6,7 +6,7 @@ import React from 'react'; import { act } from 'react-dom/test-utils'; -import { ReactExpressionRendererProps } from '../../../../../../../src/plugins/expressions/public'; +import { ReactExpressionRendererProps } from '../../../../../../src/plugins/expressions/public'; import { FramePublicAPI, TableSuggestion, Visualization } from '../../types'; import { createMockVisualization, @@ -21,7 +21,7 @@ import { ReactWrapper } from 'enzyme'; import { DragDrop, ChildDragDropProvider } from '../../drag_drop'; import { Ast } from '@kbn/interpreter/common'; import { coreMock } from 'src/core/public/mocks'; -import { esFilters, IFieldType, IIndexPattern } from '../../../../../../../src/plugins/data/public'; +import { esFilters, IFieldType, IIndexPattern } from '../../../../../../src/plugins/data/public'; describe('workspace_panel', () => { let mockVisualization: jest.Mocked; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx index c2a5c16e405a22..1f741ca37934fc 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel.tsx @@ -16,8 +16,8 @@ import { EuiBetaBadge, EuiButtonEmpty, } from '@elastic/eui'; -import { CoreStart, CoreSetup } from 'src/core/public'; -import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; +import { CoreStart, CoreSetup } from 'kibana/public'; +import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; import { Action } from './state_management'; import { Datasource, Visualization, FramePublicAPI } from '../../types'; import { DragDrop, DragContext } from '../../drag_drop'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel_wrapper.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel_wrapper.tsx rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel_wrapper.tsx diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx similarity index 96% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx rename to x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx index 55363ebe4d8f3e..aeae64514b0fdc 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.test.tsx @@ -9,9 +9,9 @@ import { Embeddable } from './embeddable'; import { ReactExpressionRendererProps } from 'src/plugins/expressions/public'; import { Query, TimeRange, Filter, TimefilterContract } from 'src/plugins/data/public'; import { Document } from '../../persistence'; -import { dataPluginMock } from '../../../../../../../src/plugins/data/public/mocks'; +import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; -jest.mock('../../../../../../../src/plugins/inspector/public/', () => ({ +jest.mock('../../../../../../src/plugins/inspector/public/', () => ({ isAvailable: false, open: false, })); diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx similarity index 94% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx rename to x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx index c2ab1c72af545f..0ef5f6d1a54706 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable.tsx @@ -16,15 +16,15 @@ import { } from 'src/plugins/data/public'; import { Subscription } from 'rxjs'; -import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; -import { VIS_EVENT_TO_TRIGGER } from '../../../../../../../src/plugins/visualizations/public'; +import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; +import { VIS_EVENT_TO_TRIGGER } from '../../../../../../src/plugins/visualizations/public'; import { Embeddable as AbstractEmbeddable, EmbeddableOutput, IContainer, EmbeddableInput, -} from '../../../../../../../src/plugins/embeddable/public'; +} from '../../../../../../src/plugins/embeddable/public'; import { Document, DOC_TYPE } from '../../persistence'; import { ExpressionWrapper } from './expression_wrapper'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts similarity index 91% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts rename to x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts index 99a59c756e2281..68dbff263f60d2 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/embeddable/embeddable_factory.ts @@ -15,17 +15,17 @@ import { IndexPatternsContract, IndexPattern, TimefilterContract, -} from '../../../../../../../src/plugins/data/public'; -import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; +} from '../../../../../../src/plugins/data/public'; +import { ReactExpressionRendererType } from '../../../../../../src/plugins/expressions/public'; import { EmbeddableFactoryDefinition, ErrorEmbeddable, EmbeddableInput, IContainer, -} from '../../../../../../../src/plugins/embeddable/public'; +} from '../../../../../../src/plugins/embeddable/public'; import { Embeddable } from './embeddable'; import { SavedObjectIndexStore, DOC_TYPE } from '../../persistence'; -import { getEditPath } from '../../../../../../plugins/lens/common'; +import { getEditPath } from '../../../common'; interface StartServices { timefilter: TimefilterContract; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/expression_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/embeddable/expression_wrapper.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/embeddable/expression_wrapper.tsx rename to x-pack/plugins/lens/public/editor_frame_service/embeddable/expression_wrapper.tsx diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/format_column.ts b/x-pack/plugins/lens/public/editor_frame_service/format_column.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/format_column.ts rename to x-pack/plugins/lens/public/editor_frame_service/format_column.ts diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/index.ts b/x-pack/plugins/lens/public/editor_frame_service/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/index.ts rename to x-pack/plugins/lens/public/editor_frame_service/index.ts diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.test.ts b/x-pack/plugins/lens/public/editor_frame_service/merge_tables.test.ts similarity index 98% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.test.ts rename to x-pack/plugins/lens/public/editor_frame_service/merge_tables.test.ts index 9368674de31c50..243441f2c8ab3c 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.test.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/merge_tables.test.ts @@ -8,8 +8,6 @@ import moment from 'moment'; import { mergeTables } from './merge_tables'; import { KibanaDatatable } from 'src/plugins/expressions'; -jest.mock('ui/new_platform'); - describe('lens_merge_tables', () => { it('should produce a row with the nested table as defined', () => { const sampleTable1: KibanaDatatable = { diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.ts b/x-pack/plugins/lens/public/editor_frame_service/merge_tables.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.ts rename to x-pack/plugins/lens/public/editor_frame_service/merge_tables.ts index c06640fb25de69..7c10ee4a57fadc 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/merge_tables.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/merge_tables.ts @@ -10,7 +10,7 @@ import { ExpressionValueSearchContext, KibanaDatatable, } from 'src/plugins/expressions/public'; -import { search } from '../../../../../../src/plugins/data/public'; +import { search } from '../../../../../src/plugins/data/public'; const { toAbsoluteDates } = search.aggs; import { LensMultiTable } from '../types'; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/mocks.tsx b/x-pack/plugins/lens/public/editor_frame_service/mocks.tsx similarity index 92% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/mocks.tsx rename to x-pack/plugins/lens/public/editor_frame_service/mocks.tsx index 5d2f68a5567ebd..50cd1ad8bd53a4 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/mocks.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/mocks.tsx @@ -9,12 +9,12 @@ import { ReactExpressionRendererProps, ExpressionsSetup, ExpressionsStart, -} from '../../../../../../src/plugins/expressions/public'; -import { embeddablePluginMock } from '../../../../../../src/plugins/embeddable/public/mocks'; -import { expressionsPluginMock } from '../../../../../../src/plugins/expressions/public/mocks'; +} from '../../../../../src/plugins/expressions/public'; +import { embeddablePluginMock } from '../../../../../src/plugins/embeddable/public/mocks'; +import { expressionsPluginMock } from '../../../../../src/plugins/expressions/public/mocks'; import { DatasourcePublicAPI, FramePublicAPI, Datasource, Visualization } from '../types'; import { EditorFrameSetupPlugins, EditorFrameStartPlugins } from './service'; -import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; +import { dataPluginMock } from '../../../../../src/plugins/data/public/mocks'; export function createMockVisualization(): jest.Mocked { return { diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/service.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/service.test.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/service.test.tsx rename to x-pack/plugins/lens/public/editor_frame_service/service.test.tsx index 42a1fcc055a1ed..fbd65c5044d518 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/service.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/service.test.tsx @@ -14,8 +14,6 @@ import { } from './mocks'; import { CoreSetup } from 'kibana/public'; -jest.mock('ui/new_platform'); - // mock away actual dependencies to prevent all of it being loaded jest.mock('./embeddable/embeddable_factory', () => ({ EmbeddableFactory: class Mock {}, diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_service/service.tsx b/x-pack/plugins/lens/public/editor_frame_service/service.tsx similarity index 91% rename from x-pack/legacy/plugins/lens/public/editor_frame_service/service.tsx rename to x-pack/plugins/lens/public/editor_frame_service/service.tsx index 1375c60060ca82..15fe449d6563b4 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_service/service.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/service.tsx @@ -7,16 +7,13 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { I18nProvider } from '@kbn/i18n/react'; -import { CoreSetup, CoreStart } from 'src/core/public'; -import { - ExpressionsSetup, - ExpressionsStart, -} from '../../../../../../src/plugins/expressions/public'; -import { EmbeddableSetup, EmbeddableStart } from '../../../../../../src/plugins/embeddable/public'; +import { CoreSetup, CoreStart } from 'kibana/public'; +import { ExpressionsSetup, ExpressionsStart } from '../../../../../src/plugins/expressions/public'; +import { EmbeddableSetup, EmbeddableStart } from '../../../../../src/plugins/embeddable/public'; import { DataPublicPluginSetup, DataPublicPluginStart, -} from '../../../../../../src/plugins/data/public'; +} from '../../../../../src/plugins/data/public'; import { Datasource, Visualization, @@ -32,13 +29,13 @@ import { getActiveDatasourceIdFromDoc } from './editor_frame/state_management'; export interface EditorFrameSetupPlugins { data: DataPublicPluginSetup; - embeddable: EmbeddableSetup; + embeddable?: EmbeddableSetup; expressions: ExpressionsSetup; } export interface EditorFrameStartPlugins { data: DataPublicPluginStart; - embeddable: EmbeddableStart; + embeddable?: EmbeddableStart; expressions: ExpressionsStart; } @@ -79,7 +76,9 @@ export class EditorFrameService { }; }; - plugins.embeddable.registerEmbeddableFactory('lens', new EmbeddableFactory(getStartServices)); + if (plugins.embeddable) { + plugins.embeddable.registerEmbeddableFactory('lens', new EmbeddableFactory(getStartServices)); + } return { registerDatasource: datasource => { diff --git a/x-pack/legacy/plugins/lens/public/help_menu_util.tsx b/x-pack/plugins/lens/public/help_menu_util.tsx similarity index 63% rename from x-pack/legacy/plugins/lens/public/help_menu_util.tsx rename to x-pack/plugins/lens/public/help_menu_util.tsx index 9ead31690e854c..333a90df4731b5 100644 --- a/x-pack/legacy/plugins/lens/public/help_menu_util.tsx +++ b/x-pack/plugins/lens/public/help_menu_util.tsx @@ -4,16 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } from 'ui/documentation_links'; -import { ChromeStart } from 'kibana/public'; +import { ChromeStart, DocLinksStart } from 'kibana/public'; -export function addHelpMenuToAppChrome(chrome: ChromeStart) { +export function addHelpMenuToAppChrome(chrome: ChromeStart, docLinks: DocLinksStart) { chrome.setHelpExtension({ appName: 'Lens', links: [ { linkType: 'documentation', - href: `${ELASTIC_WEBSITE_URL}guide/en/kibana/${DOC_LINK_VERSION}/lens.html`, + href: `${docLinks.ELASTIC_WEBSITE_URL}guide/en/kibana/${docLinks.DOC_LINK_VERSION}/lens.html`, }, { linkType: 'github', diff --git a/x-pack/legacy/plugins/lens/public/helpers/index.ts b/x-pack/plugins/lens/public/helpers/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/helpers/index.ts rename to x-pack/plugins/lens/public/helpers/index.ts diff --git a/x-pack/legacy/plugins/lens/public/helpers/url_helper.test.ts b/x-pack/plugins/lens/public/helpers/url_helper.test.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/helpers/url_helper.test.ts rename to x-pack/plugins/lens/public/helpers/url_helper.test.ts index ef960fb52952b5..37e35ca17e0b3e 100644 --- a/x-pack/legacy/plugins/lens/public/helpers/url_helper.test.ts +++ b/x-pack/plugins/lens/public/helpers/url_helper.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -jest.mock('../../../../../../src/plugins/dashboard/public', () => ({ +jest.mock('../../../../../src/plugins/dashboard/public', () => ({ DashboardConstants: { ADD_EMBEDDABLE_ID: 'addEmbeddableId', ADD_EMBEDDABLE_TYPE: 'addEmbeddableType', diff --git a/x-pack/legacy/plugins/lens/public/helpers/url_helper.ts b/x-pack/plugins/lens/public/helpers/url_helper.ts similarity index 95% rename from x-pack/legacy/plugins/lens/public/helpers/url_helper.ts rename to x-pack/plugins/lens/public/helpers/url_helper.ts index 3495c15118ce77..0a97ba4b2edf7a 100644 --- a/x-pack/legacy/plugins/lens/public/helpers/url_helper.ts +++ b/x-pack/plugins/lens/public/helpers/url_helper.ts @@ -5,7 +5,7 @@ */ import { parseUrl, stringify } from 'query-string'; -import { DashboardConstants } from '../../../../../../src/plugins/dashboard/public'; +import { DashboardConstants } from '../../../../../src/plugins/dashboard/public'; type UrlVars = Record; diff --git a/x-pack/legacy/plugins/lens/public/id_generator/id_generator.test.ts b/x-pack/plugins/lens/public/id_generator/id_generator.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/id_generator/id_generator.test.ts rename to x-pack/plugins/lens/public/id_generator/id_generator.test.ts diff --git a/x-pack/legacy/plugins/lens/public/id_generator/id_generator.ts b/x-pack/plugins/lens/public/id_generator/id_generator.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/id_generator/id_generator.ts rename to x-pack/plugins/lens/public/id_generator/id_generator.ts diff --git a/x-pack/legacy/plugins/lens/public/id_generator/index.ts b/x-pack/plugins/lens/public/id_generator/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/id_generator/index.ts rename to x-pack/plugins/lens/public/id_generator/index.ts diff --git a/x-pack/legacy/plugins/lens/public/index.scss b/x-pack/plugins/lens/public/index.scss similarity index 54% rename from x-pack/legacy/plugins/lens/public/index.scss rename to x-pack/plugins/lens/public/index.scss index 2f91d14c397c70..67bbac12be8c3b 100644 --- a/x-pack/legacy/plugins/lens/public/index.scss +++ b/x-pack/plugins/lens/public/index.scss @@ -1,12 +1,13 @@ // Import the EUI global scope so we can use EUI constants -@import 'src/legacy/ui/public/styles/_styling_constants'; +@import '@elastic/eui/src/global_styling/variables/index'; +@import '@elastic/eui/src/global_styling/mixins/index'; -@import './variables'; -@import './mixins'; +@import 'variables'; +@import 'mixins'; -@import './app_plugin/index'; +@import 'app_plugin/index'; @import 'datatable_visualization/index'; -@import './drag_drop/index'; +@import 'drag_drop/index'; @import 'editor_frame_service/index'; @import 'indexpattern_datasource/index'; @import 'xy_visualization/index'; diff --git a/x-pack/legacy/plugins/lens/public/index.ts b/x-pack/plugins/lens/public/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/index.ts rename to x-pack/plugins/lens/public/index.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/__mocks__/loader.ts b/x-pack/plugins/lens/public/indexpattern_datasource/__mocks__/loader.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/__mocks__/loader.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/__mocks__/loader.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/__mocks__/state_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/__mocks__/state_helpers.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/__mocks__/state_helpers.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/__mocks__/state_helpers.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/__snapshots__/lens_field_icon.test.tsx.snap b/x-pack/plugins/lens/public/indexpattern_datasource/__snapshots__/lens_field_icon.test.tsx.snap similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/__snapshots__/lens_field_icon.test.tsx.snap rename to x-pack/plugins/lens/public/indexpattern_datasource/__snapshots__/lens_field_icon.test.tsx.snap diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_datapanel.scss b/x-pack/plugins/lens/public/indexpattern_datasource/_datapanel.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/_datapanel.scss rename to x-pack/plugins/lens/public/indexpattern_datasource/_datapanel.scss diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_field_item.scss b/x-pack/plugins/lens/public/indexpattern_datasource/_field_item.scss similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/_field_item.scss rename to x-pack/plugins/lens/public/indexpattern_datasource/_field_item.scss index 89f6bbf9084194..41919b900c71f8 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/_field_item.scss +++ b/x-pack/plugins/lens/public/indexpattern_datasource/_field_item.scss @@ -14,7 +14,7 @@ } .lnsFieldItem--missing { - background: lightOrDarkTheme(transparentize($euiColorMediumShade, 0.9), $euiColorEmptyShade); + background: lightOrDarkTheme(transparentize($euiColorMediumShade, .9), $euiColorEmptyShade); color: $euiColorDarkShade; } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/_index.scss b/x-pack/plugins/lens/public/indexpattern_datasource/_index.scss new file mode 100644 index 00000000000000..e5d8b408e33e53 --- /dev/null +++ b/x-pack/plugins/lens/public/indexpattern_datasource/_index.scss @@ -0,0 +1,4 @@ +@import 'datapanel'; +@import 'field_item'; + +@import 'dimension_panel/index'; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/auto_date.test.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/auto_date.test.ts index cc1a74a1854cef..5f35ef650a08c2 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/auto_date.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; +import { dataPluginMock } from '../../../../../src/plugins/data/public/mocks'; import { getAutoDate } from './auto_date'; describe('auto_date', () => { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.ts b/x-pack/plugins/lens/public/indexpattern_datasource/auto_date.ts similarity index 92% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/auto_date.ts index 063cbb4d217a7a..97a46f4a3e1765 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/auto_date.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/auto_date.ts @@ -4,11 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ -import { DataPublicPluginSetup } from '../../../../../../src/plugins/data/public'; +import { DataPublicPluginSetup } from '../../../../../src/plugins/data/public'; import { ExpressionFunctionDefinition, KibanaContext, -} from '../../../../../../src/plugins/expressions/public'; +} from '../../../../../src/plugins/expressions/public'; interface LensAutoDateProps { aggConfigs: string; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/change_indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/change_indexpattern.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/change_indexpattern.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/change_indexpattern.tsx diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx index 3066ac0e113251..c396f0efee42ed 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.test.tsx @@ -6,6 +6,7 @@ import React, { ChangeEvent } from 'react'; import { createMockedDragDropContext } from './mocks'; +import { dataPluginMock } from '../../../../../src/plugins/data/public/mocks'; import { InnerIndexPatternDataPanel, IndexPatternDataPanel, MemoizedDataPanel } from './datapanel'; import { FieldItem } from './field_item'; import { act } from 'react-dom/test-utils'; @@ -16,8 +17,6 @@ import { ChangeIndexPattern } from './change_indexpattern'; import { EuiProgress } from '@elastic/eui'; import { documentField } from './document_field'; -jest.mock('ui/new_platform'); - const initialState: IndexPatternPrivateState = { indexPatternRefs: [], existingFields: {}, @@ -218,6 +217,7 @@ describe('IndexPattern Data Panel', () => { defaultProps = { indexPatternRefs: [], existingFields: {}, + data: dataPluginMock.createStartContract(), dragDropContext: createMockedDragDropContext(), currentIndexPatternId: '1', indexPatterns: initialState.indexPatterns, diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx index 7a3c04b67fbc41..79dcdafd916b4c 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/datapanel.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/datapanel.tsx @@ -27,6 +27,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; +import { DataPublicPluginStart } from 'src/plugins/data/public'; import { DatasourceDataPanelProps, DataType, StateSetter } from '../types'; import { ChildDragDropProvider, DragContextState } from '../drag_drop'; import { FieldItem } from './field_item'; @@ -40,9 +41,10 @@ import { trackUiEvent } from '../lens_ui_telemetry'; import { syncExistingFields } from './loader'; import { fieldExists } from './pure_helpers'; import { Loader } from '../loader'; -import { esQuery, IIndexPattern } from '../../../../../../src/plugins/data/public'; +import { esQuery, IIndexPattern } from '../../../../../src/plugins/data/public'; export type Props = DatasourceDataPanelProps & { + data: DataPublicPluginStart; changeIndexPattern: ( id: string, state: IndexPatternPrivateState, @@ -78,6 +80,7 @@ export function IndexPatternDataPanel({ state, dragDropContext, core, + data, query, filters, dateRange, @@ -152,6 +155,7 @@ export function IndexPatternDataPanel({ showEmptyFields={state.showEmptyFields} onToggleEmptyFields={onToggleEmptyFields} core={core} + data={data} onChangeIndexPattern={onChangeIndexPattern} existingFields={state.existingFields} /> @@ -177,8 +181,10 @@ export const InnerIndexPatternDataPanel = function InnerIndexPatternDataPanel({ showEmptyFields, onToggleEmptyFields, core, + data, existingFields, }: Pick> & { + data: DataPublicPluginStart; currentIndexPatternId: string; indexPatternRefs: IndexPatternRef[]; indexPatterns: Record; @@ -441,6 +447,7 @@ export const InnerIndexPatternDataPanel = function InnerIndexPatternDataPanel({ {specialFields.map(field => ( { let defaultProps: FieldItemProps; let indexPattern: IndexPattern; let core: ReturnType; + let data: DataPublicPluginStart; beforeEach(() => { indexPattern = { @@ -61,9 +60,11 @@ describe('IndexPattern Field Item', () => { } as IndexPattern; core = coreMock.createSetup(); + data = dataPluginMock.createStartContract(); core.http.post.mockClear(); defaultProps = { indexPattern, + data, core, highlight: '', dateRange: { @@ -81,7 +82,7 @@ describe('IndexPattern Field Item', () => { exists: true, }; - npStart.plugins.data.fieldFormats = ({ + data.fieldFormats = ({ getDefaultInstance: jest.fn(() => ({ convert: jest.fn((s: unknown) => JSON.stringify(s)), })), diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/field_item.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx similarity index 97% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/field_item.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx index b98f589bc5b989..c4d2a6f8780c6a 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/field_item.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx @@ -20,7 +20,6 @@ import { EuiText, EuiToolTip, } from '@elastic/eui'; -import { npStart } from 'ui/new_platform'; import { EUI_CHARTS_THEME_DARK, EUI_CHARTS_THEME_LIGHT } from '@elastic/eui/dist/eui_charts_theme'; import { Axis, @@ -33,6 +32,7 @@ import { TooltipType, } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; +import { DataPublicPluginStart } from 'src/plugins/data/public'; import { Query, KBN_FIELD_TYPES, @@ -40,17 +40,18 @@ import { Filter, esQuery, IIndexPattern, -} from '../../../../../../src/plugins/data/public'; +} from '../../../../../src/plugins/data/public'; import { DraggedField } from './indexpattern'; import { DragDrop } from '../drag_drop'; import { DatasourceDataPanelProps, DataType } from '../types'; -import { BucketedAggregation, FieldStatsResponse } from '../../../../../plugins/lens/common'; +import { BucketedAggregation, FieldStatsResponse } from '../../common'; import { IndexPattern, IndexPatternField } from './types'; import { LensFieldIcon } from './lens_field_icon'; import { trackUiEvent } from '../lens_ui_telemetry'; export interface FieldItemProps { core: DatasourceDataPanelProps['core']; + data: DataPublicPluginStart; field: IndexPatternField; indexPattern: IndexPattern; highlight?: string; @@ -237,8 +238,16 @@ export function FieldItem(props: FieldItemProps) { } function FieldItemPopoverContents(props: State & FieldItemProps) { - const fieldFormats = npStart.plugins.data.fieldFormats; - const { histogram, topValues, indexPattern, field, dateRange, core, sampledValues } = props; + const { + histogram, + topValues, + indexPattern, + field, + dateRange, + core, + sampledValues, + data: { fieldFormats }, + } = props; const IS_DARK_THEME = core.uiSettings.get('theme:darkMode'); const chartTheme = IS_DARK_THEME ? EUI_CHARTS_THEME_DARK.theme : EUI_CHARTS_THEME_LIGHT.theme; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/index.ts similarity index 84% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/index.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/index.ts index 8a5c562ebd455c..fe14f472341afd 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/index.ts @@ -4,16 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CoreSetup } from 'src/core/public'; -import { Storage } from '../../../../../../src/plugins/kibana_utils/public'; +import { CoreSetup } from 'kibana/public'; +import { Storage } from '../../../../../src/plugins/kibana_utils/public'; import { getIndexPatternDatasource } from './indexpattern'; import { renameColumns } from './rename_columns'; import { getAutoDate } from './auto_date'; -import { ExpressionsSetup } from '../../../../../../src/plugins/expressions/public'; +import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; import { DataPublicPluginSetup, DataPublicPluginStart, -} from '../../../../../../src/plugins/data/public'; +} from '../../../../../src/plugins/data/public'; import { Datasource, EditorFrameSetup } from '../types'; export interface IndexPatternDatasourceSetupPlugins { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts index 76e59a170a9e93..dbdbe4e3f9442e 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.test.ts @@ -8,13 +8,11 @@ import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; import { getIndexPatternDatasource, IndexPatternColumn, uniqueLabels } from './indexpattern'; import { DatasourcePublicAPI, Operation, Datasource } from '../types'; import { coreMock } from 'src/core/public/mocks'; -import { pluginsMock } from 'ui/new_platform/__mocks__/helpers'; import { IndexPatternPersistedState, IndexPatternPrivateState } from './types'; +import { dataPluginMock } from '../../../../../src/plugins/data/public/mocks'; jest.mock('./loader'); jest.mock('../id_generator'); -// Contains old and new platform data plugins, used for interpreter and filter ratio -jest.mock('ui/new_platform'); const expectedIndexPatterns = { 1: { @@ -140,7 +138,7 @@ describe('IndexPattern Data Source', () => { indexPatternDatasource = getIndexPatternDatasource({ storage: {} as IStorageWrapper, core: coreMock.createStart(), - data: pluginsMock.createStart().data, + data: dataPluginMock.createStartContract(), }); persistedState = { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx similarity index 96% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx index 9c2a9c9bf4a091..b8f0460f2a9ab4 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx @@ -8,7 +8,7 @@ import _ from 'lodash'; import React from 'react'; import { render } from 'react-dom'; import { I18nProvider } from '@kbn/i18n/react'; -import { CoreStart } from 'src/core/public'; +import { CoreStart } from 'kibana/public'; import { i18n } from '@kbn/i18n'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; import { @@ -42,10 +42,10 @@ import { IndexPatternPrivateState, IndexPatternPersistedState, } from './types'; -import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; -import { Plugin as DataPlugin } from '../../../../../../src/plugins/data/public'; +import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/public'; +import { DataPublicPluginStart } from '../../../../../src/plugins/data/public'; import { deleteColumn } from './state_helpers'; -import { Datasource, StateSetter } from '..'; +import { Datasource, StateSetter } from '../index'; export { OperationType, IndexPatternColumn } from './operations'; @@ -105,7 +105,7 @@ export function getIndexPatternDatasource({ }: { core: CoreStart; storage: IStorageWrapper; - data: ReturnType; + data: DataPublicPluginStart; }) { const savedObjectsClient = core.savedObjects.client; const uiSettings = core.uiSettings; @@ -209,6 +209,7 @@ export function getIndexPatternDatasource({ onError: onIndexPatternLoadError, }); }} + data={data} {...props} /> , diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx index fe14e5de5c1e30..2008b326a539ce 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx @@ -12,7 +12,6 @@ import { getDatasourceSuggestionsFromCurrentState, } from './indexpattern_suggestions'; -jest.mock('ui/new_platform'); jest.mock('./loader'); jest.mock('../id_generator'); diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx index 219a6d935e436d..4dd29d79259163 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/layerpanel.test.tsx @@ -12,7 +12,6 @@ import { ShallowWrapper } from 'enzyme'; import { EuiSelectable, EuiSelectableList } from '@elastic/eui'; import { ChangeIndexPattern } from './change_indexpattern'; -jest.mock('ui/new_platform'); jest.mock('./state_helpers'); const initialState: IndexPatternPrivateState = { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/layerpanel.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/layerpanel.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/layerpanel.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/layerpanel.tsx diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/lens_field_icon.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/lens_field_icon.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/lens_field_icon.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/lens_field_icon.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx similarity index 86% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx index 06eda73748cef7..bcc83e799d889f 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/lens_field_icon.tsx @@ -5,7 +5,7 @@ */ import React from 'react'; -import { FieldIcon, FieldIconProps } from '../../../../../../src/plugins/kibana_react/public'; +import { FieldIcon, FieldIconProps } from '../../../../../src/plugins/kibana_react/public'; import { DataType } from '../types'; import { normalizeOperationDataType } from './utils'; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts index ea9c8213ba9098..cacf729ba0caf1 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.test.ts @@ -16,8 +16,6 @@ import { import { IndexPatternPersistedState, IndexPatternPrivateState } from './types'; import { documentField } from './document_field'; -// TODO: This should not be necessary -jest.mock('ui/new_platform'); jest.mock('./operations'); const sampleIndexPatterns = { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.ts b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/loader.ts index f4d5857f4826d4..23faab768eba61 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/loader.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/loader.ts @@ -5,8 +5,8 @@ */ import _ from 'lodash'; -import { SavedObjectsClientContract, SavedObjectAttributes, HttpSetup } from 'src/core/public'; -import { SimpleSavedObject } from 'src/core/public'; +import { SavedObjectsClientContract, SavedObjectAttributes, HttpSetup } from 'kibana/public'; +import { SimpleSavedObject } from 'kibana/public'; import { StateSetter } from '../types'; import { IndexPattern, @@ -16,14 +16,14 @@ import { IndexPatternField, } from './types'; import { updateLayerIndexPattern } from './state_helpers'; -import { DateRange, ExistingFields } from '../../../../../plugins/lens/common/types'; -import { BASE_API_URL } from '../../../../../plugins/lens/common'; +import { DateRange, ExistingFields } from '../../common/types'; +import { BASE_API_URL } from '../../common'; import { documentField } from './document_field'; import { indexPatterns as indexPatternsUtils, IFieldType, IndexPatternTypeMeta, -} from '../../../../../../src/plugins/data/public'; +} from '../../../../../src/plugins/data/public'; interface SavedIndexPatternAttributes extends SavedObjectAttributes { title: string; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/mocks.ts b/x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/mocks.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/mocks.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/__mocks__/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/__mocks__/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/__mocks__/index.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/__mocks__/index.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx index 33325016deaeb1..9491ca9ea37875 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/cardinality.tsx @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { OperationDefinition } from '.'; +import { OperationDefinition } from './index'; import { FormattedIndexPatternColumn } from './column_types'; const supportedTypes = new Set(['string', 'boolean', 'number', 'ip', 'date']); diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/column_types.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx similarity index 97% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx index 1592b1049f666e..1dcaf78b58a6c4 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/count.tsx @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { OperationDefinition } from '.'; +import { OperationDefinition } from './index'; import { FormattedIndexPatternColumn } from './column_types'; import { IndexPatternField } from '../../types'; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx index dc279fca82d4b7..e3b6061248f3b0 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.test.tsx @@ -6,21 +6,19 @@ import React from 'react'; import { DateHistogramIndexPatternColumn } from './date_histogram'; -import { dateHistogramOperation } from '.'; +import { dateHistogramOperation } from './index'; import { shallow } from 'enzyme'; import { EuiSwitch, EuiSwitchEvent } from '@elastic/eui'; -import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'src/core/public'; +import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'kibana/public'; import { coreMock } from 'src/core/public/mocks'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; import { dataPluginMock, getCalculateAutoTimeExpression, -} from '../../../../../../../../src/plugins/data/public/mocks'; +} from '../../../../../../../src/plugins/data/public/mocks'; import { createMockedIndexPattern } from '../../mocks'; import { IndexPatternPrivateState } from '../../types'; -jest.mock('ui/new_platform'); - const dataStart = dataPluginMock.createStartContract(); dataStart.search.aggs.calculateAutoTimeExpression = getCalculateAutoTimeExpression({ ...coreMock.createStart().uiSettings, diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx index 452d5c9140868e..7a36d52ad897b7 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/date_histogram.tsx @@ -21,12 +21,9 @@ import { EuiSpacer, } from '@elastic/eui'; import { updateColumnParam } from '../../state_helpers'; -import { OperationDefinition } from '.'; +import { OperationDefinition } from './index'; import { FieldBasedIndexPatternColumn } from './column_types'; -import { - IndexPatternAggRestrictions, - search, -} from '../../../../../../../../src/plugins/data/public'; +import { IndexPatternAggRestrictions, search } from '../../../../../../../src/plugins/data/public'; const { isValidInterval } = search.aggs; const autoInterval = 'auto'; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts similarity index 97% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts index 2db5296905000e..ef12fca690f0c3 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/index.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'src/core/public'; +import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'kibana/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; import { termsOperation } from './terms'; import { cardinalityOperation } from './cardinality'; @@ -14,8 +14,8 @@ import { countOperation } from './count'; import { DimensionPriority, StateSetter, OperationMetadata } from '../../../types'; import { BaseIndexPatternColumn } from './column_types'; import { IndexPatternPrivateState, IndexPattern, IndexPatternField } from '../../types'; -import { DateRange } from '../../../../../../../plugins/lens/common'; -import { DataPublicPluginStart } from '../../../../../../../../src/plugins/data/public'; +import { DateRange } from '../../../../common'; +import { DataPublicPluginStart } from '../../../../../../../src/plugins/data/public'; // List of all operation definitions registered to this data source. // If you want to implement a new operation, add it to this array and diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx index c2d9478c6ea15d..3da635dc13d10a 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/metrics.tsx @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { OperationDefinition } from '.'; +import { OperationDefinition } from './index'; import { FormattedIndexPatternColumn } from './column_types'; type MetricColumn = FormattedIndexPatternColumn & { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx index fc0c9746b2f989..8f6130e74b5b8f 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.test.tsx @@ -7,16 +7,14 @@ import React from 'react'; import { shallow } from 'enzyme'; import { EuiRange, EuiSelect } from '@elastic/eui'; -import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'src/core/public'; +import { IUiSettingsClient, SavedObjectsClientContract, HttpSetup } from 'kibana/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; -import { dataPluginMock } from '../../../../../../../../src/plugins/data/public/mocks'; +import { dataPluginMock } from '../../../../../../../src/plugins/data/public/mocks'; import { createMockedIndexPattern } from '../../mocks'; import { TermsIndexPatternColumn } from './terms'; -import { termsOperation } from '.'; +import { termsOperation } from './index'; import { IndexPatternPrivateState } from '../../types'; -jest.mock('ui/new_platform'); - const defaultProps = { storage: {} as IStorageWrapper, uiSettings: {} as IUiSettingsClient, diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx index 387b197c9235cc..29e5787fa4f544 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/definitions/terms.tsx @@ -10,7 +10,7 @@ import { EuiForm, EuiFormRow, EuiRange, EuiSelect } from '@elastic/eui'; import { IndexPatternColumn } from '../../indexpattern'; import { updateColumnParam } from '../../state_helpers'; import { DataType } from '../../../types'; -import { OperationDefinition } from '.'; +import { OperationDefinition } from './index'; import { FieldBasedIndexPatternColumn } from './column_types'; type PropType = C extends React.ComponentType ? P : unknown; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/index.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/index.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts index 3602491c6eb2ce..111b1040de9891 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.test.ts @@ -4,13 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { getOperationTypesForField, getAvailableOperationsByMetadata, buildColumn } from '.'; +import { getOperationTypesForField, getAvailableOperationsByMetadata, buildColumn } from './index'; import { AvgIndexPatternColumn, MinIndexPatternColumn } from './definitions/metrics'; import { CountIndexPatternColumn } from './definitions/count'; import { IndexPatternPrivateState } from '../types'; import { documentField } from '../document_field'; -jest.mock('ui/new_platform'); jest.mock('../loader'); const expectedIndexPatterns = { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/operations.ts b/x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/operations/operations.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/operations/operations.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/pure_helpers.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/pure_helpers.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.test.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/pure_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/pure_helpers.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/pure_helpers.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts index 9da7591305a6c4..4bfd6a4f93c751 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.test.ts @@ -5,8 +5,8 @@ */ import { renameColumns } from './rename_columns'; -import { KibanaDatatable } from '../../../../../../src/plugins/expressions/public'; -import { createMockExecutionContext } from '../../../../../../src/plugins/expressions/common/mocks'; +import { KibanaDatatable } from '../../../../../src/plugins/expressions/public'; +import { createMockExecutionContext } from '../../../../../src/plugins/expressions/common/mocks'; describe('rename_columns', () => { it('should rename columns of a given datatable', () => { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/rename_columns.ts b/x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/rename_columns.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/rename_columns.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts b/x-pack/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts index 0a58853f1ef4ff..1e3251a8dedd8a 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/state_helpers.test.ts @@ -17,7 +17,6 @@ import { DateHistogramIndexPatternColumn } from './operations/definitions/date_h import { AvgIndexPatternColumn } from './operations/definitions/metrics'; import { IndexPattern, IndexPatternPrivateState, IndexPatternLayer } from './types'; -jest.mock('ui/new_platform'); jest.mock('./operations'); describe('state_helpers', () => { diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/state_helpers.ts b/x-pack/plugins/lens/public/indexpattern_datasource/state_helpers.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/state_helpers.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/state_helpers.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/to_expression.ts b/x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/to_expression.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/to_expression.ts diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/types.ts b/x-pack/plugins/lens/public/indexpattern_datasource/types.ts similarity index 94% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/types.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/types.ts index 3820ff3b387bba..563af40ed2720d 100644 --- a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/types.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/types.ts @@ -5,7 +5,7 @@ */ import { IndexPatternColumn } from './operations'; -import { IndexPatternAggRestrictions } from '../../../../../../src/plugins/data/public'; +import { IndexPatternAggRestrictions } from '../../../../../src/plugins/data/public'; export interface IndexPattern { id: string; diff --git a/x-pack/legacy/plugins/lens/public/indexpattern_datasource/utils.ts b/x-pack/plugins/lens/public/indexpattern_datasource/utils.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/indexpattern_datasource/utils.ts rename to x-pack/plugins/lens/public/indexpattern_datasource/utils.ts diff --git a/x-pack/legacy/plugins/lens/public/lens_ui_telemetry/factory.test.ts b/x-pack/plugins/lens/public/lens_ui_telemetry/factory.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/lens_ui_telemetry/factory.test.ts rename to x-pack/plugins/lens/public/lens_ui_telemetry/factory.test.ts diff --git a/x-pack/legacy/plugins/lens/public/lens_ui_telemetry/factory.ts b/x-pack/plugins/lens/public/lens_ui_telemetry/factory.ts similarity index 96% rename from x-pack/legacy/plugins/lens/public/lens_ui_telemetry/factory.ts rename to x-pack/plugins/lens/public/lens_ui_telemetry/factory.ts index 73750a65c50b8b..10b052c66efed1 100644 --- a/x-pack/legacy/plugins/lens/public/lens_ui_telemetry/factory.ts +++ b/x-pack/plugins/lens/public/lens_ui_telemetry/factory.ts @@ -5,10 +5,10 @@ */ import moment from 'moment'; -import { HttpSetup } from 'src/core/public'; +import { HttpSetup } from 'kibana/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; -import { BASE_API_URL } from '../../../../../plugins/lens/common'; +import { BASE_API_URL } from '../../common'; const STORAGE_KEY = 'lens-ui-telemetry'; diff --git a/x-pack/legacy/plugins/lens/public/lens_ui_telemetry/index.ts b/x-pack/plugins/lens/public/lens_ui_telemetry/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/lens_ui_telemetry/index.ts rename to x-pack/plugins/lens/public/lens_ui_telemetry/index.ts diff --git a/x-pack/legacy/plugins/lens/public/loader.test.tsx b/x-pack/plugins/lens/public/loader.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/loader.test.tsx rename to x-pack/plugins/lens/public/loader.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/loader.tsx b/x-pack/plugins/lens/public/loader.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/loader.tsx rename to x-pack/plugins/lens/public/loader.tsx diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/auto_scale.test.tsx b/x-pack/plugins/lens/public/metric_visualization/auto_scale.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/auto_scale.test.tsx rename to x-pack/plugins/lens/public/metric_visualization/auto_scale.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/auto_scale.tsx b/x-pack/plugins/lens/public/metric_visualization/auto_scale.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/auto_scale.tsx rename to x-pack/plugins/lens/public/metric_visualization/auto_scale.tsx diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/index.scss b/x-pack/plugins/lens/public/metric_visualization/index.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/index.scss rename to x-pack/plugins/lens/public/metric_visualization/index.scss diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/index.ts b/x-pack/plugins/lens/public/metric_visualization/index.ts similarity index 88% rename from x-pack/legacy/plugins/lens/public/metric_visualization/index.ts rename to x-pack/plugins/lens/public/metric_visualization/index.ts index 65f064258a5e21..2960da52191e4d 100644 --- a/x-pack/legacy/plugins/lens/public/metric_visualization/index.ts +++ b/x-pack/plugins/lens/public/metric_visualization/index.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CoreSetup } from 'src/core/public'; +import { CoreSetup } from 'kibana/public'; import { metricVisualization } from './metric_visualization'; -import { ExpressionsSetup } from '../../../../../../src/plugins/expressions/public'; +import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; import { metricChart, getMetricChartRenderer } from './metric_expression'; import { EditorFrameSetup, FormatFactory } from '../types'; diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.test.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx similarity index 94% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.test.tsx rename to x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx index 3da38d486aecdb..2406e7cd42ebc4 100644 --- a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.test.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx @@ -9,8 +9,8 @@ import { LensMultiTable } from '../types'; import React from 'react'; import { shallow } from 'enzyme'; import { MetricConfig } from './types'; -import { createMockExecutionContext } from '../../../../../../src/plugins/expressions/common/mocks'; -import { IFieldFormat } from '../../../../../../src/plugins/data/public'; +import { createMockExecutionContext } from '../../../../../src/plugins/expressions/common/mocks'; +import { IFieldFormat } from '../../../../../src/plugins/data/public'; function sampleArgs() { const data: LensMultiTable = { diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx similarity index 98% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.tsx rename to x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx index a80552e57a9e06..3484837f65b435 100644 --- a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_expression.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx @@ -10,7 +10,7 @@ import { ExpressionFunctionDefinition, ExpressionRenderDefinition, IInterpreterRenderHandlers, -} from '../../../../../../src/plugins/expressions/public'; +} from '../../../../../src/plugins/expressions/public'; import { MetricConfig } from './types'; import { FormatFactory, LensMultiTable } from '../types'; import { AutoScale } from './auto_scale'; diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_suggestions.test.ts b/x-pack/plugins/lens/public/metric_visualization/metric_suggestions.test.ts similarity index 98% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_suggestions.test.ts rename to x-pack/plugins/lens/public/metric_visualization/metric_suggestions.test.ts index c9bfadbefaf5f8..ef93f0b5bf064b 100644 --- a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_suggestions.test.ts +++ b/x-pack/plugins/lens/public/metric_visualization/metric_suggestions.test.ts @@ -5,7 +5,7 @@ */ import { getSuggestions } from './metric_suggestions'; -import { TableSuggestionColumn, TableSuggestion } from '..'; +import { TableSuggestionColumn, TableSuggestion } from '../index'; describe('metric_suggestions', () => { function numCol(columnId: string): TableSuggestionColumn { diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_suggestions.ts b/x-pack/plugins/lens/public/metric_visualization/metric_suggestions.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_suggestions.ts rename to x-pack/plugins/lens/public/metric_visualization/metric_suggestions.ts diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_visualization.test.ts b/x-pack/plugins/lens/public/metric_visualization/metric_visualization.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_visualization.test.ts rename to x-pack/plugins/lens/public/metric_visualization/metric_visualization.test.ts diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/metric_visualization.tsx b/x-pack/plugins/lens/public/metric_visualization/metric_visualization.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/metric_visualization.tsx rename to x-pack/plugins/lens/public/metric_visualization/metric_visualization.tsx diff --git a/x-pack/legacy/plugins/lens/public/metric_visualization/types.ts b/x-pack/plugins/lens/public/metric_visualization/types.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/metric_visualization/types.ts rename to x-pack/plugins/lens/public/metric_visualization/types.ts diff --git a/x-pack/legacy/plugins/lens/public/native_renderer/index.ts b/x-pack/plugins/lens/public/native_renderer/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/native_renderer/index.ts rename to x-pack/plugins/lens/public/native_renderer/index.ts diff --git a/x-pack/legacy/plugins/lens/public/native_renderer/native_renderer.test.tsx b/x-pack/plugins/lens/public/native_renderer/native_renderer.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/native_renderer/native_renderer.test.tsx rename to x-pack/plugins/lens/public/native_renderer/native_renderer.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/native_renderer/native_renderer.tsx b/x-pack/plugins/lens/public/native_renderer/native_renderer.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/native_renderer/native_renderer.tsx rename to x-pack/plugins/lens/public/native_renderer/native_renderer.tsx diff --git a/x-pack/legacy/plugins/lens/public/persistence/index.ts b/x-pack/plugins/lens/public/persistence/index.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/persistence/index.ts rename to x-pack/plugins/lens/public/persistence/index.ts diff --git a/x-pack/legacy/plugins/lens/public/persistence/saved_object_store.test.ts b/x-pack/plugins/lens/public/persistence/saved_object_store.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/persistence/saved_object_store.test.ts rename to x-pack/plugins/lens/public/persistence/saved_object_store.test.ts diff --git a/x-pack/legacy/plugins/lens/public/persistence/saved_object_store.ts b/x-pack/plugins/lens/public/persistence/saved_object_store.ts similarity index 94% rename from x-pack/legacy/plugins/lens/public/persistence/saved_object_store.ts rename to x-pack/plugins/lens/public/persistence/saved_object_store.ts index ac0b3322b400e1..015f4b9b825f42 100644 --- a/x-pack/legacy/plugins/lens/public/persistence/saved_object_store.ts +++ b/x-pack/plugins/lens/public/persistence/saved_object_store.ts @@ -5,8 +5,8 @@ */ // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SavedObjectAttributes } from 'src/core/server'; -import { Query, Filter } from '../../../../../../src/plugins/data/public'; +import { SavedObjectAttributes } from 'kibana/server'; +import { Query, Filter } from '../../../../../src/plugins/data/public'; export interface Document { id?: string; diff --git a/x-pack/legacy/plugins/lens/public/plugin.tsx b/x-pack/plugins/lens/public/plugin.tsx similarity index 90% rename from x-pack/legacy/plugins/lens/public/plugin.tsx rename to x-pack/plugins/lens/public/plugin.tsx index b426a12d07f9b9..8d760eb0df5013 100644 --- a/x-pack/legacy/plugins/lens/public/plugin.tsx +++ b/x-pack/plugins/lens/public/plugin.tsx @@ -11,14 +11,15 @@ import { render, unmountComponentAtNode } from 'react-dom'; import rison, { RisonObject, RisonValue } from 'rison-node'; import { isObject } from 'lodash'; -import { AppMountParameters, CoreSetup, CoreStart } from 'src/core/public'; +import { AppMountParameters, CoreSetup, CoreStart } from 'kibana/public'; import { DataPublicPluginSetup, DataPublicPluginStart } from 'src/plugins/data/public'; import { EmbeddableSetup, EmbeddableStart } from 'src/plugins/embeddable/public'; import { ExpressionsSetup, ExpressionsStart } from 'src/plugins/expressions/public'; import { VisualizationsSetup } from 'src/plugins/visualizations/public'; +import { NavigationPublicPluginStart } from 'src/plugins/navigation/public'; import { KibanaLegacySetup } from 'src/plugins/kibana_legacy/public'; -import { DashboardConstants } from '../../../../../src/plugins/dashboard/public'; -import { Storage } from '../../../../../src/plugins/kibana_utils/public'; +import { DashboardConstants } from '../../../../src/plugins/dashboard/public'; +import { Storage } from '../../../../src/plugins/kibana_utils/public'; import { EditorFrameService } from './editor_frame_service'; import { IndexPatternDatasource } from './indexpattern_datasource'; import { addHelpMenuToAppChrome } from './help_menu_util'; @@ -34,17 +35,19 @@ import { trackUiEvent, } from './lens_ui_telemetry'; -import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; -import { NOT_INTERNATIONALIZED_PRODUCT_NAME } from '../../../../plugins/lens/common'; +import { UiActionsStart } from '../../../../src/plugins/ui_actions/public'; +import { NOT_INTERNATIONALIZED_PRODUCT_NAME } from '../common'; import { addEmbeddableToDashboardUrl, getUrlVars } from './helpers'; import { EditorFrameStart } from './types'; import { getLensAliasConfig } from './vis_type_alias'; +import './index.scss'; + export interface LensPluginSetupDependencies { kibanaLegacy: KibanaLegacySetup; expressions: ExpressionsSetup; data: DataPublicPluginSetup; - embeddable: EmbeddableSetup; + embeddable?: EmbeddableSetup; visualizations: VisualizationsSetup; } @@ -52,6 +55,7 @@ export interface LensPluginStartDependencies { data: DataPublicPluginStart; embeddable: EmbeddableStart; expressions: ExpressionsStart; + navigation: NavigationPublicPluginStart; uiActions: UiActionsStart; } @@ -75,7 +79,7 @@ export class LensPlugin { } setup( - core: CoreSetup, + core: CoreSetup, { kibanaLegacy, expressions, data, embeddable, visualizations }: LensPluginSetupDependencies ) { const editorFrameSetupInterface = this.editorFrameService.setup(core, { @@ -103,9 +107,9 @@ export class LensPlugin { title: NOT_INTERNATIONALIZED_PRODUCT_NAME, mount: async (params: AppMountParameters) => { const [coreStart, startDependencies] = await core.getStartServices(); - const dataStart = startDependencies.data; + const { data: dataStart, navigation } = startDependencies; const savedObjectsClient = coreStart.savedObjects.client; - addHelpMenuToAppChrome(coreStart.chrome); + addHelpMenuToAppChrome(coreStart.chrome, coreStart.docLinks); const instance = await this.createEditorFrame!(); @@ -157,6 +161,7 @@ export class LensPlugin { void; diff --git a/x-pack/legacy/plugins/lens/public/vis_type_alias.ts b/x-pack/plugins/lens/public/vis_type_alias.ts similarity index 95% rename from x-pack/legacy/plugins/lens/public/vis_type_alias.ts rename to x-pack/plugins/lens/public/vis_type_alias.ts index 123b994e6ccced..807504ee2b9c24 100644 --- a/x-pack/legacy/plugins/lens/public/vis_type_alias.ts +++ b/x-pack/plugins/lens/public/vis_type_alias.ts @@ -6,7 +6,7 @@ import { i18n } from '@kbn/i18n'; import { VisTypeAlias } from 'src/plugins/visualizations/public'; -import { getBasePath, getEditPath } from '../../../../plugins/lens/common'; +import { getBasePath, getEditPath } from '../common'; export const getLensAliasConfig = (): VisTypeAlias => ({ aliasUrl: getBasePath(), diff --git a/x-pack/legacy/plugins/lens/public/visualization_container.test.tsx b/x-pack/plugins/lens/public/visualization_container.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/visualization_container.test.tsx rename to x-pack/plugins/lens/public/visualization_container.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/visualization_container.tsx b/x-pack/plugins/lens/public/visualization_container.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/visualization_container.tsx rename to x-pack/plugins/lens/public/visualization_container.tsx diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap b/x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap rename to x-pack/plugins/lens/public/xy_visualization/__snapshots__/to_expression.test.ts.snap diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap b/x-pack/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap rename to x-pack/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap diff --git a/x-pack/plugins/lens/public/xy_visualization/_index.scss b/x-pack/plugins/lens/public/xy_visualization/_index.scss new file mode 100644 index 00000000000000..110a9589a6fb45 --- /dev/null +++ b/x-pack/plugins/lens/public/xy_visualization/_index.scss @@ -0,0 +1 @@ +@import 'xy_expression'; diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/_xy_expression.scss b/x-pack/plugins/lens/public/xy_visualization/_xy_expression.scss similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/_xy_expression.scss rename to x-pack/plugins/lens/public/xy_visualization/_xy_expression.scss diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/index.ts b/x-pack/plugins/lens/public/xy_visualization/index.ts similarity index 89% rename from x-pack/legacy/plugins/lens/public/xy_visualization/index.ts rename to x-pack/plugins/lens/public/xy_visualization/index.ts index 8cc5abb44d6e1d..5dfae097be8345 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/index.ts +++ b/x-pack/plugins/lens/public/xy_visualization/index.ts @@ -5,14 +5,14 @@ */ import { EUI_CHARTS_THEME_DARK, EUI_CHARTS_THEME_LIGHT } from '@elastic/eui/dist/eui_charts_theme'; -import { CoreSetup, IUiSettingsClient, CoreStart } from 'src/core/public'; +import { CoreSetup, IUiSettingsClient, CoreStart } from 'kibana/public'; import moment from 'moment-timezone'; -import { ExpressionsSetup } from '../../../../../../src/plugins/expressions/public'; +import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; import { xyVisualization } from './xy_visualization'; import { xyChart, getXyChartRenderer } from './xy_expression'; import { legendConfig, xConfig, layerConfig } from './types'; import { EditorFrameSetup, FormatFactory } from '../types'; -import { UiActionsStart } from '../../../../../../src/plugins/ui_actions/public'; +import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; import { setExecuteTriggerActions } from './services'; export interface XyVisualizationPluginSetupPlugins { diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/services.ts b/x-pack/plugins/lens/public/xy_visualization/services.ts similarity index 70% rename from x-pack/legacy/plugins/lens/public/xy_visualization/services.ts rename to x-pack/plugins/lens/public/xy_visualization/services.ts index af683efb865348..51289fe0c63e76 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/services.ts +++ b/x-pack/plugins/lens/public/xy_visualization/services.ts @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { createGetterSetter } from '../../../../../../src/plugins/kibana_utils/public'; -import { UiActionsStart } from '../../../../../../src/plugins/ui_actions/public'; +import { createGetterSetter } from '../../../../../src/plugins/kibana_utils/public'; +import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; export const [getExecuteTriggerActions, setExecuteTriggerActions] = createGetterSetter< UiActionsStart['executeTriggerActions'] diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/state_helpers.ts b/x-pack/plugins/lens/public/xy_visualization/state_helpers.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/state_helpers.ts rename to x-pack/plugins/lens/public/xy_visualization/state_helpers.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/to_expression.test.ts b/x-pack/plugins/lens/public/xy_visualization/to_expression.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/to_expression.test.ts rename to x-pack/plugins/lens/public/xy_visualization/to_expression.test.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/to_expression.ts b/x-pack/plugins/lens/public/xy_visualization/to_expression.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/to_expression.ts rename to x-pack/plugins/lens/public/xy_visualization/to_expression.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/types.ts b/x-pack/plugins/lens/public/xy_visualization/types.ts similarity index 99% rename from x-pack/legacy/plugins/lens/public/xy_visualization/types.ts rename to x-pack/plugins/lens/public/xy_visualization/types.ts index f7b4afc76ec4b0..7a5837d382c7bd 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/types.ts +++ b/x-pack/plugins/lens/public/xy_visualization/types.ts @@ -15,7 +15,7 @@ import chartBarHorizontalSVG from '../assets/chart_bar_horizontal.svg'; import chartBarHorizontalStackedSVG from '../assets/chart_bar_horizontal_stacked.svg'; import chartLineSVG from '../assets/chart_line.svg'; -import { VisualizationType } from '..'; +import { VisualizationType } from '../index'; export interface LegendConfig { isVisible: boolean; diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_config_panel.test.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.test.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_config_panel.test.tsx rename to x-pack/plugins/lens/public/xy_visualization/xy_config_panel.test.tsx diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_config_panel.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_config_panel.tsx rename to x-pack/plugins/lens/public/xy_visualization/xy_config_panel.tsx diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx similarity index 99% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx rename to x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx index 0a6945dd0c1f0d..80d33d1b95b612 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.test.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx @@ -18,14 +18,11 @@ import { } from '@elastic/charts'; import { xyChart, XYChart } from './xy_expression'; import { LensMultiTable } from '../types'; -import { - KibanaDatatable, - KibanaDatatableRow, -} from '../../../../../../src/plugins/expressions/public'; +import { KibanaDatatable, KibanaDatatableRow } from '../../../../../src/plugins/expressions/public'; import React from 'react'; import { shallow } from 'enzyme'; import { XYArgs, LegendConfig, legendConfig, layerConfig, LayerArgs } from './types'; -import { createMockExecutionContext } from '../../../../../../src/plugins/expressions/common/mocks'; +import { createMockExecutionContext } from '../../../../../src/plugins/expressions/common/mocks'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; const executeTriggerActions = jest.fn(); diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx similarity index 97% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx rename to x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx index 527eedf1083c29..f12a0e5b907c78 100644 --- a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_expression.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx @@ -28,14 +28,14 @@ import { import { EuiIcon, EuiText, IconType, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { EmbeddableVisTriggerContext } from '../../../../../../src/plugins/embeddable/public'; -import { VIS_EVENT_TO_TRIGGER } from '../../../../../../src/plugins/visualizations/public'; +import { EmbeddableVisTriggerContext } from '../../../../../src/plugins/embeddable/public'; +import { VIS_EVENT_TO_TRIGGER } from '../../../../../src/plugins/visualizations/public'; import { LensMultiTable, FormatFactory } from '../types'; import { XYArgs, SeriesType, visualizationTypes } from './types'; import { VisualizationContainer } from '../visualization_container'; import { isHorizontalChart } from './state_helpers'; -import { UiActionsStart } from '../../../../../../src/plugins/ui_actions/public'; -import { parseInterval } from '../../../../../../src/plugins/data/common'; +import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; +import { parseInterval } from '../../../../../src/plugins/data/common'; import { getExecuteTriggerActions } from './services'; type InferPropType = T extends React.FunctionComponent ? P : T; diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_suggestions.test.ts b/x-pack/plugins/lens/public/xy_visualization/xy_suggestions.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_suggestions.test.ts rename to x-pack/plugins/lens/public/xy_visualization/xy_suggestions.test.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_suggestions.ts b/x-pack/plugins/lens/public/xy_visualization/xy_suggestions.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_suggestions.ts rename to x-pack/plugins/lens/public/xy_visualization/xy_suggestions.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_visualization.test.ts b/x-pack/plugins/lens/public/xy_visualization/xy_visualization.test.ts similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_visualization.test.ts rename to x-pack/plugins/lens/public/xy_visualization/xy_visualization.test.ts diff --git a/x-pack/legacy/plugins/lens/public/xy_visualization/xy_visualization.tsx b/x-pack/plugins/lens/public/xy_visualization/xy_visualization.tsx similarity index 100% rename from x-pack/legacy/plugins/lens/public/xy_visualization/xy_visualization.tsx rename to x-pack/plugins/lens/public/xy_visualization/xy_visualization.tsx diff --git a/x-pack/legacy/plugins/lens/readme.md b/x-pack/plugins/lens/readme.md similarity index 100% rename from x-pack/legacy/plugins/lens/readme.md rename to x-pack/plugins/lens/readme.md diff --git a/x-pack/plugins/lens/server/index.ts b/x-pack/plugins/lens/server/index.ts index 3b9e94986d2477..8aeeeab4539b6a 100644 --- a/x-pack/plugins/lens/server/index.ts +++ b/x-pack/plugins/lens/server/index.ts @@ -4,10 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ -import { PluginInitializerContext } from 'kibana/server'; +import { PluginInitializerContext, PluginConfigDescriptor } from 'kibana/server'; import { LensServerPlugin } from './plugin'; export * from './plugin'; +import { configSchema, ConfigSchema } from '../config'; + +export const config: PluginConfigDescriptor = { + schema: configSchema, +}; + export const plugin = (initializerContext: PluginInitializerContext) => new LensServerPlugin(initializerContext);