From 878cc8b14e5c18ff78641d8ac8d762d2a527b296 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Mon, 20 Apr 2020 16:26:48 +0200 Subject: [PATCH 01/39] Add redirect function to kibana_legacy legacy application service (#63702) --- .../core_plugins/kibana/public/kibana.js | 5 +- .../local_application_service.ts | 25 ++++++-- .../new_platform/new_platform.karma_mock.js | 2 + src/plugins/kibana_legacy/public/mocks.ts | 2 + src/plugins/kibana_legacy/public/plugin.ts | 60 +++++++++++++++++-- 5 files changed, 82 insertions(+), 12 deletions(-) diff --git a/src/legacy/core_plugins/kibana/public/kibana.js b/src/legacy/core_plugins/kibana/public/kibana.js index 20c46765dcb302..ea0d5ad3790b13 100644 --- a/src/legacy/core_plugins/kibana/public/kibana.js +++ b/src/legacy/core_plugins/kibana/public/kibana.js @@ -49,8 +49,9 @@ import { showAppRedirectNotification } from '../../../../plugins/kibana_legacy/p import 'leaflet'; import { localApplicationService } from './local_application_service'; -npSetup.plugins.kibanaLegacy.forwardApp('doc', 'discover', { keepPrefix: true }); -npSetup.plugins.kibanaLegacy.forwardApp('context', 'discover', { keepPrefix: true }); +npSetup.plugins.kibanaLegacy.registerLegacyAppAlias('doc', 'discover', { keepPrefix: true }); +npSetup.plugins.kibanaLegacy.registerLegacyAppAlias('context', 'discover', { keepPrefix: true }); + localApplicationService.attachToAngular(routes); routes.enable(); diff --git a/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts b/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts index 14564cfd9ee784..f38c410e6832f7 100644 --- a/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts +++ b/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts @@ -98,14 +98,29 @@ export class LocalApplicationService { } }); - npStart.plugins.kibanaLegacy.getForwards().forEach(({ legacyAppId, newAppId, keepPrefix }) => { - angularRouteManager.when(matchAllWithPrefix(legacyAppId), { - resolveRedirectTo: ($location: ILocationService) => { - const url = $location.url(); - return `/${newAppId}${keepPrefix ? url : url.replace(legacyAppId, '')}`; + npStart.plugins.kibanaLegacy.getForwards().forEach(forwardDefinition => { + angularRouteManager.when(matchAllWithPrefix(forwardDefinition.legacyAppId), { + outerAngularWrapperRoute: true, + reloadOnSearch: false, + reloadOnUrl: false, + template: '', + controller($location: ILocationService) { + const newPath = forwardDefinition.rewritePath($location.url()); + npStart.core.application.navigateToApp(forwardDefinition.newAppId, { path: newPath }); }, }); }); + + npStart.plugins.kibanaLegacy + .getLegacyAppAliases() + .forEach(({ legacyAppId, newAppId, keepPrefix }) => { + angularRouteManager.when(matchAllWithPrefix(legacyAppId), { + resolveRedirectTo: ($location: ILocationService) => { + const url = $location.url(); + return `/${newAppId}${keepPrefix ? url : url.replace(legacyAppId, '')}`; + }, + }); + }); } } 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 f577a29ce90b91..f14f26613ef019 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 @@ -242,6 +242,7 @@ export const npSetup = { }, kibanaLegacy: { registerLegacyApp: () => {}, + registerLegacyAppAlias: () => {}, forwardApp: () => {}, config: { defaultAppId: 'home', @@ -362,6 +363,7 @@ export const npStart = { kibanaLegacy: { getApps: () => [], getForwards: () => [], + getLegacyAppAliases: () => [], config: { defaultAppId: 'home', }, diff --git a/src/plugins/kibana_legacy/public/mocks.ts b/src/plugins/kibana_legacy/public/mocks.ts index 8e9a05b186191f..2fdd0d8b4be590 100644 --- a/src/plugins/kibana_legacy/public/mocks.ts +++ b/src/plugins/kibana_legacy/public/mocks.ts @@ -25,6 +25,7 @@ export type Start = jest.Mocked>; const createSetupContract = (): Setup => ({ forwardApp: jest.fn(), + registerLegacyAppAlias: jest.fn(), registerLegacyApp: jest.fn(), config: { defaultAppId: 'home', @@ -37,6 +38,7 @@ const createSetupContract = (): Setup => ({ const createStartContract = (): Start => ({ getApps: jest.fn(), + getLegacyAppAliases: jest.fn(), getForwards: jest.fn(), config: { defaultAppId: 'home', diff --git a/src/plugins/kibana_legacy/public/plugin.ts b/src/plugins/kibana_legacy/public/plugin.ts index 2ad620f355848a..831fc3f0d4a71f 100644 --- a/src/plugins/kibana_legacy/public/plugin.ts +++ b/src/plugins/kibana_legacy/public/plugin.ts @@ -28,12 +28,18 @@ import { Observable } from 'rxjs'; import { ConfigSchema } from '../config'; import { getDashboardConfig } from './dashboard_config'; -interface ForwardDefinition { +interface LegacyAppAliasDefinition { legacyAppId: string; newAppId: string; keepPrefix: boolean; } +interface ForwardDefinition { + legacyAppId: string; + newAppId: string; + rewritePath: (legacyPath: string) => string; +} + export type AngularRenderedAppUpdater = ( app: AppBase ) => Partial | undefined; @@ -54,7 +60,8 @@ export interface AngularRenderedApp extends App { export class KibanaLegacyPlugin { private apps: AngularRenderedApp[] = []; - private forwards: ForwardDefinition[] = []; + private legacyAppAliases: LegacyAppAliasDefinition[] = []; + private forwardDefinitions: ForwardDefinition[] = []; constructor(private readonly initializerContext: PluginInitializerContext) {} @@ -94,17 +101,55 @@ export class KibanaLegacyPlugin { * renaming or nesting plugins. For route changes after the prefix, please * use the routing mechanism of your app. * + * This method just redirects URLs within the legacy `kibana` app. + * * @param legacyAppId The name of the old app to forward URLs from * @param newAppId The name of the new app that handles the URLs now * @param options Whether the prefix of the old app is kept to nest the legacy * path into the new path */ - forwardApp: ( + registerLegacyAppAlias: ( legacyAppId: string, newAppId: string, options: { keepPrefix: boolean } = { keepPrefix: false } ) => { - this.forwards.push({ legacyAppId, newAppId, ...options }); + this.legacyAppAliases.push({ legacyAppId, newAppId, ...options }); + }, + + /** + * Forwards URLs within the legacy `kibana` app to a new platform application. + * + * @param legacyAppId The name of the old app to forward URLs from + * @param newAppId The name of the new app that handles the URLs now + * @param rewritePath Function to rewrite the legacy sub path of the app to the new path in the core app + * path into the new path + * + * Example usage: + * ``` + * kibanaLegacy.forwardApp( + * 'old', + * 'new', + * path => { + * const [, id] = /old/item\/(.*)$/.exec(path) || []; + * if (!id) { + * return '#/home'; + * } + * return '#/items/${id}'; + * } + * ); + * ``` + * This will cause the following redirects: + * + * * app/kibana#/old/ -> app/new#/home + * * app/kibana#/old/item/123 -> app/new#/items/123 + * + */ + forwardApp: ( + legacyAppId: string, + newAppId: string, + rewritePath: (legacyPath: string) => string + ) => { + this.forwardDefinitions.push({ legacyAppId, newAppId, rewritePath }); }, /** @@ -132,7 +177,12 @@ export class KibanaLegacyPlugin { * @deprecated * Just exported for wiring up with legacy platform, should not be used. */ - getForwards: () => this.forwards, + getLegacyAppAliases: () => this.legacyAppAliases, + /** + * @deprecated + * Just exported for wiring up with legacy platform, should not be used. + */ + getForwards: () => this.forwardDefinitions, config: this.initializerContext.config.get(), dashboardConfig: getDashboardConfig(!application.capabilities.dashboard.showWriteControls), }; From 32c6fd777f1b879ce4e03758af28f22800a2fb18 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 20 Apr 2020 08:21:11 -0700 Subject: [PATCH 02/39] Revert "[platform] serve plugins from /bundles/plugin:${id}" This reverts commit d538929ed96ff61df0d0d99b4065f881aee4ebcd. --- src/core/public/plugins/plugin_loader.test.ts | 12 ++++++------ src/core/public/plugins/plugin_loader.ts | 2 +- src/legacy/ui/ui_render/bootstrap/template.js.hbs | 8 ++++---- src/optimize/bundles_route/bundles_route.js | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/core/public/plugins/plugin_loader.test.ts b/src/core/public/plugins/plugin_loader.test.ts index 18cc2d7a6f182e..b4e2c3095f14a7 100644 --- a/src/core/public/plugins/plugin_loader.test.ts +++ b/src/core/public/plugins/plugin_loader.test.ts @@ -62,7 +62,7 @@ test('`loadPluginBundles` creates a script tag and loads initializer', async () const fakeScriptTag = createdScriptTags[0]; expect(fakeScriptTag.setAttribute).toHaveBeenCalledWith( 'src', - '/bundles/plugin:plugin-a/plugin-a.plugin.js' + '/bundles/plugin/plugin-a/plugin-a.plugin.js' ); expect(fakeScriptTag.setAttribute).toHaveBeenCalledWith('id', 'kbn-plugin-plugin-a'); expect(fakeScriptTag.onload).toBeInstanceOf(Function); @@ -85,7 +85,7 @@ test('`loadPluginBundles` includes the basePath', async () => { const fakeScriptTag = createdScriptTags[0]; expect(fakeScriptTag.setAttribute).toHaveBeenCalledWith( 'src', - '/mybasepath/bundles/plugin:plugin-a/plugin-a.plugin.js' + '/mybasepath/bundles/plugin/plugin-a/plugin-a.plugin.js' ); }); @@ -96,7 +96,7 @@ test('`loadPluginBundles` rejects if script.onerror is called', async () => { fakeScriptTag1.onerror(new Error('Whoa there!')); await expect(loadPromise).rejects.toThrowErrorMatchingInlineSnapshot( - `"Failed to load \\"plugin-a\\" bundle (/bundles/plugin:plugin-a/plugin-a.plugin.js)"` + `"Failed to load \\"plugin-a\\" bundle (/bundles/plugin/plugin-a/plugin-a.plugin.js)"` ); }); @@ -105,7 +105,7 @@ test('`loadPluginBundles` rejects if timeout is reached', async () => { // Override the timeout to 1 ms for testi. loadPluginBundle(addBasePath, 'plugin-a', { timeoutMs: 1 }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Timeout reached when loading \\"plugin-a\\" bundle (/bundles/plugin:plugin-a/plugin-a.plugin.js)"` + `"Timeout reached when loading \\"plugin-a\\" bundle (/bundles/plugin/plugin-a/plugin-a.plugin.js)"` ); }); @@ -115,11 +115,11 @@ test('`loadPluginBundles` rejects if bundle does attach an initializer to window const fakeScriptTag1 = createdScriptTags[0]; // Setup a fake initializer as if a plugin bundle had actually been loaded. - coreWindow.__kbnBundles__['plugin:plugin-a'] = undefined; + coreWindow.__kbnBundles__['plugin/plugin-a'] = undefined; // Call the onload callback fakeScriptTag1.onload(); await expect(loadPromise).rejects.toThrowErrorMatchingInlineSnapshot( - `"Definition of plugin \\"plugin-a\\" should be a function (/bundles/plugin:plugin-a/plugin-a.plugin.js)."` + `"Definition of plugin \\"plugin-a\\" should be a function (/bundles/plugin/plugin-a/plugin-a.plugin.js)."` ); }); diff --git a/src/core/public/plugins/plugin_loader.ts b/src/core/public/plugins/plugin_loader.ts index 9b35588dfe7262..bf7711055e97ba 100644 --- a/src/core/public/plugins/plugin_loader.ts +++ b/src/core/public/plugins/plugin_loader.ts @@ -93,7 +93,7 @@ export const loadPluginBundle: LoadPluginBundle = < const script = document.createElement('script'); // Assumes that all plugin bundles get put into the bundles/plugins subdirectory - const bundlePath = addBasePath(`/bundles/plugin:${pluginName}/${pluginName}.plugin.js`); + const bundlePath = addBasePath(`/bundles/plugin/${pluginName}/${pluginName}.plugin.js`); script.setAttribute('src', bundlePath); script.setAttribute('id', `kbn-plugin-${pluginName}`); script.setAttribute('async', ''); diff --git a/src/legacy/ui/ui_render/bootstrap/template.js.hbs b/src/legacy/ui/ui_render/bootstrap/template.js.hbs index 4557d911620a23..1093153edbbf7e 100644 --- a/src/legacy/ui/ui_render/bootstrap/template.js.hbs +++ b/src/legacy/ui/ui_render/bootstrap/template.js.hbs @@ -78,10 +78,10 @@ if (window.__kbnStrictCsp__ && window.__kbnCspNotEnforced__) { '{{this}}', {{/each}} '{{regularBundlePath}}/commons.bundle.js', - {{!-- '{{regularBundlePath}}/plugin:data/data.plugin.js', --}} - '{{regularBundlePath}}/plugin:kibanaUtils/kibanaUtils.plugin.js', - '{{regularBundlePath}}/plugin:esUiShared/esUiShared.plugin.js', - '{{regularBundlePath}}/plugin:kibanaReact/kibanaReact.plugin.js' + {{!-- '{{regularBundlePath}}/plugin/data/data.plugin.js', --}} + '{{regularBundlePath}}/plugin/kibanaUtils/kibanaUtils.plugin.js', + '{{regularBundlePath}}/plugin/esUiShared/esUiShared.plugin.js', + '{{regularBundlePath}}/plugin/kibanaReact/kibanaReact.plugin.js' ], function () { load([ '{{regularBundlePath}}/{{appId}}.bundle.js', diff --git a/src/optimize/bundles_route/bundles_route.js b/src/optimize/bundles_route/bundles_route.js index f4e3108f80a3b8..0c2e98b5acd63c 100644 --- a/src/optimize/bundles_route/bundles_route.js +++ b/src/optimize/bundles_route/bundles_route.js @@ -79,8 +79,8 @@ export function createBundlesRoute({ ), ...npUiPluginPublicDirs.map(({ id, path }) => buildRouteForBundles( - `${basePublicPath}/bundles/plugin:${id}/`, - `/bundles/plugin:${id}/`, + `${basePublicPath}/bundles/plugin/${id}/`, + `/bundles/plugin/${id}/`, path, fileHashCache ) From 784b8beb2f31f163eb82a403aace4d789097299b Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Mon, 20 Apr 2020 11:51:53 -0400 Subject: [PATCH 03/39] [ML] DF Analytics Classification exploration: replace table with data grid (#63757) * update classification result to use datagrid * consider isTraining in docCount fetch * fix translations --- .../data_frame_analytics/common/analytics.ts | 22 +- .../classification_exploration_data_grid.tsx | 135 +++++ .../evaluate_panel.tsx | 60 ++- .../results_table.tsx | 470 +++--------------- .../use_explore_data.ts | 226 ++++++--- .../use_explore_data.ts | 4 +- .../translations/translations/ja-JP.json | 7 - .../translations/translations/zh-CN.json | 7 - 8 files changed, 419 insertions(+), 512 deletions(-) create mode 100644 x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/classification_exploration_data_grid.tsx diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/common/analytics.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/common/analytics.ts index 3c959b827bb1c7..fb3b2b35199477 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/common/analytics.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/common/analytics.ts @@ -52,7 +52,7 @@ export interface ClassificationAnalysis { classification: Classification; } -export interface LoadRegressionExploreDataArg { +export interface LoadExploreDataArg { filterByIsTraining?: boolean; searchQuery: SavedSearchQuery; } @@ -409,11 +409,11 @@ export function getEvalQueryBody({ ignoreDefaultQuery, }: { resultsField: string; - isTraining: boolean; + isTraining?: boolean; searchQuery?: ResultsSearchQuery; ignoreDefaultQuery?: boolean; }) { - let query; + let query: any; const trainingQuery: ResultsSearchQuery = { term: { [`${resultsField}.is_training`]: { value: isTraining } }, @@ -426,19 +426,25 @@ export function getEvalQueryBody({ searchQueryClone.bool.must = []; } - searchQueryClone.bool.must.push(trainingQuery); + if (isTraining !== undefined) { + searchQueryClone.bool.must.push(trainingQuery); + } + query = searchQueryClone; } else if (isQueryStringQuery(searchQueryClone)) { query = { bool: { - must: [searchQueryClone, trainingQuery], + must: [searchQueryClone], }, }; + if (isTraining !== undefined) { + query.bool.must.push(trainingQuery); + } } else { // Not a bool or string query so we need to create it so can add the trainingQuery query = { bool: { - must: [trainingQuery], + must: isTraining !== undefined ? [trainingQuery] : [], }, }; } @@ -456,7 +462,7 @@ interface EvaluateMetrics { } interface LoadEvalDataConfig { - isTraining: boolean; + isTraining?: boolean; index: string; dependentVariable: string; resultsField: string; @@ -535,7 +541,7 @@ interface TrackTotalHitsSearchResponse { interface LoadDocsCountConfig { ignoreDefaultQuery?: boolean; - isTraining: boolean; + isTraining?: boolean; searchQuery: SavedSearchQuery; resultsField: string; destIndex: string; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/classification_exploration_data_grid.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/classification_exploration_data_grid.tsx new file mode 100644 index 00000000000000..424fc002795caa --- /dev/null +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/classification_exploration_data_grid.tsx @@ -0,0 +1,135 @@ +/* + * 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, { Dispatch, FC, SetStateAction, useCallback, useMemo } from 'react'; + +import { i18n } from '@kbn/i18n'; + +import { EuiDataGrid, EuiDataGridPaginationProps, EuiDataGridSorting } from '@elastic/eui'; + +import { euiDataGridStyle, euiDataGridToolbarSettings } from '../../../../common'; + +import { mlFieldFormatService } from '../../../../../services/field_format_service'; + +import { IndexPattern } from '../../../../../../../../../../src/plugins/data/public'; + +const PAGE_SIZE_OPTIONS = [5, 10, 25, 50]; + +type Pagination = Pick; +type TableItem = Record; + +interface ExplorationDataGridProps { + colorRange?: (d: number) => string; + columns: any[]; + indexPattern: IndexPattern; + pagination: Pagination; + resultsField: string; + rowCount: number; + selectedFields: string[]; + setPagination: Dispatch>; + setSelectedFields: Dispatch>; + setSortingColumns: Dispatch>; + sortingColumns: EuiDataGridSorting['columns']; + tableItems: TableItem[]; +} + +export const ClassificationExplorationDataGrid: FC = ({ + columns, + indexPattern, + pagination, + resultsField, + rowCount, + selectedFields, + setPagination, + setSelectedFields, + setSortingColumns, + sortingColumns, + tableItems, +}) => { + const renderCellValue = useMemo(() => { + return ({ rowIndex, columnId }: { rowIndex: number; columnId: string; setCellProps: any }) => { + const adjustedRowIndex = rowIndex - pagination.pageIndex * pagination.pageSize; + + const fullItem = tableItems[adjustedRowIndex]; + + if (fullItem === undefined) { + return null; + } + + let format: any; + + if (indexPattern !== undefined) { + format = mlFieldFormatService.getFieldFormatFromIndexPattern(indexPattern, columnId, ''); + } + + const cellValue = + fullItem.hasOwnProperty(columnId) && fullItem[columnId] !== undefined + ? fullItem[columnId] + : null; + + if (format !== undefined) { + return format.convert(cellValue, 'text'); + } + + if (typeof cellValue === 'string' || cellValue === null) { + return cellValue; + } + + if (typeof cellValue === 'boolean') { + return cellValue ? 'true' : 'false'; + } + + if (typeof cellValue === 'object' && cellValue !== null) { + return JSON.stringify(cellValue); + } + + return cellValue; + }; + }, [resultsField, rowCount, tableItems, pagination.pageIndex, pagination.pageSize]); + + const onChangeItemsPerPage = useCallback( + pageSize => { + setPagination(p => { + const pageIndex = Math.floor((p.pageSize * p.pageIndex) / pageSize); + return { pageIndex, pageSize }; + }); + }, + [setPagination] + ); + + const onChangePage = useCallback(pageIndex => setPagination(p => ({ ...p, pageIndex })), [ + setPagination, + ]); + + const onSort = useCallback(sc => setSortingColumns(sc), [setSortingColumns]); + + return ( + + ); +}; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/evaluate_panel.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/evaluate_panel.tsx index 91dae49ba5c497..af90547606f82d 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/evaluate_panel.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/evaluate_panel.tsx @@ -117,13 +117,7 @@ export const EvaluatePanel: FC = ({ jobConfig, jobStatus, searchQuery }) const resultsField = jobConfig.dest.results_field; let requiresKeyword = false; - const loadData = async ({ - isTrainingClause, - ignoreDefaultQuery = true, - }: { - isTrainingClause: { query: string; operator: string }; - ignoreDefaultQuery?: boolean; - }) => { + const loadData = async ({ isTraining }: { isTraining: boolean | undefined }) => { setIsLoading(true); try { @@ -134,19 +128,18 @@ export const EvaluatePanel: FC = ({ jobConfig, jobStatus, searchQuery }) } const evalData = await loadEvalData({ - isTraining: false, + isTraining, index, dependentVariable, resultsField, predictionFieldName, searchQuery, - ignoreDefaultQuery, jobType: ANALYSIS_CONFIG_TYPE.CLASSIFICATION, requiresKeyword, }); const docsCountResp = await loadDocsCount({ - isTraining: false, + isTraining, searchQuery, resultsField, destIndex: jobConfig.dest.index, @@ -225,29 +218,46 @@ export const EvaluatePanel: FC = ({ jobConfig, jobStatus, searchQuery }) }, [confusionMatrixData]); useEffect(() => { - const hasIsTrainingClause = - isResultsSearchBoolQuery(searchQuery) && - searchQuery.bool.must.filter( - (clause: any) => clause.match && clause.match[`${resultsField}.is_training`] !== undefined - ); - const isTrainingClause = - hasIsTrainingClause && - hasIsTrainingClause[0] && - hasIsTrainingClause[0].match[`${resultsField}.is_training`]; + let isTraining: boolean | undefined; + const query = + isResultsSearchBoolQuery(searchQuery) && (searchQuery.bool.should || searchQuery.bool.filter); - const noTrainingQuery = isTrainingClause === false || isTrainingClause === undefined; + if (query !== undefined && query !== false) { + for (let i = 0; i < query.length; i++) { + const clause = query[i]; - if (noTrainingQuery) { + if (clause.match && clause.match[`${resultsField}.is_training`] !== undefined) { + isTraining = clause.match[`${resultsField}.is_training`]; + break; + } else if ( + clause.bool && + (clause.bool.should !== undefined || clause.bool.filter !== undefined) + ) { + const innerQuery = clause.bool.should || clause.bool.filter; + if (innerQuery !== undefined) { + for (let j = 0; j < innerQuery.length; j++) { + const innerClause = innerQuery[j]; + if ( + innerClause.match && + innerClause.match[`${resultsField}.is_training`] !== undefined + ) { + isTraining = innerClause.match[`${resultsField}.is_training`]; + break; + } + } + } + } + } + } + if (isTraining === undefined) { setDataSubsetTitle(SUBSET_TITLE.ENTIRE); } else { setDataSubsetTitle( - isTrainingClause && isTrainingClause.query === 'true' - ? SUBSET_TITLE.TRAINING - : SUBSET_TITLE.TESTING + isTraining && isTraining === true ? SUBSET_TITLE.TRAINING : SUBSET_TITLE.TESTING ); } - loadData({ isTrainingClause }); + loadData({ isTraining }); }, [JSON.stringify(searchQuery)]); const renderCellValue = ({ diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/results_table.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/results_table.tsx index 9758dd969b443f..bf63dfe68fe9e5 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/results_table.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/results_table.tsx @@ -4,71 +4,39 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { Fragment, FC, useEffect, useState } from 'react'; -import moment from 'moment-timezone'; - +import React, { Fragment, FC, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { - EuiBadge, - EuiButtonIcon, EuiCallOut, - EuiCheckbox, EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiPanel, - EuiPopover, - EuiPopoverTitle, EuiProgress, EuiSpacer, EuiText, - EuiToolTip, - Query, } from '@elastic/eui'; -import { Query as QueryType } from '../../../analytics_management/components/analytics_list/common'; -import { ES_FIELD_TYPES } from '../../../../../../../../../../src/plugins/data/public'; -import { mlFieldFormatService } from '../../../../../services/field_format_service'; import { IndexPattern } from '../../../../../../../../../../src/plugins/data/public'; - -import { - ColumnType, - mlInMemoryTableBasicFactory, - OnTableChangeArg, - SortingPropType, - SORT_DIRECTION, -} from '../../../../../components/ml_in_memory_table'; - -import { formatHumanReadableDateTimeSeconds } from '../../../../../util/date_utils'; -import { Field } from '../../../../../../../common/types/fields'; -import { SavedSearchQuery } from '../../../../../contexts/ml'; import { BASIC_NUMERICAL_TYPES, EXTENDED_NUMERICAL_TYPES, - isKeywordAndTextType, sortRegressionResultsFields, } from '../../../../common/fields'; import { - toggleSelectedField, - EsDoc, DataFrameAnalyticsConfig, - EsFieldName, MAX_COLUMNS, - getPredictedFieldName, INDEX_STATUS, SEARCH_SIZE, defaultSearchQuery, - getDependentVar, } from '../../../../common'; import { getTaskStateBadge } from '../../../analytics_management/components/analytics_list/columns'; import { DATA_FRAME_TASK_STATE } from '../../../analytics_management/components/analytics_list/common'; -import { useExploreData, TableItem } from './use_explore_data'; +import { useExploreData } from './use_explore_data'; // TableItem import { ExplorationTitle } from './classification_exploration'; - -const PAGE_SIZE_OPTIONS = [5, 10, 25, 50]; - -const MlInMemoryTableBasic = mlInMemoryTableBasicFactory(); +import { ClassificationExplorationDataGrid } from './classification_exploration_data_grid'; +import { ExplorationQueryBar } from '../exploration_query_bar'; const showingDocs = i18n.translate( 'xpack.ml.dataframe.analytics.classificationExploration.documentsShownHelpText', @@ -94,307 +62,65 @@ interface Props { export const ResultsTable: FC = React.memo( ({ indexPattern, jobConfig, jobStatus, setEvaluateSearchQuery }) => { - const [pageIndex, setPageIndex] = useState(0); - const [pageSize, setPageSize] = useState(25); - const [selectedFields, setSelectedFields] = useState([] as Field[]); - const [docFields, setDocFields] = useState([] as Field[]); - const [depVarType, setDepVarType] = useState(undefined); - const [isColumnsPopoverVisible, setColumnsPopoverVisible] = useState(false); - const [searchQuery, setSearchQuery] = useState(defaultSearchQuery); - const [searchError, setSearchError] = useState(undefined); - const [searchString, setSearchString] = useState(undefined); - - const predictedFieldName = getPredictedFieldName( - jobConfig.dest.results_field, - jobConfig.analysis - ); - - const dependentVariable = getDependentVar(jobConfig.analysis); - - function toggleColumnsPopover() { - setColumnsPopoverVisible(!isColumnsPopoverVisible); - } - - function closeColumnsPopover() { - setColumnsPopoverVisible(false); - } - - function toggleColumn(column: EsFieldName) { - if (tableItems.length > 0 && jobConfig !== undefined) { - // spread to a new array otherwise the component wouldn't re-render - setSelectedFields([ - ...toggleSelectedField(selectedFields, column, jobConfig.dest.results_field, depVarType), - ]); - } - } - const needsDestIndexFields = indexPattern && indexPattern.title === jobConfig.source.index[0]; - + const resultsField = jobConfig.dest.results_field; const { errorMessage, - loadExploreData, - sortField, - sortDirection, - status, - tableItems, - } = useExploreData( - jobConfig, - needsDestIndexFields, + fieldTypes, + pagination, + searchQuery, selectedFields, + rowCount, + setPagination, + setSearchQuery, setSelectedFields, - setDocFields, - setDepVarType - ); + setSortingColumns, + sortingColumns, + status, + tableFields, + tableItems, + } = useExploreData(jobConfig, needsDestIndexFields); - const columns: Array> = selectedFields - .sort(({ name: a }, { name: b }) => sortRegressionResultsFields(a, b, jobConfig)) - .map(field => { - const { type } = field; - let format: any; + useEffect(() => { + setEvaluateSearchQuery(searchQuery); + }, [JSON.stringify(searchQuery)]); - if (indexPattern !== undefined) { - format = mlFieldFormatService.getFieldFormatFromIndexPattern(indexPattern, field.id, ''); - } + const columns = tableFields + .sort((a: any, b: any) => sortRegressionResultsFields(a, b, jobConfig)) + .map((field: any) => { + // Built-in values are ['boolean', 'currency', 'datetime', 'numeric', 'json'] + // To fall back to the default string schema it needs to be undefined. + let schema; + let isSortable = true; + const type = fieldTypes[field]; const isNumber = type !== undefined && (BASIC_NUMERICAL_TYPES.has(type) || EXTENDED_NUMERICAL_TYPES.has(type)); - const column: ColumnType = { - field: field.name, - name: field.name, - sortable: true, - truncateText: true, - }; - - const render = (d: any, fullItem: EsDoc) => { - if (format !== undefined) { - d = format.convert(d, 'text'); - return d; - } - - if (Array.isArray(d) && d.every(item => typeof item === 'string')) { - // If the cells data is an array of strings, return as a comma separated list. - // The list will get limited to 5 items with `…` at the end if there's more in the original array. - return `${d.slice(0, 5).join(', ')}${d.length > 5 ? ', …' : ''}`; - } else if (Array.isArray(d)) { - // If the cells data is an array of e.g. objects, display a 'array' badge with a - // tooltip that explains that this type of field is not supported in this table. - return ( - - - {i18n.translate( - 'xpack.ml.dataframe.analytics.classificationExploration.indexArrayBadgeContent', - { - defaultMessage: 'array', - } - )} - - - ); - } - - return d; - }; - if (isNumber) { - column.dataType = 'number'; - column.render = render; - } else if (typeof type !== 'undefined') { - switch (type) { - case ES_FIELD_TYPES.BOOLEAN: - column.dataType = ES_FIELD_TYPES.BOOLEAN; - column.render = d => (d ? 'true' : 'false'); - break; - case ES_FIELD_TYPES.DATE: - column.align = 'right'; - if (format !== undefined) { - column.render = render; - } else { - column.render = (d: any) => { - if (d !== undefined) { - return formatHumanReadableDateTimeSeconds(moment(d).unix() * 1000); - } - return d; - }; - } - break; - default: - column.render = render; - break; - } - } else { - column.render = render; + schema = 'numeric'; } - return column; - }); - - const docFieldsCount = docFields.length; - - useEffect(() => { - if ( - jobConfig !== undefined && - columns.length > 0 && - selectedFields.length > 0 && - sortField !== undefined && - sortDirection !== undefined && - selectedFields.some(field => field.name === sortField) - ) { - let field = sortField; - // If sorting by predictedField use dependentVar type - if (predictedFieldName === sortField) { - field = dependentVariable; + switch (type) { + case 'date': + schema = 'datetime'; + break; + case 'geo_point': + schema = 'json'; + break; + case 'boolean': + schema = 'boolean'; + break; } - const requiresKeyword = isKeywordAndTextType(field); - - loadExploreData({ - field: sortField, - direction: sortDirection, - searchQuery, - requiresKeyword, - }); - } - }, [JSON.stringify(searchQuery)]); - - useEffect(() => { - // By default set sorting to descending on the prediction field (`_prediction`). - // if that's not available sort ascending on the first column. Check if the current sorting field is still available. - if ( - jobConfig !== undefined && - columns.length > 0 && - selectedFields.length > 0 && - !selectedFields.some(field => field.name === sortField) - ) { - const predictedFieldSelected = selectedFields.some( - field => field.name === predictedFieldName - ); - - // CHECK IF keyword suffix is needed (if predicted field is selected we have to check the dependent variable type) - let sortByField = predictedFieldSelected ? dependentVariable : selectedFields[0].name; - - const requiresKeyword = isKeywordAndTextType(sortByField); - - sortByField = predictedFieldSelected ? predictedFieldName : sortByField; - - const direction = predictedFieldSelected ? SORT_DIRECTION.DESC : SORT_DIRECTION.ASC; - loadExploreData({ field: sortByField, direction, searchQuery, requiresKeyword }); - } - }, [ - jobConfig, - columns.length, - selectedFields.length, - sortField, - sortDirection, - tableItems.length, - ]); - - let sorting: SortingPropType = false; - let onTableChange; - - if (columns.length > 0 && sortField !== '' && sortField !== undefined) { - sorting = { - sort: { - field: sortField, - direction: sortDirection, - }, - }; - - onTableChange = ({ - page = { index: 0, size: 10 }, - sort = { field: sortField, direction: sortDirection }, - }: OnTableChangeArg) => { - const { index, size } = page; - setPageIndex(index); - setPageSize(size); - if (sort.field !== sortField || sort.direction !== sortDirection) { - let field = sort.field; - // If sorting by predictedField use depVar for type check - if (predictedFieldName === sort.field) { - field = dependentVariable; - } - - loadExploreData({ - ...sort, - searchQuery, - requiresKeyword: isKeywordAndTextType(field), - }); + if (field === `${resultsField}.feature_importance`) { + isSortable = false; } - }; - } - const pagination = { - initialPageIndex: pageIndex, - initialPageSize: pageSize, - totalItemCount: tableItems.length, - pageSizeOptions: PAGE_SIZE_OPTIONS, - hidePerPageOptions: false, - }; - - const onQueryChange = ({ query, error }: { query: QueryType; error: any }) => { - if (error) { - setSearchError(error.message); - } else { - try { - const esQueryDsl = Query.toESQuery(query); - setSearchQuery(esQueryDsl); - setSearchString(query.text); - setSearchError(undefined); - // set query for use in evaluate panel - setEvaluateSearchQuery(esQueryDsl); - } catch (e) { - setSearchError(e.toString()); - } - } - }; + return { id: field, schema, isSortable }; + }); - const search = { - onChange: onQueryChange, - defaultQuery: searchString, - box: { - incremental: false, - placeholder: i18n.translate( - 'xpack.ml.dataframe.analytics.regressionExploration.searchBoxPlaceholder', - { - defaultMessage: 'E.g. avg>0.5', - } - ), - }, - filters: [ - { - type: 'field_value_toggle_group', - field: `${jobConfig.dest.results_field}.is_training`, - items: [ - { - value: false, - name: i18n.translate( - 'xpack.ml.dataframe.analytics.regressionExploration.isTestingLabel', - { - defaultMessage: 'Testing', - } - ), - }, - { - value: true, - name: i18n.translate( - 'xpack.ml.dataframe.analytics.regressionExploration.isTrainingLabel', - { - defaultMessage: 'Training', - } - ), - }, - ], - }, - ], - }; + const docFieldsCount = tableFields.length; if (jobConfig === undefined) { return null; @@ -426,11 +152,6 @@ export const ResultsTable: FC = React.memo( ); } - const tableError = - status === INDEX_STATUS.ERROR && errorMessage.includes('parsing_exception') - ? errorMessage - : searchError; - return ( = React.memo( {docFieldsCount > MAX_COLUMNS && ( {i18n.translate( - 'xpack.ml.dataframe.analytics.regressionExploration.fieldSelection', + 'xpack.ml.dataframe.analytics.classificationExploration.fieldSelection', { defaultMessage: '{selectedFieldsLength, number} of {docFieldsCount, number} {docFieldsCount, plural, one {field} other {fields}} selected', @@ -466,52 +187,6 @@ export const ResultsTable: FC = React.memo( )} - - - - } - isOpen={isColumnsPopoverVisible} - closePopover={closeColumnsPopover} - ownFocus - > - - {i18n.translate( - 'xpack.ml.dataframe.analytics.regressionExploration.selectFieldsPopoverTitle', - { - defaultMessage: 'Select fields', - } - )} - -
- {docFields.map(({ name }) => ( - field.name === name)} - onChange={() => toggleColumn(name)} - disabled={ - selectedFields.some(field => field.name === name) && - selectedFields.length === 1 - } - /> - ))} -
-
-
-
@@ -520,28 +195,39 @@ export const ResultsTable: FC = React.memo( )} {(columns.length > 0 || searchQuery !== defaultSearchQuery) && ( - - - - - - - + + + + + + + + + + + + + + + + )}
); diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/use_explore_data.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/use_explore_data.ts index 9527a9adb98ced..c8809ca5e471bd 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/use_explore_data.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/classification_exploration/use_explore_data.ts @@ -3,113 +3,158 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -/* - * 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, { useEffect, useState } from 'react'; +import { useEffect, useState, Dispatch, SetStateAction } from 'react'; +import { EuiDataGridPaginationProps, EuiDataGridSorting } from '@elastic/eui'; import { SearchResponse } from 'elasticsearch'; import { cloneDeep } from 'lodash'; -import { SortDirection, SORT_DIRECTION } from '../../../../../components/ml_in_memory_table'; +import { SORT_DIRECTION } from '../../../../../components/ml_in_memory_table'; import { ml } from '../../../../../services/ml_api_service'; import { getNestedProperty } from '../../../../../util/object_utils'; import { newJobCapsService } from '../../../../../services/new_job_capabilities_service'; -import { Field } from '../../../../../../../common/types/fields'; +import { isKeywordAndTextType } from '../../../../common/fields'; +import { Dictionary } from '../../../../../../../common/types/common'; import { ES_FIELD_TYPES } from '../../../../../../../../../../src/plugins/data/public'; import { defaultSearchQuery, ResultsSearchQuery, isResultsSearchBoolQuery, + LoadExploreDataArg, } from '../../../../common/analytics'; import { getDefaultFieldsFromJobCaps, + getDependentVar, getFlattenedFields, + getPredictedFieldName, DataFrameAnalyticsConfig, EsFieldName, INDEX_STATUS, - SEARCH_SIZE, - SearchQuery, } from '../../../../common'; import { SavedSearchQuery } from '../../../../../contexts/ml'; -interface LoadClassificationExploreDataArg { - direction: SortDirection; - filterByIsTraining?: boolean; - field: string; - searchQuery: SavedSearchQuery; - requiresKeyword?: boolean; - pageIndex?: number; - pageSize?: number; -} - export type TableItem = Record; +type Pagination = Pick; export interface UseExploreDataReturnType { errorMessage: string; - loadExploreData: (arg: LoadClassificationExploreDataArg) => void; - sortField: EsFieldName; - sortDirection: SortDirection; + fieldTypes: { [key: string]: ES_FIELD_TYPES }; + pagination: Pagination; + rowCount: number; + searchQuery: SavedSearchQuery; + selectedFields: EsFieldName[]; + setFilterByIsTraining: Dispatch>; + setPagination: Dispatch>; + setSearchQuery: Dispatch>; + setSelectedFields: Dispatch>; + setSortingColumns: Dispatch>; + sortingColumns: EuiDataGridSorting['columns']; status: INDEX_STATUS; + tableFields: string[]; tableItems: TableItem[]; } +type EsSorting = Dictionary<{ + order: 'asc' | 'desc'; +}>; + +// The types specified in `@types/elasticsearch` are out of date and still have `total: number`. +interface SearchResponse7 extends SearchResponse { + hits: SearchResponse['hits'] & { + total: { + value: number; + relation: string; + }; + }; +} + export const useExploreData = ( - jobConfig: DataFrameAnalyticsConfig | undefined, - needsDestIndexFields: boolean, - selectedFields: Field[], - setSelectedFields: React.Dispatch>, - setDocFields: React.Dispatch>, - setDepVarType: React.Dispatch> + jobConfig: DataFrameAnalyticsConfig, + needsDestIndexFields: boolean ): UseExploreDataReturnType => { const [errorMessage, setErrorMessage] = useState(''); const [status, setStatus] = useState(INDEX_STATUS.UNUSED); + + const [selectedFields, setSelectedFields] = useState([] as EsFieldName[]); + const [tableFields, setTableFields] = useState([]); const [tableItems, setTableItems] = useState([]); - const [sortField, setSortField] = useState(''); - const [sortDirection, setSortDirection] = useState(SORT_DIRECTION.ASC); + const [fieldTypes, setFieldTypes] = useState<{ [key: string]: ES_FIELD_TYPES }>({}); + const [rowCount, setRowCount] = useState(0); + + const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 }); + const [searchQuery, setSearchQuery] = useState(defaultSearchQuery); + const [filterByIsTraining, setFilterByIsTraining] = useState(undefined); + const [sortingColumns, setSortingColumns] = useState([]); + + const predictedFieldName = getPredictedFieldName( + jobConfig.dest.results_field, + jobConfig.analysis + ); + const dependentVariable = getDependentVar(jobConfig.analysis); const getDefaultSelectedFields = () => { const { fields } = newJobCapsService; - if (selectedFields.length === 0 && jobConfig !== undefined) { - const { - selectedFields: defaultSelected, - docFields, - depVarType, - } = getDefaultFieldsFromJobCaps(fields, jobConfig, needsDestIndexFields); - - setDepVarType(depVarType); - setSelectedFields(defaultSelected); - setDocFields(docFields); + const { selectedFields: defaultSelected, docFields } = getDefaultFieldsFromJobCaps( + fields, + jobConfig, + needsDestIndexFields + ); + + const types: { [key: string]: ES_FIELD_TYPES } = {}; + const allFields: string[] = []; + + docFields.forEach(field => { + types[field.id] = field.type; + allFields.push(field.id); + }); + + setFieldTypes(types); + setSelectedFields(defaultSelected.map(field => field.id)); + setTableFields(allFields); } }; const loadExploreData = async ({ - field, - direction, - searchQuery, - requiresKeyword, - }: LoadClassificationExploreDataArg) => { + filterByIsTraining: isTraining, + searchQuery: incomingQuery, + }: LoadExploreDataArg) => { if (jobConfig !== undefined) { setErrorMessage(''); setStatus(INDEX_STATUS.LOADING); try { const resultsField = jobConfig.dest.results_field; - const searchQueryClone: ResultsSearchQuery = cloneDeep(searchQuery); + const searchQueryClone: ResultsSearchQuery = cloneDeep(incomingQuery); let query: ResultsSearchQuery; + const { pageIndex, pageSize } = pagination; + // If filterByIsTraining is defined - add that in to the final query + const trainingQuery = + isTraining !== undefined + ? { + term: { [`${resultsField}.is_training`]: { value: isTraining } }, + } + : undefined; - if (JSON.stringify(searchQuery) === JSON.stringify(defaultSearchQuery)) { - query = { + if (JSON.stringify(incomingQuery) === JSON.stringify(defaultSearchQuery)) { + const existsQuery = { exists: { field: resultsField, }, }; + + query = { + bool: { + must: [existsQuery], + }, + }; + + if (trainingQuery !== undefined && isResultsSearchBoolQuery(query)) { + query.bool.must.push(trainingQuery); + } } else if (isResultsSearchBoolQuery(searchQueryClone)) { if (searchQueryClone.bool.must === undefined) { searchQueryClone.bool.must = []; @@ -121,33 +166,37 @@ export const useExploreData = ( }, }); + if (trainingQuery !== undefined) { + searchQueryClone.bool.must.push(trainingQuery); + } + query = searchQueryClone; } else { query = searchQueryClone; } - const body: SearchQuery = { - query, - }; - - if (field !== undefined) { - body.sort = [ - { - [`${field}${requiresKeyword ? '.keyword' : ''}`]: { - order: direction, - }, - }, - ]; - } + const sort: EsSorting = sortingColumns + .map(column => { + const { id } = column; + column.id = isKeywordAndTextType(id) ? `${id}.keyword` : id; + return column; + }) + .reduce((s, column) => { + s[column.id] = { order: column.direction }; + return s; + }, {} as EsSorting); - const resp: SearchResponse = await ml.esSearch({ + const resp: SearchResponse7 = await ml.esSearch({ index: jobConfig.dest.index, - size: SEARCH_SIZE, - body, + body: { + query, + from: pageIndex * pageSize, + size: pageSize, + ...(Object.keys(sort).length > 0 ? { sort } : {}), + }, }); - setSortField(field); - setSortDirection(direction); + setRowCount(resp.hits.total.value); const docs = resp.hits.hits; @@ -199,10 +248,45 @@ export const useExploreData = ( }; useEffect(() => { - if (jobConfig !== undefined) { - getDefaultSelectedFields(); - } + getDefaultSelectedFields(); + }, [jobConfig && jobConfig.id]); + + // By default set sorting to descending on the prediction field (`_prediction`). + useEffect(() => { + const sortByField = isKeywordAndTextType(dependentVariable) + ? `${predictedFieldName}.keyword` + : predictedFieldName; + const direction = SORT_DIRECTION.DESC; + + setSortingColumns([{ id: sortByField, direction }]); }, [jobConfig && jobConfig.id]); - return { errorMessage, loadExploreData, sortField, sortDirection, status, tableItems }; + useEffect(() => { + loadExploreData({ filterByIsTraining, searchQuery }); + }, [ + filterByIsTraining, + jobConfig && jobConfig.id, + pagination, + searchQuery, + selectedFields, + sortingColumns, + ]); + + return { + errorMessage, + fieldTypes, + pagination, + searchQuery, + selectedFields, + rowCount, + setFilterByIsTraining, + setPagination, + setSelectedFields, + setSortingColumns, + setSearchQuery, + sortingColumns, + status, + tableItems, + tableFields, + }; }; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/regression_exploration/use_explore_data.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/regression_exploration/use_explore_data.ts index c68fe5b2cbee86..978aafd10de11f 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/regression_exploration/use_explore_data.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/regression_exploration/use_explore_data.ts @@ -29,7 +29,7 @@ import { Dictionary } from '../../../../../../../common/types/common'; import { isKeywordAndTextType } from '../../../../common/fields'; import { ES_FIELD_TYPES } from '../../../../../../../../../../src/plugins/data/public'; import { - LoadRegressionExploreDataArg, + LoadExploreDataArg, defaultSearchQuery, ResultsSearchQuery, isResultsSearchBoolQuery, @@ -120,7 +120,7 @@ export const useExploreData = ( const loadExploreData = async ({ filterByIsTraining: isTraining, searchQuery: incomingQuery, - }: LoadRegressionExploreDataArg) => { + }: LoadExploreDataArg) => { if (jobConfig !== undefined) { setErrorMessage(''); setStatus(INDEX_STATUS.LOADING); diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 4e1217ac9e7b50..39f11ff448292b 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -9478,8 +9478,6 @@ "xpack.ml.dataframe.analytics.classificationExploration.evaluateJobIdTitle": "分類ジョブID {jobId}の評価", "xpack.ml.dataframe.analytics.classificationExploration.firstDocumentsShownHelpText": "予測がある最初の{searchSize}のドキュメントを示す", "xpack.ml.dataframe.analytics.classificationExploration.generalizationDocsCount": "{docsCount, plural, one {# doc} other {# docs}}が評価されました", - "xpack.ml.dataframe.analytics.classificationExploration.indexArrayBadgeContent": "配列", - "xpack.ml.dataframe.analytics.classificationExploration.indexArrayToolTipContent": "この配列ベースの列の完全なコンテンツは表示できません。", "xpack.ml.dataframe.analytics.classificationExploration.jobCapsFetchError": "結果を取得できません。インデックスのフィールドデータの読み込み中にエラーが発生しました。", "xpack.ml.dataframe.analytics.classificationExploration.jobConfigurationFetchError": "結果を取得できません。ジョブ構成データの読み込み中にエラーが発生しました。", "xpack.ml.dataframe.analytics.classificationExploration.jobConfigurationNoResultsMessage": "結果が見つかりませんでした。", @@ -9574,8 +9572,6 @@ "xpack.ml.dataframe.analytics.regressionExploration.generalizationDocsCount": "{docsCount, plural, one {# doc} other {# docs}}が評価されました", "xpack.ml.dataframe.analytics.regressionExploration.generalizationErrorTitle": "一般化エラー", "xpack.ml.dataframe.analytics.regressionExploration.indexError": "インデックスデータの読み込み中にエラーが発生しました。", - "xpack.ml.dataframe.analytics.regressionExploration.isTestingLabel": "テスト", - "xpack.ml.dataframe.analytics.regressionExploration.isTrainingLabel": "トレーニング", "xpack.ml.dataframe.analytics.regressionExploration.jobCapsFetchError": "結果を取得できません。インデックスのフィールドデータの読み込み中にエラーが発生しました。", "xpack.ml.dataframe.analytics.regressionExploration.jobConfigurationFetchError": "結果を取得できません。ジョブ構成データの読み込み中にエラーが発生しました。", "xpack.ml.dataframe.analytics.regressionExploration.meanSquaredErrorText": "平均二乗エラー", @@ -9587,9 +9583,6 @@ "xpack.ml.dataframe.analytics.regressionExploration.queryParsingErrorMessage": "クエリをパースできません。", "xpack.ml.dataframe.analytics.regressionExploration.rSquaredText": "R の二乗", "xpack.ml.dataframe.analytics.regressionExploration.rSquaredTooltipContent": "適合度を表します。モデルによる観察された結果の複製の効果を測定します。", - "xpack.ml.dataframe.analytics.regressionExploration.searchBoxPlaceholder": "例: 平均>0.5", - "xpack.ml.dataframe.analytics.regressionExploration.selectColumnsAriaLabel": "列を選択", - "xpack.ml.dataframe.analytics.regressionExploration.selectFieldsPopoverTitle": "フィールドを選択", "xpack.ml.dataframe.analytics.regressionExploration.tableJobIdTitle": "回帰ジョブID {jobId}のデスティネーションインデックス", "xpack.ml.dataframe.analytics.regressionExploration.trainingDocsCount": "{docsCount, plural, one {# doc} other {# docs}}が評価されました", "xpack.ml.dataframe.analytics.regressionExploration.trainingErrorTitle": "トレーニングエラー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index bfdcc8b865313f..c24e7d0fa845af 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -9481,8 +9481,6 @@ "xpack.ml.dataframe.analytics.classificationExploration.evaluateJobIdTitle": "分类作业 ID {jobId} 的评估", "xpack.ml.dataframe.analytics.classificationExploration.firstDocumentsShownHelpText": "正在显示有相关预测存在的前 {searchSize} 个文档", "xpack.ml.dataframe.analytics.classificationExploration.generalizationDocsCount": "{docsCount, plural, one {# 个文档} other {# 个文档}}已评估", - "xpack.ml.dataframe.analytics.classificationExploration.indexArrayBadgeContent": "数组", - "xpack.ml.dataframe.analytics.classificationExploration.indexArrayToolTipContent": "此基于数组的列的完整内容无法显示。", "xpack.ml.dataframe.analytics.classificationExploration.jobCapsFetchError": "无法提取结果。加载索引的字段数据时发生错误。", "xpack.ml.dataframe.analytics.classificationExploration.jobConfigurationFetchError": "无法提取结果。加载作业配置数据时发生错误。", "xpack.ml.dataframe.analytics.classificationExploration.jobConfigurationNoResultsMessage": "未找到结果。", @@ -9577,8 +9575,6 @@ "xpack.ml.dataframe.analytics.regressionExploration.generalizationDocsCount": "{docsCount, plural, one {# 个文档} other {# 个文档}}已评估", "xpack.ml.dataframe.analytics.regressionExploration.generalizationErrorTitle": "泛化误差", "xpack.ml.dataframe.analytics.regressionExploration.indexError": "加载索引数据时出错。", - "xpack.ml.dataframe.analytics.regressionExploration.isTestingLabel": "测试", - "xpack.ml.dataframe.analytics.regressionExploration.isTrainingLabel": "培训", "xpack.ml.dataframe.analytics.regressionExploration.jobCapsFetchError": "无法提取结果。加载索引的字段数据时发生错误。", "xpack.ml.dataframe.analytics.regressionExploration.jobConfigurationFetchError": "无法提取结果。加载作业配置数据时发生错误。", "xpack.ml.dataframe.analytics.regressionExploration.meanSquaredErrorText": "均方误差", @@ -9590,9 +9586,6 @@ "xpack.ml.dataframe.analytics.regressionExploration.queryParsingErrorMessage": "无法解析查询。", "xpack.ml.dataframe.analytics.regressionExploration.rSquaredText": "R 平方", "xpack.ml.dataframe.analytics.regressionExploration.rSquaredTooltipContent": "表示拟合优度。度量模型复制被观察结果的优良性。", - "xpack.ml.dataframe.analytics.regressionExploration.searchBoxPlaceholder": "例如 avg>0.5", - "xpack.ml.dataframe.analytics.regressionExploration.selectColumnsAriaLabel": "选择列", - "xpack.ml.dataframe.analytics.regressionExploration.selectFieldsPopoverTitle": "选择字段", "xpack.ml.dataframe.analytics.regressionExploration.tableJobIdTitle": "回归作业 ID {jobId} 的目标索引", "xpack.ml.dataframe.analytics.regressionExploration.trainingDocsCount": "{docsCount, plural, one {# 个文档} other {# 个文档}}已评估", "xpack.ml.dataframe.analytics.regressionExploration.trainingErrorTitle": "训练误差", From e8c42095d2fff853c67e7000ef093ee6fc6a8c87 Mon Sep 17 00:00:00 2001 From: Uladzislau Lasitsa Date: Mon, 20 Apr 2020 19:03:01 +0300 Subject: [PATCH 04/39] Index pattern management UI -> TypeScript and New Platform Ready (create edit field) (#63836) * Converted to react. Moved routes to edit_index_pattern * Added withRouter for navigation. Fixed index_header. * Fixed comments * Fixed comments. Co-authored-by: Elastic Machine --- .../edit_index_pattern/constants.ts | 22 +++ .../create_edit_field.html | 0 .../create_edit_field/create_edit_field.js | 180 ------------------ .../create_edit_field/create_edit_field.tsx | 111 +++++++++++ .../create_edit_field/{index.js => index.ts} | 2 +- .../edit_index_pattern/edit_index_pattern.js | 98 +++++++++- .../index_header/index_header.tsx | 4 +- .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 9 files changed, 227 insertions(+), 192 deletions(-) create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/constants.ts rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/{create_edit_field => }/create_edit_field.html (100%) delete mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js create mode 100644 src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.tsx rename src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/{index.js => index.ts} (93%) diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/constants.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/constants.ts new file mode 100644 index 00000000000000..56da031eb4ee86 --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/constants.ts @@ -0,0 +1,22 @@ +/* + * 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 TAB_INDEXED_FIELDS = 'indexedFields'; +export const TAB_SCRIPTED_FIELDS = 'scriptedFields'; +export const TAB_SOURCE_FILTERS = 'sourceFilters'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.html b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field.html similarity index 100% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.html rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field.html 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 deleted file mode 100644 index 95d6cb6878e532..00000000000000 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js +++ /dev/null @@ -1,180 +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 { IndexPatternField } from '../../../../../../../../../plugins/data/public'; -import { RegistryFieldFormatEditorsProvider } from 'ui/registry/field_format_editors'; -import { docTitle } from 'ui/doc_title'; -import { KbnUrlProvider } from 'ui/url'; -import uiRoutes from 'ui/routes'; -import { toastNotifications } from 'ui/notify'; -import { npStart } from 'ui/new_platform'; - -import template from './create_edit_field.html'; -import { getEditFieldBreadcrumbs, getCreateFieldBreadcrumbs } from '../../breadcrumbs'; - -import React from 'react'; -import { render, unmountComponentAtNode } from 'react-dom'; -import { FieldEditor } from 'ui/field_editor'; -import { I18nContext } from 'ui/i18n'; -import { i18n } from '@kbn/i18n'; - -import { IndexHeader } from '../index_header'; - -const REACT_FIELD_EDITOR_ID = 'reactFieldEditor'; -const renderFieldEditor = ( - $scope, - indexPattern, - field, - { getConfig, $http, fieldFormatEditors, redirectAway } -) => { - $scope.$$postDigest(() => { - const node = document.getElementById(REACT_FIELD_EDITOR_ID); - if (!node) { - return; - } - - render( - - - - , - node - ); - }); -}; - -const destroyFieldEditor = () => { - const node = document.getElementById(REACT_FIELD_EDITOR_ID); - node && unmountComponentAtNode(node); -}; - -uiRoutes - .when('/management/kibana/index_patterns/:indexPatternId/field/:fieldName*', { - mode: 'edit', - k7Breadcrumbs: getEditFieldBreadcrumbs, - }) - .when('/management/kibana/index_patterns/:indexPatternId/create-field/', { - mode: 'create', - k7Breadcrumbs: getCreateFieldBreadcrumbs, - }) - .defaults(/management\/kibana\/index_patterns\/[^\/]+\/(field|create-field)(\/|$)/, { - template, - mapBreadcrumbs($route, breadcrumbs) { - const { indexPattern } = $route.current.locals; - return breadcrumbs.map(crumb => { - if (crumb.id !== indexPattern.id) { - return crumb; - } - - return { - ...crumb, - display: indexPattern.title, - }; - }); - }, - resolve: { - indexPattern: function($route, Promise, redirectWhenMissing) { - const { indexPatterns } = npStart.plugins.data; - return Promise.resolve(indexPatterns.get($route.current.params.indexPatternId)).catch( - redirectWhenMissing('/management/kibana/index_patterns') - ); - }, - }, - controllerAs: 'fieldSettings', - controller: function FieldEditorPageController( - $scope, - $route, - $timeout, - $http, - Private, - config - ) { - const getConfig = (...args) => config.get(...args); - const fieldFormatEditors = Private(RegistryFieldFormatEditorsProvider); - const kbnUrl = Private(KbnUrlProvider); - - this.mode = $route.current.mode; - this.indexPattern = $route.current.locals.indexPattern; - - if (this.mode === 'edit') { - const fieldName = $route.current.params.fieldName; - this.field = this.indexPattern.fields.getByName(fieldName); - - if (!this.field) { - const message = i18n.translate('kbn.management.editIndexPattern.scripted.noFieldLabel', { - defaultMessage: - "'{indexPatternTitle}' index pattern doesn't have a scripted field called '{fieldName}'", - values: { indexPatternTitle: this.indexPattern.title, fieldName }, - }); - toastNotifications.add(message); - - kbnUrl.redirectToRoute(this.indexPattern, 'edit'); - return; - } - } else if (this.mode === 'create') { - this.field = new IndexPatternField(this.indexPattern, { - scripted: true, - type: 'number', - }); - } else { - const errorMessage = i18n.translate( - 'kbn.management.editIndexPattern.scripted.unknownModeErrorMessage', - { - defaultMessage: 'unknown fieldSettings mode {mode}', - values: { mode: this.mode }, - } - ); - throw new Error(errorMessage); - } - - const fieldName = - this.field.name || - i18n.translate('kbn.management.editIndexPattern.scripted.newFieldPlaceholder', { - defaultMessage: 'New Scripted Field', - }); - docTitle.change([fieldName, this.indexPattern.title]); - - renderFieldEditor($scope, this.indexPattern, this.field, { - getConfig, - $http, - fieldFormatEditors, - redirectAway: () => { - $timeout(() => { - kbnUrl.changeToRoute( - this.indexPattern, - this.field.scripted ? 'scriptedFields' : 'indexedFields' - ); - }); - }, - }); - - $scope.$on('$destroy', () => { - destroyFieldEditor(); - }); - }, - }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.tsx new file mode 100644 index 00000000000000..4839870f0f3c8a --- /dev/null +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.tsx @@ -0,0 +1,111 @@ +/* + * 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 { withRouter, RouteComponentProps } from 'react-router-dom'; +// @ts-ignore +import { FieldEditor } from 'ui/field_editor'; + +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { IndexHeader } from '../index_header'; +import { IndexPattern, IndexPatternField } from '../../../../../../../../../plugins/data/public'; +import { ChromeDocTitle, NotificationsStart } from '../../../../../../../../../core/public'; +import { TAB_SCRIPTED_FIELDS, TAB_INDEXED_FIELDS } from '../constants'; + +interface CreateEditFieldProps extends RouteComponentProps { + indexPattern: IndexPattern; + mode?: string; + fieldName?: string; + fieldFormatEditors: any; + getConfig: (name: string) => any; + services: { + notifications: NotificationsStart; + docTitle: ChromeDocTitle; + http: Function; + }; +} + +const newFieldPlaceholder = i18n.translate( + 'kbn.management.editIndexPattern.scripted.newFieldPlaceholder', + { + defaultMessage: 'New Scripted Field', + } +); + +export const CreateEditField = withRouter( + ({ + indexPattern, + mode, + fieldName, + fieldFormatEditors, + getConfig, + services, + history, + }: CreateEditFieldProps) => { + const field = + mode === 'edit' && fieldName + ? indexPattern.fields.getByName(fieldName) + : new IndexPatternField(indexPattern, { + scripted: true, + type: 'number', + }); + + const url = `/management/kibana/index_patterns/${indexPattern.id}`; + + if (mode === 'edit') { + if (!field) { + const message = i18n.translate('kbn.management.editIndexPattern.scripted.noFieldLabel', { + defaultMessage: + "'{indexPatternTitle}' index pattern doesn't have a scripted field called '{fieldName}'", + values: { indexPatternTitle: indexPattern.title, fieldName }, + }); + services.notifications.toasts.addWarning(message); + history.push(url); + } + } + + const docFieldName = field?.name || newFieldPlaceholder; + + services.docTitle.change([docFieldName, indexPattern.title]); + + const redirectAway = () => { + history.push(`${url}?_a=(tab:${field?.scripted ? TAB_SCRIPTED_FIELDS : TAB_INDEXED_FIELDS})`); + }; + + return ( + + + + + + + + + ); + } +); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.ts similarity index 93% rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.js rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.ts index 890a3b2622577b..473a8f5b57c825 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/index.ts @@ -17,4 +17,4 @@ * under the License. */ -import './create_edit_field'; +export { CreateEditField } from './create_edit_field'; 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 69184a513f53a5..3239a17f109e43 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 @@ -18,15 +18,18 @@ */ import _ from 'lodash'; +import { HashRouter } from 'react-router-dom'; import { IndexHeader } from './index_header'; -import './create_edit_field'; +import { CreateEditField } from './create_edit_field'; import { docTitle } from 'ui/doc_title'; import { KbnUrlProvider } from 'ui/url'; import { IndicesEditSectionsProvider } from './edit_sections'; import { fatalError, toastNotifications } from 'ui/notify'; +import { RegistryFieldFormatEditorsProvider } from 'ui/registry/field_format_editors'; import uiRoutes from 'ui/routes'; import { uiModules } from 'ui/modules'; import template from './edit_index_pattern.html'; +import createEditFieldtemplate from './create_edit_field.html'; import { fieldWildcardMatcher } from '../../../../../../../../plugins/kibana_utils/public'; import { subscribeWithScope } from '../../../../../../../../plugins/kibana_legacy/public'; import React from 'react'; @@ -37,8 +40,12 @@ import { ScriptedFieldsTable } from './scripted_fields_table'; import { i18n } from '@kbn/i18n'; import { I18nContext } from 'ui/i18n'; import { npStart } from 'ui/new_platform'; - -import { getEditBreadcrumbs } from '../breadcrumbs'; +import { + getEditBreadcrumbs, + getEditFieldBreadcrumbs, + getCreateFieldBreadcrumbs, +} from '../breadcrumbs'; +import { TAB_INDEXED_FIELDS, TAB_SCRIPTED_FIELDS, TAB_SOURCE_FILTERS } from './constants'; import { createEditIndexPatternPageStateContainer } from './edit_index_pattern_state_container'; const REACT_SOURCE_FILTERS_DOM_ELEMENT_ID = 'reactSourceFiltersTable'; @@ -46,10 +53,6 @@ const REACT_INDEXED_FIELDS_DOM_ELEMENT_ID = 'reactIndexedFieldsTable'; const REACT_SCRIPTED_FIELDS_DOM_ELEMENT_ID = 'reactScriptedFieldsTable'; const REACT_INDEX_HEADER_DOM_ELEMENT_ID = 'reactIndexHeader'; -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) { @@ -425,3 +428,84 @@ uiModules renderIndexHeader($scope, config); }); + +// routes for create edit field. Will be removed after migartion all component to react. +const REACT_FIELD_EDITOR_ID = 'reactFieldEditor'; +const renderCreateEditField = ($scope, $route, getConfig, $http, fieldFormatEditors) => { + $scope.$$postDigest(() => { + const node = document.getElementById(REACT_FIELD_EDITOR_ID); + if (!node) { + return; + } + + render( + + + + + , + node + ); + }); +}; + +const destroyCreateEditField = () => { + const node = document.getElementById(REACT_FIELD_EDITOR_ID); + node && unmountComponentAtNode(node); +}; + +uiRoutes + .when('/management/kibana/index_patterns/:indexPatternId/field/:fieldName*', { + mode: 'edit', + k7Breadcrumbs: getEditFieldBreadcrumbs, + }) + .when('/management/kibana/index_patterns/:indexPatternId/create-field/', { + mode: 'create', + k7Breadcrumbs: getCreateFieldBreadcrumbs, + }) + .defaults(/management\/kibana\/index_patterns\/[^\/]+\/(field|create-field)(\/|$)/, { + template: createEditFieldtemplate, + mapBreadcrumbs($route, breadcrumbs) { + const { indexPattern } = $route.current.locals; + return breadcrumbs.map(crumb => { + if (crumb.id !== indexPattern.id) { + return crumb; + } + + return { + ...crumb, + display: indexPattern.title, + }; + }); + }, + resolve: { + indexPattern: function($route, Promise, redirectWhenMissing) { + const { indexPatterns } = npStart.plugins.data; + return Promise.resolve(indexPatterns.get($route.current.params.indexPatternId)).catch( + redirectWhenMissing('/management/kibana/index_patterns') + ); + }, + }, + controllerAs: 'fieldSettings', + controller: function FieldEditorPageController($scope, $route, $http, Private, config) { + const getConfig = (...args) => config.get(...args); + const fieldFormatEditors = Private(RegistryFieldFormatEditorsProvider); + + renderCreateEditField($scope, $route, getConfig, $http, fieldFormatEditors); + + $scope.$on('$destroy', () => { + destroyCreateEditField(); + }); + }, + }); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/index_header/index_header.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/index_header/index_header.tsx index 866d10ecb0e19d..deac85d9a32e9a 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/index_header/index_header.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/index_header/index_header.tsx @@ -30,8 +30,8 @@ import { import { IIndexPattern } from '../../../../../../../../../plugins/data/public'; interface IndexHeaderProps { - defaultIndex: string; indexPattern: IIndexPattern; + defaultIndex?: string; setDefault?: () => void; refreshFields?: () => void; deleteIndexPattern?: () => void; @@ -77,7 +77,7 @@ export function IndexHeader({ )} - +

{indexPattern.title}

diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 39f11ff448292b..209a3f626272fa 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2244,7 +2244,6 @@ "kbn.management.editIndexPattern.scripted.table.nameHeader": "名前", "kbn.management.editIndexPattern.scripted.table.scriptDescription": "フィールドのスクリプトです", "kbn.management.editIndexPattern.scripted.table.scriptHeader": "スクリプト", - "kbn.management.editIndexPattern.scripted.unknownModeErrorMessage": "不明なフィールド設定モード {mode}", "kbn.management.editIndexPattern.scriptedHeader": "スクリプトフィールド", "kbn.management.editIndexPattern.scriptedLabel": "ビジュアライゼーションにスクリプトフィールドを使用し、ドキュメントに表示させることができます。但し、スクリプトフィールドは検索できません。", "kbn.management.editIndexPattern.setDefaultAria": "デフォルトのインデックスに設定", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index c24e7d0fa845af..5d8d733f2b5b68 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2245,7 +2245,6 @@ "kbn.management.editIndexPattern.scripted.table.nameHeader": "名称", "kbn.management.editIndexPattern.scripted.table.scriptDescription": "字段的脚本", "kbn.management.editIndexPattern.scripted.table.scriptHeader": "脚本", - "kbn.management.editIndexPattern.scripted.unknownModeErrorMessage": "未知 fieldSettings 模式 {mode}", "kbn.management.editIndexPattern.scriptedHeader": "脚本字段", "kbn.management.editIndexPattern.scriptedLabel": "可以在可视化中使用脚本字段,并在您的文档中显示它们。但是,您不能搜索脚本字段。", "kbn.management.editIndexPattern.setDefaultAria": "设置为默认索引", From 7db7597a1d5c639ca03b78f0d0746ef4e6c9abdd Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Mon, 20 Apr 2020 12:04:22 -0400 Subject: [PATCH 05/39] [SIEM][Detection Engine] - Move All Rules tabs to match other tabs UI (#63920) ### Summary Restructure All Rules table tabs to be outside of the table, similar to other tabbed tables in UI. --- .../detection_engine/rules/all/index.test.tsx | 192 +++++++++++++++++- .../detection_engine/rules/all/index.tsx | 52 ++++- .../all_rules_tables/index.test.tsx | 74 +++++++ .../components/all_rules_tables/index.tsx | 51 +---- 4 files changed, 323 insertions(+), 46 deletions(-) diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.test.tsx index f4955c2a93b8dd..59b3b02ff3587a 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.test.tsx @@ -5,10 +5,138 @@ */ import React from 'react'; -import { shallow } from 'enzyme'; +import { shallow, mount } from 'enzyme'; +import { act } from 'react-dom/test-utils'; +import { createKibanaContextProviderMock } from '../../../../mock/kibana_react'; +import { TestProviders } from '../../../../mock'; +import { wait } from '../../../../lib/helpers'; import { AllRules } from './index'; +jest.mock('./reducer', () => { + return { + allRulesReducer: jest.fn().mockReturnValue(() => ({ + exportRuleIds: [], + filterOptions: { + filter: 'some filter', + sortField: 'some sort field', + sortOrder: 'desc', + }, + loadingRuleIds: [], + loadingRulesAction: null, + pagination: { + page: 1, + perPage: 20, + total: 1, + }, + rules: [ + { + actions: [], + created_at: '2020-02-14T19:49:28.178Z', + created_by: 'elastic', + description: 'jibber jabber', + enabled: false, + false_positives: [], + filters: [], + from: 'now-660s', + id: 'rule-id-1', + immutable: true, + index: ['endgame-*'], + interval: '10m', + language: 'kuery', + max_signals: 100, + name: 'Credential Dumping - Detected - Elastic Endpoint', + output_index: '.siem-signals-default', + query: 'host.name:*', + references: [], + risk_score: 73, + rule_id: '571afc56-5ed9-465d-a2a9-045f099f6e7e', + severity: 'high', + tags: ['Elastic', 'Endpoint'], + threat: [], + throttle: null, + to: 'now', + type: 'query', + updated_at: '2020-02-14T19:49:28.320Z', + updated_by: 'elastic', + version: 1, + }, + ], + selectedRuleIds: [], + })), + }; +}); + +jest.mock('../../../../containers/detection_engine/rules', () => { + return { + useRules: jest.fn().mockReturnValue([ + false, + { + page: 1, + perPage: 20, + total: 1, + data: [ + { + actions: [], + created_at: '2020-02-14T19:49:28.178Z', + created_by: 'elastic', + description: 'jibber jabber', + enabled: false, + false_positives: [], + filters: [], + from: 'now-660s', + id: 'rule-id-1', + immutable: true, + index: ['endgame-*'], + interval: '10m', + language: 'kuery', + max_signals: 100, + name: 'Credential Dumping - Detected - Elastic Endpoint', + output_index: '.siem-signals-default', + query: 'host.name:*', + references: [], + risk_score: 73, + rule_id: '571afc56-5ed9-465d-a2a9-045f099f6e7e', + severity: 'high', + tags: ['Elastic', 'Endpoint'], + threat: [], + throttle: null, + to: 'now', + type: 'query', + updated_at: '2020-02-14T19:49:28.320Z', + updated_by: 'elastic', + version: 1, + }, + ], + }, + ]), + useRulesStatuses: jest.fn().mockReturnValue({ + loading: false, + rulesStatuses: [ + { + current_status: { + alert_id: 'alertId', + bulk_create_time_durations: ['2235.01'], + gap: null, + last_failure_at: null, + last_failure_message: null, + last_look_back_date: new Date().toISOString(), + last_success_at: new Date().toISOString(), + last_success_message: 'it is a success', + search_after_time_durations: ['616.97'], + status: 'succeeded', + status_date: new Date().toISOString(), + }, + failures: [], + id: '12345678987654321', + activate: true, + name: 'Test rule', + }, + ], + }), + }; +}); + jest.mock('react-router-dom', () => { const originalModule = jest.requireActual('react-router-dom'); @@ -37,4 +165,66 @@ describe('AllRules', () => { expect(wrapper.find('[title="All rules"]')).toHaveLength(1); }); + + it('renders rules tab', async () => { + const KibanaContext = createKibanaContextProviderMock(); + const wrapper = mount( + + + + + + ); + + await act(async () => { + await wait(); + + expect(wrapper.exists('[data-test-subj="monitoring-table"]')).toBeFalsy(); + expect(wrapper.exists('[data-test-subj="rules-table"]')).toBeTruthy(); + }); + }); + + it('renders monitoring tab when monitoring tab clicked', async () => { + const KibanaContext = createKibanaContextProviderMock(); + + const wrapper = mount( + + + + + + ); + const monitoringTab = wrapper.find('[data-test-subj="allRulesTableTab-monitoring"] button'); + monitoringTab.simulate('click'); + + await act(async () => { + wrapper.update(); + await wait(); + + expect(wrapper.exists('[data-test-subj="monitoring-table"]')).toBeTruthy(); + expect(wrapper.exists('[data-test-subj="rules-table"]')).toBeFalsy(); + }); + }); }); diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.tsx index e96ed856208bde..18ca4d42bd018d 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/index.tsx @@ -4,7 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import { EuiBasicTable, EuiContextMenuPanel, EuiLoadingContent, EuiSpacer } from '@elastic/eui'; +import { + EuiBasicTable, + EuiContextMenuPanel, + EuiLoadingContent, + EuiSpacer, + EuiTab, + EuiTabs, +} from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'; import { useHistory } from 'react-router-dom'; import uuid from 'uuid'; @@ -75,6 +82,24 @@ interface AllRulesProps { setRefreshRulesData: (refreshRule: (refreshPrePackagedRule?: boolean) => void) => void; } +export enum AllRulesTabs { + rules = 'rules', + monitoring = 'monitoring', +} + +const allRulesTabs = [ + { + id: AllRulesTabs.rules, + name: i18n.RULES_TAB, + disabled: false, + }, + { + id: AllRulesTabs.monitoring, + name: i18n.MONITORING_TAB, + disabled: false, + }, +]; + /** * Table Component for displaying all Rules for a given cluster. Provides the ability to filter * by name, sort by enabled, and perform the following actions: @@ -114,6 +139,7 @@ export const AllRules = React.memo( const history = useHistory(); const [, dispatchToaster] = useStateToaster(); const mlCapabilities = useMlCapabilities(); + const [allRulesTab, setAllRulesTab] = useState(AllRulesTabs.rules); // TODO: Refactor license check + hasMlAdminPermissions to common check const hasMlPermissions = @@ -271,6 +297,25 @@ export const AllRules = React.memo( return false; }, [loadingRuleIds, loadingRulesAction]); + const tabs = useMemo( + () => ( + + {allRulesTabs.map(tab => ( + setAllRulesTab(tab.id)} + isSelected={tab.id === allRulesTab} + disabled={tab.disabled} + key={tab.id} + > + {tab.name} + + ))} + + ), + [allRulesTabs, allRulesTab, setAllRulesTab] + ); + return ( <> ( exportSelectedData={exportRules} /> + {tabs} + <> @@ -321,7 +368,7 @@ export const AllRules = React.memo( )} {showRulesTable({ rulesCustomInstalled, rulesInstalled }) && !initLoading && ( <> - + @@ -352,6 +399,7 @@ export const AllRules = React.memo( { it('renders correctly', () => { @@ -16,6 +17,7 @@ describe('AllRulesTables', () => { return ( { expect(wrapper.dive().find('[data-test-subj="rules-table"]')).toHaveLength(1); }); + + it('renders rules tab when "selectedTab" is "rules"', () => { + const Component = () => { + const ref = useRef(); + + return ( + + ); + }; + const wrapper = shallow(); + + expect(wrapper.dive().find('[data-test-subj="rules-table"]')).toHaveLength(1); + expect(wrapper.dive().find('[data-test-subj="monitoring-table"]')).toHaveLength(0); + }); + + it('renders monitoring tab when "selectedTab" is "monitoring"', () => { + const Component = () => { + const ref = useRef(); + + return ( + + ); + }; + const wrapper = shallow(); + + expect(wrapper.dive().find('[data-test-subj="rules-table"]')).toHaveLength(0); + expect(wrapper.dive().find('[data-test-subj="monitoring-table"]')).toHaveLength(1); + }); }); diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/all_rules_tables/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/all_rules_tables/index.tsx index 31aaa426e4f3b8..8ea5606d0082c0 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/all_rules_tables/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/all_rules_tables/index.tsx @@ -7,13 +7,11 @@ import { EuiBasicTable, EuiBasicTableColumn, - EuiTab, - EuiTabs, EuiEmptyPrompt, Direction, EuiTableSelectionType, } from '@elastic/eui'; -import React, { useMemo, memo, useState } from 'react'; +import React, { useMemo, memo } from 'react'; import styled from 'styled-components'; import { EuiBasicTableOnChange } from '../../types'; @@ -23,6 +21,7 @@ import { RuleStatusRowItemType, } from '../../../../../pages/detection_engine/rules/all/columns'; import { Rule, Rules } from '../../../../../containers/detection_engine/rules'; +import { AllRulesTabs } from '../../all'; // EuiBasicTable give me a hardtime with adding the ref attributes so I went the easy way // after few hours of fight with typescript !!!! I lost :( @@ -57,27 +56,10 @@ interface AllRulesTablesProps { }; tableOnChangeCallback: ({ page, sort }: EuiBasicTableOnChange) => void; tableRef?: React.MutableRefObject; + selectedTab: AllRulesTabs; } -enum AllRulesTabs { - rules = 'rules', - monitoring = 'monitoring', -} - -const allRulesTabs = [ - { - id: AllRulesTabs.rules, - name: i18n.RULES_TAB, - disabled: false, - }, - { - id: AllRulesTabs.monitoring, - name: i18n.MONITORING_TAB, - disabled: false, - }, -]; - -const AllRulesTablesComponent: React.FC = ({ +export const AllRulesTablesComponent: React.FC = ({ euiBasicTableSelectionProps, hasNoPermissions, monitoringColumns, @@ -88,34 +70,17 @@ const AllRulesTablesComponent: React.FC = ({ sorting, tableOnChangeCallback, tableRef, + selectedTab, }) => { - const [allRulesTab, setAllRulesTab] = useState(AllRulesTabs.rules); const emptyPrompt = useMemo(() => { return ( {i18n.NO_RULES}} titleSize="xs" body={i18n.NO_RULES_BODY} /> ); }, []); - const tabs = useMemo( - () => ( - - {allRulesTabs.map(tab => ( - setAllRulesTab(tab.id)} - isSelected={tab.id === allRulesTab} - disabled={tab.disabled} - key={tab.id} - > - {tab.name} - - ))} - - ), - [allRulesTabs, allRulesTab, setAllRulesTab] - ); + return ( <> - {tabs} - {allRulesTab === AllRulesTabs.rules && ( + {selectedTab === AllRulesTabs.rules && ( = ({ selection={hasNoPermissions ? undefined : euiBasicTableSelectionProps} /> )} - {allRulesTab === AllRulesTabs.monitoring && ( + {selectedTab === AllRulesTabs.monitoring && ( Date: Mon, 20 Apr 2020 09:09:49 -0700 Subject: [PATCH 06/39] [DOCS] Alerting PagerDuty benefits (#63652) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [DOCS] Alerting PagerDuty benefits * [DOCS] Fixes broken link * [DOCS] Organization changes * [DOCS] Changes to meet template and incorporate review comments * [DOCS] Fixed formatting of bulleted list * [DOCS] Incorporates review comments * Update docs/user/alerting/action-types/pagerduty.asciidoc Co-Authored-By: Mike Côté * [DOCS] Fixes naming and other formatting issues Co-authored-by: Mike Côté --- .../alerting/action-types/pagerduty.asciidoc | 133 +++++++++++++++++- .../alerting/images/pagerduty-integration.png | Bin 0 -> 88629 bytes 2 files changed, 128 insertions(+), 5 deletions(-) create mode 100755 docs/user/alerting/images/pagerduty-integration.png diff --git a/docs/user/alerting/action-types/pagerduty.asciidoc b/docs/user/alerting/action-types/pagerduty.asciidoc index 50a1f31e4a9ae1..da34c6e0855d76 100644 --- a/docs/user/alerting/action-types/pagerduty.asciidoc +++ b/docs/user/alerting/action-types/pagerduty.asciidoc @@ -4,19 +4,142 @@ The PagerDuty action type uses the https://v2.developer.pagerduty.com/docs/events-api-v2[v2 Events API] to trigger, acknowledge, and resolve PagerDuty alerts. +* <> +* <> +* <> + +[float] +[[pagerduty-benefits]] +=== PagerDuty + Elastic integration benefits + +By integrating PagerDuty with alerts, you can: + +* Route your alerts to the right PagerDuty responder within your team, based on your structure, escalation policies, and workflows. +* Automatically generate incidents of different types and severity based on each alert’s context. +* Tailor the incident data to match your needs by easily passing the alerting context from Kibana to PagerDuty. + +[float] +[[pagerduty-how-it-works]] +==== How it works + +{kib} allows you to create alerts to notify you of a significant move +in your dataset. +You can create alerts for all your Observability, Security, and Elastic Stack use cases. +Alerts will trigger a new incident on the corresponding PagerDuty service. + +[float] +==== Requirements + +In the `kibana.yml` configuration file, you must add the <>. +This is required to encrypt parameters that must be secured, for example PagerDuty’s integration key. + +If you have security enabled: + +* You must have +application privileges to access Metrics, APM, Uptime, or SIEM. +* If you are using a self-managed deployment with security, you must have +Transport Security Layer (TLS) enabled for communication <>. +Alerts uses API keys to secure background alert checks and actions, +and API keys require {ref}/configuring-tls.html#tls-http[TLS on the HTTP interface]. + +Although not a requirement, to harden the integrations security you might want to +review the <> that are available to you. + +[float] +[[pagerduty-support]] +==== Support +If you need help with this integration, get in touch with the {kib} team by visiting +https://support.elastic.co[support.elastic.co] or by using the *Ask Elastic* option in the {kib} Help menu. +You can also select the {kib} category at https://discuss.elastic.co/[discuss.elastic.co]. + +[float] +[[pagerduty-integration-walkthrough]] +==== Integration with PagerDuty walkthrough + +[float] +[[pagerduty-in-pagerduty]] +===== In PagerDuty + +. From the *Configuration* menu, select *Services*. +. Add an integration to a service: ++ +* If you are adding your integration to an existing service, +click the name of the service you want to add the integration to. +Then, select the *Integrations* tab and click the *New Integration* button. +* If you are creating a new service for your integration, +go to +https://support.pagerduty.com/docs/services-and-integrations#section-configuring-services-and-integrations[Configuring Services and Integrations] +and follow the steps outlined in the *Create a New Service* section, selecting *Elastic* as the *Integration Type* in step 4. +Continue with the <> section once you have finished these steps. + +. Enter an *Integration Name* in the format Elastic-service-name (for example, Elastic-Alerting or Kibana-APM-Alerting) +and select Elastic from the *Integration Type* menu. +. Click *Add Integration* to save your new integration. ++ +You will be redirected to the *Integrations* tab for your service. An Integration Key is generated on this screen. ++ +[role="screenshot"] +image::user/alerting/images/pagerduty-integration.png[PagerDuty Integrations tab] + +. Save this key, as you will use it when you configure the integration with Elastic in the next section. + +[float] +[[pagerduty-in-elastic]] +===== In Elastic + +. Create a PagerDuty Connector in Kibana. You can: ++ +* Create a connector as part of creating an alert by selecting PagerDuty in the *Actions* +section of the alert configuration and selecting *Add new*. +* Alternatively, create a connector by navigating to *Management* from the {kib} navbar and selecting +*Alerts and Actions*. Then, select the *Connectors* tab, click the *Create connector* button, and select the PagerDuty option. + +. Configure the connector by giving it a name and optionally entering the API URL and Routing Key, or using the defaults. ++ +See <> for how to obtain the endpoint and key information from PagerDuty and +<> for more details. + +. Save the Connector. + +. Create an alert using *Management > Alerts and Actions* or the application of your choice. + +. Set up an action using your PagerDuty connector, by determining: ++ +* The action’s type: Trigger, Resolve, or Acknowledge. +* The event’s severity: Info, warning, error, or critical. +* An array of different fields, including the timestamp, group, class, component, and your dedup key. +Depending on your custom needs, assign them variables from the alerting context. +To see the available context variables, click on the *Add alert variable* icon next +to each corresponding field. For more details on these parameters, see the +<> and the PagerDuty +https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[API v2 documentation]. + + +[float] +[[pagerduty-uninstall]] +==== How to uninstall +To remove a PagerDuty connector from an alert, simply remove it +from the *Actions* section of that alert, using the remove (x) icon. +This will disable the integration for the particular alert. + +To delete the connector entirely, go to *Management > Alerts and Actions*. +Select the *Connectors* tab, and then click on the delete icon. +This is an irreversible action and impacts all alerts that use this connector. + + [float] [[pagerduty-connector-configuration]] -==== Connector configuration +=== Connector configuration PagerDuty connectors have the following configuration properties: Name:: The name of the connector. The name is used to identify a connector in the management UI connector listing, or in the connector list when configuring an action. -API URL:: An optional PagerDuty event URL. Defaults to `https://events.pagerduty.com/v2/enqueue`. If you are using the <> setting, make sure the hostname is whitelisted. +API URL:: An optional PagerDuty event URL. Defaults to `https://events.pagerduty.com/v2/enqueue`. If you are using the <> setting, make sure the hostname is whitelisted. Routing Key:: A 32 character PagerDuty Integration Key for an integration on a service or on a global ruleset. [float] [[pagerduty-action-configuration]] -==== Action configuration +=== Action configuration PagerDuty actions have the following properties: @@ -26,8 +149,8 @@ Dedup Key:: All actions sharing this key will be associated with the same Pa Timestamp:: An *optional* https://v2.developer.pagerduty.com/v2/docs/types#datetime[ISO-8601 format date-time], indicating the time the event was detected or generated. Component:: An *optional* value indicating the component of the source machine that is responsible for the event, for example `mysql` or `eth0`. Group:: An *optional* value indicating the logical grouping of components of a service, for example `app-stack`. -Source:: An *optional* value indicating the affected system, preferably a hostname or fully qualified domain name. Defaults to the {kib} saved object id of the action. +Source:: An *optional* value indicating the affected system, preferably a hostname or fully qualified domain name. Defaults to the {kib} saved object id of the action. Summary:: An *optional* text summary of the event, defaults to `No summary provided`. The maximum length is 1024 characters. Class:: An *optional* value indicating the class/type of the event, for example `ping failure` or `cpu load`. -For more details on these properties, see https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[PagerDuty v2 event parameters]. \ No newline at end of file +For more details on these properties, see https://v2.developer.pagerduty.com/v2/docs/send-an-event-events-api-v2[PagerDuty v2 event parameters]. diff --git a/docs/user/alerting/images/pagerduty-integration.png b/docs/user/alerting/images/pagerduty-integration.png new file mode 100755 index 0000000000000000000000000000000000000000..0a270de866b36e6d602ecc06d07bc0c3780d9e9e GIT binary patch literal 88629 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 b`hZ;$PZ5QcGLilW^-_>gep@1C{N?`uD)C+% literal 0 HcmV?d00001 From 44a2c2f8f75dad84c792e15050a50c3aa8048875 Mon Sep 17 00:00:00 2001 From: Henry Harding Date: Mon, 20 Apr 2020 12:10:15 -0400 Subject: [PATCH 07/39] Ingest overview page (#63214) * use fixed table layout * added markup structure / css for overview page * add flyout and links to other pages * add "alpha" messaging at bottom of all pages * attrs instead of defaultProps on styled components * use FormattedMessage on alpha messaging component * remove leftover code * remove unused import --- .../components/alpha_messaging.tsx | 37 ++++ .../ingest_manager/components/index.ts | 1 + .../ingest_manager/layouts/default.tsx | 4 + .../ingest_manager/layouts/with_header.tsx | 2 + .../ingest_manager/layouts/without_header.tsx | 2 + .../sections/overview/index.tsx | 204 +++++++++++++++++- 6 files changed, 246 insertions(+), 4 deletions(-) create mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/alpha_messaging.tsx diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/alpha_messaging.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/alpha_messaging.tsx new file mode 100644 index 00000000000000..0f3ddee29fa443 --- /dev/null +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/alpha_messaging.tsx @@ -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 React from 'react'; +import styled from 'styled-components'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { EuiText } from '@elastic/eui'; + +const Message = styled(EuiText).attrs(props => ({ + color: 'subdued', + textAlign: 'center', +}))` + padding: ${props => props.theme.eui.paddingSizes.m}; +`; + +export const AlphaMessaging: React.FC<{}> = () => ( + +

+ + + + + {' – '} + + +

+
+); diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/index.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/index.ts index 5551bff2c8bdeb..bdc8f350f7108b 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/index.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/index.ts @@ -6,3 +6,4 @@ export { Loading } from './loading'; export { Error } from './error'; export { Header, HeaderProps } from './header'; +export { AlphaMessaging } from './alpha_messaging'; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx index 26f2c85a291a3a..f797c509bfca0e 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx @@ -8,6 +8,7 @@ import styled from 'styled-components'; import { EuiTabs, EuiTab, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { Section } from '../sections'; +import { AlphaMessaging } from '../components'; import { useLink, useConfig } from '../hooks'; import { EPM_PATH, FLEET_PATH, AGENT_CONFIG_PATH } from '../constants'; @@ -19,6 +20,8 @@ interface Props { const Container = styled.div` min-height: calc(100vh - ${props => props.theme.eui.euiHeaderChildSize}); background: ${props => props.theme.eui.euiColorEmptyShade}; + display: flex; + flex-direction: column; `; const Nav = styled.nav` @@ -80,6 +83,7 @@ export const DefaultLayout: React.FunctionComponent = ({ section, childre {children} + ); }; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx index c77a50d95dca3c..bb867718204b2c 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx @@ -10,6 +10,8 @@ import { Header, HeaderProps } from '../components'; const Page = styled(EuiPage)` background: ${props => props.theme.eui.euiColorEmptyShade}; + flex: 1; + align-items: flex-start; `; interface Props extends HeaderProps { diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx index cad98c5a0a7e1d..9f9fa03942c094 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx @@ -9,6 +9,8 @@ import { EuiPage, EuiPageBody, EuiSpacer } from '@elastic/eui'; const Page = styled(EuiPage)` background: ${props => props.theme.eui.euiColorEmptyShade}; + flex: 1; + align-items: flex-start; `; interface Props { diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/index.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/index.tsx index ea6b045f504ec1..05d150fd9ae231 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/index.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/index.tsx @@ -3,12 +3,71 @@ * 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 { EuiText, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import React, { useState } from 'react'; +import styled from 'styled-components'; +import { + EuiButton, + EuiButtonEmpty, + EuiPanel, + EuiText, + EuiTitle, + EuiDescriptionList, + EuiDescriptionListDescription, + EuiDescriptionListTitle, + EuiFlexGrid, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { WithHeaderLayout } from '../../layouts'; +import { useLink, useGetAgentConfigs } from '../../hooks'; +import { AgentEnrollmentFlyout } from '../fleet/agent_list_page/components'; +import { EPM_PATH, FLEET_PATH, AGENT_CONFIG_PATH } from '../../constants'; + +const OverviewPanel = styled(EuiPanel).attrs(props => ({ + paddingSize: 'm', +}))` + header { + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid ${props => props.theme.eui.euiColorLightShade}; + margin: -${props => props.theme.eui.paddingSizes.m} -${props => props.theme.eui.paddingSizes.m} + ${props => props.theme.eui.paddingSizes.m}; + padding: ${props => props.theme.eui.paddingSizes.s} ${props => props.theme.eui.paddingSizes.m}; + } + + h2 { + padding: ${props => props.theme.eui.paddingSizes.xs} 0; + } +`; + +const OverviewStats = styled(EuiDescriptionList).attrs(props => ({ + compressed: true, + textStyle: 'reverse', + type: 'column', +}))` + & > * { + margin-top: ${props => props.theme.eui.paddingSizes.s} !important; + + &:first-child, + &:nth-child(2) { + margin-top: 0 !important; + } + } +`; export const IngestManagerOverview: React.FunctionComponent = () => { + // Agent enrollment flyout state + const [isEnrollmentFlyoutOpen, setIsEnrollmentFlyoutOpen] = useState(false); + + // Agent configs required for enrollment flyout + const agentConfigsRequest = useGetAgentConfigs({ + page: 1, + perPage: 1000, + }); + const agentConfigs = agentConfigsRequest.data ? agentConfigsRequest.data.items : []; + return ( {

} - /> + rightColumn={ + + + setIsEnrollmentFlyoutOpen(true)}> + + + + + } + > + {isEnrollmentFlyoutOpen && ( + setIsEnrollmentFlyoutOpen(false)} + /> + )} + + + + +
+ +

+ +

+
+ + + +
+ + Total available + 999 + Installed + 1 + Updated available + 0 + +
+
+ + + +
+ +

+ +

+
+ + + +
+ + Total configs + 1 + Data sources + 1 + +
+
+ + + +
+ +

+ +

+
+ + + +
+ + Total agents + 0 + Active + 0 + Offline + 0 + Error + 0 + +
+
+ + + +
+ +

+ +

+
+ + + +
+ + Data streams + 0 + Name spaces + 0 + Total size + 0 MB + +
+
+
+ ); }; From 7e3de56303d39e284e94216df19ff70c712b9e47 Mon Sep 17 00:00:00 2001 From: Wylie Conlon Date: Mon, 20 Apr 2020 12:43:21 -0400 Subject: [PATCH 08/39] [TSVB] Use default Kibana palette for split series (#62241) * [TSVB] Rainbow palette shares colors with dashboard * Add migration * Add charts as NP dependency Co-authored-by: Elastic Machine --- src/plugins/vis_type_timeseries/kibana.json | 2 +- .../components/vis_types/timeseries/config.js | 15 ++- .../visualizations/views/timeseries/index.js | 14 ++- .../public/metrics_type.ts | 1 + .../vis_type_timeseries/public/plugin.ts | 6 +- .../vis_type_timeseries/public/services.ts | 5 + .../lib/vis_data/helpers/get_split_colors.js | 4 +- .../lib/vis_data/helpers/get_splits.test.js | 117 +++++++++++++----- .../visualization_migrations.test.ts | 58 +++++++++ .../saved_objects/visualization_migrations.ts | 33 +++++ .../apps/visualize/_tsvb_time_series.ts | 9 +- .../page_objects/visual_builder_page.ts | 4 + 12 files changed, 218 insertions(+), 50 deletions(-) diff --git a/src/plugins/vis_type_timeseries/kibana.json b/src/plugins/vis_type_timeseries/kibana.json index 38662c6a7ff89b..9053d2543e0d0e 100644 --- a/src/plugins/vis_type_timeseries/kibana.json +++ b/src/plugins/vis_type_timeseries/kibana.json @@ -4,6 +4,6 @@ "kibanaVersion": "kibana", "server": true, "ui": true, - "requiredPlugins": ["data", "expressions", "visualizations"], + "requiredPlugins": ["charts", "data", "expressions", "visualizations"], "optionalPlugins": ["usageCollection"] } diff --git a/src/plugins/vis_type_timeseries/public/application/components/vis_types/timeseries/config.js b/src/plugins/vis_type_timeseries/public/application/components/vis_types/timeseries/config.js index 024f59c3abb1c3..d29b795b10ec83 100644 --- a/src/plugins/vis_type_timeseries/public/application/components/vis_types/timeseries/config.js +++ b/src/plugins/vis_type_timeseries/public/application/components/vis_types/timeseries/config.js @@ -53,7 +53,7 @@ export const TimeseriesConfig = injectI18n(function(props) { point_size: '', value_template: '{{value}}', offset_time: '', - split_color_mode: 'gradient', + split_color_mode: 'kibana', axis_min: '', axis_max: '', stacked: STACKED_OPTIONS.NONE, @@ -140,10 +140,10 @@ export const TimeseriesConfig = injectI18n(function(props) { const splitColorOptions = [ { label: intl.formatMessage({ - id: 'visTypeTimeseries.timeSeries.gradientLabel', - defaultMessage: 'Gradient', + id: 'visTypeTimeseries.timeSeries.defaultPaletteLabel', + defaultMessage: 'Default palette', }), - value: 'gradient', + value: 'kibana', }, { label: intl.formatMessage({ @@ -152,6 +152,13 @@ export const TimeseriesConfig = injectI18n(function(props) { }), value: 'rainbow', }, + { + label: intl.formatMessage({ + id: 'visTypeTimeseries.timeSeries.gradientLabel', + defaultMessage: 'Gradient', + }), + value: 'gradient', + }, ]; const selectedSplitColorOption = splitColorOptions.find(option => { return model.split_color_mode === option.value; diff --git a/src/plugins/vis_type_timeseries/public/application/visualizations/views/timeseries/index.js b/src/plugins/vis_type_timeseries/public/application/visualizations/views/timeseries/index.js index b1c3c7ac6b67ad..5cf1619150e5c7 100644 --- a/src/plugins/vis_type_timeseries/public/application/visualizations/views/timeseries/index.js +++ b/src/plugins/vis_type_timeseries/public/application/visualizations/views/timeseries/index.js @@ -33,7 +33,7 @@ import { import { EuiIcon } from '@elastic/eui'; import { getTimezone } from '../../../lib/get_timezone'; import { eventBus, ACTIVE_CURSOR } from '../../lib/active_cursor'; -import { getUISettings } from '../../../../services'; +import { getUISettings, getChartsSetup } from '../../../../services'; import { GRID_LINE_CONFIG, ICON_TYPES_MAP, STACKED_OPTIONS } from '../../constants'; import { AreaSeriesDecorator } from './decorators/area_decorator'; import { BarSeriesDecorator } from './decorators/bar_decorator'; @@ -94,6 +94,12 @@ export const TimeSeries = ({ // apply legend style change if bgColor is configured const classes = classNames('tvbVisTimeSeries', getChartClasses(backgroundColor)); + // If the color isn't configured by the user, use the color mapping service + // to assign a color from the Kibana palette. Colors will be shared across the + // session, including dashboards. + const { colors } = getChartsSetup(); + colors.mappedColors.mapKeys(series.filter(({ color }) => !color).map(({ label }) => label)); + return ( ; visualizations: VisualizationsSetup; + charts: ChartsPluginSetup; } /** @internal */ @@ -56,10 +59,11 @@ export class MetricsPlugin implements Plugin, void> { public async setup( core: CoreSetup, - { expressions, visualizations }: MetricsPluginSetupDependencies + { expressions, visualizations, charts }: MetricsPluginSetupDependencies ) { expressions.registerFunction(createMetricsFn); setUISettings(core.uiSettings); + setChartsSetup(charts); visualizations.createReactVisualization(metricsVisDefinition); } diff --git a/src/plugins/vis_type_timeseries/public/services.ts b/src/plugins/vis_type_timeseries/public/services.ts index d93a376584eac9..9aa84478fb78bf 100644 --- a/src/plugins/vis_type_timeseries/public/services.ts +++ b/src/plugins/vis_type_timeseries/public/services.ts @@ -19,6 +19,7 @@ import { I18nStart, SavedObjectsStart, IUiSettingsClient, CoreStart } from 'src/core/public'; import { createGetterSetter } from '../../kibana_utils/public'; +import { ChartsPluginSetup } from '../../charts/public'; import { DataPublicPluginStart } from '../../data/public'; export const [getUISettings, setUISettings] = createGetterSetter('UISettings'); @@ -36,3 +37,7 @@ export const [getCoreStart, setCoreStart] = createGetterSetter('CoreS export const [getDataStart, setDataStart] = createGetterSetter('DataStart'); export const [getI18n, setI18n] = createGetterSetter('I18n'); + +export const [getChartsSetup, setChartsSetup] = createGetterSetter( + 'ChartsPluginSetup' +); diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_split_colors.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_split_colors.js index ff8d9077b08711..cad8c8f2025a17 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_split_colors.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_split_colors.js @@ -19,7 +19,7 @@ import Color from 'color'; -export function getSplitColors(inputColor, size = 10, style = 'gradient') { +export function getSplitColors(inputColor, size = 10, style = 'kibana') { const color = new Color(inputColor); const colors = []; let workingColor = Color.hsl(color.hsl().object()); @@ -49,7 +49,7 @@ export function getSplitColors(inputColor, size = 10, style = 'gradient') { '#0F1419', '#666666', ]; - } else { + } else if (style === 'gradient') { colors.push(color.string()); const rotateBy = color.luminosity() / (size - 1); for (let i = 0; i < size - 1; i++) { diff --git a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js index 0874d944033f5c..376d32d0da13f6 100644 --- a/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js +++ b/src/plugins/vis_type_timeseries/server/lib/vis_data/helpers/get_splits.test.js @@ -106,7 +106,7 @@ describe('getSplits(resp, panel, series)', () => { ]); }); - test('should return a splits for terms group bys', () => { + describe('terms group bys', () => { const resp = { aggregations: { SERIES: { @@ -126,38 +126,89 @@ describe('getSplits(resp, panel, series)', () => { }, }, }; - const series = { - id: 'SERIES', - color: '#F00', - split_mode: 'terms', - terms_field: 'beat.hostname', - terms_size: 10, - metrics: [ - { id: 'AVG', type: 'avg', field: 'cpu' }, - { id: 'SIBAGG', type: 'avg_bucket', field: 'AVG' }, - ], - }; - const panel = { type: 'timeseries' }; - expect(getSplits(resp, panel, series)).toEqual([ - { - id: 'SERIES:example-01', - key: 'example-01', - label: 'example-01', - meta: { bucketSize: 10 }, - color: 'rgb(255, 0, 0)', - timeseries: { buckets: [] }, - SIBAGG: { value: 1 }, - }, - { - id: 'SERIES:example-02', - key: 'example-02', - label: 'example-02', - meta: { bucketSize: 10 }, - color: 'rgb(147, 0, 0)', - timeseries: { buckets: [] }, - SIBAGG: { value: 2 }, - }, - ]); + + test('should return a splits with no color', () => { + const series = { + id: 'SERIES', + color: '#F00', + split_mode: 'terms', + terms_field: 'beat.hostname', + terms_size: 10, + metrics: [ + { id: 'AVG', type: 'avg', field: 'cpu' }, + { id: 'SIBAGG', type: 'avg_bucket', field: 'AVG' }, + ], + }; + const panel = { type: 'timeseries' }; + expect(getSplits(resp, panel, series)).toEqual([ + { + id: 'SERIES:example-01', + key: 'example-01', + label: 'example-01', + meta: { bucketSize: 10 }, + color: undefined, + timeseries: { buckets: [] }, + SIBAGG: { value: 1 }, + }, + { + id: 'SERIES:example-02', + key: 'example-02', + label: 'example-02', + meta: { bucketSize: 10 }, + color: undefined, + timeseries: { buckets: [] }, + SIBAGG: { value: 2 }, + }, + ]); + }); + + test('should return gradient color', () => { + const series = { + id: 'SERIES', + color: '#F00', + split_mode: 'terms', + split_color_mode: 'gradient', + terms_field: 'beat.hostname', + terms_size: 10, + metrics: [ + { id: 'AVG', type: 'avg', field: 'cpu' }, + { id: 'SIBAGG', type: 'avg_bucket', field: 'AVG' }, + ], + }; + const panel = { type: 'timeseries' }; + expect(getSplits(resp, panel, series)).toEqual([ + expect.objectContaining({ + color: 'rgb(255, 0, 0)', + }), + expect.objectContaining({ + color: 'rgb(147, 0, 0)', + }), + ]); + }); + + test('should return rainbow color', () => { + const series = { + id: 'SERIES', + color: '#F00', + split_mode: 'terms', + split_color_mode: 'rainbow', + terms_field: 'beat.hostname', + terms_size: 10, + metrics: [ + { id: 'AVG', type: 'avg', field: 'cpu' }, + { id: 'SIBAGG', type: 'avg_bucket', field: 'AVG' }, + ], + }; + const panel = { type: 'timeseries' }; + expect(getSplits(resp, panel, series)).toEqual([ + expect.objectContaining({ + color: '#68BC00', + }), + expect.objectContaining({ + color: '#009CE0', + }), + ]); + }); }); test('should return a splits for filters group bys', () => { diff --git a/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts b/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts index 26f8278cd3d434..83d53d27e41fdc 100644 --- a/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts +++ b/src/plugins/visualizations/server/saved_objects/visualization_migrations.test.ts @@ -1460,4 +1460,62 @@ describe('migration visualization', () => { expect(migratedParams.gauge_color_rules[1]).toEqual(params.gauge_color_rules[1]); }); }); + + describe('7.8.0 tsvb split_color_mode', () => { + const migrate = (doc: any) => + visualizationSavedObjectTypeMigrations['7.8.0']( + doc as Parameters[0], + savedObjectMigrationContext + ); + + const generateDoc = (params: any) => ({ + attributes: { + title: 'My Vis', + type: 'visualization', + description: 'This is my super cool vis.', + visState: JSON.stringify(params), + uiStateJSON: '{}', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: '{}', + }, + }, + }); + + it('should change a missing split_color_mode to gradient', () => { + const params = { type: 'metrics', params: { series: [{}] } }; + const testDoc1 = generateDoc(params); + const migratedTestDoc1 = migrate(testDoc1); + const series = JSON.parse(migratedTestDoc1.attributes.visState).params.series; + + expect(series[0].split_color_mode).toEqual('gradient'); + }); + + it('should not change the color mode if it is set', () => { + const params = { type: 'metrics', params: { series: [{ split_color_mode: 'gradient' }] } }; + const testDoc1 = generateDoc(params); + const migratedTestDoc1 = migrate(testDoc1); + const series = JSON.parse(migratedTestDoc1.attributes.visState).params.series; + + expect(series[0].split_color_mode).toEqual('gradient'); + }); + + it('should not change the color mode if it is non-default', () => { + const params = { type: 'metrics', params: { series: [{ split_color_mode: 'rainbow' }] } }; + const testDoc1 = generateDoc(params); + const migratedTestDoc1 = migrate(testDoc1); + const series = JSON.parse(migratedTestDoc1.attributes.visState).params.series; + + expect(series[0].split_color_mode).toEqual('rainbow'); + }); + + it('should not migrate a visualization of unknown type', () => { + const params = { type: 'unknown', params: { series: [{}] } }; + const doc = generateDoc(params); + const migratedDoc = migrate(doc); + const series = JSON.parse(migratedDoc.attributes.visState).params.series; + + expect(series[0].split_color_mode).toBeUndefined(); + }); + }); }); diff --git a/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts b/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts index 80783e41863eaf..94473e35a942d5 100644 --- a/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts +++ b/src/plugins/visualizations/server/saved_objects/visualization_migrations.ts @@ -602,7 +602,39 @@ const migrateMatchAllQuery: SavedObjectMigrationFn = doc => { }; } } + return doc; +}; + +// [TSVB] Default color palette is changing, keep the default for older viz +const migrateTsvbDefaultColorPalettes: SavedObjectMigrationFn = doc => { + const visStateJSON = get(doc, 'attributes.visState'); + let visState; + + if (visStateJSON) { + try { + visState = JSON.parse(visStateJSON); + } catch (e) { + // Let it go, the data is invalid and we'll leave it as is + } + if (visState && visState.type === 'metrics') { + const series: any[] = get(visState, 'params.series') || []; + series.forEach(part => { + // The default value was not saved before + if (!part.split_color_mode) { + part.split_color_mode = 'gradient'; + } + }); + + return { + ...doc, + attributes: { + ...doc.attributes, + visState: JSON.stringify(visState), + }, + }; + } + } return doc; }; @@ -639,4 +671,5 @@ export const visualizationSavedObjectTypeMigrations = { '7.3.1': flow(migrateFiltersAggQueryStringQueries), '7.4.2': flow(transformSplitFiltersStringToQueryObject), '7.7.0': flow(migrateOperatorKeyTypo), + '7.8.0': flow(migrateTsvbDefaultColorPalettes), }; diff --git a/test/functional/apps/visualize/_tsvb_time_series.ts b/test/functional/apps/visualize/_tsvb_time_series.ts index fa79190a5bf940..ac89c2b55e5140 100644 --- a/test/functional/apps/visualize/_tsvb_time_series.ts +++ b/test/functional/apps/visualize/_tsvb_time_series.ts @@ -25,7 +25,6 @@ export default function({ getPageObjects, getService }: FtrProviderContext) { const retry = getService('retry'); const log = getService('log'); const kibanaServer = getService('kibanaServer'); - const testSubjects = getService('testSubjects'); describe('visual builder', function describeIndexTests() { beforeEach(async () => { @@ -126,20 +125,18 @@ export default function({ getPageObjects, getService }: FtrProviderContext) { expect(actualCountMin).to.be('3 hours'); }); - // --reversed class is not implemented in @elastic\chart - describe.skip('Dark mode', () => { + describe('Dark mode', () => { before(async () => { await kibanaServer.uiSettings.update({ 'theme:darkMode': true, }); }); - it(`viz should have 'reversed' class when background color is white`, async () => { + it(`viz should have light class when background color is white`, async () => { await visualBuilder.clickPanelOptions('timeSeries'); await visualBuilder.setBackgroundColor('#FFFFFF'); - const classNames = await testSubjects.getAttribute('timeseriesChart', 'class'); - expect(classNames.includes('tvbVisTimeSeries--reversed')).to.be(true); + expect(await visualBuilder.checkTimeSeriesIsLight()).to.be(true); }); after(async () => { diff --git a/test/functional/page_objects/visual_builder_page.ts b/test/functional/page_objects/visual_builder_page.ts index b8e6c812b46bd5..12962b3a5cdef7 100644 --- a/test/functional/page_objects/visual_builder_page.ts +++ b/test/functional/page_objects/visual_builder_page.ts @@ -71,6 +71,10 @@ export function VisualBuilderPageProvider({ getService, getPageObjects }: FtrPro } } + public async checkTimeSeriesIsLight() { + return await find.existsByCssSelector('.tvbVisTimeSeriesLight'); + } + public async checkTimeSeriesLegendIsPresent() { const isPresent = await find.existsByCssSelector('.echLegend'); if (!isPresent) { From 635be640d54488d5a6e2de1e3dea1a32a637dcfa Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 20 Apr 2020 10:50:54 -0600 Subject: [PATCH 09/39] [Maps] fix date labels (#63909) * [Maps] fix date labels * review feedback Co-authored-by: Elastic Machine --- .../maps/public/elasticsearch_geo_utils.js | 12 +++++++- .../public/elasticsearch_geo_utils.test.js | 29 +++++++++++++++---- .../es_search_source/es_search_source.js | 12 +++++++- .../properties/dynamic_style_property.js | 4 +++ 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/maps/public/elasticsearch_geo_utils.js b/x-pack/plugins/maps/public/elasticsearch_geo_utils.js index 617cf537fd5c31..417c5d84f8916e 100644 --- a/x-pack/plugins/maps/public/elasticsearch_geo_utils.js +++ b/x-pack/plugins/maps/public/elasticsearch_geo_utils.js @@ -64,7 +64,7 @@ function ensureGeometryType(type, expectedTypes) { * @param {string} geoFieldType Geometry field type ["geo_point", "geo_shape"] * @returns {number} */ -export function hitsToGeoJson(hits, flattenHit, geoFieldName, geoFieldType) { +export function hitsToGeoJson(hits, flattenHit, geoFieldName, geoFieldType, epochMillisFields) { const features = []; const tmpGeometriesAccumulator = []; @@ -80,6 +80,16 @@ export function hitsToGeoJson(hits, flattenHit, geoFieldName, geoFieldType) { geoShapeToGeometry(properties[geoFieldName], tmpGeometriesAccumulator); } + // There is a bug in Elasticsearch API where epoch_millis are returned as a string instead of a number + // https://github.com/elastic/elasticsearch/issues/50622 + // Convert these field values to integers. + for (let i = 0; i < epochMillisFields.length; i++) { + const fieldName = epochMillisFields[i]; + if (typeof properties[fieldName] === 'string') { + properties[fieldName] = parseInt(properties[fieldName]); + } + } + // don't include geometry field value in properties delete properties[geoFieldName]; diff --git a/x-pack/plugins/maps/public/elasticsearch_geo_utils.test.js b/x-pack/plugins/maps/public/elasticsearch_geo_utils.test.js index 5db7556be4639d..fc02e191738432 100644 --- a/x-pack/plugins/maps/public/elasticsearch_geo_utils.test.js +++ b/x-pack/plugins/maps/public/elasticsearch_geo_utils.test.js @@ -66,7 +66,7 @@ describe('hitsToGeoJson', () => { }, }, ]; - const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point'); + const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', []); expect(geojson.type).toBe('FeatureCollection'); expect(geojson.features.length).toBe(2); expect(geojson.features[0]).toEqual({ @@ -94,7 +94,7 @@ describe('hitsToGeoJson', () => { _source: {}, }, ]; - const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point'); + const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', []); expect(geojson.type).toBe('FeatureCollection'); expect(geojson.features.length).toBe(1); }); @@ -111,7 +111,7 @@ describe('hitsToGeoJson', () => { }, }, ]; - const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point'); + const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', []); expect(geojson.features.length).toBe(1); const feature = geojson.features[0]; expect(feature.properties.myField).toBe(8); @@ -128,7 +128,7 @@ describe('hitsToGeoJson', () => { }, }, ]; - const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point'); + const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', []); expect(geojson.type).toBe('FeatureCollection'); expect(geojson.features.length).toBe(2); expect(geojson.features[0]).toEqual({ @@ -159,6 +159,23 @@ describe('hitsToGeoJson', () => { }); }); + it('Should convert epoch_millis value from string to integer', () => { + const hits = [ + { + _id: 'doc1', + _index: 'index1', + _source: { + [geoFieldName]: '20,100', + myDateField: '1587156257081', + }, + }, + ]; + const geojson = hitsToGeoJson(hits, flattenHitMock, geoFieldName, 'geo_point', ['myDateField']); + expect(geojson.type).toBe('FeatureCollection'); + expect(geojson.features.length).toBe(1); + expect(geojson.features[0].properties.myDateField).toBe(1587156257081); + }); + describe('dot in geoFieldName', () => { const indexPatternMock = { fields: { @@ -184,7 +201,7 @@ describe('hitsToGeoJson', () => { }, }, ]; - const geojson = hitsToGeoJson(hits, indexPatternFlattenHit, 'my.location', 'geo_point'); + const geojson = hitsToGeoJson(hits, indexPatternFlattenHit, 'my.location', 'geo_point', []); expect(geojson.features[0].geometry).toEqual({ coordinates: [100, 20], type: 'Point', @@ -199,7 +216,7 @@ describe('hitsToGeoJson', () => { }, }, ]; - const geojson = hitsToGeoJson(hits, indexPatternFlattenHit, 'my.location', 'geo_point'); + const geojson = hitsToGeoJson(hits, indexPatternFlattenHit, 'my.location', 'geo_point', []); expect(geojson.features[0].geometry).toEqual({ coordinates: [100, 20], type: 'Point', 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 96679f0e859412..34fed37933e138 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 @@ -387,11 +387,21 @@ export class ESSearchSource extends AbstractESSource { }); return properties; }; + const epochMillisFields = searchFilters.fieldNames.filter(fieldName => { + const field = getField(indexPattern, fieldName); + return field.readFromDocValues && field.type === 'date'; + }); let featureCollection; try { const geoField = await this._getGeoField(); - featureCollection = hitsToGeoJson(hits, flattenHit, geoField.name, geoField.type); + featureCollection = hitsToGeoJson( + hits, + flattenHit, + geoField.name, + geoField.type, + epochMillisFields + ); } catch (error) { throw new Error( i18n.translate('xpack.maps.source.esSearch.convertToGeoJsonErrorMsg', { diff --git a/x-pack/plugins/maps/public/layers/styles/vector/properties/dynamic_style_property.js b/x-pack/plugins/maps/public/layers/styles/vector/properties/dynamic_style_property.js index ea521f8749d80a..8cef78f9a8f210 100644 --- a/x-pack/plugins/maps/public/layers/styles/vector/properties/dynamic_style_property.js +++ b/x-pack/plugins/maps/public/layers/styles/vector/properties/dynamic_style_property.js @@ -279,6 +279,10 @@ export class DynamicStyleProperty extends AbstractStyleProperty { } getNumericalMbFeatureStateValue(value) { + if (typeof value === 'number') { + return value; + } + const valueAsFloat = parseFloat(value); return isNaN(valueAsFloat) ? null : valueAsFloat; } From 96b3fd1fe32b0fe6bb682573f368b5ba265f358f Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Mon, 20 Apr 2020 11:04:57 -0700 Subject: [PATCH 10/39] [Metrics UI] Remove remaining field filtering (#63398) Co-authored-by: Elastic Machine --- .../components/metrics_explorer/group_by.tsx | 15 +-------------- .../components/metrics_explorer/kuery_bar.tsx | 3 +-- .../components/metrics_explorer/metrics.tsx | 5 +---- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx b/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx index 750894fd0188bc..3246a2aa4a7310 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx +++ b/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx @@ -10,7 +10,6 @@ import { i18n } from '@kbn/i18n'; import React, { useCallback } from 'react'; import { IFieldType } from 'src/plugins/data/public'; import { MetricsExplorerOptions } from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { isDisplayable } from '../../utils/is_displayable'; interface Props { options: MetricsExplorerOptions; @@ -27,18 +26,6 @@ export const MetricsExplorerGroupBy = ({ options, onChange, fields }: Props) => [onChange] ); - const metricPrefixes = options.metrics - .map( - metric => - (metric.field && - metric.field - .split(/\./) - .slice(0, 2) - .join('.')) || - null - ) - .filter(metric => metric) as string[]; - return ( singleSelection={true} selectedOptions={(options.groupBy && [{ label: options.groupBy }]) || []} options={fields - .filter(f => isDisplayable(f, metricPrefixes) && f.aggregatable && f.type === 'string') + .filter(f => f.aggregatable && f.type === 'string') .map(f => ({ label: f.name }))} onChange={handleChange} isClearable={true} diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx b/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx index dcc160d05b6ad9..7c3e0444dbeea6 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx +++ b/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import { WithKueryAutocompletion } from '../../containers/with_kuery_autocompletion'; import { AutocompleteField } from '../autocomplete_field'; -import { isDisplayable } from '../../utils/is_displayable'; import { esKuery, IIndexPattern } from '../../../../../../src/plugins/data/public'; interface Props { @@ -51,7 +50,7 @@ export const MetricsExplorerKueryBar = ({ const filteredDerivedIndexPattern = { ...derivedIndexPattern, - fields: derivedIndexPattern.fields.filter(field => isDisplayable(field)), + fields: derivedIndexPattern.fields, }; const defaultPlaceholder = i18n.translate( diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx b/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx index 79d4122733c551..a49e42c9cac0e2 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx +++ b/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx @@ -12,7 +12,6 @@ import { IFieldType } from 'src/plugins/data/public'; import { colorTransformer, MetricsExplorerColor } from '../../../common/color_palette'; import { MetricsExplorerMetric } from '../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions } from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { isDisplayable } from '../../utils/is_displayable'; interface Props { autoFocus?: boolean; @@ -54,9 +53,7 @@ export const MetricsExplorerMetrics = ({ options, onChange, fields, autoFocus = [onChange, options.aggregation, colors] ); - const comboOptions = fields - .filter(field => isDisplayable(field)) - .map(field => ({ label: field.name, value: field.name })); + const comboOptions = fields.map(field => ({ label: field.name, value: field.name })); const selectedOptions = options.metrics .filter(m => m.aggregation !== 'count') .map(metric => ({ From 86922e80a8a1d96c23d174031d8d07371ea78b39 Mon Sep 17 00:00:00 2001 From: Joel Griffith Date: Mon, 20 Apr 2020 11:23:16 -0700 Subject: [PATCH 11/39] [Reporting] Config flag to escape formula CSV values (#63645) * Adds a new xpack.reporting.csv.escapeFormulaValues boolean to auto-escape potentially bad cells * Treat csvs with formulas differently than those that aren't escaped Co-authored-by: Elastic Machine --- .../resources/bin/kibana-docker | 1 + .../plugins/reporting/common/constants.ts | 1 + .../csv/server/execute_job.test.ts | 74 ++++++++++++++++++- .../export_types/csv/server/execute_job.ts | 5 +- .../csv/server/lib/cell_has_formula.ts | 11 +++ .../server/lib/check_cells_for_formulas.ts | 7 +- .../csv/server/lib/escape_value.test.ts | 34 ++++++++- .../csv/server/lib/escape_value.ts | 11 ++- .../csv/server/lib/generate_csv.ts | 17 ++++- .../reporting/export_types/csv/types.d.ts | 2 + .../server/lib/generate_csv_search.ts | 1 + .../plugins/reporting/server/config/schema.ts | 1 + 12 files changed, 152 insertions(+), 13 deletions(-) create mode 100644 x-pack/legacy/plugins/reporting/export_types/csv/server/lib/cell_has_formula.ts diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker index d4d2e86e1e96bf..38acfb15d3ece2 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker @@ -195,6 +195,7 @@ kibana_vars=( xpack.reporting.capture.viewport.width xpack.reporting.capture.zoom xpack.reporting.csv.checkForFormulas + xpack.reporting.csv.escapeFormulaValues xpack.reporting.csv.enablePanelActionDownload xpack.reporting.csv.maxSizeBytes xpack.reporting.csv.scroll.duration diff --git a/x-pack/legacy/plugins/reporting/common/constants.ts b/x-pack/legacy/plugins/reporting/common/constants.ts index e3d6a4274e7df7..f30a7cc87f3187 100644 --- a/x-pack/legacy/plugins/reporting/common/constants.ts +++ b/x-pack/legacy/plugins/reporting/common/constants.ts @@ -20,6 +20,7 @@ export const API_GENERATE_IMMEDIATE = `${API_BASE_URL_V1}/generate/immediate/csv export const CONTENT_TYPE_CSV = 'text/csv'; export const CSV_REPORTING_ACTION = 'downloadCsvReport'; export const CSV_BOM_CHARS = '\ufeff'; +export const CSV_FORMULA_CHARS = ['=', '+', '-', '@']; export const WHITELISTED_JOB_CONTENT_TYPES = [ 'application/json', diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.test.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.test.ts index f0afade8629ab4..ad35aaf0030943 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.test.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.test.ts @@ -300,7 +300,7 @@ describe('CSV Execute Job', function() { }); }); - describe('Cells with formula values', () => { + describe('Warning when cells have formulas', () => { it('returns `csv_contains_formulas` when cells contain formulas', async function() { configGetStub.withArgs('csv', 'checkForFormulas').returns(true); callAsCurrentUserStub.onFirstCall().returns({ @@ -353,6 +353,7 @@ describe('CSV Execute Job', function() { it('returns no warnings when cells have no formulas', async function() { configGetStub.withArgs('csv', 'checkForFormulas').returns(true); + configGetStub.withArgs('csv', 'escapeFormulaValues').returns(false); callAsCurrentUserStub.onFirstCall().returns({ hits: { hits: [{ _source: { one: 'foo', two: 'bar' } }], @@ -376,6 +377,33 @@ describe('CSV Execute Job', function() { expect(csvContainsFormulas).toEqual(false); }); + it('returns no warnings when cells have formulas but are escaped', async function() { + configGetStub.withArgs('csv', 'checkForFormulas').returns(true); + configGetStub.withArgs('csv', 'escapeFormulaValues').returns(true); + callAsCurrentUserStub.onFirstCall().returns({ + hits: { + hits: [{ _source: { '=SUM(A1:A2)': 'foo', two: 'bar' } }], + }, + _scroll_id: 'scrollId', + }); + + const executeJob = await executeJobFactory(mockReportingPlugin, mockLogger); + const jobParams = getJobDocPayload({ + headers: encryptedHeaders, + fields: ['=SUM(A1:A2)', 'two'], + conflictedTypesFields: [], + searchRequest: { index: null, body: null }, + }); + + const { csv_contains_formulas: csvContainsFormulas } = await executeJob( + 'job123', + jobParams, + cancellationToken + ); + + expect(csvContainsFormulas).toEqual(false); + }); + it('returns no warnings when configured not to', async () => { configGetStub.withArgs('csv', 'checkForFormulas').returns(false); callAsCurrentUserStub.onFirstCall().returns({ @@ -446,6 +474,50 @@ describe('CSV Execute Job', function() { }); }); + describe('Escaping cells with formulas', () => { + it('escapes values with formulas', async () => { + configGetStub.withArgs('csv', 'escapeFormulaValues').returns(true); + callAsCurrentUserStub.onFirstCall().returns({ + hits: { + hits: [{ _source: { one: `=cmd|' /C calc'!A0`, two: 'bar' } }], + }, + _scroll_id: 'scrollId', + }); + + const executeJob = await executeJobFactory(mockReportingPlugin, mockLogger); + const jobParams = getJobDocPayload({ + headers: encryptedHeaders, + fields: ['one', 'two'], + conflictedTypesFields: [], + searchRequest: { index: null, body: null }, + }); + const { content } = await executeJob('job123', jobParams, cancellationToken); + + expect(content).toEqual("one,two\n\"'=cmd|' /C calc'!A0\",bar\n"); + }); + + it('does not escapes values with formulas', async () => { + configGetStub.withArgs('csv', 'escapeFormulaValues').returns(false); + callAsCurrentUserStub.onFirstCall().returns({ + hits: { + hits: [{ _source: { one: `=cmd|' /C calc'!A0`, two: 'bar' } }], + }, + _scroll_id: 'scrollId', + }); + + const executeJob = await executeJobFactory(mockReportingPlugin, mockLogger); + const jobParams = getJobDocPayload({ + headers: encryptedHeaders, + fields: ['one', 'two'], + conflictedTypesFields: [], + searchRequest: { index: null, body: null }, + }); + const { content } = await executeJob('job123', jobParams, cancellationToken); + + expect(content).toEqual('one,two\n"=cmd|\' /C calc\'!A0",bar\n'); + }); + }); + describe('Elasticsearch call errors', function() { it('should reject Promise if search call errors out', async function() { callAsCurrentUserStub.rejects(new Error()); diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.ts index 376a398da274f9..dbe305bc452dbf 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/execute_job.ts @@ -123,7 +123,7 @@ export const executeJobFactory: ExecuteJobFactory + CSV_FORMULA_CHARS.some(formulaChar => startsWith(val, formulaChar)); diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/check_cells_for_formulas.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/check_cells_for_formulas.ts index 09f7cd2061ffbb..0ec39c527d6567 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/check_cells_for_formulas.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/check_cells_for_formulas.ts @@ -5,8 +5,7 @@ */ import * as _ from 'lodash'; - -const formulaValues = ['=', '+', '-', '@']; +import { cellHasFormulas } from './cell_has_formula'; interface IFlattened { [header: string]: string; @@ -14,7 +13,7 @@ interface IFlattened { export const checkIfRowsHaveFormulas = (flattened: IFlattened, fields: string[]) => { const pruned = _.pick(flattened, fields); - const csvValues = [..._.keys(pruned), ...(_.values(pruned) as string[])]; + const cells = [..._.keys(pruned), ...(_.values(pruned) as string[])]; - return _.some(csvValues, cell => _.some(formulaValues, char => _.startsWith(cell, char))); + return _.some(cells, cell => cellHasFormulas(cell)); }; diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.test.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.test.ts index 64b021a2aeea84..dd0f9d08b864b9 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.test.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.test.ts @@ -11,7 +11,7 @@ describe('escapeValue', function() { describe('quoteValues is true', function() { let escapeValue: (val: string) => string; beforeEach(function() { - escapeValue = createEscapeValue(true); + escapeValue = createEscapeValue(true, false); }); it('should escape value with spaces', function() { @@ -46,7 +46,7 @@ describe('escapeValue', function() { describe('quoteValues is false', function() { let escapeValue: (val: string) => string; beforeEach(function() { - escapeValue = createEscapeValue(false); + escapeValue = createEscapeValue(false, false); }); it('should return the value unescaped', function() { @@ -54,4 +54,34 @@ describe('escapeValue', function() { expect(escapeValue(value)).to.be(value); }); }); + + describe('escapeValues', () => { + describe('when true', () => { + let escapeValue: (val: string) => string; + beforeEach(function() { + escapeValue = createEscapeValue(true, true); + }); + + ['@', '+', '-', '='].forEach(badChar => { + it(`should escape ${badChar} injection values`, function() { + expect(escapeValue(`${badChar}cmd|' /C calc'!A0`)).to.be( + `"'${badChar}cmd|' /C calc'!A0"` + ); + }); + }); + }); + + describe('when false', () => { + let escapeValue: (val: string) => string; + beforeEach(function() { + escapeValue = createEscapeValue(true, false); + }); + + ['@', '+', '-', '='].forEach(badChar => { + it(`should not escape ${badChar} injection values`, function() { + expect(escapeValue(`${badChar}cmd|' /C calc'!A0`)).to.be(`"${badChar}cmd|' /C calc'!A0"`); + }); + }); + }); + }); }); diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.ts index 563de563350e9e..60e75d74b2f98e 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/escape_value.ts @@ -5,15 +5,20 @@ */ import { RawValue } from './types'; +import { cellHasFormulas } from './cell_has_formula'; const nonAlphaNumRE = /[^a-zA-Z0-9]/; const allDoubleQuoteRE = /"/g; -export function createEscapeValue(quoteValues: boolean): (val: RawValue) => string { +export function createEscapeValue( + quoteValues: boolean, + escapeFormulas: boolean +): (val: RawValue) => string { return function escapeValue(val: RawValue) { if (val && typeof val === 'string') { - if (quoteValues && nonAlphaNumRE.test(val)) { - return `"${val.replace(allDoubleQuoteRE, '""')}"`; + const formulasEscaped = escapeFormulas && cellHasFormulas(val) ? "'" + val : val; + if (quoteValues && nonAlphaNumRE.test(formulasEscaped)) { + return `"${formulasEscaped.replace(allDoubleQuoteRE, '""')}"`; } } diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/generate_csv.ts b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/generate_csv.ts index 1986e68917ba86..c7996ebf832a19 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/generate_csv.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/server/lib/generate_csv.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { i18n } from '@kbn/i18n'; import { Logger } from '../../../../types'; import { GenerateCsvParams, SavedSearchGeneratorResult } from '../../types'; import { createFlattenHit } from './flatten_hit'; @@ -26,14 +27,17 @@ export function createGenerateCsv(logger: Logger) { cancellationToken, settings, }: GenerateCsvParams): Promise { - const escapeValue = createEscapeValue(settings.quoteValues); + const escapeValue = createEscapeValue(settings.quoteValues, settings.escapeFormulaValues); const builder = new MaxSizeStringBuilder(settings.maxSizeBytes); const header = `${fields.map(escapeValue).join(settings.separator)}\n`; + const warnings: string[] = []; + if (!builder.tryAppend(header)) { return { size: 0, content: '', maxSizeReached: true, + warnings: [], }; } @@ -82,11 +86,20 @@ export function createGenerateCsv(logger: Logger) { const size = builder.getSizeInBytes(); logger.debug(`finished generating, total size in bytes: ${size}`); + if (csvContainsFormulas && settings.escapeFormulaValues) { + warnings.push( + i18n.translate('xpack.reporting.exportTypes.csv.generateCsv.escapedFormulaValues', { + defaultMessage: 'CSV may contain formulas whose values have been escaped', + }) + ); + } + return { content: builder.getString(), - csvContainsFormulas, + csvContainsFormulas: csvContainsFormulas && !settings.escapeFormulaValues, maxSizeReached, size, + warnings, }; }; } diff --git a/x-pack/legacy/plugins/reporting/export_types/csv/types.d.ts b/x-pack/legacy/plugins/reporting/export_types/csv/types.d.ts index 529c195486bc6d..40a42db3526352 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv/types.d.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv/types.d.ts @@ -87,6 +87,7 @@ export interface SavedSearchGeneratorResult { size: number; maxSizeReached: boolean; csvContainsFormulas?: boolean; + warnings: string[]; } export interface CsvResultFromSearch { @@ -109,5 +110,6 @@ export interface GenerateCsvParams { maxSizeBytes: number; scroll: ScrollConfig; checkForFormulas?: boolean; + escapeFormulaValues: boolean; }; } diff --git a/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts b/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts index 9757c71c19cf41..2611b74c83de92 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts @@ -173,6 +173,7 @@ export async function generateCsvSearch( ...uiSettings, maxSizeBytes: config.get('csv', 'maxSizeBytes'), scroll: config.get('csv', 'scroll'), + escapeFormulaValues: config.get('csv', 'escapeFormulaValues'), timezone, }, }; diff --git a/x-pack/plugins/reporting/server/config/schema.ts b/x-pack/plugins/reporting/server/config/schema.ts index 67d70c1513c15d..402fddcb5e0146 100644 --- a/x-pack/plugins/reporting/server/config/schema.ts +++ b/x-pack/plugins/reporting/server/config/schema.ts @@ -114,6 +114,7 @@ const CaptureSchema = schema.object({ const CsvSchema = schema.object({ checkForFormulas: schema.boolean({ defaultValue: true }), + escapeFormulaValues: schema.boolean({ defaultValue: false }), enablePanelActionDownload: schema.boolean({ defaultValue: true }), maxSizeBytes: schema.number({ defaultValue: 1024 * 1024 * 10, // 10MB From d69b1a0e39796fcf1131369168176ff76438ed77 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Mon, 20 Apr 2020 20:36:09 +0200 Subject: [PATCH 12/39] [Discover] Allow user to generate a report after saving a modified saved search (#63623) * Fix missing reset of initial state when saving saved searches * Fix invalid setting of docTitle * Add functional test --- .../discover/np_ready/angular/discover.js | 6 ++++-- x-pack/test/reporting/functional/reporting.js | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js index 72276a38f6ac21..56966d6294c9a4 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js @@ -57,7 +57,6 @@ const { core, chrome, data, - docTitle, history, indexPatterns, filterManager, @@ -214,6 +213,7 @@ function discoverController( isAppStateDirty, kbnUrlStateStorage, getPreviousAppState, + resetInitialAppState, } = getState({ defaultAppState: getStateDefaults(), storeInSessionStorage: config.get('state:storeInSessionStorage'), @@ -373,6 +373,8 @@ function discoverController( // If the save wasn't successful, put the original values back. if (!response.id || response.error) { savedSearch.title = currentTitle; + } else { + resetInitialAppState(); } return response; }); @@ -758,7 +760,7 @@ function discoverController( } else { // Update defaults so that "reload saved query" functions correctly setAppState(getStateDefaults()); - docTitle.change(savedSearch.lastSavedTitle); + chrome.docTitle.change(savedSearch.lastSavedTitle); } } }); diff --git a/x-pack/test/reporting/functional/reporting.js b/x-pack/test/reporting/functional/reporting.js index 6107363986a409..c1a2ae634662ca 100644 --- a/x-pack/test/reporting/functional/reporting.js +++ b/x-pack/test/reporting/functional/reporting.js @@ -24,6 +24,7 @@ export default function({ getService, getPageObjects }) { const browser = getService('browser'); const log = getService('log'); const config = getService('config'); + const filterBar = getService('filterBar'); const PageObjects = getPageObjects([ 'reporting', 'common', @@ -161,7 +162,27 @@ export default function({ getService, getPageObjects }) { expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); + it('becomes available/not available when a saved search is created, changed and saved again', async () => { + // create new search, csv export is not available + await PageObjects.discover.clickNewSearchButton(); + await PageObjects.reporting.openCsvReportingPanel(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); + // save search, csv export is available + await PageObjects.discover.saveSearch('my search - expectEnabledGenerateReportButton 2'); + await PageObjects.reporting.openCsvReportingPanel(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + // add filter, csv export is not available + await filterBar.addFilter('currency', 'is', 'EUR'); + await PageObjects.reporting.openCsvReportingPanel(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be('true'); + // save search again, csv export is available + await PageObjects.discover.saveSearch('my search - expectEnabledGenerateReportButton 2'); + await PageObjects.reporting.openCsvReportingPanel(); + expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); + }); + it('generates a report with data', async () => { + await PageObjects.discover.clickNewSearchButton(); await PageObjects.reporting.setTimepickerInDataRange(); await PageObjects.discover.saveSearch('my search - with data - expectReportCanBeCreated'); await PageObjects.reporting.openCsvReportingPanel(); From 53a07528414495da59673c47ad80d3d5f777f2dd Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Mon, 20 Apr 2020 19:37:26 +0100 Subject: [PATCH 13/39] [ML] Fixing single metric viewer page padding (#63839) Co-authored-by: Elastic Machine --- .../public/application/timeseriesexplorer/timeseriesexplorer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js index 5e505757dd2aa3..42742f6efcb2a5 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js @@ -150,7 +150,7 @@ function getTimeseriesexplorerDefaultState() { }; } -const containerPadding = 24; +const containerPadding = 34; export class TimeSeriesExplorer extends React.Component { static propTypes = { From 3ce3da8a65c52c511c7266712c4f44d99d58ecb3 Mon Sep 17 00:00:00 2001 From: Brian Seeders Date: Mon, 20 Apr 2020 16:14:46 -0400 Subject: [PATCH 14/39] [FTR] Add test suite metrics tracking/output (#62515) --- .../functional_test_runner.ts | 3 + .../src/functional_test_runner/lib/index.ts | 1 + .../lib/suite_tracker.test.ts | 197 ++++++++++++++++++ .../lib/suite_tracker.ts | 147 +++++++++++++ 4 files changed, 348 insertions(+) create mode 100644 packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts create mode 100644 packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts diff --git a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts index 03075dd4081fd4..3a66ba22ccf3d4 100644 --- a/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts +++ b/packages/kbn-test/src/functional_test_runner/functional_test_runner.ts @@ -30,6 +30,7 @@ import { setupMocha, runTests, Config, + SuiteTracker, } from './lib'; export class FunctionalTestRunner { @@ -52,6 +53,8 @@ export class FunctionalTestRunner { async run() { return await this._run(async (config, coreProviders) => { + SuiteTracker.startTracking(this.lifecycle, this.configFile); + const providers = new ProviderCollection(this.log, [ ...coreProviders, ...readProviderSpec('Service', config.get('services')), diff --git a/packages/kbn-test/src/functional_test_runner/lib/index.ts b/packages/kbn-test/src/functional_test_runner/lib/index.ts index 8940eccad503a4..2e534974e1d76c 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/index.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/index.ts @@ -23,3 +23,4 @@ export { readConfigFile, Config } from './config'; export { readProviderSpec, ProviderCollection, Provider } from './providers'; export { runTests, setupMocha } from './mocha'; export { FailureMetadata } from './failure_metadata'; +export { SuiteTracker } from './suite_tracker'; diff --git a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts new file mode 100644 index 00000000000000..b6c2c0a6d511d1 --- /dev/null +++ b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.test.ts @@ -0,0 +1,197 @@ +/* + * 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 fs from 'fs'; +import { join, resolve } from 'path'; + +jest.mock('fs'); +jest.mock('@kbn/dev-utils', () => { + return { REPO_ROOT: '/dev/null/root' }; +}); + +import { REPO_ROOT } from '@kbn/dev-utils'; +import { Lifecycle } from './lifecycle'; +import { SuiteTracker } from './suite_tracker'; + +const DEFAULT_TEST_METADATA_PATH = join(REPO_ROOT, 'target', 'test_metadata.json'); +const MOCK_CONFIG_PATH = join('test', 'config.js'); +const MOCK_TEST_PATH = join('test', 'apps', 'test.js'); +const ENVS_TO_RESET = ['TEST_METADATA_PATH']; + +describe('SuiteTracker', () => { + const originalEnvs: Record = {}; + + beforeEach(() => { + for (const env of ENVS_TO_RESET) { + if (env in process.env) { + originalEnvs[env] = process.env[env] || ''; + delete process.env[env]; + } + } + }); + + afterEach(() => { + for (const env of ENVS_TO_RESET) { + delete process.env[env]; + } + + for (const env of Object.keys(originalEnvs)) { + process.env[env] = originalEnvs[env]; + } + + jest.resetAllMocks(); + }); + + let MOCKS: Record; + + const createMock = (overrides = {}) => { + return { + file: resolve(REPO_ROOT, MOCK_TEST_PATH), + title: 'A Test', + suiteTag: MOCK_TEST_PATH, + ...overrides, + }; + }; + + const runLifecycleWithMocks = async (mocks: object[], fn: (objs: any) => any = () => {}) => { + const lifecycle = new Lifecycle(); + const suiteTracker = SuiteTracker.startTracking( + lifecycle, + resolve(REPO_ROOT, MOCK_CONFIG_PATH) + ); + + const ret = { lifecycle, suiteTracker }; + + for (const mock of mocks) { + await lifecycle.beforeTestSuite.trigger(mock); + } + + if (fn) { + fn(ret); + } + + for (const mock of mocks.reverse()) { + await lifecycle.afterTestSuite.trigger(mock); + } + + return ret; + }; + + beforeEach(() => { + MOCKS = { + WITH_TESTS: createMock({ tests: [{}] }), // i.e. a describe with tests in it + WITHOUT_TESTS: createMock(), // i.e. a describe with only other describes in it + }; + }); + + it('collects metadata for a single suite with multiple describe()s', async () => { + const { suiteTracker } = await runLifecycleWithMocks([MOCKS.WITHOUT_TESTS, MOCKS.WITH_TESTS]); + + const suites = suiteTracker.getAllFinishedSuites(); + expect(suites.length).toBe(1); + const suite = suites[0]; + + expect(suite).toMatchObject({ + config: MOCK_CONFIG_PATH, + file: MOCK_TEST_PATH, + tag: MOCK_TEST_PATH, + hasTests: true, + success: true, + }); + }); + + it('writes metadata to a file when cleanup is triggered', async () => { + const { lifecycle, suiteTracker } = await runLifecycleWithMocks([MOCKS.WITH_TESTS]); + await lifecycle.cleanup.trigger(); + + const suites = suiteTracker.getAllFinishedSuites(); + + const call = (fs.writeFileSync as jest.Mock).mock.calls[0]; + expect(call[0]).toEqual(DEFAULT_TEST_METADATA_PATH); + expect(call[1]).toEqual(JSON.stringify(suites, null, 2)); + }); + + it('respects TEST_METADATA_PATH env var for metadata target override', async () => { + process.env.TEST_METADATA_PATH = resolve(REPO_ROOT, '../fake-test-path'); + const { lifecycle } = await runLifecycleWithMocks([MOCKS.WITH_TESTS]); + await lifecycle.cleanup.trigger(); + + expect((fs.writeFileSync as jest.Mock).mock.calls[0][0]).toEqual( + process.env.TEST_METADATA_PATH + ); + }); + + it('identifies suites with tests as leaf suites', async () => { + const root = createMock({ title: 'root', file: join(REPO_ROOT, 'root.js') }); + const parent = createMock({ parent: root }); + const withTests = createMock({ parent, tests: [{}] }); + + const { suiteTracker } = await runLifecycleWithMocks([root, parent, withTests]); + const suites = suiteTracker.getAllFinishedSuites(); + + const finishedRoot = suites.find(s => s.title === 'root'); + const finishedWithTests = suites.find(s => s.title !== 'root'); + + expect(finishedRoot).toBeTruthy(); + expect(finishedRoot?.hasTests).toBeFalsy(); + expect(finishedWithTests?.hasTests).toBe(true); + }); + + describe('with a failing suite', () => { + let root: any; + let parent: any; + let failed: any; + + beforeEach(() => { + root = createMock({ file: join(REPO_ROOT, 'root.js') }); + parent = createMock({ parent: root }); + failed = createMock({ parent, tests: [{}] }); + }); + + it('marks parent suites as not successful when a test fails', async () => { + const { suiteTracker } = await runLifecycleWithMocks( + [root, parent, failed], + async ({ lifecycle }) => { + await lifecycle.testFailure.trigger(Error('test'), { parent: failed }); + } + ); + + const suites = suiteTracker.getAllFinishedSuites(); + expect(suites.length).toBe(2); + for (const suite of suites) { + expect(suite.success).toBeFalsy(); + } + }); + + it('marks parent suites as not successful when a test hook fails', async () => { + const { suiteTracker } = await runLifecycleWithMocks( + [root, parent, failed], + async ({ lifecycle }) => { + await lifecycle.testHookFailure.trigger(Error('test'), { parent: failed }); + } + ); + + const suites = suiteTracker.getAllFinishedSuites(); + expect(suites.length).toBe(2); + for (const suite of suites) { + expect(suite.success).toBeFalsy(); + } + }); + }); +}); diff --git a/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts new file mode 100644 index 00000000000000..8967251ea78de7 --- /dev/null +++ b/packages/kbn-test/src/functional_test_runner/lib/suite_tracker.ts @@ -0,0 +1,147 @@ +/* + * 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 fs from 'fs'; +import { dirname, relative, resolve } from 'path'; + +import { REPO_ROOT } from '@kbn/dev-utils'; + +import { Lifecycle } from './lifecycle'; + +export interface SuiteInProgress { + startTime?: Date; + endTime?: Date; + success?: boolean; +} + +export interface SuiteWithMetadata { + config: string; + file: string; + tag: string; + title: string; + startTime: Date; + endTime: Date; + duration: number; + success: boolean; + hasTests: boolean; +} + +const getTestMetadataPath = () => { + return process.env.TEST_METADATA_PATH || resolve(REPO_ROOT, 'target', 'test_metadata.json'); +}; + +export class SuiteTracker { + finishedSuitesByConfig: Record> = {}; + inProgressSuites: Map = new Map(); + + static startTracking(lifecycle: Lifecycle, configPath: string): SuiteTracker { + const suiteTracker = new SuiteTracker(lifecycle, configPath); + return suiteTracker; + } + + getTracked(suite: object): SuiteInProgress { + if (!this.inProgressSuites.has(suite)) { + this.inProgressSuites.set(suite, { success: undefined } as SuiteInProgress); + } + return this.inProgressSuites.get(suite)!; + } + + constructor(lifecycle: Lifecycle, configPathAbsolute: string) { + if (fs.existsSync(getTestMetadataPath())) { + fs.unlinkSync(getTestMetadataPath()); + } else { + fs.mkdirSync(dirname(getTestMetadataPath()), { recursive: true }); + } + + const config = relative(REPO_ROOT, configPathAbsolute); + + lifecycle.beforeTestSuite.add(suite => { + const tracked = this.getTracked(suite); + tracked.startTime = new Date(); + }); + + // If a test fails, we want to make sure all of the ancestors, all the way up to the root, get marked as failed + // This information is not available on the mocha objects without traversing all descendants of a given node + const handleFailure = (_: any, test: any) => { + let parent = test.parent; + + // Infinite loop protection, just in case + for (let i = 0; i < 500 && parent; i++) { + if (this.inProgressSuites.has(parent)) { + this.getTracked(parent).success = false; + } + parent = parent.parent; + } + }; + + lifecycle.testFailure.add(handleFailure); + lifecycle.testHookFailure.add(handleFailure); + + lifecycle.afterTestSuite.add(suite => { + const tracked = this.getTracked(suite); + tracked.endTime = new Date(); + + // The suite ended without any children failing, so we can mark it as successful + if (typeof tracked.success === 'undefined') { + tracked.success = true; + } + + let duration = tracked.endTime.getTime() - (tracked.startTime || new Date()).getTime(); + duration = Math.floor(duration / 1000); + + const file = relative(REPO_ROOT, suite.file); + + this.finishedSuitesByConfig[config] = this.finishedSuitesByConfig[config] || {}; + + // This will get called multiple times for a test file that has multiple describes in it or similar + // This is okay, because the last one that fires is always the root of the file, which is is the one we ultimately want + this.finishedSuitesByConfig[config][file] = { + ...tracked, + duration, + config, + file, + tag: suite.suiteTag, + title: suite.title, + hasTests: !!( + (suite.tests && suite.tests.length) || + // The below statement is so that `hasTests` will bubble up nested describes in the same file + (this.finishedSuitesByConfig[config][file] && + this.finishedSuitesByConfig[config][file].hasTests) + ), + } as SuiteWithMetadata; + }); + + lifecycle.cleanup.add(() => { + const suites = this.getAllFinishedSuites(); + + fs.writeFileSync(getTestMetadataPath(), JSON.stringify(suites, null, 2)); + }); + } + + getAllFinishedSuites() { + const flattened: SuiteWithMetadata[] = []; + for (const byFile of Object.values(this.finishedSuitesByConfig)) { + for (const suite of Object.values(byFile)) { + flattened.push(suite); + } + } + + flattened.sort((a, b) => b.duration - a.duration); + return flattened; + } +} From 5b11434f3a57a1516f090bb87c4fd1a1f6892053 Mon Sep 17 00:00:00 2001 From: Brent Kimmel Date: Mon, 20 Apr 2020 16:28:21 -0400 Subject: [PATCH 15/39] Add sub-menus to Resolver node (for 75% zoom) (#63476) * adding two buttons for 75% zoom view * adjust palette to match comps Co-authored-by: Kevin Qualters --- .../public/embeddables/resolver/view/defs.tsx | 10 +- .../resolver/view/process_event_dot.tsx | 94 ++++++++++++++++--- .../endpoint/scripts/resolver_generator.ts | 2 +- 3 files changed, 91 insertions(+), 15 deletions(-) diff --git a/x-pack/plugins/endpoint/public/embeddables/resolver/view/defs.tsx b/x-pack/plugins/endpoint/public/embeddables/resolver/view/defs.tsx index de9c3c7e8f8f3e..064645019ca34c 100644 --- a/x-pack/plugins/endpoint/public/embeddables/resolver/view/defs.tsx +++ b/x-pack/plugins/endpoint/public/embeddables/resolver/view/defs.tsx @@ -54,7 +54,11 @@ type ResolverColorNames = | 'activeNoWarning' | 'activeWarning' | 'fullLabelBackground' - | 'inertDescription'; + | 'inertDescription' + | 'labelBackgroundTerminatedProcess' + | 'labelBackgroundTerminatedTrigger' + | 'labelBackgroundRunningProcess' + | 'labelBackgroundRunningTrigger'; export const NamedColors: Record = { ok: saturate(0.5, resolverPalette.temperatures[0]), @@ -70,6 +74,10 @@ export const NamedColors: Record = { activeNoWarning: '#0078FF', activeWarning: '#C61F38', fullLabelBackground: '#3B3C41', + labelBackgroundTerminatedProcess: '#8A96A8', + labelBackgroundTerminatedTrigger: '#8A96A8', + labelBackgroundRunningProcess: '#8A96A8', + labelBackgroundRunningTrigger: '#8A96A8', inertDescription: '#747474', }; diff --git a/x-pack/plugins/endpoint/public/embeddables/resolver/view/process_event_dot.tsx b/x-pack/plugins/endpoint/public/embeddables/resolver/view/process_event_dot.tsx index 10e331ffff02d5..3201e83164dba6 100644 --- a/x-pack/plugins/endpoint/public/embeddables/resolver/view/process_event_dot.tsx +++ b/x-pack/plugins/endpoint/public/embeddables/resolver/view/process_event_dot.tsx @@ -7,7 +7,13 @@ import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; import { i18n } from '@kbn/i18n'; -import { htmlIdGenerator, EuiKeyboardAccessible } from '@elastic/eui'; +import { + htmlIdGenerator, + EuiKeyboardAccessible, + EuiButton, + EuiFlexGroup, + EuiFlexItem, +} from '@elastic/eui'; import { useSelector } from 'react-redux'; import { applyMatrix3 } from '../lib/vector2'; import { Vector2, Matrix3, AdjacentProcessMap, ResolverProcessType } from '../types'; @@ -21,7 +27,7 @@ import * as selectors from '../store/selectors'; const nodeAssets = { runningProcessCube: { cubeSymbol: `#${SymbolIds.runningProcessCube}`, - labelBackground: NamedColors.fullLabelBackground, + labelBackground: NamedColors.labelBackgroundRunningProcess, descriptionFill: NamedColors.empty, descriptionText: i18n.translate('xpack.endpoint.resolver.runningProcess', { defaultMessage: 'Running Process', @@ -29,7 +35,7 @@ const nodeAssets = { }, runningTriggerCube: { cubeSymbol: `#${SymbolIds.runningTriggerCube}`, - labelBackground: NamedColors.fullLabelBackground, + labelBackground: NamedColors.labelBackgroundRunningTrigger, descriptionFill: NamedColors.empty, descriptionText: i18n.translate('xpack.endpoint.resolver.runningTrigger', { defaultMessage: 'Running Trigger', @@ -37,7 +43,7 @@ const nodeAssets = { }, terminatedProcessCube: { cubeSymbol: `#${SymbolIds.terminatedProcessCube}`, - labelBackground: NamedColors.fullLabelBackground, + labelBackground: NamedColors.labelBackgroundTerminatedProcess, descriptionFill: NamedColors.empty, descriptionText: i18n.translate('xpack.endpoint.resolver.terminatedProcess', { defaultMessage: 'Terminated Process', @@ -45,7 +51,7 @@ const nodeAssets = { }, terminatedTriggerCube: { cubeSymbol: `#${SymbolIds.terminatedTriggerCube}`, - labelBackground: NamedColors.fullLabelBackground, + labelBackground: NamedColors.labelBackgroundTerminatedTrigger, descriptionFill: NamedColors.empty, descriptionText: i18n.translate('xpack.endpoint.resolver.terminatedTrigger', { defaultMessage: 'Terminated Trigger', @@ -53,8 +59,46 @@ const nodeAssets = { }, }; +const ChildEventsButton = React.memo(() => { + return ( + ) => { + clickEvent.preventDefault(); + clickEvent.stopPropagation(); + }, [])} + color="ghost" + size="s" + iconType="arrowDown" + iconSide="right" + tabIndex={-1} + > + {i18n.translate('xpack.endpoint.resolver.relatedEvents', { + defaultMessage: 'Events', + })} + + ); +}); + +const RelatedAlertsButton = React.memo(() => { + return ( + ) => { + clickEvent.preventDefault(); + clickEvent.stopPropagation(); + }, [])} + color="ghost" + size="s" + tabIndex={-1} + > + {i18n.translate('xpack.endpoint.resolver.relatedAlerts', { + defaultMessage: 'Related Alerts', + })} + + ); +}); + /** - * A placeholder view for a process node. + * An artefact that represents a process node. */ export const ProcessEventDot = styled( React.memo( @@ -184,6 +228,7 @@ export const ProcessEventDot = styled( }, [animationTarget, dispatch, nodeId] ); + /* eslint-disable jsx-a11y/click-events-have-key-events */ /** * Key event handling (e.g. 'Enter'/'Space') is provisioned by the `EuiKeyboardAccessible` component @@ -256,13 +301,17 @@ export const ProcessEventDot = styled(
{descriptionText}
= 2 ? 'euiButton' : 'euiButton euiButton--small'} data-test-subject="nodeLabel" id={labelId} style={{ backgroundColor: labelBackground, - padding: '.15em 0', + padding: '.15rem 0', textAlign: 'center', - maxWidth: '100%', + maxWidth: '20rem', + minWidth: '12rem', + width: '60%', overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', contain: 'content', + margin: '.25rem 0 .35rem 0', }} > - {eventModel.eventName(event)} + + {eventModel.eventName(event)} +
+ {magFactorX >= 2 && ( + + + + + + + + + )}
@@ -317,6 +383,8 @@ export const ProcessEventDot = styled( white-space: nowrap; will-change: left, top, width, height; contain: strict; + min-width: 280px; + min-height: 90px; //dasharray & dashoffset should be equal to "pull" the stroke back //when it is transitioned. diff --git a/x-pack/plugins/endpoint/scripts/resolver_generator.ts b/x-pack/plugins/endpoint/scripts/resolver_generator.ts index dd9e591f4b034f..2129bef0624b87 100644 --- a/x-pack/plugins/endpoint/scripts/resolver_generator.ts +++ b/x-pack/plugins/endpoint/scripts/resolver_generator.ts @@ -29,7 +29,7 @@ async function main() { alertIndex: { alias: 'ai', describe: 'index to store alerts in', - default: '.alerts-endpoint-000001', + default: 'events-endpoint-1', type: 'string', }, eventIndex: { From e32fd2617a70b1122b084900282ea15f8c9a9ea7 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Mon, 20 Apr 2020 13:44:19 -0700 Subject: [PATCH 16/39] [Metrics UI] Reorganize file layout for Metrics UI (#60049) * [Metrics UI] Reorganize pages specific files under pages - Restructuring pages folder - Renaming metrics_ui to metrics - Fixing paths in jest mocks - Fixing AlertsFlyout path - Fixing bad file paths from the merge * Fixing typo compontents to components Co-authored-by: Elastic Machine --- .../inventory_models/aws_ec2/layout.tsx | 12 +- .../aws_ec2/toolbar_items.tsx | 6 +- .../inventory_models/aws_rds/layout.tsx | 10 +- .../aws_rds/toolbar_items.tsx | 6 +- .../common/inventory_models/aws_s3/layout.tsx | 10 +- .../inventory_models/aws_s3/toolbar_items.tsx | 6 +- .../inventory_models/aws_sqs/layout.tsx | 10 +- .../aws_sqs/toolbar_items.tsx | 6 +- .../inventory_models/container/layout.tsx | 14 +- .../container/toolbar_items.tsx | 4 +- .../common/inventory_models/host/layout.tsx | 14 +- .../inventory_models/host/toolbar_items.tsx | 4 +- .../infra/common/inventory_models/layouts.ts | 2 +- .../common/inventory_models/pod/layout.tsx | 14 +- .../inventory_models/pod/toolbar_items.tsx | 4 +- .../cloud_toolbar_items.tsx | 6 +- .../metrics_and_groupby_toolbar_items.tsx | 8 +- .../inventory_models/shared/layouts/aws.tsx | 10 +- .../inventory_models/shared/layouts/nginx.tsx | 8 +- .../infra/common/inventory_models/toolbars.ts | 2 +- .../common/saved_objects/inventory_view.ts | 2 +- .../saved_objects/metrics_explorer_view.ts | 2 +- .../alerting/metrics/alert_flyout.tsx | 2 +- .../alerting/metrics/expression.tsx | 6 +- .../components/waffle/lib/type_guards.ts | 17 -- ...ith_metrics_explorer_options_url_state.tsx | 2 +- .../infra/public/containers/with_options.tsx | 64 ----- .../public/pages/infrastructure/index.tsx | 135 ---------- .../redirect_to_host_detail_via_ip.tsx | 2 +- .../pages/link_to/redirect_to_node_detail.tsx | 2 +- .../infra/public/pages/metrics/index.tsx | 245 +++++++++--------- .../inventory_view/components}/layout.tsx | 18 +- .../components/nodes_overview.tsx} | 31 ++- .../inventory_view/components}/search_bar.tsx | 6 +- .../inventory_view/components/table_view.tsx} | 14 +- .../components}/toolbars/save_views.tsx | 6 +- .../components}/toolbars/toolbar.tsx | 14 +- .../components}/toolbars/toolbar_wrapper.tsx | 10 +- .../components/waffle/conditional_tooltip.tsx | 0 .../components/waffle/custom_field_panel.tsx | 2 +- .../components/waffle/gradient_legend.tsx | 4 +- .../components/waffle/group_name.tsx | 4 +- .../components/waffle/group_of_groups.tsx | 6 +- .../components/waffle/group_of_nodes.tsx | 6 +- .../components/waffle/legend.tsx | 8 +- .../components/waffle/legend_controls.tsx | 4 +- .../inventory_view}/components/waffle/map.tsx | 19 +- .../metric_control/custom_metric_form.tsx | 7 +- .../metric_control/get_custom_metric_label.ts | 2 +- .../waffle/metric_control/index.tsx | 4 +- .../metric_control/metrics_context_menu.tsx | 4 +- .../metric_control/metrics_edit_mode.tsx | 7 +- .../waffle/metric_control/mode_switcher.tsx | 7 +- .../components/waffle/metric_control/types.ts | 0 .../components/waffle/node.tsx | 12 +- .../components/waffle/node_context_menu.tsx | 18 +- .../components/waffle/steps_legend.tsx | 4 +- .../components/waffle/view_switcher.tsx | 0 .../waffle/waffle_accounts_controls.tsx | 4 +- .../waffle/waffle_group_by_controls.tsx | 8 +- .../waffle/waffle_inventory_switcher.tsx | 6 +- .../waffle/waffle_region_controls.tsx | 2 +- .../waffle/waffle_time_controls.tsx | 2 +- .../hooks}/use_inventory_meta.ts | 8 +- .../inventory_view/hooks}/use_snaphot.ts | 11 +- .../hooks/use_waffle_filters.ts | 8 +- .../hooks/use_waffle_options.ts | 6 +- .../inventory_view/hooks/use_waffle_time.ts | 2 +- .../hooks/use_waffle_view_state.ts | 0 .../inventory_view}/index.tsx | 2 +- .../lib/apply_wafflemap_layout.ts | 7 +- .../inventory_view}/lib/color_from_value.ts | 2 +- .../lib/create_uptime_link.test.ts | 4 +- .../inventory_view}/lib/create_uptime_link.ts | 6 +- .../lib/field_to_display_name.ts | 0 .../inventory_view/lib}/nodes_to_wafflemap.ts | 4 +- .../inventory_view}/lib/size_of_squares.ts | 0 .../inventory_view/lib}/type_guards.ts | 17 +- .../inventory_view}/toolbar.tsx | 6 +- .../components/chart_section_vis.tsx | 6 +- .../components/error_message.tsx | 0 .../components/gauges_section_vis.tsx | 6 +- .../{ => metric_detail}/components/helpers.ts | 8 +- .../components/invalid_node.tsx | 6 +- .../components/layout_content.tsx | 2 +- .../components/metadata_details.tsx | 4 +- .../components/node_details_page.tsx | 14 +- .../components/page_body.tsx | 10 +- .../components/page_error.tsx | 4 +- .../components/section.tsx | 0 .../components/series_chart.tsx | 4 +- .../components/side_nav.tsx | 2 +- .../components/sub_section.tsx | 2 +- .../components/time_controls.test.tsx | 2 +- .../components/time_controls.tsx | 6 +- .../containers/metadata_context.ts | 2 +- .../hooks/metrics_time.test.tsx | 0 .../metric_detail/hooks}/use_metadata.ts | 12 +- .../hooks/use_metrics_time.ts | 4 +- .../metric_detail/hooks}/use_node_details.ts | 10 +- .../pages/metrics/metric_detail/index.tsx | 140 ++++++++++ .../lib/get_filtered_metrics.ts | 6 +- .../lib/side_nav_context.ts | 0 .../{ => metric_detail}/page_providers.tsx | 2 +- .../metrics/{ => metric_detail}/types.ts | 6 +- .../components}/aggregation.tsx | 6 +- .../metrics_explorer/components}/chart.tsx | 12 +- .../components}/chart_context_menu.test.tsx | 9 +- .../components}/chart_context_menu.tsx | 14 +- .../components}/chart_options.tsx | 2 +- .../metrics_explorer/components}/charts.tsx | 10 +- .../components}/empty_chart.tsx | 0 .../metrics_explorer/components}/group_by.tsx | 2 +- .../components}/helpers/calculate_domain.ts | 4 +- .../helpers/calculate_domian.test.ts | 6 +- .../helpers/create_formatter_for_metric.ts | 6 +- .../create_formatter_for_metrics.test.ts | 2 +- .../helpers/create_metric_label.test.ts | 2 +- .../helpers/create_metric_label.ts | 2 +- .../helpers/create_tsvb_link.test.ts | 11 +- .../components}/helpers/create_tsvb_link.ts | 12 +- .../components}/helpers/get_chart_theme.ts | 0 .../helpers/metric_to_format.test.ts | 4 +- .../components}/helpers/metric_to_format.ts | 4 +- .../components}/kuery_bar.tsx | 6 +- .../metrics_explorer/components}/metrics.tsx | 6 +- .../components}/no_metrics.tsx | 0 .../components}/series_chart.tsx | 6 +- .../metrics_explorer/components}/toolbar.tsx | 16 +- .../hooks}/use_metric_explorer_state.test.tsx | 6 +- .../hooks}/use_metric_explorer_state.ts | 8 +- .../hooks}/use_metrics_explorer_data.test.tsx | 6 +- .../hooks}/use_metrics_explorer_data.ts | 10 +- .../use_metrics_explorer_options.test.tsx | 0 .../hooks}/use_metrics_explorer_options.ts | 4 +- .../metrics_explorer/index.tsx | 6 +- .../{infrastructure => metrics}/settings.tsx | 0 .../infra/public/routers/metrics_router.tsx | 6 +- .../public/utils/fixtures/metrics_explorer.ts | 2 +- 139 files changed, 683 insertions(+), 722 deletions(-) rename x-pack/plugins/infra/common/inventory_models/shared/{compontents => components}/cloud_toolbar_items.tsx (75%) rename x-pack/plugins/infra/common/inventory_models/shared/{compontents => components}/metrics_and_groupby_toolbar_items.tsx (81%) delete mode 100644 x-pack/plugins/infra/public/components/waffle/lib/type_guards.ts delete mode 100644 x-pack/plugins/infra/public/containers/with_options.tsx delete mode 100644 x-pack/plugins/infra/public/pages/infrastructure/index.tsx rename x-pack/plugins/infra/public/{components/inventory => pages/metrics/inventory_view/components}/layout.tsx (78%) rename x-pack/plugins/infra/public/{components/nodes_overview/index.tsx => pages/metrics/inventory_view/components/nodes_overview.tsx} (88%) rename x-pack/plugins/infra/public/pages/{inventory_view/compontents => metrics/inventory_view/components}/search_bar.tsx (86%) rename x-pack/plugins/infra/public/{components/nodes_overview/table.tsx => pages/metrics/inventory_view/components/table_view.tsx} (92%) rename x-pack/plugins/infra/public/{components/inventory => pages/metrics/inventory_view/components}/toolbars/save_views.tsx (68%) rename x-pack/plugins/infra/public/{components/inventory => pages/metrics/inventory_view/components}/toolbars/toolbar.tsx (77%) rename x-pack/plugins/infra/public/{components/inventory => pages/metrics/inventory_view/components}/toolbars/toolbar_wrapper.tsx (95%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/conditional_tooltip.tsx (100%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/custom_field_panel.tsx (97%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/gradient_legend.tsx (96%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/group_name.tsx (96%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/group_of_groups.tsx (90%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/group_of_nodes.tsx (90%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/legend.tsx (88%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/legend_controls.tsx (97%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/map.tsx (84%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/custom_metric_form.tsx (97%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/get_custom_metric_label.ts (91%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/index.tsx (97%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/metrics_context_menu.tsx (94%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/metrics_edit_mode.tsx (92%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/mode_switcher.tsx (95%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/metric_control/types.ts (100%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/node.tsx (93%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/node_context_menu.tsx (91%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/steps_legend.tsx (95%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/view_switcher.tsx (100%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/waffle_accounts_controls.tsx (94%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/waffle_group_by_controls.tsx (95%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/waffle_inventory_switcher.tsx (94%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/waffle_region_controls.tsx (97%) rename x-pack/plugins/infra/public/{ => pages/metrics/inventory_view}/components/waffle/waffle_time_controls.tsx (95%) rename x-pack/plugins/infra/public/{containers/inventory_metadata => pages/metrics/inventory_view/hooks}/use_inventory_meta.ts (79%) rename x-pack/plugins/infra/public/{containers/waffle => pages/metrics/inventory_view/hooks}/use_snaphot.ts (83%) rename x-pack/plugins/infra/public/pages/{ => metrics}/inventory_view/hooks/use_waffle_filters.ts (90%) rename x-pack/plugins/infra/public/pages/{ => metrics}/inventory_view/hooks/use_waffle_options.ts (95%) rename x-pack/plugins/infra/public/pages/{ => metrics}/inventory_view/hooks/use_waffle_time.ts (97%) rename x-pack/plugins/infra/public/pages/{ => metrics}/inventory_view/hooks/use_waffle_view_state.ts (100%) rename x-pack/plugins/infra/public/pages/{infrastructure/snapshot => metrics/inventory_view}/index.tsx (98%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/apply_wafflemap_layout.ts (94%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/color_from_value.ts (98%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/create_uptime_link.test.ts (96%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/create_uptime_link.ts (83%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/field_to_display_name.ts (100%) rename x-pack/plugins/infra/public/{containers/waffle => pages/metrics/inventory_view/lib}/nodes_to_wafflemap.ts (97%) rename x-pack/plugins/infra/public/{components/waffle => pages/metrics/inventory_view}/lib/size_of_squares.ts (100%) rename x-pack/plugins/infra/public/{containers/waffle => pages/metrics/inventory_view/lib}/type_guards.ts (55%) rename x-pack/plugins/infra/public/pages/{infrastructure/snapshot => metrics/inventory_view}/toolbar.tsx (75%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/chart_section_vis.tsx (94%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/error_message.tsx (100%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/gauges_section_vis.tsx (92%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/helpers.ts (91%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/invalid_node.tsx (90%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/layout_content.tsx (84%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/metadata_details.tsx (97%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/node_details_page.tsx (90%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/page_body.tsx (82%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/page_error.tsx (90%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/section.tsx (100%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/series_chart.tsx (93%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/side_nav.tsx (95%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/sub_section.tsx (94%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/time_controls.test.tsx (96%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/components/time_controls.tsx (91%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/containers/metadata_context.ts (84%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/hooks/metrics_time.test.tsx (100%) rename x-pack/plugins/infra/public/{containers/metadata => pages/metrics/metric_detail/hooks}/use_metadata.ts (76%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/hooks/use_metrics_time.ts (96%) rename x-pack/plugins/infra/public/{containers/node_details => pages/metrics/metric_detail/hooks}/use_node_details.ts (75%) create mode 100644 x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx rename x-pack/plugins/infra/public/{containers/metadata => pages/metrics/metric_detail}/lib/get_filtered_metrics.ts (78%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/lib/side_nav_context.ts (100%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/page_providers.tsx (91%) rename x-pack/plugins/infra/public/pages/metrics/{ => metric_detail}/types.ts (86%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/aggregation.tsx (89%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/chart.tsx (92%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/chart_context_menu.test.tsx (96%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/chart_context_menu.tsx (91%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/chart_options.tsx (98%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/charts.tsx (92%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/empty_chart.tsx (100%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/group_by.tsx (93%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/calculate_domain.ts (87%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/calculate_domian.test.ts (85%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_formatter_for_metric.ts (76%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_formatter_for_metrics.test.ts (94%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_metric_label.test.ts (88%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_metric_label.ts (80%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_tsvb_link.test.ts (97%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/create_tsvb_link.ts (91%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/get_chart_theme.ts (100%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/metric_to_format.test.ts (90%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/helpers/metric_to_format.ts (82%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/kuery_bar.tsx (88%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/metrics.tsx (91%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/no_metrics.tsx (100%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/series_chart.tsx (93%) rename x-pack/plugins/infra/public/{components/metrics_explorer => pages/metrics/metrics_explorer/components}/toolbar.tsx (88%) rename x-pack/plugins/infra/public/pages/{infrastructure/metrics_explorer => metrics/metrics_explorer/hooks}/use_metric_explorer_state.test.tsx (96%) rename x-pack/plugins/infra/public/pages/{infrastructure/metrics_explorer => metrics/metrics_explorer/hooks}/use_metric_explorer_state.ts (92%) rename x-pack/plugins/infra/public/{containers/metrics_explorer => pages/metrics/metrics_explorer/hooks}/use_metrics_explorer_data.test.tsx (96%) rename x-pack/plugins/infra/public/{containers/metrics_explorer => pages/metrics/metrics_explorer/hooks}/use_metrics_explorer_data.ts (91%) rename x-pack/plugins/infra/public/{containers/metrics_explorer => pages/metrics/metrics_explorer/hooks}/use_metrics_explorer_options.test.tsx (100%) rename x-pack/plugins/infra/public/{containers/metrics_explorer => pages/metrics/metrics_explorer/hooks}/use_metrics_explorer_options.ts (96%) rename x-pack/plugins/infra/public/pages/{infrastructure => metrics}/metrics_explorer/index.tsx (92%) rename x-pack/plugins/infra/public/pages/{infrastructure => metrics}/settings.tsx (100%) 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 68bfe41fd538e6..9494e4aa396a50 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 @@ -6,19 +6,19 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetadataDetails } from '../../../public/pages/metrics/components/metadata_details'; +import { MetadataDetails } from '../../../public/pages/metrics/metric_detail/components/metadata_details'; export const Layout = withTheme(({ metrics, theme, onChangeRangeTime }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/aws_ec2/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/aws_ec2/toolbar_items.tsx index 683851fec4d772..b2da7dec3f2e08 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_ec2/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_ec2/toolbar_items.tsx @@ -6,9 +6,9 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; -import { CloudToolbarItems } from '../shared/compontents/cloud_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; +import { CloudToolbarItems } from '../shared/components/cloud_toolbar_items'; import { SnapshotMetricType } from '../types'; export const AwsEC2ToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/aws_rds/layout.tsx b/x-pack/plugins/infra/common/inventory_models/aws_rds/layout.tsx index 220c6c67f4aeaa..08b865f01b06c6 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_rds/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_rds/layout.tsx @@ -6,17 +6,17 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/aws_rds/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/aws_rds/toolbar_items.tsx index 24f05fd91589c8..2a8394b9dd3a41 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_rds/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_rds/toolbar_items.tsx @@ -6,9 +6,9 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; -import { CloudToolbarItems } from '../shared/compontents/cloud_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; +import { CloudToolbarItems } from '../shared/components/cloud_toolbar_items'; import { SnapshotMetricType } from '../types'; export const AwsRDSToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/aws_s3/layout.tsx b/x-pack/plugins/infra/common/inventory_models/aws_s3/layout.tsx index 805236cf470827..e16f8ef6addde6 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_s3/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_s3/layout.tsx @@ -6,17 +6,17 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/aws_s3/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/aws_s3/toolbar_items.tsx index 54c3196ae28335..324bdd05860290 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_s3/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_s3/toolbar_items.tsx @@ -6,9 +6,9 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; -import { CloudToolbarItems } from '../shared/compontents/cloud_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; +import { CloudToolbarItems } from '../shared/components/cloud_toolbar_items'; import { SnapshotMetricType } from '../types'; export const AwsS3ToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/aws_sqs/layout.tsx b/x-pack/plugins/infra/common/inventory_models/aws_sqs/layout.tsx index d581ac751682d5..ff13f2db104de9 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_sqs/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_sqs/layout.tsx @@ -6,17 +6,17 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/aws_sqs/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/aws_sqs/toolbar_items.tsx index 22cb2740a4a7f7..3229c07034772c 100644 --- a/x-pack/plugins/infra/common/inventory_models/aws_sqs/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/aws_sqs/toolbar_items.tsx @@ -6,9 +6,9 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; -import { CloudToolbarItems } from '../shared/compontents/cloud_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; +import { CloudToolbarItems } from '../shared/components/cloud_toolbar_items'; import { SnapshotMetricType } from '../types'; export const AwsSQSToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/container/layout.tsx b/x-pack/plugins/infra/common/inventory_models/container/layout.tsx index 9956b2c9a2ce46..b9366a43e40c6b 100644 --- a/x-pack/plugins/infra/common/inventory_models/container/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/container/layout.tsx @@ -6,21 +6,21 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { GaugesSectionVis } from '../../../public/pages/metrics/components/gauges_section_vis'; +import { GaugesSectionVis } from '../../../public/pages/metrics/metric_detail/components/gauges_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetadataDetails } from '../../../public/pages/metrics/components/metadata_details'; +import { MetadataDetails } from '../../../public/pages/metrics/metric_detail/components/metadata_details'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/container/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/container/toolbar_items.tsx index dbb77cb3b677ee..f6c707726d9ca1 100644 --- a/x-pack/plugins/infra/common/inventory_models/container/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/container/toolbar_items.tsx @@ -6,8 +6,8 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; import { SnapshotMetricType } from '../types'; export const ContainerToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/host/layout.tsx b/x-pack/plugins/infra/common/inventory_models/host/layout.tsx index 6d7d3612542208..e23118c747a9ba 100644 --- a/x-pack/plugins/infra/common/inventory_models/host/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/host/layout.tsx @@ -8,21 +8,21 @@ import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { GaugesSectionVis } from '../../../public/pages/metrics/components/gauges_section_vis'; +import { GaugesSectionVis } from '../../../public/pages/metrics/metric_detail/components/gauges_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; import * as Aws from '../shared/layouts/aws'; import * as Ngnix from '../shared/layouts/nginx'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetadataDetails } from '../../../public/pages/metrics/components/metadata_details'; +import { MetadataDetails } from '../../../public/pages/metrics/metric_detail/components/metadata_details'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/host/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/host/toolbar_items.tsx index fc7696ee53c9d6..136264c0e26f4d 100644 --- a/x-pack/plugins/infra/common/inventory_models/host/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/host/toolbar_items.tsx @@ -6,8 +6,8 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; import { SnapshotMetricType } from '../types'; export const HostToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/layouts.ts b/x-pack/plugins/infra/common/inventory_models/layouts.ts index b59ce010361ecd..df82f154b47b3b 100644 --- a/x-pack/plugins/infra/common/inventory_models/layouts.ts +++ b/x-pack/plugins/infra/common/inventory_models/layouts.ts @@ -23,7 +23,7 @@ import { Layout as AwsRDSLayout } from './aws_rds/layout'; import { Layout as AwsSQSLayout } from './aws_sqs/layout'; import { InventoryItemType } from './types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutProps } from '../../public/pages/metrics/types'; +import { LayoutProps } from '../../public/pages/metrics/metric_detail/types'; interface Layouts { [type: string]: ReactNode; 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 8bc2f3ee8b4b31..271e32556ae286 100644 --- a/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx +++ b/x-pack/plugins/infra/common/inventory_models/pod/layout.tsx @@ -6,22 +6,22 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../public/pages/metrics/components/section'; +import { Section } from '../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { GaugesSectionVis } from '../../../public/pages/metrics/components/gauges_section_vis'; +import { GaugesSectionVis } from '../../../public/pages/metrics/metric_detail/components/gauges_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../observability/public'; import * as Nginx from '../shared/layouts/nginx'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetadataDetails } from '../../../public/pages/metrics/components/metadata_details'; +import { MetadataDetails } from '../../../public/pages/metrics/metric_detail/components/metadata_details'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutContent } from '../../../public/pages/metrics/components/layout_content'; +import { LayoutContent } from '../../../public/pages/metrics/metric_detail/components/layout_content'; export const Layout = withTheme(({ metrics, onChangeRangeTime, theme }: LayoutPropsWithTheme) => ( diff --git a/x-pack/plugins/infra/common/inventory_models/pod/toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/pod/toolbar_items.tsx index d48c27efd88fda..c1cd375ff47bf9 100644 --- a/x-pack/plugins/infra/common/inventory_models/pod/toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/pod/toolbar_items.tsx @@ -6,8 +6,8 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../public/components/inventory/toolbars/toolbar'; -import { MetricsAndGroupByToolbarItems } from '../shared/compontents/metrics_and_groupby_toolbar_items'; +import { ToolbarProps } from '../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; +import { MetricsAndGroupByToolbarItems } from '../shared/components/metrics_and_groupby_toolbar_items'; import { SnapshotMetricType } from '../types'; export const PodToolbarItems = (props: ToolbarProps) => { diff --git a/x-pack/plugins/infra/common/inventory_models/shared/compontents/cloud_toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/shared/components/cloud_toolbar_items.tsx similarity index 75% rename from x-pack/plugins/infra/common/inventory_models/shared/compontents/cloud_toolbar_items.tsx rename to x-pack/plugins/infra/common/inventory_models/shared/components/cloud_toolbar_items.tsx index 766a8ae8142f57..da5017b0f3a36f 100644 --- a/x-pack/plugins/infra/common/inventory_models/shared/compontents/cloud_toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/shared/components/cloud_toolbar_items.tsx @@ -7,11 +7,11 @@ import React from 'react'; import { EuiFlexItem } from '@elastic/eui'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../../public/components/inventory/toolbars/toolbar'; +import { ToolbarProps } from '../../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { WaffleAccountsControls } from '../../../../public/components/waffle/waffle_accounts_controls'; +import { WaffleAccountsControls } from '../../../../public/pages/metrics/inventory_view/components/waffle/waffle_accounts_controls'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { WaffleRegionControls } from '../../../../public/components/waffle/waffle_region_controls'; +import { WaffleRegionControls } from '../../../../public/pages/metrics/inventory_view/components/waffle/waffle_region_controls'; type Props = ToolbarProps; diff --git a/x-pack/plugins/infra/common/inventory_models/shared/compontents/metrics_and_groupby_toolbar_items.tsx b/x-pack/plugins/infra/common/inventory_models/shared/components/metrics_and_groupby_toolbar_items.tsx similarity index 81% rename from x-pack/plugins/infra/common/inventory_models/shared/compontents/metrics_and_groupby_toolbar_items.tsx rename to x-pack/plugins/infra/common/inventory_models/shared/components/metrics_and_groupby_toolbar_items.tsx index 738fce45ee99f1..bf37828ed0856f 100644 --- a/x-pack/plugins/infra/common/inventory_models/shared/compontents/metrics_and_groupby_toolbar_items.tsx +++ b/x-pack/plugins/infra/common/inventory_models/shared/components/metrics_and_groupby_toolbar_items.tsx @@ -7,16 +7,16 @@ import React, { useMemo } from 'react'; import { EuiFlexItem } from '@elastic/eui'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../../../public/components/inventory/toolbars/toolbar'; +import { ToolbarProps } from '../../../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { WaffleMetricControls } from '../../../../public/components/waffle/metric_control'; +import { WaffleMetricControls } from '../../../../public/pages/metrics/inventory_view/components/waffle/metric_control'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { WaffleGroupByControls } from '../../../../public/components/waffle/waffle_group_by_controls'; +import { WaffleGroupByControls } from '../../../../public/pages/metrics/inventory_view/components/waffle/waffle_group_by_controls'; import { toGroupByOpt, toMetricOpt, // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../public/components/inventory/toolbars/toolbar_wrapper'; +} from '../../../../public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper'; import { SnapshotMetricType } from '../../types'; interface Props extends ToolbarProps { 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 7a0b898d406ce7..6f2791534c17e8 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 @@ -6,15 +6,15 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../../public/pages/metrics/components/section'; +import { Section } from '../../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { GaugesSectionVis } from '../../../../public/pages/metrics/components/gauges_section_vis'; +import { GaugesSectionVis } from '../../../../public/pages/metrics/metric_detail/components/gauges_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../../observability/public'; diff --git a/x-pack/plugins/infra/common/inventory_models/shared/layouts/nginx.tsx b/x-pack/plugins/infra/common/inventory_models/shared/layouts/nginx.tsx index 79cea5150d498d..cf3a06994cc96c 100644 --- a/x-pack/plugins/infra/common/inventory_models/shared/layouts/nginx.tsx +++ b/x-pack/plugins/infra/common/inventory_models/shared/layouts/nginx.tsx @@ -6,13 +6,13 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { LayoutPropsWithTheme } from '../../../../public/pages/metrics/types'; +import { LayoutPropsWithTheme } from '../../../../public/pages/metrics/metric_detail/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { Section } from '../../../../public/pages/metrics/components/section'; +import { Section } from '../../../../public/pages/metrics/metric_detail/components/section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SubSection } from '../../../../public/pages/metrics/components/sub_section'; +import { SubSection } from '../../../../public/pages/metrics/metric_detail/components/sub_section'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ChartSectionVis } from '../../../../public/pages/metrics/components/chart_section_vis'; +import { ChartSectionVis } from '../../../../public/pages/metrics/metric_detail/components/chart_section_vis'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { withTheme } from '../../../../../observability/public'; diff --git a/x-pack/plugins/infra/common/inventory_models/toolbars.ts b/x-pack/plugins/infra/common/inventory_models/toolbars.ts index 39e9f5a260f7a9..e00cb094d04550 100644 --- a/x-pack/plugins/infra/common/inventory_models/toolbars.ts +++ b/x-pack/plugins/infra/common/inventory_models/toolbars.ts @@ -11,7 +11,7 @@ import { HostToolbarItems } from './host/toolbar_items'; import { ContainerToolbarItems } from './container/toolbar_items'; import { PodToolbarItems } from './pod/toolbar_items'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ToolbarProps } from '../../public/components/inventory/toolbars/toolbar'; +import { ToolbarProps } from '../../public/pages/metrics/inventory_view/components/toolbars/toolbar'; import { AwsEC2ToolbarItems } from './aws_ec2/toolbar_items'; import { AwsS3ToolbarItems } from './aws_s3/toolbar_items'; import { AwsRDSToolbarItems } from './aws_rds/toolbar_items'; diff --git a/x-pack/plugins/infra/common/saved_objects/inventory_view.ts b/x-pack/plugins/infra/common/saved_objects/inventory_view.ts index 8ae765f379add1..8933de57b04485 100644 --- a/x-pack/plugins/infra/common/saved_objects/inventory_view.ts +++ b/x-pack/plugins/infra/common/saved_objects/inventory_view.ts @@ -7,7 +7,7 @@ // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { ElasticsearchMappingOf } from '../../server/utils/typed_elasticsearch_mappings'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { WaffleViewState } from '../../public/pages/inventory_view/hooks/use_waffle_view_state'; +import { WaffleViewState } from '../../public/pages/metrics/inventory_view/hooks/use_waffle_view_state'; export const inventoryViewSavedObjectType = 'inventory-view'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths diff --git a/x-pack/plugins/infra/common/saved_objects/metrics_explorer_view.ts b/x-pack/plugins/infra/common/saved_objects/metrics_explorer_view.ts index a9f11948446408..6eb08eabc15b5d 100644 --- a/x-pack/plugins/infra/common/saved_objects/metrics_explorer_view.ts +++ b/x-pack/plugins/infra/common/saved_objects/metrics_explorer_view.ts @@ -11,7 +11,7 @@ import { MetricsExplorerChartOptions, MetricsExplorerTimeOptions, // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../public/containers/metrics_explorer/use_metrics_explorer_options'; +} from '../../public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { SavedViewSavedObject } from '../../public/hooks/use_saved_view'; diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/alert_flyout.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/alert_flyout.tsx index 914054e1fd9b7e..38709c117c8176 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/alert_flyout.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/alert_flyout.tsx @@ -10,8 +10,8 @@ import { TriggerActionsContext } from '../../../utils/triggers_actions_context'; import { useKibana } from '../../../../../../../src/plugins/kibana_react/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { METRIC_THRESHOLD_ALERT_TYPE_ID } from '../../../../server/lib/alerting/metric_threshold/types'; -import { MetricsExplorerOptions } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerOptions } from '../../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; interface Props { visible?: boolean; 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 0e9da32aaa5093..665da25dcbfffd 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx @@ -35,10 +35,10 @@ import { IErrorObject } from '../../../../../triggers_actions_ui/public/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { AlertsContextValue } from '../../../../../triggers_actions_ui/public/application/context/alerts_context'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetricsExplorerOptions } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; -import { MetricsExplorerKueryBar } from '../../metrics_explorer/kuery_bar'; import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explorer'; -import { MetricsExplorerGroupBy } from '../../metrics_explorer/group_by'; +import { MetricsExplorerKueryBar } from '../../../pages/metrics/metrics_explorer/components/kuery_bar'; +import { MetricsExplorerOptions } from '../../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; +import { MetricsExplorerGroupBy } from '../../../pages/metrics/metrics_explorer/components/group_by'; import { useSourceViaHttp } from '../../../containers/source/use_source_via_http'; interface AlertContextMeta { 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 deleted file mode 100644 index f793afee1b948b..00000000000000 --- a/x-pack/plugins/infra/public/components/waffle/lib/type_guards.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 { InfraWaffleMapGradientLegend, InfraWaffleMapStepLegend } from '../../../lib/lib'; - -export function isInfraWaffleMapStepLegend(subject: any): subject is InfraWaffleMapStepLegend { - return subject.type && subject.type === 'step'; -} - -export function isInfraWaffleMapGradientLegend( - subject: any -): subject is InfraWaffleMapGradientLegend { - return subject.type && subject.type === 'gradient'; -} diff --git a/x-pack/plugins/infra/public/containers/metrics_explorer/with_metrics_explorer_options_url_state.tsx b/x-pack/plugins/infra/public/containers/metrics_explorer/with_metrics_explorer_options_url_state.tsx index d2fa49e8d5d9fc..04f518aa9080fe 100644 --- a/x-pack/plugins/infra/public/containers/metrics_explorer/with_metrics_explorer_options_url_state.tsx +++ b/x-pack/plugins/infra/public/containers/metrics_explorer/with_metrics_explorer_options_url_state.tsx @@ -17,7 +17,7 @@ import { MetricsExplorerYAxisMode, MetricsExplorerChartType, MetricsExplorerChartOptions, -} from './use_metrics_explorer_options'; +} from '../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; interface MetricsExplorerUrlState { timerange?: MetricsExplorerTimeOptions; diff --git a/x-pack/plugins/infra/public/containers/with_options.tsx b/x-pack/plugins/infra/public/containers/with_options.tsx deleted file mode 100644 index e18fc85a68d60b..00000000000000 --- a/x-pack/plugins/infra/public/containers/with_options.tsx +++ /dev/null @@ -1,64 +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 moment from 'moment'; -import React from 'react'; - -import { euiPaletteColorBlind } from '@elastic/eui'; -import { InfraFormatterType, InfraOptions } from '../lib/lib'; -import { RendererFunction } from '../utils/typed_react'; - -const euiVisColorPalette = euiPaletteColorBlind(); - -const initialState = { - options: { - timerange: { - interval: '1m', - to: moment.utc().valueOf(), - from: moment - .utc() - .subtract(1, 'h') - .valueOf(), - }, - wafflemap: { - formatter: InfraFormatterType.percent, - formatTemplate: '{{value}}', - metric: { type: 'cpu' }, - groupBy: [], - legend: { - type: 'gradient', - rules: [ - { - value: 0, - color: '#D3DAE6', - }, - { - value: 1, - color: euiVisColorPalette[1], - }, - ], - }, - }, - } as InfraOptions, -}; - -interface WithOptionsProps { - children: RendererFunction; -} - -type State = Readonly; - -export const withOptions = (WrappedComponent: React.ComponentType) => ( - {args => } -); - -export class WithOptions extends React.Component { - public readonly state: State = initialState; - - public render() { - return this.props.children(this.state.options); - } -} diff --git a/x-pack/plugins/infra/public/pages/infrastructure/index.tsx b/x-pack/plugins/infra/public/pages/infrastructure/index.tsx deleted file mode 100644 index d592ae3480fc95..00000000000000 --- a/x-pack/plugins/infra/public/pages/infrastructure/index.tsx +++ /dev/null @@ -1,135 +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 { i18n } from '@kbn/i18n'; - -import React from 'react'; -import { Route, RouteComponentProps, Switch } from 'react-router-dom'; - -import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; -import { DocumentTitle } from '../../components/document_title'; -import { HelpCenterContent } from '../../components/help_center_content'; -import { RoutedTabs } from '../../components/navigation/routed_tabs'; -import { ColumnarPage } from '../../components/page'; -import { Header } from '../../components/header'; -import { MetricsExplorerOptionsContainer } from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { WithMetricsExplorerOptionsUrlState } from '../../containers/metrics_explorer/with_metrics_explorer_options_url_state'; -import { WithSource } from '../../containers/with_source'; -import { Source } from '../../containers/source'; -import { MetricsExplorerPage } from './metrics_explorer'; -import { SnapshotPage } from './snapshot'; -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) => { - const uiCapabilities = useKibana().services.application?.capabilities; - - return ( - - - - - - - - - -
- - - - - - - - - - - - - - ( - - {({ configuration, createDerivedIndexPattern }) => ( - - - {configuration ? ( - - ) : ( - - )} - - )} - - )} - /> - - - - - - - - ); -}; 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 b1dab3bd3f6737..3ad242c77412db 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/hooks/use_metrics_time'; +import { replaceMetricTimeInQueryString } from '../metrics/metric_detail/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 72a41f5264244f..3d25e4c6c258d3 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/hooks/use_metrics_time'; +import { replaceMetricTimeInQueryString } from '../metrics/metric_detail/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/index.tsx b/x-pack/plugins/infra/public/pages/metrics/index.tsx index 531be40d2dc43b..cc88dd9e0d0f8f 100644 --- a/x-pack/plugins/infra/public/pages/metrics/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/index.tsx @@ -3,138 +3,133 @@ * 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 React, { useContext, useState } from 'react'; -import { euiStyled, EuiTheme, withTheme } from '../../../../observability/public'; + +import React from 'react'; +import { Route, RouteComponentProps, Switch } from 'react-router-dom'; + +import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { DocumentTitle } from '../../components/document_title'; +import { HelpCenterContent } from '../../components/help_center_content'; +import { RoutedTabs } from '../../components/navigation/routed_tabs'; +import { ColumnarPage } from '../../components/page'; import { Header } from '../../components/header'; -import { ColumnarPage, PageContent } from '../../components/page'; -import { withMetricPageProviders } from './page_providers'; -import { useMetadata } from '../../containers/metadata/use_metadata'; +import { MetricsExplorerOptionsContainer } from './metrics_explorer/hooks/use_metrics_explorer_options'; +import { WithMetricsExplorerOptionsUrlState } from '../../containers/metrics_explorer/with_metrics_explorer_options_url_state'; +import { WithSource } from '../../containers/with_source'; import { Source } from '../../containers/source'; -import { InfraLoadingPanel } from '../../components/loading'; -import { findInventoryModel } from '../../../common/inventory_models'; -import { NavItem } from './lib/side_nav_context'; -import { NodeDetailsPage } from './components/node_details_page'; +import { MetricsExplorerPage } from './metrics_explorer'; +import { SnapshotPage } from './inventory_view'; +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 { InventoryItemType } from '../../../common/inventory_models/types'; -import { useMetricsTimeContext } from './hooks/use_metrics_time'; -import { useLinkProps } from '../../hooks/use_link_props'; - -const DetailPageContent = euiStyled(PageContent)` - overflow: auto; - background-color: ${props => props.theme.eui.euiColorLightestShade}; -`; - -interface Props { - theme: EuiTheme; - match: { - params: { - type: string; - node: string; - }; - }; -} - -export const MetricDetail = withMetricPageProviders( - 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, parsedTimeRange); - - const [sideNav, setSideNav] = useState([]); +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'; - const addNavItem = React.useCallback( - (item: NavItem) => { - if (!sideNav.some(n => n.id === item.id)) { - setSideNav([item, ...sideNav]); - } - }, - [sideNav] - ); +export const InfrastructurePage = ({ match }: RouteComponentProps) => { + const uiCapabilities = useKibana().services.application?.capabilities; - const metricsLinkProps = useLinkProps({ - app: 'metrics', - pathname: '/', - }); + return ( + + + + + + - const breadcrumbs = [ - { - ...metricsLinkProps, - text: i18n.translate('xpack.infra.header.infrastructureTitle', { - defaultMessage: 'Metrics', - }), - }, - { text: name }, - ]; + - if (metadataLoading && !filteredRequiredMetrics.length) { - return ( - - ); - } +
+ + + + + + + + + + - return ( - -
- - - {metadata ? ( - - ) : null} - - - ); - }) -); + + + ( + + {({ configuration, createDerivedIndexPattern }) => ( + + + {configuration ? ( + + ) : ( + + )} + + )} + + )} + /> + + + + + + + + ); +}; diff --git a/x-pack/plugins/infra/public/components/inventory/layout.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/layout.tsx similarity index 78% rename from x-pack/plugins/infra/public/components/inventory/layout.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/layout.tsx index 3c91f9fa5946fc..bc8be9862fe636 100644 --- a/x-pack/plugins/infra/public/components/inventory/layout.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/layout.tsx @@ -8,16 +8,16 @@ import React from 'react'; import { useInterval } from 'react-use'; import { euiPaletteColorBlind } from '@elastic/eui'; -import { NodesOverview } from '../nodes_overview'; +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 { 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'; +import { PageContent } from '../../../../components/page'; +import { useSnapshot } from '../hooks/use_snaphot'; +import { useInventoryMeta } from '../hooks/use_inventory_meta'; +import { useWaffleTimeContext } from '../hooks/use_waffle_time'; +import { useWaffleFiltersContext } from '../hooks/use_waffle_filters'; +import { useWaffleOptionsContext } from '../hooks/use_waffle_options'; +import { useSourceContext } from '../../../../containers/source'; +import { InfraFormatterType, InfraWaffleMapGradientLegend } from '../../../../lib/lib'; const euiVisColorPalette = euiPaletteColorBlind(); diff --git a/x-pack/plugins/infra/public/components/nodes_overview/index.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx similarity index 88% rename from x-pack/plugins/infra/public/components/nodes_overview/index.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx index ef22e0486f8921..afbfd2a079253d 100644 --- a/x-pack/plugins/infra/public/components/nodes_overview/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/nodes_overview.tsx @@ -10,18 +10,25 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { get, max, min } from 'lodash'; import React from 'react'; -import { euiStyled } from '../../../../observability/public'; -import { InfraFormatterType, InfraWaffleMapBounds, InfraWaffleMapOptions } from '../../lib/lib'; -import { createFormatter } from '../../utils/formatters'; -import { NoData } from '../empty_states'; -import { InfraLoadingPanel } from '../loading'; -import { Map } from '../waffle/map'; -import { ViewSwitcher } from '../waffle/view_switcher'; -import { TableView } from './table'; -import { SnapshotNode, SnapshotCustomMetricInputRT } from '../../../common/http_api/snapshot_api'; -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'; +import { euiStyled } from '../../../../../../observability/public'; +import { + InfraFormatterType, + InfraWaffleMapBounds, + InfraWaffleMapOptions, +} from '../../../../lib/lib'; +import { createFormatter } from '../../../../utils/formatters'; +import { NoData } from '../../../../components/empty_states'; +import { InfraLoadingPanel } from '../../../../components/loading'; +import { Map } from './waffle/map'; +import { ViewSwitcher } from './waffle/view_switcher'; +import { TableView } from './table_view'; +import { + SnapshotNode, + SnapshotCustomMetricInputRT, +} from '../../../../../common/http_api/snapshot_api'; +import { convertIntervalToString } from '../../../../utils/convert_interval_to_string'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; +import { createFormatterForMetric } from '../../metrics_explorer/components/helpers/create_formatter_for_metric'; export interface KueryFilterQuery { kind: 'kuery'; diff --git a/x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/search_bar.tsx similarity index 86% rename from x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/search_bar.tsx index f4fde46d434f83..1f84ef3685f342 100644 --- a/x-pack/plugins/infra/public/pages/inventory_view/compontents/search_bar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/search_bar.tsx @@ -5,9 +5,9 @@ */ 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 { 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 = () => { diff --git a/x-pack/plugins/infra/public/components/nodes_overview/table.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/table_view.tsx similarity index 92% rename from x-pack/plugins/infra/public/components/nodes_overview/table.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/table_view.tsx index 82991076255eef..0557343e735f91 100644 --- a/x-pack/plugins/infra/public/components/nodes_overview/table.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/table_view.tsx @@ -9,13 +9,13 @@ import { i18n } from '@kbn/i18n'; import { last } from 'lodash'; import React, { useState, useCallback, useEffect } from 'react'; -import { createWaffleMapNode } from '../../containers/waffle/nodes_to_wafflemap'; -import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../lib/lib'; -import { fieldToName } from '../waffle/lib/field_to_display_name'; -import { NodeContextMenu } from '../waffle/node_context_menu'; -import { InventoryItemType } from '../../../common/inventory_models/types'; -import { SnapshotNode, SnapshotNodePath } from '../../../common/http_api/snapshot_api'; -import { CONTAINER_CLASSNAME } from '../../apps/start_app'; +import { createWaffleMapNode } from '../lib/nodes_to_wafflemap'; +import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../../lib/lib'; +import { fieldToName } from '../lib/field_to_display_name'; +import { NodeContextMenu } from './waffle/node_context_menu'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; +import { SnapshotNode, SnapshotNodePath } from '../../../../../common/http_api/snapshot_api'; +import { CONTAINER_CLASSNAME } from '../../../../apps/start_app'; interface Props { nodes: SnapshotNode[]; diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/save_views.tsx similarity index 68% rename from x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/save_views.tsx index cb315d3e17b032..eb40ea595662a2 100644 --- a/x-pack/plugins/infra/public/components/inventory/toolbars/save_views.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/save_views.tsx @@ -4,9 +4,9 @@ * 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'; +import { SavedViewsToolbarControls } from '../../../../../components/saved_views/toolbar_control'; +import { inventoryViewSavedObjectType } from '../../../../../../common/saved_objects/inventory_view'; +import { useWaffleViewState } from '../../hooks/use_waffle_view_state'; export const SavedViews = () => { const { viewState, defaultViewState, onViewChange } = useWaffleViewState(); diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar.tsx similarity index 77% rename from x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar.tsx index 63ab6d2f4465a4..3ac9c2c1896286 100644 --- a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar.tsx @@ -10,15 +10,15 @@ import { SnapshotMetricInput, SnapshotGroupBy, SnapshotCustomMetricInput, -} from '../../../../common/http_api/snapshot_api'; -import { InventoryCloudAccount } from '../../../../common/http_api/inventory_meta_api'; -import { findToolbar } from '../../../../common/inventory_models/toolbars'; +} from '../../../../../../common/http_api/snapshot_api'; +import { InventoryCloudAccount } from '../../../../../../common/http_api/inventory_meta_api'; +import { findToolbar } from '../../../../../../common/inventory_models/toolbars'; import { ToolbarWrapper } from './toolbar_wrapper'; -import { InfraGroupByOptions } from '../../../lib/lib'; -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 { InfraGroupByOptions } from '../../../../../lib/lib'; +import { IIndexPattern } from '../../../../../../../../../src/plugins/data/public'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; +import { WaffleOptionsState } from '../../hooks/use_waffle_options'; import { SavedViews } from './save_views'; export interface ToolbarProps diff --git a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx index fefda94372cfb4..86cc0d8ee62e00 100644 --- a/x-pack/plugins/infra/public/components/inventory/toolbars/toolbar_wrapper.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx @@ -7,12 +7,12 @@ import React from 'react'; import { EuiFlexGroup } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { SnapshotMetricType } from '../../../../common/inventory_models/types'; -import { Toolbar } from '../../eui/toolbar'; +import { SnapshotMetricType } from '../../../../../../common/inventory_models/types'; +import { Toolbar } from '../../../../../components/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'; +import { fieldToName } from '../../lib/field_to_display_name'; +import { useSourceContext } from '../../../../../containers/source'; +import { useWaffleOptionsContext } from '../../hooks/use_waffle_options'; interface Props { children: (props: Omit) => React.ReactElement; diff --git a/x-pack/plugins/infra/public/components/waffle/conditional_tooltip.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/conditional_tooltip.tsx similarity index 100% rename from x-pack/plugins/infra/public/components/waffle/conditional_tooltip.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/conditional_tooltip.tsx diff --git a/x-pack/plugins/infra/public/components/waffle/custom_field_panel.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/waffle/custom_field_panel.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx index d2dc535f6d6b32..090d53f1ff7379 100644 --- a/x-pack/plugins/infra/public/components/waffle/custom_field_panel.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx @@ -8,7 +8,7 @@ import { EuiButton, EuiComboBox, EuiForm, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; import { IFieldType } from 'src/plugins/data/public'; -import { InfraGroupByOptions } from '../../lib/lib'; +import { InfraGroupByOptions } from '../../../../../lib/lib'; interface Props { onSubmit: (field: string) => void; diff --git a/x-pack/plugins/infra/public/components/waffle/gradient_legend.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/gradient_legend.tsx similarity index 96% rename from x-pack/plugins/infra/public/components/waffle/gradient_legend.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/gradient_legend.tsx index 6b0c4bb41dc980..87f7e4cbff11e6 100644 --- a/x-pack/plugins/infra/public/components/waffle/gradient_legend.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/gradient_legend.tsx @@ -6,13 +6,13 @@ import React from 'react'; -import { euiStyled } from '../../../../observability/public'; +import { euiStyled } from '../../../../../../../observability/public'; import { InfraFormatter, InfraWaffleMapBounds, InfraWaffleMapGradientLegend, InfraWaffleMapGradientRule, -} from '../../lib/lib'; +} from '../../../../../lib/lib'; interface Props { legend: InfraWaffleMapGradientLegend; diff --git a/x-pack/plugins/infra/public/components/waffle/group_name.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_name.tsx similarity index 96% rename from x-pack/plugins/infra/public/components/waffle/group_name.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_name.tsx index 01bd3600a1624e..308460203b132e 100644 --- a/x-pack/plugins/infra/public/components/waffle/group_name.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_name.tsx @@ -6,8 +6,8 @@ import { EuiLink, EuiToolTip } from '@elastic/eui'; import React from 'react'; -import { euiStyled } from '../../../../observability/public'; -import { InfraWaffleMapGroup, InfraWaffleMapOptions } from '../../lib/lib'; +import { euiStyled } from '../../../../../../../observability/public'; +import { InfraWaffleMapGroup, InfraWaffleMapOptions } from '../../../../../lib/lib'; interface Props { onDrilldown: (filter: string) => void; diff --git a/x-pack/plugins/infra/public/components/waffle/group_of_groups.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_groups.tsx similarity index 90% rename from x-pack/plugins/infra/public/components/waffle/group_of_groups.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_groups.tsx index 9634293587d49b..6b3f22007f580c 100644 --- a/x-pack/plugins/infra/public/components/waffle/group_of_groups.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_groups.tsx @@ -6,15 +6,15 @@ import React from 'react'; -import { euiStyled } from '../../../../observability/public'; +import { euiStyled } from '../../../../../../../observability/public'; import { InfraWaffleMapBounds, InfraWaffleMapGroupOfGroups, InfraWaffleMapOptions, -} from '../../lib/lib'; +} from '../../../../../lib/lib'; import { GroupName } from './group_name'; import { GroupOfNodes } from './group_of_nodes'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; interface Props { onDrilldown: (filter: string) => void; diff --git a/x-pack/plugins/infra/public/components/waffle/group_of_nodes.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_nodes.tsx similarity index 90% rename from x-pack/plugins/infra/public/components/waffle/group_of_nodes.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_nodes.tsx index 6b82671617df7a..fc438ed4ca0a2e 100644 --- a/x-pack/plugins/infra/public/components/waffle/group_of_nodes.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/group_of_nodes.tsx @@ -6,15 +6,15 @@ import React from 'react'; -import { euiStyled } from '../../../../observability/public'; +import { euiStyled } from '../../../../../../../observability/public'; import { InfraWaffleMapBounds, InfraWaffleMapGroupOfNodes, InfraWaffleMapOptions, -} from '../../lib/lib'; +} from '../../../../../lib/lib'; import { GroupName } from './group_name'; import { Node } from './node'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; interface Props { onDrilldown: (filter: string) => void; diff --git a/x-pack/plugins/infra/public/components/waffle/legend.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend.tsx similarity index 88% rename from x-pack/plugins/infra/public/components/waffle/legend.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend.tsx index 13e533b225d4df..ccb4cc71924f42 100644 --- a/x-pack/plugins/infra/public/components/waffle/legend.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend.tsx @@ -5,13 +5,13 @@ */ import React from 'react'; -import { euiStyled } from '../../../../observability/public'; -import { InfraFormatter, InfraWaffleMapBounds, InfraWaffleMapLegend } from '../../lib/lib'; +import { euiStyled } from '../../../../../../../observability/public'; +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 { isInfraWaffleMapGradientLegend, isInfraWaffleMapStepLegend } from '../../lib/type_guards'; import { StepLegend } from './steps_legend'; -import { useWaffleOptionsContext } from '../../pages/inventory_view/hooks/use_waffle_options'; +import { useWaffleOptionsContext } from '../../hooks/use_waffle_options'; interface Props { legend: InfraWaffleMapLegend; bounds: InfraWaffleMapBounds; diff --git a/x-pack/plugins/infra/public/components/waffle/legend_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend_controls.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/waffle/legend_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend_controls.tsx index 26b5b1c0af727d..6ec21ad2e1b49b 100644 --- a/x-pack/plugins/infra/public/components/waffle/legend_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/legend_controls.tsx @@ -23,8 +23,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import React, { SyntheticEvent, useState } from 'react'; -import { euiStyled } from '../../../../observability/public'; -import { InfraWaffleMapBounds } from '../../lib/lib'; +import { euiStyled } from '../../../../../../../observability/public'; +import { InfraWaffleMapBounds } from '../../../../../lib/lib'; interface Props { onChange: (options: { auto: boolean; bounds: InfraWaffleMapBounds }) => void; diff --git a/x-pack/plugins/infra/public/components/waffle/map.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/map.tsx similarity index 84% rename from x-pack/plugins/infra/public/components/waffle/map.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/map.tsx index 7cab2307dacfa1..e34c63d332fd87 100644 --- a/x-pack/plugins/infra/public/components/waffle/map.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/map.tsx @@ -5,20 +5,17 @@ */ import React from 'react'; -import { euiStyled } from '../../../../observability/public'; -import { nodesToWaffleMap } from '../../containers/waffle/nodes_to_wafflemap'; -import { - isWaffleMapGroupWithGroups, - isWaffleMapGroupWithNodes, -} from '../../containers/waffle/type_guards'; -import { InfraWaffleMapBounds, InfraWaffleMapOptions } from '../../lib/lib'; -import { AutoSizer } from '../auto_sizer'; +import { euiStyled } from '../../../../../../../observability/public'; +import { nodesToWaffleMap } from '../../lib/nodes_to_wafflemap'; +import { isWaffleMapGroupWithGroups, isWaffleMapGroupWithNodes } from '../../lib/type_guards'; +import { InfraWaffleMapBounds, InfraWaffleMapOptions } from '../../../../../lib/lib'; +import { AutoSizer } from '../../../../../components/auto_sizer'; import { GroupOfGroups } from './group_of_groups'; import { GroupOfNodes } from './group_of_nodes'; import { Legend } from './legend'; -import { applyWaffleMapLayout } from './lib/apply_wafflemap_layout'; -import { SnapshotNode } from '../../../common/http_api/snapshot_api'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { applyWaffleMapLayout } from '../../lib/apply_wafflemap_layout'; +import { SnapshotNode } from '../../../../../../common/http_api/snapshot_api'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; interface Props { nodes: SnapshotNode[]; diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/custom_metric_form.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/waffle/metric_control/custom_metric_form.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx index 26e42061ed10bd..aec624c0aff1f5 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/custom_metric_form.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx @@ -26,8 +26,11 @@ import { SnapshotCustomMetricInput, SNAPSHOT_CUSTOM_AGGREGATIONS, SnapshotCustomAggregationRT, -} from '../../../../common/http_api/snapshot_api'; -import { EuiTheme, withTheme } from '../../../../../../legacy/common/eui_styled_components'; +} from '../../../../../../../common/http_api/snapshot_api'; +import { + EuiTheme, + withTheme, +} from '../../../../../../../../../legacy/common/eui_styled_components'; interface SelectedOption { label: string; diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/get_custom_metric_label.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/get_custom_metric_label.ts similarity index 91% rename from x-pack/plugins/infra/public/components/waffle/metric_control/get_custom_metric_label.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/get_custom_metric_label.ts index 4f88c1b29c1f25..495cc8197d2e78 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/get_custom_metric_label.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/get_custom_metric_label.ts @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { SnapshotCustomMetricInput } from '../../../../common/http_api/snapshot_api'; +import { SnapshotCustomMetricInput } from '../../../../../../../common/http_api/snapshot_api'; export const getCustomMetricLabel = (metric: SnapshotCustomMetricInput) => { const METRIC_LABELS = { diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/index.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/waffle/metric_control/index.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx index 0f2034fe9cb258..08d5b3e9e06706 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx @@ -13,14 +13,14 @@ import { SnapshotMetricInput, SnapshotCustomMetricInput, SnapshotCustomMetricInputRT, -} from '../../../../common/http_api/snapshot_api'; +} from '../../../../../../../common/http_api/snapshot_api'; import { CustomMetricForm } from './custom_metric_form'; import { getCustomMetricLabel } from './get_custom_metric_label'; import { MetricsContextMenu } from './metrics_context_menu'; import { ModeSwitcher } from './mode_switcher'; import { MetricsEditMode } from './metrics_edit_mode'; import { CustomMetricMode } from './types'; -import { SnapshotMetricType } from '../../../../common/inventory_models/types'; +import { SnapshotMetricType } from '../../../../../../../common/inventory_models/types'; interface Props { options: Array<{ text: string; value: string }>; diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/metrics_context_menu.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_context_menu.tsx similarity index 94% rename from x-pack/plugins/infra/public/components/waffle/metric_control/metrics_context_menu.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_context_menu.tsx index 1aacf54244c375..1cdef493aee4f2 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/metrics_context_menu.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_context_menu.tsx @@ -9,11 +9,11 @@ import { SnapshotMetricInput, SnapshotCustomMetricInput, SnapshotCustomMetricInputRT, -} from '../../../../common/http_api/snapshot_api'; +} from '../../../../../../../common/http_api/snapshot_api'; import { SnapshotMetricTypeRT, SnapshotMetricType, -} from '../../../../common/inventory_models/types'; +} from '../../../../../../../common/inventory_models/types'; import { getCustomMetricLabel } from './get_custom_metric_label'; interface Props { diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/metrics_edit_mode.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_edit_mode.tsx similarity index 92% rename from x-pack/plugins/infra/public/components/waffle/metric_control/metrics_edit_mode.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_edit_mode.tsx index ba1f46815db20c..4d1bc906de0b92 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/metrics_edit_mode.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/metrics_edit_mode.tsx @@ -6,9 +6,12 @@ import React from 'react'; import { EuiFlexItem, EuiFlexGroup, EuiButtonIcon } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { SnapshotCustomMetricInput } from '../../../../common/http_api/snapshot_api'; +import { SnapshotCustomMetricInput } from '../../../../../../../common/http_api/snapshot_api'; import { getCustomMetricLabel } from './get_custom_metric_label'; -import { EuiTheme, withTheme } from '../../../../../../legacy/common/eui_styled_components'; +import { + EuiTheme, + withTheme, +} from '../../../../../../../../../legacy/common/eui_styled_components'; interface Props { theme: EuiTheme; diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/mode_switcher.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/mode_switcher.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/waffle/metric_control/mode_switcher.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/mode_switcher.tsx index 43bb904594c68f..acb740f1750c8d 100644 --- a/x-pack/plugins/infra/public/components/waffle/metric_control/mode_switcher.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/mode_switcher.tsx @@ -8,8 +8,11 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { CustomMetricMode } from './types'; -import { SnapshotCustomMetricInput } from '../../../../common/http_api/snapshot_api'; -import { EuiTheme, withTheme } from '../../../../../../legacy/common/eui_styled_components'; +import { SnapshotCustomMetricInput } from '../../../../../../../common/http_api/snapshot_api'; +import { + EuiTheme, + withTheme, +} from '../../../../../../../../../legacy/common/eui_styled_components'; interface Props { theme: EuiTheme; diff --git a/x-pack/plugins/infra/public/components/waffle/metric_control/types.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/types.ts similarity index 100% rename from x-pack/plugins/infra/public/components/waffle/metric_control/types.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/types.ts diff --git a/x-pack/plugins/infra/public/components/waffle/node.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node.tsx similarity index 93% rename from x-pack/plugins/infra/public/components/waffle/node.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node.tsx index 4eb5ccb8c1b4d9..fd5b5b01f329fa 100644 --- a/x-pack/plugins/infra/public/components/waffle/node.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node.tsx @@ -10,11 +10,15 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { ConditionalToolTip } from './conditional_tooltip'; -import { euiStyled } from '../../../../observability/public'; -import { InfraWaffleMapBounds, InfraWaffleMapNode, InfraWaffleMapOptions } from '../../lib/lib'; -import { colorFromValue } from './lib/color_from_value'; +import { euiStyled } from '../../../../../../../observability/public'; +import { + InfraWaffleMapBounds, + InfraWaffleMapNode, + InfraWaffleMapOptions, +} from '../../../../../lib/lib'; +import { colorFromValue } from '../../lib/color_from_value'; import { NodeContextMenu } from './node_context_menu'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; const initialState = { isPopoverOpen: false, diff --git a/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx similarity index 91% rename from x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx index 5f05cebd8f616a..275635a33ec266 100644 --- a/x-pack/plugins/infra/public/components/waffle/node_context_menu.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx @@ -9,12 +9,13 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import React, { useMemo, useState } from 'react'; -import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../lib/lib'; -import { getNodeDetailUrl, getNodeLogsUrl } from '../../pages/link_to'; -import { createUptimeLink } from './lib/create_uptime_link'; -import { findInventoryModel, findInventoryFields } from '../../../common/inventory_models'; -import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +import { AlertFlyout } from '../../../../../components/alerting/metrics/alert_flyout'; +import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../../../lib/lib'; +import { getNodeDetailUrl, getNodeLogsUrl } from '../../../../link_to'; +import { createUptimeLink } from '../../lib/create_uptime_link'; +import { findInventoryModel, findInventoryFields } from '../../../../../../common/inventory_models'; +import { useKibana } from '../../../../../../../../../src/plugins/kibana_react/public'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; import { Section, SectionLinkProps, @@ -23,9 +24,8 @@ import { SectionSubtitle, SectionLinks, SectionLink, -} from '../../../../observability/public'; -import { useLinkProps } from '../../hooks/use_link_props'; -import { AlertFlyout } from '../alerting/metrics/alert_flyout'; +} from '../../../../../../../observability/public'; +import { useLinkProps } from '../../../../../hooks/use_link_props'; interface Props { options: InfraWaffleMapOptions; diff --git a/x-pack/plugins/infra/public/components/waffle/steps_legend.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/steps_legend.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/waffle/steps_legend.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/steps_legend.tsx index d2079d53dad71b..1ef0f2d0c42889 100644 --- a/x-pack/plugins/infra/public/components/waffle/steps_legend.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/steps_legend.tsx @@ -7,13 +7,13 @@ import { darken } from 'polished'; import React from 'react'; -import { euiStyled } from '../../../../observability/public'; +import { euiStyled } from '../../../../../../../observability/public'; import { InfraFormatter, InfraWaffleMapRuleOperator, InfraWaffleMapStepLegend, InfraWaffleMapStepRule, -} from '../../lib/lib'; +} from '../../../../../lib/lib'; const OPERATORS = { [InfraWaffleMapRuleOperator.gte]: '>=', diff --git a/x-pack/plugins/infra/public/components/waffle/view_switcher.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/view_switcher.tsx similarity index 100% rename from x-pack/plugins/infra/public/components/waffle/view_switcher.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/view_switcher.tsx diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_accounts_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_accounts_controls.tsx similarity index 94% rename from x-pack/plugins/infra/public/components/waffle/waffle_accounts_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_accounts_controls.tsx index 56c3a205b05d48..a8b0cf21bce85e 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_accounts_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_accounts_controls.tsx @@ -14,7 +14,7 @@ import { import React, { useCallback, useState, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { InventoryCloudAccount } from '../../../common/http_api/inventory_meta_api'; +import { InventoryCloudAccount } from '../../../../../../common/http_api/inventory_meta_api'; interface Props { accountId: string; @@ -24,7 +24,7 @@ interface Props { export const WaffleAccountsControls = (props: Props) => { const { accountId, options } = props; - const [isOpen, setIsOpen] = useState(); + const [isOpen, setIsOpen] = useState(false); const showPopover = useCallback(() => { setIsOpen(true); diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_group_by_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_group_by_controls.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/waffle/waffle_group_by_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_group_by_controls.tsx index 1a3cef591bc077..bc763d2cf93785 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_group_by_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_group_by_controls.tsx @@ -17,11 +17,11 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import React from 'react'; import { IFieldType } from 'src/plugins/data/public'; -import { InfraGroupByOptions } from '../../lib/lib'; +import { InfraGroupByOptions } from '../../../../../lib/lib'; import { CustomFieldPanel } from './custom_field_panel'; -import { euiStyled } from '../../../../observability/public'; -import { InventoryItemType } from '../../../common/inventory_models/types'; -import { SnapshotGroupBy } from '../../../common/http_api/snapshot_api'; +import { euiStyled } from '../../../../../../../observability/public'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; +import { SnapshotGroupBy } from '../../../../../../common/http_api/snapshot_api'; interface Props { options: Array<{ text: string; field: string; toolTipContent?: string }>; diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx similarity index 94% rename from x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx index 21da10a0a76502..23e06823f407f4 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_inventory_switcher.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx @@ -14,9 +14,9 @@ import { 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 { useWaffleOptionsContext } from '../../pages/inventory_view/hooks/use_waffle_options'; +import { findInventoryModel } from '../../../../../../common/inventory_models'; +import { InventoryItemType } from '../../../../../../common/inventory_models/types'; +import { useWaffleOptionsContext } from '../../hooks/use_waffle_options'; const getDisplayNameForType = (type: InventoryItemType) => { const inventoryModel = findInventoryModel(type); diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_region_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_region_controls.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/waffle/waffle_region_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_region_controls.tsx index 52377bf4b8296e..671e44f42ef6a5 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_region_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_region_controls.tsx @@ -23,7 +23,7 @@ interface Props { export const WaffleRegionControls = (props: Props) => { const { region, options } = props; - const [isOpen, setIsOpen] = useState(); + const [isOpen, setIsOpen] = useState(false); const showPopover = useCallback(() => { setIsOpen(true); diff --git a/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_time_controls.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_time_controls.tsx index 458bb674afadef..7f190f21484d93 100644 --- a/x-pack/plugins/infra/public/components/waffle/waffle_time_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/waffle_time_controls.tsx @@ -8,7 +8,7 @@ import { EuiButtonEmpty, EuiDatePicker, EuiFormControlLayout } from '@elastic/eu import { FormattedMessage } from '@kbn/i18n/react'; import moment, { Moment } from 'moment'; import React, { useCallback } from 'react'; -import { useWaffleTimeContext } from '../../pages/inventory_view/hooks/use_waffle_time'; +import { useWaffleTimeContext } from '../../hooks/use_waffle_time'; export const WaffleTimeControls = () => { const { diff --git a/x-pack/plugins/infra/public/containers/inventory_metadata/use_inventory_meta.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_inventory_meta.ts similarity index 79% rename from x-pack/plugins/infra/public/containers/inventory_metadata/use_inventory_meta.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_inventory_meta.ts index 0ed1f3e35449b4..b038491690a137 100644 --- a/x-pack/plugins/infra/public/containers/inventory_metadata/use_inventory_meta.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_inventory_meta.ts @@ -7,13 +7,13 @@ import { fold } from 'fp-ts/lib/Either'; import { identity } from 'fp-ts/lib/function'; import { pipe } from 'fp-ts/lib/pipeable'; import { useEffect } from 'react'; -import { throwErrors, createPlainError } from '../../../common/runtime_types'; -import { useHTTPRequest } from '../../hooks/use_http_request'; +import { throwErrors, createPlainError } from '../../../../../common/runtime_types'; +import { useHTTPRequest } from '../../../../hooks/use_http_request'; import { InventoryMetaResponseRT, InventoryMetaResponse, -} from '../../../common/http_api/inventory_meta_api'; -import { InventoryItemType } from '../../../common/inventory_models/types'; +} from '../../../../../common/http_api/inventory_meta_api'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; export function useInventoryMeta(sourceId: string, nodeType: InventoryItemType) { const decodeResponse = (response: any) => { diff --git a/x-pack/plugins/infra/public/containers/waffle/use_snaphot.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_snaphot.ts similarity index 83% rename from x-pack/plugins/infra/public/containers/waffle/use_snaphot.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_snaphot.ts index 31f02f46caedac..3ec63d7b2de286 100644 --- a/x-pack/plugins/infra/public/containers/waffle/use_snaphot.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_snaphot.ts @@ -8,14 +8,17 @@ import { useEffect } from 'react'; import { fold } from 'fp-ts/lib/Either'; import { identity } from 'fp-ts/lib/function'; import { pipe } from 'fp-ts/lib/pipeable'; -import { throwErrors, createPlainError } from '../../../common/runtime_types'; -import { useHTTPRequest } from '../../hooks/use_http_request'; +import { throwErrors, createPlainError } from '../../../../../common/runtime_types'; +import { useHTTPRequest } from '../../../../hooks/use_http_request'; import { SnapshotNodeResponseRT, SnapshotNodeResponse, SnapshotGroupBy, -} from '../../../common/http_api/snapshot_api'; -import { InventoryItemType, SnapshotMetricType } from '../../../common/inventory_models/types'; +} from '../../../../../common/http_api/snapshot_api'; +import { + InventoryItemType, + SnapshotMetricType, +} from '../../../../../common/inventory_models/types'; export function useSnapshot( filterQuery: string | null | undefined, diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts similarity index 90% rename from x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts index 02c079dcaddc40..f6cbb59779039a 100644 --- a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_filters.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts @@ -10,10 +10,10 @@ 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'; +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 { diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_options.ts similarity index 95% rename from x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_options.ts index 2853917d5f6838..32bfe6e085b4e4 100644 --- a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_options.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_options.ts @@ -17,9 +17,9 @@ import { SnapshotMetricInputRT, SnapshotGroupByRT, SnapshotCustomMetricInputRT, -} from '../../../../common/http_api/snapshot_api'; -import { useUrlState } from '../../../utils/use_url_state'; -import { InventoryItemType, ItemTypeRT } from '../../../../common/inventory_models/types'; +} 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' }, diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_time.ts similarity index 97% rename from x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_time.ts index 051b5e598cb757..db3abd37b58dd8 100644 --- a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_time.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_time.ts @@ -9,7 +9,7 @@ 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'; +import { useUrlState } from '../../../../utils/use_url_state'; export const DEFAULT_WAFFLE_TIME_STATE: WaffleTimeState = { currentTime: Date.now(), diff --git a/x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_view_state.ts similarity index 100% rename from x-pack/plugins/infra/public/pages/inventory_view/hooks/use_waffle_view_state.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_waffle_view_state.ts diff --git a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/index.tsx similarity index 98% rename from x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/index.tsx index 48cc56388c0f24..e473aea7a1f0bc 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/index.tsx @@ -20,7 +20,7 @@ import { ViewSourceConfigurationButton } from '../../../components/source_config import { Source } from '../../../containers/source'; import { useTrackPageview } from '../../../../../observability/public'; import { useKibana } from '../../../../../../../src/plugins/kibana_react/public'; -import { Layout } from '../../../components/inventory/layout'; +import { Layout } from './components/layout'; import { useLinkProps } from '../../../hooks/use_link_props'; export const SnapshotPage = () => { diff --git a/x-pack/plugins/infra/public/components/waffle/lib/apply_wafflemap_layout.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/apply_wafflemap_layout.ts similarity index 94% rename from x-pack/plugins/infra/public/components/waffle/lib/apply_wafflemap_layout.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/apply_wafflemap_layout.ts index 5f3c06fcfbba77..68600ac5d2ce49 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/apply_wafflemap_layout.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/apply_wafflemap_layout.ts @@ -4,11 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ import { first, sortBy } from 'lodash'; -import { - isWaffleMapGroupWithGroups, - isWaffleMapGroupWithNodes, -} from '../../../containers/waffle/type_guards'; -import { InfraWaffleMapGroup } from '../../../lib/lib'; +import { isWaffleMapGroupWithGroups, isWaffleMapGroupWithNodes } from './type_guards'; +import { InfraWaffleMapGroup } from '../../../../lib/lib'; import { sizeOfSquares } from './size_of_squares'; export function getColumns(n: number, w = 1, h = 1) { diff --git a/x-pack/plugins/infra/public/components/waffle/lib/color_from_value.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/color_from_value.ts similarity index 98% rename from x-pack/plugins/infra/public/components/waffle/lib/color_from_value.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/color_from_value.ts index c082686bb9d63a..334865306ee88e 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/color_from_value.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/color_from_value.ts @@ -12,7 +12,7 @@ import { InfraWaffleMapLegend, InfraWaffleMapRuleOperator, InfraWaffleMapStepLegend, -} from '../../../lib/lib'; +} from '../../../../lib/lib'; import { isInfraWaffleMapGradientLegend, isInfraWaffleMapStepLegend } from './type_guards'; const OPERATOR_TO_FN = { diff --git a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.test.ts similarity index 96% rename from x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.test.ts index 902969c83ba393..5f760cf2f591e2 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.test.ts @@ -5,8 +5,8 @@ */ import { createUptimeLink } from './create_uptime_link'; -import { InfraWaffleMapOptions, InfraFormatterType } from '../../../lib/lib'; -import { SnapshotMetricType } from '../../../../common/inventory_models/types'; +import { InfraWaffleMapOptions, InfraFormatterType } from '../../../../lib/lib'; +import { SnapshotMetricType } from '../../../../../common/inventory_models/types'; const options: InfraWaffleMapOptions = { fields: { diff --git a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.ts similarity index 83% rename from x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.ts index 72b46f4fb5c7b7..6c089ee8d22f46 100644 --- a/x-pack/plugins/infra/public/components/waffle/lib/create_uptime_link.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/create_uptime_link.ts @@ -5,9 +5,9 @@ */ import { get } from 'lodash'; -import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../lib/lib'; -import { InventoryItemType } from '../../../../common/inventory_models/types'; -import { LinkDescriptor } from '../../../hooks/use_link_props'; +import { InfraWaffleMapNode, InfraWaffleMapOptions } from '../../../../lib/lib'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; +import { LinkDescriptor } from '../../../../hooks/use_link_props'; export const createUptimeLink = ( options: InfraWaffleMapOptions, diff --git a/x-pack/plugins/infra/public/components/waffle/lib/field_to_display_name.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/field_to_display_name.ts similarity index 100% rename from x-pack/plugins/infra/public/components/waffle/lib/field_to_display_name.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/field_to_display_name.ts diff --git a/x-pack/plugins/infra/public/containers/waffle/nodes_to_wafflemap.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/nodes_to_wafflemap.ts similarity index 97% rename from x-pack/plugins/infra/public/containers/waffle/nodes_to_wafflemap.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/nodes_to_wafflemap.ts index d2511ba7e669e6..469b54b2d9d684 100644 --- a/x-pack/plugins/infra/public/containers/waffle/nodes_to_wafflemap.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/nodes_to_wafflemap.ts @@ -11,9 +11,9 @@ import { InfraWaffleMapGroupOfGroups, InfraWaffleMapGroupOfNodes, InfraWaffleMapNode, -} from '../../lib/lib'; +} from '../../../../lib/lib'; import { isWaffleMapGroupWithGroups, isWaffleMapGroupWithNodes } from './type_guards'; -import { SnapshotNodePath, SnapshotNode } from '../../../common/http_api/snapshot_api'; +import { SnapshotNodePath, SnapshotNode } from '../../../../../common/http_api/snapshot_api'; export function createId(path: SnapshotNodePath[]) { return path.map(p => p.value).join('/'); diff --git a/x-pack/plugins/infra/public/components/waffle/lib/size_of_squares.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/size_of_squares.ts similarity index 100% rename from x-pack/plugins/infra/public/components/waffle/lib/size_of_squares.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/size_of_squares.ts diff --git a/x-pack/plugins/infra/public/containers/waffle/type_guards.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/type_guards.ts similarity index 55% rename from x-pack/plugins/infra/public/containers/waffle/type_guards.ts rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/type_guards.ts index 3e21e3a56a6c6a..62d02022d4c939 100644 --- a/x-pack/plugins/infra/public/containers/waffle/type_guards.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/lib/type_guards.ts @@ -4,7 +4,22 @@ * you may not use this file except in compliance with the Elastic License. */ -import { InfraWaffleMapGroupOfGroups, InfraWaffleMapGroupOfNodes } from '../../lib/lib'; +import { + InfraWaffleMapGroupOfGroups, + InfraWaffleMapGroupOfNodes, + InfraWaffleMapGradientLegend, + InfraWaffleMapStepLegend, +} from '../../../../lib/lib'; + +export function isInfraWaffleMapStepLegend(subject: any): subject is InfraWaffleMapStepLegend { + return subject.type && subject.type === 'step'; +} + +export function isInfraWaffleMapGradientLegend( + subject: any +): subject is InfraWaffleMapGradientLegend { + return subject.type && subject.type === 'gradient'; +} export function isWaffleMapGroupWithNodes(subject: any): subject is InfraWaffleMapGroupOfNodes { return subject && subject.nodes != null && Array.isArray(subject.nodes); diff --git a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/toolbar.tsx similarity index 75% rename from x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx rename to x-pack/plugins/infra/public/pages/metrics/inventory_view/toolbar.tsx index ccdaa5e8dc7857..d6a87a0197f5f7 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/snapshot/toolbar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/toolbar.tsx @@ -8,9 +8,9 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { Toolbar } from '../../../components/eui/toolbar'; -import { WaffleTimeControls } from '../../../components/waffle/waffle_time_controls'; -import { WaffleInventorySwitcher } from '../../../components/waffle/waffle_inventory_switcher'; -import { SearchBar } from '../../inventory_view/compontents/search_bar'; +import { WaffleTimeControls } from './components/waffle/waffle_time_controls'; +import { WaffleInventorySwitcher } from './components/waffle/waffle_inventory_switcher'; +import { SearchBar } from './components/search_bar'; export const SnapshotToolbar = () => ( diff --git a/x-pack/plugins/infra/public/pages/metrics/components/chart_section_vis.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/chart_section_vis.tsx similarity index 94% rename from x-pack/plugins/infra/public/pages/metrics/components/chart_section_vis.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/chart_section_vis.tsx index 290f0eda452ce2..588a0d84918c6c 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/chart_section_vis.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/chart_section_vis.tsx @@ -8,7 +8,7 @@ import moment from 'moment'; import { i18n } from '@kbn/i18n'; import { Axis, Chart, niceTimeFormatter, Position, Settings, TooltipValue } from '@elastic/charts'; import { EuiPageContentBody } from '@elastic/eui'; -import { getChartTheme } from '../../../components/metrics_explorer/helpers/get_chart_theme'; +import { getChartTheme } from '../../metrics_explorer/components/helpers/get_chart_theme'; import { SeriesChart } from './series_chart'; import { getFormatter, @@ -19,8 +19,8 @@ import { seriesHasLessThen2DataPoints, } from './helpers'; import { ErrorMessage } from './error_message'; -import { useKibanaUiSetting } from '../../../utils/use_kibana_ui_setting'; -import { useUiSetting } from '../../../../../../../src/plugins/kibana_react/public'; +import { useKibanaUiSetting } from '../../../../utils/use_kibana_ui_setting'; +import { useUiSetting } from '../../../../../../../../src/plugins/kibana_react/public'; import { VisSectionProps } from '../types'; export const ChartSectionVis = ({ diff --git a/x-pack/plugins/infra/public/pages/metrics/components/error_message.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/error_message.tsx similarity index 100% rename from x-pack/plugins/infra/public/pages/metrics/components/error_message.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/error_message.tsx diff --git a/x-pack/plugins/infra/public/pages/metrics/components/gauges_section_vis.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/gauges_section_vis.tsx similarity index 92% rename from x-pack/plugins/infra/public/pages/metrics/components/gauges_section_vis.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/gauges_section_vis.tsx index e069b52be8be70..0aab676b7d6c54 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/gauges_section_vis.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/gauges_section_vis.tsx @@ -16,9 +16,9 @@ import { import { get, last, max } from 'lodash'; import React, { ReactText } from 'react'; -import { euiStyled } from '../../../../../observability/public'; -import { createFormatter } from '../../../utils/formatters'; -import { InventoryFormatterType } from '../../../../common/inventory_models/types'; +import { euiStyled } from '../../../../../../observability/public'; +import { createFormatter } from '../../../../utils/formatters'; +import { InventoryFormatterType } from '../../../../../common/inventory_models/types'; import { SeriesOverrides, VisSectionProps } from '../types'; import { getChartName } from './helpers'; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/helpers.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/helpers.ts similarity index 91% rename from x-pack/plugins/infra/public/pages/metrics/components/helpers.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/helpers.ts index 4449196f2fb537..bb4ad326609520 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/helpers.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/helpers.ts @@ -7,15 +7,15 @@ import { ReactText } from 'react'; import Color from 'color'; import { get, first, last, min, max } from 'lodash'; -import { createFormatter } from '../../../utils/formatters'; -import { InfraDataSeries } from '../../../graphql/types'; +import { createFormatter } from '../../../../utils/formatters'; +import { InfraDataSeries } from '../../../../graphql/types'; import { InventoryVisTypeRT, InventoryFormatterType, InventoryVisType, -} from '../../../../common/inventory_models/types'; +} from '../../../../../common/inventory_models/types'; import { SeriesOverrides } from '../types'; -import { NodeDetailsMetricData } from '../../../../common/http_api/node_details_api'; +import { NodeDetailsMetricData } from '../../../../../common/http_api/node_details_api'; /** * Returns a formatter diff --git a/x-pack/plugins/infra/public/pages/metrics/components/invalid_node.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/invalid_node.tsx similarity index 90% rename from x-pack/plugins/infra/public/pages/metrics/components/invalid_node.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/invalid_node.tsx index b089e2237c2e57..6d83017a3f6892 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/invalid_node.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/invalid_node.tsx @@ -7,9 +7,9 @@ import { EuiButton, EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import React from 'react'; -import { euiStyled } from '../../../../../observability/public'; -import { ViewSourceConfigurationButton } from '../../../components/source_configuration'; -import { useLinkProps } from '../../../hooks/use_link_props'; +import { euiStyled } from '../../../../../../observability/public'; +import { ViewSourceConfigurationButton } from '../../../../components/source_configuration'; +import { useLinkProps } from '../../../../hooks/use_link_props'; interface InvalidNodeErrorProps { nodeName: string; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/layout_content.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/layout_content.tsx similarity index 84% rename from x-pack/plugins/infra/public/pages/metrics/components/layout_content.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/layout_content.tsx index 4e10f245acdccc..46201025175492 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/layout_content.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/layout_content.tsx @@ -5,7 +5,7 @@ */ import { EuiPageContent } from '@elastic/eui'; -import { euiStyled } from '../../../../../observability/public'; +import { euiStyled } from '../../../../../../observability/public'; export const LayoutContent = euiStyled(EuiPageContent)` position: relative; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/metadata_details.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/metadata_details.tsx similarity index 97% rename from x-pack/plugins/infra/public/pages/metrics/components/metadata_details.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/metadata_details.tsx index 3bf492d398f2cf..7ca69dd56251d3 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/metadata_details.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/metadata_details.tsx @@ -8,8 +8,8 @@ import React, { useContext, useState, useCallback, useMemo } from 'react'; import { EuiButtonIcon, EuiFlexGrid, EuiFlexItem, EuiTitle, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { get } from 'lodash'; -import { InfraMetadata } from '../../../../common/http_api'; -import { euiStyled } from '../../../../../observability/public'; +import { InfraMetadata } from '../../../../../common/http_api'; +import { euiStyled } from '../../../../../../observability/public'; import { MetadataContext } from '../containers/metadata_context'; interface FieldDef { diff --git a/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx similarity index 90% rename from x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx index dd2a5f2bdb39e6..0d0bc8c82397e8 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/node_details_page.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx @@ -13,19 +13,19 @@ import { EuiHideFor, EuiTitle, } from '@elastic/eui'; -import { InfraTimerangeInput } from '../../../../common/http_api/snapshot_api'; -import { InventoryMetric, InventoryItemType } from '../../../../common/inventory_models/types'; -import { useNodeDetails } from '../../../containers/node_details/use_node_details'; +import { InfraTimerangeInput } from '../../../../../common/http_api/snapshot_api'; +import { InventoryMetric, InventoryItemType } from '../../../../../common/inventory_models/types'; +import { useNodeDetails } from '../hooks/use_node_details'; import { MetricsSideNav } from './side_nav'; -import { AutoSizer } from '../../../components/auto_sizer'; +import { AutoSizer } from '../../../../components/auto_sizer'; import { MetricsTimeControls } from './time_controls'; import { SideNavContext, NavItem } from '../lib/side_nav_context'; import { PageBody } from './page_body'; -import { euiStyled } from '../../../../../observability/public'; +import { euiStyled } from '../../../../../../observability/public'; import { MetricsTimeInput } from '../hooks/use_metrics_time'; -import { InfraMetadata } from '../../../../common/http_api/metadata_api'; +import { InfraMetadata } from '../../../../../common/http_api/metadata_api'; import { PageError } from './page_error'; -import { MetadataContext } from '../../../pages/metrics/containers/metadata_context'; +import { MetadataContext } from '../containers/metadata_context'; interface Props { name: string; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_body.tsx similarity index 82% rename from x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_body.tsx index e651d6b92d9811..68166a6e53bfda 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/page_body.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_body.tsx @@ -6,13 +6,13 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { findLayout } from '../../../../common/inventory_models/layouts'; -import { InventoryItemType } from '../../../../common/inventory_models/types'; +import { findLayout } from '../../../../../common/inventory_models/layouts'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; 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'; +import { InfraLoadingPanel } from '../../../../components/loading'; +import { NoData } from '../../../../components/empty_states'; +import { NodeDetailsMetricData } from '../../../../../common/http_api/node_details_api'; interface Props { loading: boolean; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/page_error.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_error.tsx similarity index 90% rename from x-pack/plugins/infra/public/pages/metrics/components/page_error.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_error.tsx index e54cdcd151f6fc..bda2a5941e0230 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/page_error.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/page_error.tsx @@ -10,8 +10,8 @@ import { i18n } from '@kbn/i18n'; import { IHttpFetchError } from 'src/core/public'; import { InvalidNodeError } from './invalid_node'; // import { InfraMetricsErrorCodes } from '../../../../common/errors'; -import { DocumentTitle } from '../../../components/document_title'; -import { ErrorPageBody } from '../../error'; +import { DocumentTitle } from '../../../../components/document_title'; +import { ErrorPageBody } from '../../../error'; interface Props { name: string; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/section.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/section.tsx similarity index 100% rename from x-pack/plugins/infra/public/pages/metrics/components/section.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/section.tsx diff --git a/x-pack/plugins/infra/public/pages/metrics/components/series_chart.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/series_chart.tsx similarity index 93% rename from x-pack/plugins/infra/public/pages/metrics/components/series_chart.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/series_chart.tsx index 849a5b89221650..0d7716ad3cc669 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/series_chart.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/series_chart.tsx @@ -13,8 +13,8 @@ import { BarSeriesStyle, AreaSeriesStyle, } from '@elastic/charts'; -import { InfraDataSeries } from '../../../graphql/types'; -import { InventoryVisType } from '../../../../common/inventory_models/types'; +import { InfraDataSeries } from '../../../../graphql/types'; +import { InventoryVisType } from '../../../../../common/inventory_models/types'; interface Props { id: string; diff --git a/x-pack/plugins/infra/public/pages/metrics/components/side_nav.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/side_nav.tsx similarity index 95% rename from x-pack/plugins/infra/public/pages/metrics/components/side_nav.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/side_nav.tsx index 94f97c7f45e61f..1cba3366acbbbf 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/side_nav.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/side_nav.tsx @@ -6,7 +6,7 @@ import { EuiHideFor, EuiPageSideBar, EuiShowFor, EuiSideNav } from '@elastic/eui'; import React, { useState, useCallback } from 'react'; -import { euiStyled } from '../../../../../observability/public'; +import { euiStyled } from '../../../../../../observability/public'; import { NavItem } from '../lib/side_nav_context'; interface Props { diff --git a/x-pack/plugins/infra/public/pages/metrics/components/sub_section.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/sub_section.tsx similarity index 94% rename from x-pack/plugins/infra/public/pages/metrics/components/sub_section.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/sub_section.tsx index 325d5102931354..7b269adc96638b 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/sub_section.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/sub_section.tsx @@ -6,7 +6,7 @@ import React, { isValidElement, cloneElement, FunctionComponent, Children, useMemo } from 'react'; import { EuiTitle } from '@elastic/eui'; -import { InventoryMetric } from '../../../../common/inventory_models/types'; +import { InventoryMetric } from '../../../../../common/inventory_models/types'; import { LayoutProps } from '../types'; type SubSectionProps = LayoutProps & { diff --git a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx similarity index 96% rename from x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx index 02ba506e8abe14..83f5187f8a46c0 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.test.tsx @@ -3,7 +3,7 @@ * 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('../../../utils/use_kibana_ui_setting', () => ({ +jest.mock('../../../../utils/use_kibana_ui_setting', () => ({ _esModule: true, useKibanaUiSetting: jest.fn(() => [ [ diff --git a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.tsx similarity index 91% rename from x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.tsx index cdbdc9bb7ecdb5..ef6486eac0fdb1 100644 --- a/x-pack/plugins/infra/public/pages/metrics/components/time_controls.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/components/time_controls.tsx @@ -6,10 +6,10 @@ import { EuiSuperDatePicker, OnRefreshChangeProps, OnTimeChangeProps } from '@elastic/eui'; import React, { useCallback } from 'react'; -import { euiStyled } from '../../../../../observability/public'; +import { euiStyled } from '../../../../../../observability/public'; 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'; +import { useKibanaUiSetting } from '../../../../utils/use_kibana_ui_setting'; +import { mapKibanaQuickRangesToDatePickerRanges } from '../../../../utils/map_timepicker_quickranges_to_datepicker_ranges'; interface MetricsTimeControlsProps { currentTimeRange: MetricsTimeInput; diff --git a/x-pack/plugins/infra/public/pages/metrics/containers/metadata_context.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/containers/metadata_context.ts similarity index 84% rename from x-pack/plugins/infra/public/pages/metrics/containers/metadata_context.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/containers/metadata_context.ts index 4ecf7fa15548cb..b8995d27d4dbe9 100644 --- a/x-pack/plugins/infra/public/pages/metrics/containers/metadata_context.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/containers/metadata_context.ts @@ -5,5 +5,5 @@ */ import React from 'react'; -import { InfraMetadata } from '../../../../common/http_api'; +import { InfraMetadata } from '../../../../../common/http_api'; export const MetadataContext = React.createContext(null); diff --git a/x-pack/plugins/infra/public/pages/metrics/hooks/metrics_time.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/metrics_time.test.tsx similarity index 100% rename from x-pack/plugins/infra/public/pages/metrics/hooks/metrics_time.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/metrics_time.test.tsx diff --git a/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metadata.ts similarity index 76% rename from x-pack/plugins/infra/public/containers/metadata/use_metadata.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metadata.ts index 1ba016195bef40..d2a20d449d89ac 100644 --- a/x-pack/plugins/infra/public/containers/metadata/use_metadata.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metadata.ts @@ -8,12 +8,12 @@ import { useEffect } from 'react'; import { fold } from 'fp-ts/lib/Either'; import { identity } from 'fp-ts/lib/function'; import { pipe } from 'fp-ts/lib/pipeable'; -import { InfraMetadata, InfraMetadataRT } from '../../../common/http_api/metadata_api'; -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'; +import { InfraMetadata, InfraMetadataRT } from '../../../../../common/http_api/metadata_api'; +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 './use_metrics_time'; export function useMetadata( nodeId: string, diff --git a/x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metrics_time.ts similarity index 96% rename from x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metrics_time.ts index 2ed86863535ff7..98803ef2e69c6a 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hooks/use_metrics_time.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_metrics_time.ts @@ -12,8 +12,8 @@ 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'; +import { useUrlState } from '../../../../utils/use_url_state'; +import { replaceStateKeyInQueryString } from '../../../../utils/url_state'; const parseRange = (range: MetricsTimeInput) => { const parsedFrom = dateMath.parse(range.from.toString()); diff --git a/x-pack/plugins/infra/public/containers/node_details/use_node_details.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_node_details.ts similarity index 75% rename from x-pack/plugins/infra/public/containers/node_details/use_node_details.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_node_details.ts index 189c48ba1a70c4..3bb6c98c8eac06 100644 --- a/x-pack/plugins/infra/public/containers/node_details/use_node_details.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/hooks/use_node_details.ts @@ -6,14 +6,14 @@ import { fold } from 'fp-ts/lib/Either'; import { identity } from 'fp-ts/lib/function'; import { pipe } from 'fp-ts/lib/pipeable'; -import { throwErrors, createPlainError } from '../../../common/runtime_types'; -import { useHTTPRequest } from '../../hooks/use_http_request'; +import { throwErrors, createPlainError } from '../../../../../common/runtime_types'; +import { useHTTPRequest } from '../../../../hooks/use_http_request'; import { NodeDetailsMetricDataResponseRT, NodeDetailsMetricDataResponse, -} from '../../../common/http_api/node_details_api'; -import { InventoryMetric, InventoryItemType } from '../../../common/inventory_models/types'; -import { InfraTimerangeInput } from '../../../common/http_api/snapshot_api'; +} from '../../../../../common/http_api/node_details_api'; +import { InventoryMetric, InventoryItemType } from '../../../../../common/inventory_models/types'; +import { InfraTimerangeInput } from '../../../../../common/http_api/snapshot_api'; export function useNodeDetails( metrics: InventoryMetric[], diff --git a/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx new file mode 100644 index 00000000000000..197a735f7fd1f2 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/index.tsx @@ -0,0 +1,140 @@ +/* + * 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 React, { useContext, useState } from 'react'; +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 { withMetricPageProviders } from './page_providers'; +import { useMetadata } from './hooks/use_metadata'; +import { Source } from '../../../containers/source'; +import { InfraLoadingPanel } from '../../../components/loading'; +import { findInventoryModel } from '../../../../common/inventory_models'; +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)` + overflow: auto; + background-color: ${props => props.theme.eui.euiColorLightestShade}; +`; + +interface Props { + theme: EuiTheme; + match: { + params: { + type: string; + node: string; + }; + }; +} + +export const MetricDetail = withMetricPageProviders( + 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, parsedTimeRange); + + const [sideNav, setSideNav] = useState([]); + + const addNavItem = React.useCallback( + (item: NavItem) => { + if (!sideNav.some(n => n.id === item.id)) { + setSideNav([item, ...sideNav]); + } + }, + [sideNav] + ); + + const metricsLinkProps = useLinkProps({ + app: 'metrics', + pathname: '/', + }); + + const breadcrumbs = [ + { + ...metricsLinkProps, + text: i18n.translate('xpack.infra.header.infrastructureTitle', { + defaultMessage: 'Metrics', + }), + }, + { text: name }, + ]; + + if (metadataLoading && !filteredRequiredMetrics.length) { + return ( + + ); + } + + return ( + +
+ + + {metadata ? ( + + ) : null} + + + ); + }) +); diff --git a/x-pack/plugins/infra/public/containers/metadata/lib/get_filtered_metrics.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/lib/get_filtered_metrics.ts similarity index 78% rename from x-pack/plugins/infra/public/containers/metadata/lib/get_filtered_metrics.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/lib/get_filtered_metrics.ts index b485c90700145a..57ff182f01963d 100644 --- a/x-pack/plugins/infra/public/containers/metadata/lib/get_filtered_metrics.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/lib/get_filtered_metrics.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { InfraMetadataFeature } from '../../../../common/http_api/metadata_api'; -import { InventoryMetric } from '../../../../common/inventory_models/types'; -import { metrics } from '../../../../common/inventory_models/metrics'; +import { InfraMetadataFeature } from '../../../../../common/http_api/metadata_api'; +import { InventoryMetric } from '../../../../../common/inventory_models/types'; +import { metrics } from '../../../../../common/inventory_models/metrics'; export const getFilteredMetrics = ( requiredMetrics: InventoryMetric[], diff --git a/x-pack/plugins/infra/public/pages/metrics/lib/side_nav_context.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/lib/side_nav_context.ts similarity index 100% rename from x-pack/plugins/infra/public/pages/metrics/lib/side_nav_context.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/lib/side_nav_context.ts diff --git a/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx b/x-pack/plugins/infra/public/pages/metrics/metric_detail/page_providers.tsx similarity index 91% rename from x-pack/plugins/infra/public/pages/metrics/page_providers.tsx rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/page_providers.tsx index d3f10adec06ed7..597977d9d2735d 100644 --- a/x-pack/plugins/infra/public/pages/metrics/page_providers.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/page_providers.tsx @@ -6,7 +6,7 @@ import React from 'react'; -import { Source } from '../../containers/source'; +import { Source } from '../../../containers/source'; import { MetricsTimeProvider } from './hooks/use_metrics_time'; export const withMetricPageProviders = (Component: React.ComponentType) => ( diff --git a/x-pack/plugins/infra/public/pages/metrics/types.ts b/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts similarity index 86% rename from x-pack/plugins/infra/public/pages/metrics/types.ts rename to x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts index 2cc261df289772..3ec57e23a425d2 100644 --- a/x-pack/plugins/infra/public/pages/metrics/types.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metric_detail/types.ts @@ -5,10 +5,10 @@ */ import rt from 'io-ts'; -import { EuiTheme } from '../../../../observability/public'; -import { InventoryFormatterTypeRT } from '../../../common/inventory_models/types'; +import { EuiTheme } from '../../../../../observability/public'; +import { InventoryFormatterTypeRT } from '../../../../common/inventory_models/types'; import { MetricsTimeInput } from './hooks/use_metrics_time'; -import { NodeDetailsMetricData } from '../../../common/http_api/node_details_api'; +import { NodeDetailsMetricData } from '../../../../common/http_api/node_details_api'; export interface LayoutProps { metrics?: NodeDetailsMetricData[]; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/aggregation.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/aggregation.tsx similarity index 89% rename from x-pack/plugins/infra/public/components/metrics_explorer/aggregation.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/aggregation.tsx index 76fa519ab37567..0c0f7b33b3a4a0 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/aggregation.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/aggregation.tsx @@ -8,12 +8,12 @@ import { EuiSelect } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useCallback } from 'react'; -import { MetricsExplorerAggregation } from '../../../common/http_api/metrics_explorer'; -import { MetricsExplorerOptions } from '../../containers/metrics_explorer/use_metrics_explorer_options'; +import { MetricsExplorerAggregation } from '../../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; import { metricsExplorerAggregationRT, METRIC_EXPLORER_AGGREGATIONS, -} from '../../../common/http_api/metrics_explorer'; +} from '../../../../../common/http_api/metrics_explorer'; interface Props { options: MetricsExplorerOptions; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/chart.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart.tsx similarity index 92% rename from x-pack/plugins/infra/public/components/metrics_explorer/chart.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart.tsx index 43b08f45eed34e..089e1abfc4c912 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/chart.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart.tsx @@ -10,24 +10,24 @@ import { EuiTitle, EuiToolTip, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { Axis, Chart, niceTimeFormatter, Position, Settings, TooltipValue } from '@elastic/charts'; import { first, last } from 'lodash'; import moment from 'moment'; -import { MetricsExplorerSeries } from '../../../common/http_api/metrics_explorer'; +import { MetricsExplorerSeries } from '../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, MetricsExplorerTimeOptions, MetricsExplorerYAxisMode, MetricsExplorerChartOptions, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { euiStyled } from '../../../../observability/public'; +} from '../hooks/use_metrics_explorer_options'; +import { euiStyled } from '../../../../../../observability/public'; import { createFormatterForMetric } from './helpers/create_formatter_for_metric'; import { MetricExplorerSeriesChart } from './series_chart'; import { MetricsExplorerChartContextMenu } from './chart_context_menu'; -import { SourceQuery } from '../../graphql/types'; +import { SourceQuery } from '../../../../graphql/types'; import { MetricsExplorerEmptyChart } from './empty_chart'; import { MetricsExplorerNoMetrics } from './no_metrics'; import { getChartTheme } from './helpers/get_chart_theme'; -import { useKibanaUiSetting } from '../../utils/use_kibana_ui_setting'; +import { useKibanaUiSetting } from '../../../../utils/use_kibana_ui_setting'; import { calculateDomain } from './helpers/calculate_domain'; -import { useKibana, useUiSetting } from '../../../../../../src/plugins/kibana_react/public'; +import { useKibana, useUiSetting } from '../../../../../../../../src/plugins/kibana_react/public'; interface Props { title?: string | null; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx similarity index 96% rename from x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx index 8ffef269a42ea1..5c0abb8fd845f2 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx @@ -7,9 +7,14 @@ import React from 'react'; import { MetricsExplorerChartContextMenu, createNodeDetailLink, Props } from './chart_context_menu'; import { ReactWrapper, mount } from 'enzyme'; -import { options, source, timeRange, chartOptions } from '../../utils/fixtures/metrics_explorer'; +import { + options, + source, + timeRange, + chartOptions, +} from '../../../../utils/fixtures/metrics_explorer'; import { Capabilities } from 'src/core/public'; -import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; +import { KibanaContextProvider } from '../../../../../../../../src/plugins/kibana_react/public'; import { coreMock } from 'src/core/public/mocks'; const coreStartMock = coreMock.createStart(); diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx similarity index 91% rename from x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx index 75a04cbe9799e5..31086a21ca13f8 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/chart_context_menu.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx @@ -14,18 +14,18 @@ import { } from '@elastic/eui'; import DateMath from '@elastic/datemath'; import { Capabilities } from 'src/core/public'; -import { MetricsExplorerSeries } from '../../../common/http_api/metrics_explorer'; +import { AlertFlyout } from '../../../../components/alerting/metrics/alert_flyout'; +import { MetricsExplorerSeries } from '../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, MetricsExplorerTimeOptions, MetricsExplorerChartOptions, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../hooks/use_metrics_explorer_options'; import { createTSVBLink } from './helpers/create_tsvb_link'; -import { getNodeDetailUrl } from '../../pages/link_to/redirect_to_node_detail'; -import { SourceConfiguration } from '../../utils/source_configuration'; -import { InventoryItemType } from '../../../common/inventory_models/types'; -import { AlertFlyout } from '../alerting/metrics/alert_flyout'; -import { useLinkProps } from '../../hooks/use_link_props'; +import { getNodeDetailUrl } from '../../../link_to/redirect_to_node_detail'; +import { SourceConfiguration } from '../../../../utils/source_configuration'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; +import { useLinkProps } from '../../../../hooks/use_link_props'; export interface Props { options: MetricsExplorerOptions; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/chart_options.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_options.tsx similarity index 98% rename from x-pack/plugins/infra/public/components/metrics_explorer/chart_options.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_options.tsx index 657c4cea30f3ab..ba28075ededb6e 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/chart_options.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/chart_options.tsx @@ -19,7 +19,7 @@ import { MetricsExplorerChartOptions as ChartOptions, MetricsExplorerYAxisMode, MetricsExplorerChartType, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../hooks/use_metrics_explorer_options'; interface Props { chartOptions: ChartOptions; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/charts.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/charts.tsx similarity index 92% rename from x-pack/plugins/infra/public/components/metrics_explorer/charts.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/charts.tsx index 64e7b27f5722f0..ecec1163108756 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/charts.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/charts.tsx @@ -8,16 +8,16 @@ import { EuiButton, EuiFlexGrid, EuiFlexItem, EuiText, EuiHorizontalRule } from import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import React from 'react'; -import { MetricsExplorerResponse } from '../../../common/http_api/metrics_explorer'; +import { MetricsExplorerResponse } from '../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, MetricsExplorerTimeOptions, MetricsExplorerChartOptions, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { InfraLoadingPanel } from '../loading'; -import { NoData } from '../empty_states/no_data'; +} from '../hooks/use_metrics_explorer_options'; +import { InfraLoadingPanel } from '../../../../components/loading'; +import { NoData } from '../../../../components/empty_states/no_data'; import { MetricsExplorerChart } from './chart'; -import { SourceQuery } from '../../graphql/types'; +import { SourceQuery } from '../../../../graphql/types'; interface Props { loading: boolean; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/empty_chart.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/empty_chart.tsx similarity index 100% rename from x-pack/plugins/infra/public/components/metrics_explorer/empty_chart.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/empty_chart.tsx diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx similarity index 93% rename from x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx index 3246a2aa4a7310..bfe8ddb2e08291 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/group_by.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import React, { useCallback } from 'react'; import { IFieldType } from 'src/plugins/data/public'; -import { MetricsExplorerOptions } from '../../containers/metrics_explorer/use_metrics_explorer_options'; +import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; interface Props { options: MetricsExplorerOptions; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domain.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domain.ts similarity index 87% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domain.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domain.ts index 90569854b833b3..811486d355f2e5 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domain.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domain.ts @@ -4,8 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ import { min, max, sum, isNumber } from 'lodash'; -import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explorer'; -import { MetricsExplorerOptionsMetric } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; +import { MetricsExplorerSeries } from '../../../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerOptionsMetric } from '../../hooks/use_metrics_explorer_options'; const getMin = (values: Array) => { const minValue = min(values); diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domian.test.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domian.test.ts similarity index 85% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domian.test.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domian.test.ts index 4b45534d41db82..f94c6b6156ae4b 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/calculate_domian.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/calculate_domian.test.ts @@ -5,9 +5,9 @@ */ import { calculateDomain } from './calculate_domain'; -import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explorer'; -import { MetricsExplorerOptionsMetric } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; -import { MetricsExplorerColor } from '../../../../common/color_palette'; +import { MetricsExplorerSeries } from '../../../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerOptionsMetric } from '../../hooks/use_metrics_explorer_options'; +import { MetricsExplorerColor } from '../../../../../../common/color_palette'; describe('calculateDomain()', () => { const series: MetricsExplorerSeries = { id: 'test-01', diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metric.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metric.ts similarity index 76% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metric.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metric.ts index 33ec2ce2715a3c..d07a6b45f02bef 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metric.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metric.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; -import { createFormatter } from '../../../utils/formatters'; -import { InfraFormatterType } from '../../../lib/lib'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; +import { createFormatter } from '../../../../../utils/formatters'; +import { InfraFormatterType } from '../../../../../lib/lib'; import { metricToFormat } from './metric_to_format'; export const createFormatterForMetric = (metric?: MetricsExplorerMetric) => { if (metric && metric.field) { diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metrics.test.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metrics.test.ts similarity index 94% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metrics.test.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metrics.test.ts index ec41e90e441a44..e039d5d4b3eeb4 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_formatter_for_metrics.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metrics.test.ts @@ -5,7 +5,7 @@ */ import { createFormatterForMetric } from './create_formatter_for_metric'; -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; describe('createFormatterForMetric()', () => { it('should just work for count', () => { diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.test.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.test.ts similarity index 88% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.test.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.test.ts index cbf6904d246c70..367c472f414e42 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.test.ts @@ -5,7 +5,7 @@ */ import { createMetricLabel } from './create_metric_label'; -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; describe('createMetricLabel()', () => { it('should work with metrics with fields', () => { diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.ts similarity index 80% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.ts index b6453a81317b13..1607302a6259a5 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_metric_label.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_metric_label.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; export const createMetricLabel = (metric: MetricsExplorerMetric) => { return `${metric.aggregation}(${metric.field || ''})`; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.test.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts similarity index 97% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.test.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts index 05637642b8dd9e..47bb4c8c57716d 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts @@ -5,14 +5,19 @@ */ import { createTSVBLink, createFilterFromOptions } from './create_tsvb_link'; -import { source, options, timeRange, chartOptions } from '../../../utils/fixtures/metrics_explorer'; +import { + source, + options, + timeRange, + chartOptions, +} from '../../../../../utils/fixtures/metrics_explorer'; import uuid from 'uuid'; import { OutputBuffer } from 'uuid/interfaces'; import { MetricsExplorerYAxisMode, MetricsExplorerChartType, -} from '../../../containers/metrics_explorer/use_metrics_explorer_options'; -import { MetricsExplorerOptions } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../../hooks/use_metrics_explorer_options'; +import { MetricsExplorerOptions } from '../../hooks/use_metrics_explorer_options'; jest.mock('uuid'); const mockedUuid = uuid as jest.Mocked; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts similarity index 91% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts index 20706f563ec637..559422584f579a 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/create_tsvb_link.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts @@ -7,8 +7,8 @@ import { encode } from 'rison-node'; import uuid from 'uuid'; import { set } from 'lodash'; -import { colorTransformer, MetricsExplorerColor } from '../../../../common/color_palette'; -import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explorer'; +import { colorTransformer, MetricsExplorerColor } from '../../../../../../common/color_palette'; +import { MetricsExplorerSeries } from '../../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, MetricsExplorerOptionsMetric, @@ -16,12 +16,12 @@ import { MetricsExplorerChartOptions, MetricsExplorerYAxisMode, MetricsExplorerChartType, -} from '../../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../../hooks/use_metrics_explorer_options'; import { metricToFormat } from './metric_to_format'; -import { InfraFormatterType } from '../../../lib/lib'; -import { SourceQuery } from '../../../graphql/types'; +import { InfraFormatterType } from '../../../../../lib/lib'; +import { SourceQuery } from '../../../../../graphql/types'; import { createMetricLabel } from './create_metric_label'; -import { LinkDescriptor } from '../../../hooks/use_link_props'; +import { LinkDescriptor } from '../../../../../hooks/use_link_props'; export const metricsExplorerMetricToTSVBMetric = (metric: MetricsExplorerOptionsMetric) => { if (metric.aggregation === 'rate') { diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/get_chart_theme.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/get_chart_theme.ts similarity index 100% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/get_chart_theme.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/get_chart_theme.ts diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.test.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.test.ts similarity index 90% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.test.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.test.ts index 4cb27b4fb65c3e..6b27627a9fb5b2 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.test.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.test.ts @@ -5,8 +5,8 @@ */ import { metricToFormat } from './metric_to_format'; -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; -import { InfraFormatterType } from '../../../lib/lib'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; +import { InfraFormatterType } from '../../../../../lib/lib'; describe('metricToFormat()', () => { it('should just work for numeric metrics', () => { const metric: MetricsExplorerMetric = { aggregation: 'avg', field: 'system.load.1' }; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.ts similarity index 82% rename from x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.ts index 63272c86a5dc79..1dbbf97a32217b 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/helpers/metric_to_format.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/metric_to_format.ts @@ -5,8 +5,8 @@ */ import { last } from 'lodash'; -import { MetricsExplorerMetric } from '../../../../common/http_api/metrics_explorer'; -import { InfraFormatterType } from '../../../lib/lib'; +import { MetricsExplorerMetric } from '../../../../../../common/http_api/metrics_explorer'; +import { InfraFormatterType } from '../../../../../lib/lib'; export const metricToFormat = (metric?: MetricsExplorerMetric) => { if (metric && metric.field) { const suffix = last(metric.field.split(/\./)); diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx similarity index 88% rename from x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx index 7c3e0444dbeea6..e9826e1ff39552 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/kuery_bar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx @@ -7,9 +7,9 @@ import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; -import { WithKueryAutocompletion } from '../../containers/with_kuery_autocompletion'; -import { AutocompleteField } from '../autocomplete_field'; -import { esKuery, IIndexPattern } from '../../../../../../src/plugins/data/public'; +import { WithKueryAutocompletion } from '../../../../containers/with_kuery_autocompletion'; +import { AutocompleteField } from '../../../../components/autocomplete_field'; +import { esKuery, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; interface Props { derivedIndexPattern: IIndexPattern; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/metrics.tsx similarity index 91% rename from x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/metrics.tsx index a49e42c9cac0e2..612735e2ba772e 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/metrics.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/metrics.tsx @@ -9,9 +9,9 @@ import { i18n } from '@kbn/i18n'; import React, { useCallback, useState } from 'react'; import { IFieldType } from 'src/plugins/data/public'; -import { colorTransformer, MetricsExplorerColor } from '../../../common/color_palette'; -import { MetricsExplorerMetric } from '../../../common/http_api/metrics_explorer'; -import { MetricsExplorerOptions } from '../../containers/metrics_explorer/use_metrics_explorer_options'; +import { colorTransformer, MetricsExplorerColor } from '../../../../../common/color_palette'; +import { MetricsExplorerMetric } from '../../../../../common/http_api/metrics_explorer'; +import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; interface Props { autoFocus?: boolean; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/no_metrics.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/no_metrics.tsx similarity index 100% rename from x-pack/plugins/infra/public/components/metrics_explorer/no_metrics.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/no_metrics.tsx diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/series_chart.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/series_chart.tsx similarity index 93% rename from x-pack/plugins/infra/public/components/metrics_explorer/series_chart.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/series_chart.tsx index ed7a994dd2bbec..ad7ce83539526a 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/series_chart.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/series_chart.tsx @@ -13,13 +13,13 @@ import { AreaSeriesStyle, BarSeriesStyle, } from '@elastic/charts'; -import { MetricsExplorerSeries } from '../../../common/http_api/metrics_explorer'; -import { colorTransformer, MetricsExplorerColor } from '../../../common/color_palette'; +import { MetricsExplorerSeries } from '../../../../../common/http_api/metrics_explorer'; +import { colorTransformer, MetricsExplorerColor } from '../../../../../common/color_palette'; import { createMetricLabel } from './helpers/create_metric_label'; import { MetricsExplorerOptionsMetric, MetricsExplorerChartType, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../hooks/use_metrics_explorer_options'; interface Props { metric: MetricsExplorerOptionsMetric; diff --git a/x-pack/plugins/infra/public/components/metrics_explorer/toolbar.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx similarity index 88% rename from x-pack/plugins/infra/public/components/metrics_explorer/toolbar.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx index 0fbb0b6acad176..81971bd31a9739 100644 --- a/x-pack/plugins/infra/public/components/metrics_explorer/toolbar.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx @@ -11,23 +11,23 @@ import { IIndexPattern } from 'src/plugins/data/public'; import { MetricsExplorerMetric, MetricsExplorerAggregation, -} from '../../../common/http_api/metrics_explorer'; +} from '../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, MetricsExplorerTimeOptions, MetricsExplorerChartOptions, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; -import { Toolbar } from '../eui/toolbar'; +} from '../hooks/use_metrics_explorer_options'; +import { Toolbar } from '../../../../components/eui/toolbar'; import { MetricsExplorerKueryBar } from './kuery_bar'; import { MetricsExplorerMetrics } from './metrics'; import { MetricsExplorerGroupBy } from './group_by'; import { MetricsExplorerAggregationPicker } from './aggregation'; import { MetricsExplorerChartOptions as MetricsExplorerChartOptionsComponent } from './chart_options'; -import { SavedViewsToolbarControls } from '../saved_views/toolbar_control'; -import { MetricExplorerViewState } from '../../pages/infrastructure/metrics_explorer/use_metric_explorer_state'; -import { metricsExplorerViewSavedObjectType } from '../../../common/saved_objects/metrics_explorer_view'; -import { useKibanaUiSetting } from '../../utils/use_kibana_ui_setting'; -import { mapKibanaQuickRangesToDatePickerRanges } from '../../utils/map_timepicker_quickranges_to_datepicker_ranges'; +import { SavedViewsToolbarControls } from '../../../../components/saved_views/toolbar_control'; +import { MetricExplorerViewState } from '../hooks/use_metric_explorer_state'; +import { metricsExplorerViewSavedObjectType } from '../../../../../common/saved_objects/metrics_explorer_view'; +import { useKibanaUiSetting } from '../../../../utils/use_kibana_ui_setting'; +import { mapKibanaQuickRangesToDatePickerRanges } from '../../../../utils/map_timepicker_quickranges_to_datepicker_ranges'; interface Props { derivedIndexPattern: IIndexPattern; diff --git a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx similarity index 96% rename from x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx index 874ac0987023bd..f0734f76cfacd9 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx @@ -6,14 +6,14 @@ import { renderHook, act } from '@testing-library/react-hooks'; import { useMetricsExplorerState } from './use_metric_explorer_state'; -import { MetricsExplorerOptionsContainer } from '../../../containers/metrics_explorer/use_metrics_explorer_options'; +import { MetricsExplorerOptionsContainer } from './use_metrics_explorer_options'; import React from 'react'; import { source, derivedIndexPattern, resp, createSeries, -} from '../../../utils/fixtures/metrics_explorer'; +} from '../../../../utils/fixtures/metrics_explorer'; const renderUseMetricsExplorerStateHook = () => renderHook(props => useMetricsExplorerState(props.source, props.derivedIndexPattern), { @@ -27,7 +27,7 @@ const renderUseMetricsExplorerStateHook = () => const mockedUseMetricsExplorerData = jest.fn(); -jest.mock('../../../containers/metrics_explorer/use_metrics_explorer_data', () => { +jest.mock('./use_metrics_explorer_data', () => { return { useMetricsExplorerData: () => { return mockedUseMetricsExplorerData(); diff --git a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts similarity index 92% rename from x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts index 88e6d9d800661d..8a9ed901de0b06 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/use_metric_explorer_state.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts @@ -9,15 +9,15 @@ import { IIndexPattern } from 'src/plugins/data/public'; import { MetricsExplorerMetric, MetricsExplorerAggregation, -} from '../../../../common/http_api/metrics_explorer'; -import { useMetricsExplorerData } from '../../../containers/metrics_explorer/use_metrics_explorer_data'; +} from '../../../../../common/http_api/metrics_explorer'; +import { useMetricsExplorerData } from './use_metrics_explorer_data'; import { MetricsExplorerOptionsContainer, MetricsExplorerChartOptions, MetricsExplorerTimeOptions, MetricsExplorerOptions, -} from '../../../containers/metrics_explorer/use_metrics_explorer_options'; -import { SourceQuery } from '../../../graphql/types'; +} from './use_metrics_explorer_options'; +import { SourceQuery } from '../../../../graphql/types'; export interface MetricExplorerViewState { chartOptions: MetricsExplorerChartOptions; diff --git a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx similarity index 96% rename from x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx index bbc8778545b4a0..94edab54fb71e9 100644 --- a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.test.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { useMetricsExplorerData } from './use_metrics_explorer_data'; import { renderHook } from '@testing-library/react-hooks'; -import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; +import { KibanaContextProvider } from '../../../../../../../../src/plugins/kibana_react/public'; import { options, @@ -17,7 +17,7 @@ import { timeRange, resp, createSeries, -} from '../../utils/fixtures/metrics_explorer'; +} from '../../../../utils/fixtures/metrics_explorer'; const mockedFetch = jest.fn(); @@ -54,7 +54,7 @@ const renderUseMetricsExplorerDataHook = () => { ); }; -jest.mock('../../utils/kuery', () => { +jest.mock('../../../../utils/kuery', () => { return { convertKueryToElasticSearchQuery: (query: string) => query, }; diff --git a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts similarity index 91% rename from x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts index b32496fbf30a11..93aacb586a5cde 100644 --- a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_data.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts @@ -8,15 +8,15 @@ import DateMath from '@elastic/datemath'; import { isEqual } from 'lodash'; import { useEffect, useState } from 'react'; import { IIndexPattern } from 'src/plugins/data/public'; -import { SourceQuery } from '../../../common/graphql/types'; +import { SourceQuery } from '../../../../../common/graphql/types'; import { MetricsExplorerResponse, metricsExplorerResponseRT, -} from '../../../common/http_api/metrics_explorer'; -import { convertKueryToElasticSearchQuery } from '../../utils/kuery'; +} from '../../../../../common/http_api/metrics_explorer'; +import { convertKueryToElasticSearchQuery } from '../../../../utils/kuery'; import { MetricsExplorerOptions, MetricsExplorerTimeOptions } from './use_metrics_explorer_options'; -import { useKibana } from '../../../../../../src/plugins/kibana_react/public'; -import { decodeOrThrow } from '../../../common/runtime_types'; +import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public'; +import { decodeOrThrow } from '../../../../../common/runtime_types'; function isSameOptions(current: MetricsExplorerOptions, next: MetricsExplorerOptions) { return isEqual(current, next); diff --git a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_options.test.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options.test.tsx similarity index 100% rename from x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_options.test.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options.test.tsx diff --git a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_options.ts b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options.ts similarity index 96% rename from x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_options.ts rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options.ts index 2b802af8e8c15f..9d124a6af80123 100644 --- a/x-pack/plugins/infra/public/containers/metrics_explorer/use_metrics_explorer_options.ts +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options.ts @@ -6,11 +6,11 @@ import createContainer from 'constate'; import { useState, useEffect, Dispatch, SetStateAction } from 'react'; -import { MetricsExplorerColor } from '../../../common/color_palette'; +import { MetricsExplorerColor } from '../../../../../common/color_palette'; import { MetricsExplorerAggregation, MetricsExplorerMetric, -} from '../../../common/http_api/metrics_explorer'; +} from '../../../../../common/http_api/metrics_explorer'; export type MetricsExplorerOptionsMetric = MetricsExplorerMetric & { color?: MetricsExplorerColor; diff --git a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/index.tsx b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/index.tsx similarity index 92% rename from x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/index.tsx rename to x-pack/plugins/infra/public/pages/metrics/metrics_explorer/index.tsx index 0999cea59731ca..a213671e9436eb 100644 --- a/x-pack/plugins/infra/public/pages/infrastructure/metrics_explorer/index.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/metrics_explorer/index.tsx @@ -9,11 +9,11 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { IIndexPattern } from 'src/plugins/data/public'; import { DocumentTitle } from '../../../components/document_title'; -import { MetricsExplorerCharts } from '../../../components/metrics_explorer/charts'; -import { MetricsExplorerToolbar } from '../../../components/metrics_explorer/toolbar'; +import { MetricsExplorerCharts } from './components/charts'; +import { MetricsExplorerToolbar } from './components/toolbar'; import { SourceQuery } from '../../../../common/graphql/types'; import { NoData } from '../../../components/empty_states'; -import { useMetricsExplorerState } from './use_metric_explorer_state'; +import { useMetricsExplorerState } from './hooks/use_metric_explorer_state'; import { useTrackPageview } from '../../../../../observability/public'; interface MetricsExplorerPageProps { diff --git a/x-pack/plugins/infra/public/pages/infrastructure/settings.tsx b/x-pack/plugins/infra/public/pages/metrics/settings.tsx similarity index 100% rename from x-pack/plugins/infra/public/pages/infrastructure/settings.tsx rename to x-pack/plugins/infra/public/pages/metrics/settings.tsx diff --git a/x-pack/plugins/infra/public/routers/metrics_router.tsx b/x-pack/plugins/infra/public/routers/metrics_router.tsx index 7cb9de65e72917..0e427150a46cc6 100644 --- a/x-pack/plugins/infra/public/routers/metrics_router.tsx +++ b/x-pack/plugins/infra/public/routers/metrics_router.tsx @@ -8,12 +8,12 @@ import React from 'react'; import { Route, Router, Switch } from 'react-router-dom'; import { NotFoundPage } from '../pages/404'; -import { InfrastructurePage } from '../pages/infrastructure'; -import { LinkToMetricsPage } from '../pages/link_to'; -import { MetricDetail } from '../pages/metrics'; +import { InfrastructurePage } from '../pages/metrics'; +import { MetricDetail } from '../pages/metrics/metric_detail'; import { RedirectWithQueryParams } from '../utils/redirect_with_query_params'; import { useKibana } from '../../../../../src/plugins/kibana_react/public'; import { AppRouter } from './index'; +import { LinkToMetricsPage } from '../pages/link_to'; export const MetricsRouter: AppRouter = ({ history }) => { const uiCapabilities = useKibana().services.application?.capabilities; diff --git a/x-pack/plugins/infra/public/utils/fixtures/metrics_explorer.ts b/x-pack/plugins/infra/public/utils/fixtures/metrics_explorer.ts index e39d6f785d53e2..15159ad45c7f33 100644 --- a/x-pack/plugins/infra/public/utils/fixtures/metrics_explorer.ts +++ b/x-pack/plugins/infra/public/utils/fixtures/metrics_explorer.ts @@ -14,7 +14,7 @@ import { MetricsExplorerChartType, MetricsExplorerYAxisMode, MetricsExplorerChartOptions, -} from '../../containers/metrics_explorer/use_metrics_explorer_options'; +} from '../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; export const options: MetricsExplorerOptions = { limit: 3, From e302fd84861f1182b1bcff348be1a112eb48eb7e Mon Sep 17 00:00:00 2001 From: Kaarina Tungseth Date: Mon, 20 Apr 2020 15:56:41 -0500 Subject: [PATCH 17/39] Vega doc changes (#63889) * Vega doc changes * Final changes * Review comments --- docs/images/vega_lite_default.png | Bin 0 -> 291544 bytes docs/visualize/vega.asciidoc | 224 +++++++++++++----------------- 2 files changed, 100 insertions(+), 124 deletions(-) create mode 100644 docs/images/vega_lite_default.png diff --git a/docs/images/vega_lite_default.png b/docs/images/vega_lite_default.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce1592d0738c6636157430522562bf0bbdea344 GIT binary patch literal 291544 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 UQE=@G1W>PAH;r`4wQNKG2kW!8(*OVf literal 0 HcmV?d00001 diff --git a/docs/visualize/vega.asciidoc b/docs/visualize/vega.asciidoc index b8c0d1dbe3ddaf..e0d9955f0c3dbf 100644 --- a/docs/visualize/vega.asciidoc +++ b/docs/visualize/vega.asciidoc @@ -1,81 +1,80 @@ [[vega-graph]] -== Vega Graphs -experimental[] +== Vega -You can build https://vega.github.io/vega/examples/[Vega] and -https://vega.github.io/vega-lite/examples/[Vega-Lite] data visualizations -into Kibana, either standalone, or on top of a map. To see Vega in action, -watch this -https://www.youtube.com/watch?v=lQGCipY3th8[short introduction video]. +experimental[] -Currently Vega version 4.3 and Vega-Lite version 2.6 are supported. +Build custom visualizations from multiple data sources using Vega +and Vega-Lite. -NOTE: In Vega it is possible to load data dynamically, e.g. by setting signals as data urls. This is not supported in Kibana as all data is fetched at once prior to passing it to the Vega renderer. +* *Vega* — A declarative format to create visualizations using JSON. + Generate interactive displays using D3. +* *Vega-Lite* — An easier format to use than Vega that enables more rapid + data analysis. Compiles into Vega. -[[vega-quick-demo]] -=== Getting Started with Vega +For more information about Vega and Vega-Lite, refer to +<>. -* To experiment using sample data, first click the {kib} logo in the upper left hand corner -and then click the link next to *Sample Data*. -* Once you have data loaded, go to *Visualize*, click *+*, and select *Vega* to see an example graph. -*Note*: The default graph is written in Vega-Lite, but you can build visualizations -in either language. See <> for more information. -* Try changing `mark` from `line` to `point`, `area`, `bar`, `circle`, -or `square`. Check out the -https://vega.github.io/vega-lite/docs/mark.html#mark-def[Vega-Lite docs] for more information. -* Explore other available https://vega.github.io/vega/examples/[Vega] or -https://vega.github.io/vega-lite/examples/[Vega-Lite] visualizations. -*Note*: You might need to make URLs absolute, for example, replace -`"url": "data/world-110m.json"` with -`"url": "https://vega.github.io/editor/data/world-110m.json"`. -See <>. -* For more information on getting started, check out this https://www.elastic.co/blog/getting-started-with-vega-visualizations-in-kibana[blog post]. +[float] +[[create-vega-viz]] +=== Create Vega visualizations +You create Vega visualizations by using the text editor, which is +preconfigured with the options you need. -[[vega-vs-vegalite]] -=== Vega vs Vega-Lite +[role="screenshot"] +image::images/vega_lite_default.png[] -The Vega visualization in {kib} supports both Vega and Vega-Lite. You can use the -`schema` value to define which language you would like to use and its minimum -required version. +[float] +[[vega-schema]] +==== Change the Vega version -For example: +The default visualization uses Vega-Lite version 2. To use Vega version 4, edit +the `schema`. -* Vega-Lite v2: `$schema: https://vega.github.io/schema/vega-lite/v2.json` -* Vega v4: `$schema: https://vega.github.io/schema/vega/v4.json` +Go to `$schema`, enter `https://vega.github.io/schema/vega/v4.json`, then click +*Update*. -The `schema` URL is only used for identification, and does not need to be accessible by {kib}. +[float] +[[vega-type]] +==== Change the visualization type -Vega-Lite is a simplified version of Vega; it automates some constructions and has -much shorter specifications than Vega. Vega-Lite is automatically converted into -Vega before rendering, but it has some limitations, and there are some visualizations -that can be expressed in Vega that cannot be expressed in Vega-Lite. You can learn more -in the https://vega.github.io/vega-lite/[Vega-Lite documentation]. +The default visualization is a line chart. To change the visualization type, +change the `mark` value. The supported visualization types are listed in the +text editor. -You can use https://vega.github.io/editor/[this editor] to convert Vega-Lite into -Vega. +Go to `mark`, change the value to a different visualization type, then click +*Update*. -When you create a Vega visualization in {kib}, you can edit the `schema` -value in the dev tools to the left of the graph to define which of the two expression -languages you would like to use. +[float] +[[vega-sizing-and-positioning]] +==== Change the layout +By default, Vega visualizations use the `autosize = { type: 'fit', contains: 'padding' }` layout. +`fit` uses all available space, ignores `width` and `height` values, +and respects the padding values. To override this behavior, change the +`autosize` value. [[vega-querying-elasticsearch]] -=== Querying Elasticsearch +=== Query {es} -By default, Vega's https://vega.github.io/vega/docs/data/[data] element -can use embedded and external data with a `"url"` parameter. Kibana adds support for the direct Elasticsearch queries by overloading +experimental[] Vega https://vega.github.io/vega/docs/data/[data] elements +use embedded and external data with a `"url"` parameter. {kib} adds support for +direct {es} queries by overloading the `"url"` value. -Here is an example of an Elasticsearch query that counts the number of documents in all indexes. The query uses *@timestamp* field to filter the time range, and break it into histogram buckets. +NOTE: With Vega, you dynamically load your data by setting signals as data URLs. +Since {kib} is unable to support dynamically loaded data, all data is fetched +before it's passed to the Vega renderer. + +For example, count the number of documents in all indices: [source,yaml] ---- -// An object instead of a string for the url value +// An object instead of a string for the URL value // is treated as a context-aware Elasticsearch query. url: { - // Specify the time filter (upper right corner) with this field + // Specify the time filter. %timefield%: @timestamp // Apply dashboard context filters when set %context%: true @@ -88,8 +87,8 @@ url: { time_buckets: { date_histogram: { // Use date histogram aggregation on @timestamp field - field: @timestamp - // interval value will depend on the daterange picker + field: @timestamp <1> + // interval value will depend on the time filter // Use an integer to set approximate bucket count interval: { %autointerval%: true } // Make sure we get an entire range, even if it has no data @@ -109,7 +108,10 @@ url: { } ---- -The full result has this kind of structure: +<1> `@timestamp` — Filters the time range and breaks it into histogram +buckets. + +The full result includes the following structure: [source,yaml] ---- @@ -118,23 +120,24 @@ The full result has this kind of structure: "time_buckets": { "buckets": [{ "key_as_string": "2015-11-30T22:00:00.000Z", - "key": 1448920800000, + "key": 1448920800000,<1> "doc_count": 28 }, { "key_as_string": "2015-11-30T23:00:00.000Z", - "key": 1448924400000, + "key": 1448924400000, <1> "doc_count": 330 }, ... ---- -Note that `"key"` is a unix timestamp, and can be used without conversions by the +<1> `"key"` — The unix timestamp you can use without conversions by the Vega date expressions. -For most graphs we only need the list of the bucket values, so we use `format: {property: "aggregations.time_buckets.buckets"}` expression to focus on just the data we need. +For most visualizations, you only need the list of bucket values. To focus on +only the data you need, use `format: {property: "aggregations.time_buckets.buckets"}`. -Query may be specified with individual range and dashboard context as -well. This query is equivalent to `"%context%": true, "%timefield%": "@timestamp"`, -except that the timerange is shifted back by 10 minutes: +Specify a query with individual range and dashboard context. The query is +equivalent to `"%context%": true, "%timefield%": "@timestamp"`, +except that the time range is shifted back by 10 minutes: [source,yaml] ---- @@ -185,9 +188,9 @@ on the currently picked range: `"interval": {"%autointerval%": 10}` will try to get about 10-15 data points (buckets). [[vega-esmfiles]] -=== Elastic Map Files +=== Access Elastic Map Service files -It is possible to access Elastic Map Service's files via the same mechanism +experimental[] Access the Elastic Map Service files via the same mechanism: [source,yaml] ---- @@ -203,11 +206,8 @@ url: { format: {property: "features"} ---- -[[vega-with-a-map]] -=== Vega with a Map - -Kibana's default map can be used as a base of the Vega graph. To enable, -the graph must specify `type=map` in the host configuration: +To enable Elastic Maps, the graph must specify `type=map` in the host +configuration: [source,yaml] ---- @@ -247,42 +247,47 @@ the graph must specify `type=map` in the host configuration: } ---- -This visualization will automatically inject a projection called -`"projection"`. Use it to calculate positioning of all geo-aware marks. -Additionally, you may use `latitude`, `longitude`, and `zoom` signals. +The visualization automatically injects a `"projection"`, which you can use to +calculate the position of all geo-aware marks. +Additionally, you can use `latitude`, `longitude`, and `zoom` signals. These signals can be used in the graph, or can be updated to modify the -positioning of the map. +position of the map. + +Vega visualization ignore the `autosize`, `width`, `height`, and `padding` +values, using `fit` model with zero padding. [[vega-debugging]] -=== Debugging +=== Debugging Vega [[vega-browser-debugging-console]] -==== Browser Debugging console +==== Browser debugging console -Use browser debugging tools (e.g. F12 or Ctrl+Shift+J in Chrome) to +experimental[] Use browser debugging tools (for example, F12 or Ctrl+Shift+J in Chrome) to inspect the `VEGA_DEBUG` variable: -* `view` - access to the Vega View object. See https://vega.github.io/vega/docs/api/debugging/[Vega Debugging Guide] - on how to inspect data and signals at runtime. For Vega-Lite, `VEGA_DEBUG.view.data('source_0')` gets the main data set. - For Vega, it uses the data name as defined in your Vega spec. -* `vega_spec` - Vega JSON graph specification after some modifications by Kibana. In case ++ +* `view` — Access to the Vega View object. See https://vega.github.io/vega/docs/api/debugging/[Vega Debugging Guide] +on how to inspect data and signals at runtime. For Vega-Lite, `VEGA_DEBUG.view.data('source_0')` gets the main data set. +For Vega, it uses the data name as defined in your Vega spec. + +* `vega_spec` — Vega JSON graph specification after some modifications by {kib}. In case of Vega-Lite, this is the output of the Vega-Lite compiler. -* `vegalite_spec` - If this is a Vega-Lite graph, JSON specification of the graph before + +* `vegalite_spec` — If this is a Vega-Lite graph, JSON specification of the graph before Vega-Lite compilation. [[vega-data]] ==== Data -If you are using Elasticsearch query, make sure your resulting data is -what you expected. The easiest way to view it is by using "networking" -tab in the browser debugging tools (e.g. F12). Modify the graph slightly +experimental[] If you are using an {es} query, make sure your resulting data is +what you expected. The easiest way to view it is by using the "networking" +tab in the browser debugging tools (for example, F12). Modify the graph slightly so that it makes a search request, and view the response from the server. Another approach is to use -https://www.elastic.co/guide/en/kibana/current/console-kibana.html[Kibana -Dev Tools] tab - place the index name into the first line: -`GET /_search`, and add your query as the following lines -(just the value of the `"query"` field) +https://www.elastic.co/guide/en/kibana/current/console-kibana.html[Dev Tools]. Place the index name into the first line: +`GET /_search`, then add your query as the following lines +(just the value of the `"query"` field). -If you need to share your graph with someone, you may want to copy the +If you need to share your graph with someone, copy the raw data response to https://gist.github.com/[gist.github.com], possibly with a `.json` extension, use the `[raw]` button, and use that url directly in your graph. @@ -292,9 +297,11 @@ to your kibana.yml file. [[vega-notes]] [[vega-useful-links]] -=== Useful Links +=== Resources and examples + +experimental[] To learn more about Vega and Vega-List, refer to the resources and examples. -==== Vega Editor +==== Vega editor The https://vega.github.io/editor/[Vega Editor] includes examples for Vega & Vega-Lite, but does not support any {kib}-specific features like {es} requests and interactive base maps. @@ -308,28 +315,15 @@ The https://vega.github.io/editor/[Vega Editor] includes examples for Vega & Veg * https://vega.github.io/vega/docs/[Docs] * https://vega.github.io/vega/examples/[Examples] -==== Elastic blog posts -* https://www.elastic.co/blog/getting-started-with-vega-visualizations-in-kibana[Getting Started with Vega Visualizations in Kibana] -* https://www.elastic.co/blog/custom-vega-visualizations-in-kibana[Custom Vega Visualizations in Kibana] -* https://www.elastic.co/blog/sankey-visualization-with-vega-in-kibana[Sankey Visualization with Vega in Kibana] - - -[[vega-using-vega-and-vegalite-examples]] -==== Using Vega and Vega-Lite examples - -When using https://vega.github.io/vega/examples/[Vega] and -https://vega.github.io/vega-lite/examples/[VegaLite] examples, you may +TIP: When you use the examples, you may need to modify the "data" section to use absolute URL. For example, replace `"url": "data/world-110m.json"` with -`"url": "https://vega.github.io/editor/data/world-110m.json"`. Also, -regular Vega examples use `"autosize": "pad"` layout model, whereas -Kibana uses `fit`. Remove all `autosize`, `width`, and `height` -values. See link:#sizing-and-positioning[sizing and positioning]. +`"url": "https://vega.github.io/editor/data/world-110m.json"`. [[vega-additional-configuration-options]] ==== Additional configuration options -These options are specific to the Kibana. link:#vega-with-a-map[Map support] has +These options are specific to the {kib}. link:#vega-with-a-map[Map support] has additional configuration options. [source,yaml] @@ -351,21 +345,3 @@ additional configuration options. /* the rest of Vega code */ } ---- - -[[vega-sizing-and-positioning]] -==== Sizing and positioning - -[[vega-and-vegalite]] -===== Vega and Vega-Lite - -By default, Kibana Vega graphs will use -`autosize = { type: 'fit', contains: 'padding' }` layout model for Vega -and Vega-Lite graphs. The `fit` model uses all available space, ignores -`width` and `height` values, but respects the padding values. You may -override this behaviour by specifying a different `autosize` value. - -[[vega-on-a-map]] -===== Vega on a map - -All Vega graphs will ignore `autosize`, `width`, `height`, and `padding` -values, using `fit` model with zero padding. From 35dab183abc81c91fb8f63d7c405ac0e02d1072e Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Mon, 20 Apr 2020 15:38:10 -0600 Subject: [PATCH 18/39] [Maps] Do not fetch geo_shape from docvalues (#63997) --- .../public/layers/sources/es_search_source/es_search_source.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 34fed37933e138..aaa56b30c735a4 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 @@ -51,7 +51,7 @@ function getDocValueAndSourceFields(indexPattern, fieldNames) { lang: field.lang, }, }; - } else if (field.readFromDocValues) { + } else if (field.type !== ES_GEO_FIELD_TYPE.GEO_SHAPE && field.readFromDocValues) { const docValueField = field.type === 'date' ? { From 2af0c6d47e159bb5d0aeabb5f5e75f80580614a5 Mon Sep 17 00:00:00 2001 From: Aaron Caldwell Date: Mon, 20 Apr 2020 16:58:33 -0600 Subject: [PATCH 19/39] =?UTF-8?q?[Maps]=20Migrate=20remaining=20maps=20cli?= =?UTF-8?q?ent=20files=20to=20NP=20(except=20routi=E2=80=A6=20(#63859)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Move actions over * Move connected components over * Move components over * Move selectors over * Move embeddables over. Set up legacy presence to keep legacy maps embeddables working * Move angular and services over. Some additional top-level files * Some file moves. Move styles over to NP * Handle feature catalogue entry in NP. Add plugin deps to kibana.json * Move vis registration to NP * Clean up linting comments. Add linting comments to route controller. Move common to NP * Add back in i18n context for embeddable * Fix jest test paths. Fix TS lint errors Co-authored-by: Elastic Machine --- .../legacy/plugins/maps/common/constants.ts | 8 - .../plugins/maps/common/descriptor_types.ts | 8 - .../plugins/maps/common/get_join_key.ts | 8 - .../plugins/maps/common/i18n_getters.ts | 8 - .../plugins/maps/common/parse_xml_string.js | 8 - x-pack/legacy/plugins/maps/index.js | 11 +- x-pack/legacy/plugins/maps/migrations.js | 16 +- .../maps/public/actions/map_actions.d.ts | 8 - .../maps/public/actions/map_actions.js | 978 ------------------ .../plugins/maps/public/actions/ui_actions.js | 91 -- .../maps/public/angular/get_initial_layers.js | 54 - .../maps/public/angular/map_controller.js | 32 +- .../maps/public/components/_index.scss | 3 - .../public/connected_components/_index.scss | 6 - .../layer_addpanel/source_select/_index.scss | 1 - .../layer_panel/_index.scss | 4 - .../layer_panel/view.d.ts | 8 - .../connected_components/map/mb/utils.js | 107 -- .../widget_overlay/_index.scss | 6 - .../widget_overlay/layer_control/_index.scss | 2 - .../embeddable/map_embeddable_factory.ts | 154 +-- x-pack/legacy/plugins/maps/public/index.scss | 16 +- x-pack/legacy/plugins/maps/public/index.ts | 9 +- x-pack/legacy/plugins/maps/public/legacy.ts | 3 +- .../maps/public/legacy_register_feature.ts | 14 - x-pack/legacy/plugins/maps/public/plugin.ts | 5 +- .../maps/public/register_vis_type_alias.js | 49 - x-pack/legacy/plugins/maps/public/routes.js | 9 +- .../server/lib/get_index_pattern_settings.js | 5 +- .../lib/get_index_pattern_settings.test.js | 5 +- .../maps_telemetry/collectors/register.ts | 2 +- .../server/maps_telemetry/maps_telemetry.ts | 4 +- x-pack/legacy/plugins/maps/server/plugin.js | 7 +- x-pack/legacy/plugins/maps/server/routes.js | 2 +- .../migrations/add_field_meta_options.js | 0 .../migrations/add_field_meta_options.test.js | 0 .../ems_raster_tile_to_ems_vector_tile.js | 0 ...ems_raster_tile_to_ems_vector_tile.test.js | 0 .../common/migrations/join_agg_key.test.ts | 0 .../maps/common/migrations/join_agg_key.ts | 2 +- .../migrate_symbol_style_descriptor.js | 0 .../migrate_symbol_style_descriptor.test.js | 0 .../migrations/move_apply_global_query.js | 0 .../move_apply_global_query.test.js | 0 .../maps/common/migrations/references.js | 0 .../maps/common/migrations/references.test.js | 0 .../common/migrations/scaling_type.test.ts | 0 .../maps/common/migrations/scaling_type.ts | 2 +- .../migrations/top_hits_time_to_sort.js | 0 .../migrations/top_hits_time_to_sort.test.js | 0 x-pack/plugins/maps/kibana.json | 10 +- .../plugins/maps/public/_main.scss | 0 .../plugins/maps/public/_mapbox_hacks.scss | 0 .../maps/public/actions/map_actions.js | 925 +++++++++++++++++ .../maps/public/actions/map_actions.test.js | 2 +- .../maps/public/actions/ui_actions.d.ts | 11 + .../plugins/maps/public/actions/ui_actions.js | 70 ++ .../public/angular/get_initial_layers.d.ts | 0 .../maps/public/angular/get_initial_layers.js | 53 + .../public/angular/get_initial_layers.test.js | 17 +- .../maps/public/angular/get_initial_query.js | 3 +- .../angular/get_initial_refresh_config.js | 4 +- .../angular/get_initial_time_filters.js | 4 +- .../public/angular/listing_ng_wrapper.html | 0 .../plugins/maps/public/angular/map.html | 0 .../services/gis_map_saved_object_loader.js | 5 +- .../public/angular/services/saved_gis_map.js | 10 +- .../geometry_filter_form.test.js.snap | 0 .../layer_toc_actions.test.js.snap | 0 .../public/components/_geometry_filter.scss | 0 .../maps/public/components/_index.scss | 3 + .../public/components/_metric_editors.scss | 0 .../public/components/_tooltip_selector.scss | 0 .../components/distance_filter_form.tsx | 0 .../public/components/geo_field_with_index.ts | 0 .../public/components/geometry_filter_form.js | 0 .../components/geometry_filter_form.test.js | 0 .../components/global_filter_checkbox.js | 0 .../public/components/layer_toc_actions.js | 0 .../components/layer_toc_actions.test.js | 0 .../maps/public/components/map_listing.js | 4 +- .../multi_index_geo_field_select.tsx | 0 .../public/connected_components/_index.scss | 6 + .../gis_map/_gis_map.scss | 0 .../connected_components/gis_map/index.d.ts | 4 +- .../connected_components/gis_map/index.js | 8 +- .../connected_components/gis_map/view.js | 15 +- .../layer_addpanel/flyout_footer/index.js | 0 .../layer_addpanel/flyout_footer/view.js | 0 .../layer_addpanel/import_editor/index.js | 8 +- .../layer_addpanel/import_editor/view.js | 4 +- .../layer_addpanel/index.js | 8 +- .../layer_addpanel/source_editor/index.js | 4 +- .../layer_addpanel/source_editor/view.js | 0 .../layer_addpanel/source_select/_index.scss | 1 + .../source_select/_source_select.scss | 0 .../source_select/source_select.js | 4 +- .../layer_addpanel/view.js | 0 .../__snapshots__/view.test.js.snap | 0 .../layer_panel/_index.scss | 4 + .../layer_panel/_layer_panel.scss | 0 .../filter_editor/_filter_editor.scss | 0 .../filter_editor/filter_editor.js | 7 +- .../layer_panel/filter_editor/index.js | 0 .../layer_panel/flyout_footer/index.js | 4 +- .../layer_panel/flyout_footer/view.js | 0 .../connected_components/layer_panel/index.js | 0 .../layer_panel/join_editor/index.js | 0 .../metrics_expression.test.js.snap | 0 .../join_editor/resources/_join.scss | 0 .../layer_panel/join_editor/resources/join.js | 6 +- .../join_editor/resources/join_expression.js | 11 +- .../resources/metrics_expression.js | 4 +- .../resources/metrics_expression.test.js | 2 +- .../join_editor/resources/where_expression.js | 6 +- .../layer_panel/join_editor/view.js | 0 .../__snapshots__/layer_errors.test.js.snap | 0 .../layer_panel/layer_errors/index.js | 0 .../layer_panel/layer_errors/layer_errors.js | 0 .../layer_errors/layer_errors.test.js | 0 .../layer_panel/layer_settings/index.js | 2 +- .../layer_settings/layer_settings.js | 5 +- .../style_settings/_style_settings.scss | 0 .../layer_panel/style_settings/index.js | 0 .../style_settings/style_settings.js | 0 .../connected_components/layer_panel/view.js | 8 +- .../layer_panel/view.test.js | 0 .../feature_properties.test.js.snap | 0 .../__snapshots__/tooltip_header.test.js.snap | 0 .../map/features_tooltip/_index.scss | 0 .../feature_geometry_filter_form.js | 8 +- .../features_tooltip/feature_properties.js | 0 .../feature_properties.test.js | 0 .../map/features_tooltip/features_tooltip.js | 0 .../map/features_tooltip/tooltip_header.js | 0 .../features_tooltip/tooltip_header.test.js | 0 .../map/mb/draw_control/draw_circle.ts | 0 .../map/mb/draw_control/draw_control.js | 3 +- .../map/mb/draw_control/draw_tooltip.js | 0 .../map/mb/draw_control/index.js | 0 .../connected_components/map/mb/index.js | 4 +- .../map/mb/mb.utils.test.js | 0 .../tooltip_control.test.js.snap | 0 .../tooltip_popover.test.js.snap | 0 .../map/mb/tooltip_control/index.js | 0 .../map/mb/tooltip_control/tooltip_control.js | 0 .../tooltip_control/tooltip_control.test.js | 0 .../map/mb/tooltip_control/tooltip_popover.js | 0 .../tooltip_control/tooltip_popover.test.js | 0 .../connected_components/map/mb/utils.js | 94 ++ .../connected_components/map/mb/view.js | 16 +- .../toolbar_overlay/_index.scss | 2 +- .../toolbar_overlay/index.js | 0 .../toolbar_overlay/set_view_control/index.js | 0 .../set_view_control/set_view_control.js | 0 .../toolbar_overlay/toolbar_overlay.js | 0 .../__snapshots__/tools_control.test.js.snap | 0 .../toolbar_overlay/tools_control/_index.scss | 0 .../toolbar_overlay/tools_control/index.js | 0 .../tools_control/tools_control.js | 0 .../tools_control/tools_control.test.js | 0 .../widget_overlay/_index.scss | 6 + .../widget_overlay/_mixins.scss | 0 .../widget_overlay/_widget_overlay.scss | 0 .../__snapshots__/view.test.js.snap | 0 .../_attribution_control.scss | 0 .../attribution_control/index.js | 0 .../attribution_control/view.js | 0 .../attribution_control/view.test.js | 0 .../widget_overlay/index.js | 0 .../__snapshots__/view.test.js.snap | 0 .../widget_overlay/layer_control/_index.scss | 2 + .../layer_control/_layer_control.scss | 0 .../widget_overlay/layer_control/index.js | 4 +- .../layer_toc/__snapshots__/view.test.js.snap | 0 .../layer_control/layer_toc/index.js | 0 .../toc_entry/__snapshots__/view.test.js.snap | 0 .../layer_toc/toc_entry/_toc_entry.scss | 0 .../layer_toc/toc_entry/index.js | 4 +- .../layer_control/layer_toc/toc_entry/view.js | 0 .../layer_toc/toc_entry/view.test.js | 0 .../layer_control/layer_toc/view.js | 0 .../layer_control/layer_toc/view.test.js | 0 .../widget_overlay/layer_control/view.js | 0 .../widget_overlay/layer_control/view.test.js | 0 .../view_control/_view_control.scss | 0 .../widget_overlay/view_control/index.js | 0 .../view_control/view_control.js | 0 .../widget_overlay/widget_overlay.js | 0 .../plugins/maps/public/embeddable/README.md | 0 .../plugins/maps/public/embeddable/index.ts | 0 .../maps/public/embeddable/map_embeddable.tsx | 25 +- .../embeddable/map_embeddable_factory.ts | 136 +++ .../merge_input_with_saved_map.d.ts | 0 .../embeddable/merge_input_with_saved_map.js | 4 +- .../maps/public/feature_catalogue_entry.ts | 2 +- .../plugins/maps/public/help_menu_util.js | 4 +- .../{legacy => }/plugins/maps/public/icon.svg | 0 x-pack/plugins/maps/public/index.scss | 17 + x-pack/plugins/maps/public/layers/layer.js | 2 +- .../layers/sources/es_source/es_source.js | 2 +- .../maps/public/layers/sources/source.js | 1 - .../maps/public/maps_vis_type_alias.js | 41 + x-pack/plugins/maps/public/plugin.ts | 18 +- x-pack/plugins/maps/public/reducers/ui.ts | 1 - .../maps/public/selectors/map_selectors.d.ts | 4 +- .../maps/public/selectors/map_selectors.js | 46 +- .../public/selectors/map_selectors.test.js | 16 +- .../maps/public/selectors/ui_selectors.ts | 7 +- 209 files changed, 1617 insertions(+), 1749 deletions(-) delete mode 100644 x-pack/legacy/plugins/maps/common/constants.ts delete mode 100644 x-pack/legacy/plugins/maps/common/descriptor_types.ts delete mode 100644 x-pack/legacy/plugins/maps/common/get_join_key.ts delete mode 100644 x-pack/legacy/plugins/maps/common/i18n_getters.ts delete mode 100644 x-pack/legacy/plugins/maps/common/parse_xml_string.js delete mode 100644 x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts delete mode 100644 x-pack/legacy/plugins/maps/public/actions/map_actions.js delete mode 100644 x-pack/legacy/plugins/maps/public/actions/ui_actions.js delete mode 100644 x-pack/legacy/plugins/maps/public/angular/get_initial_layers.js delete mode 100644 x-pack/legacy/plugins/maps/public/components/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/map/mb/utils.js delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss delete mode 100644 x-pack/legacy/plugins/maps/public/legacy_register_feature.ts delete mode 100644 x-pack/legacy/plugins/maps/public/register_vis_type_alias.js rename x-pack/{legacy => }/plugins/maps/common/migrations/add_field_meta_options.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/add_field_meta_options.test.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.test.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/join_agg_key.test.ts (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/join_agg_key.ts (97%) rename x-pack/{legacy => }/plugins/maps/common/migrations/migrate_symbol_style_descriptor.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/migrate_symbol_style_descriptor.test.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/move_apply_global_query.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/move_apply_global_query.test.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/references.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/references.test.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/scaling_type.test.ts (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/scaling_type.ts (93%) rename x-pack/{legacy => }/plugins/maps/common/migrations/top_hits_time_to_sort.js (100%) rename x-pack/{legacy => }/plugins/maps/common/migrations/top_hits_time_to_sort.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/_main.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/_mapbox_hacks.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/actions/map_actions.test.js (98%) rename x-pack/{legacy => }/plugins/maps/public/actions/ui_actions.d.ts (54%) rename x-pack/{legacy => }/plugins/maps/public/angular/get_initial_layers.d.ts (100%) create mode 100644 x-pack/plugins/maps/public/angular/get_initial_layers.js rename x-pack/{legacy => }/plugins/maps/public/angular/get_initial_layers.test.js (80%) rename x-pack/{legacy => }/plugins/maps/public/angular/get_initial_query.js (82%) rename x-pack/{legacy => }/plugins/maps/public/angular/get_initial_refresh_config.js (84%) rename x-pack/{legacy => }/plugins/maps/public/angular/get_initial_time_filters.js (80%) rename x-pack/{legacy => }/plugins/maps/public/angular/listing_ng_wrapper.html (100%) rename x-pack/{legacy => }/plugins/maps/public/angular/map.html (100%) rename x-pack/{legacy => }/plugins/maps/public/angular/services/gis_map_saved_object_loader.js (79%) rename x-pack/{legacy => }/plugins/maps/public/angular/services/saved_gis_map.js (88%) rename x-pack/{legacy => }/plugins/maps/public/components/__snapshots__/geometry_filter_form.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/components/__snapshots__/layer_toc_actions.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/components/_geometry_filter.scss (100%) create mode 100644 x-pack/plugins/maps/public/components/_index.scss rename x-pack/{legacy => }/plugins/maps/public/components/_metric_editors.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/components/_tooltip_selector.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/components/distance_filter_form.tsx (100%) rename x-pack/{legacy => }/plugins/maps/public/components/geo_field_with_index.ts (100%) rename x-pack/{legacy => }/plugins/maps/public/components/geometry_filter_form.js (100%) rename x-pack/{legacy => }/plugins/maps/public/components/geometry_filter_form.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/components/global_filter_checkbox.js (100%) rename x-pack/{legacy => }/plugins/maps/public/components/layer_toc_actions.js (100%) rename x-pack/{legacy => }/plugins/maps/public/components/layer_toc_actions.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/components/map_listing.js (98%) rename x-pack/{legacy => }/plugins/maps/public/components/multi_index_geo_field_select.tsx (100%) create mode 100644 x-pack/plugins/maps/public/connected_components/_index.scss rename x-pack/{legacy => }/plugins/maps/public/connected_components/gis_map/_gis_map.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/gis_map/index.d.ts (73%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/gis_map/index.js (85%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/gis_map/view.js (92%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js (76%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js (89%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/index.js (85%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js (75%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/source_editor/view.js (100%) create mode 100644 x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/source_select/_source_select.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js (90%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_addpanel/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/__snapshots__/view.test.js.snap (100%) create mode 100644 x-pack/plugins/maps/public/connected_components/layer_panel/_index.scss rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/_layer_panel.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/filter_editor/_filter_editor.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js (96%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/filter_editor/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js (89%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/flyout_footer/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/__snapshots__/metrics_expression.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/_join.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js (95%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js (93%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js (95%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js (92%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js (94%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/join_editor/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_errors/__snapshots__/layer_errors.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_errors/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js (94%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js (92%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/style_settings/_style_settings.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/style_settings/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/style_settings/style_settings.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/view.js (95%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/layer_panel/view.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/feature_properties.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/tooltip_header.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/_index.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js (92%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/features_tooltip.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/draw_control/draw_circle.ts (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js (96%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/draw_control/draw_tooltip.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/draw_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/index.js (91%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/mb.utils.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_control.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_popover.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/map/mb/view.js (94%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/_index.scss (93%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/set_view_control.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/toolbar_overlay.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/tools_control/__snapshots__/tools_control.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/tools_control/_index.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/tools_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.test.js (100%) create mode 100644 x-pack/plugins/maps/public/connected_components/widget_overlay/_index.scss rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/_mixins.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/_widget_overlay.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/attribution_control/__snapshots__/view.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/__snapshots__/view.test.js.snap (100%) create mode 100644 x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/_layer_control.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js (90%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/__snapshots__/view.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/__snapshots__/view.test.js.snap (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/_toc_entry.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js (93%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/view.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/layer_control/view.test.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/view_control/_view_control.scss (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/view_control/index.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/view_control/view_control.js (100%) rename x-pack/{legacy => }/plugins/maps/public/connected_components/widget_overlay/widget_overlay.js (100%) rename x-pack/{legacy => }/plugins/maps/public/embeddable/README.md (100%) rename x-pack/{legacy => }/plugins/maps/public/embeddable/index.ts (100%) rename x-pack/{legacy => }/plugins/maps/public/embeddable/map_embeddable.tsx (90%) create mode 100644 x-pack/plugins/maps/public/embeddable/map_embeddable_factory.ts rename x-pack/{legacy => }/plugins/maps/public/embeddable/merge_input_with_saved_map.d.ts (100%) rename x-pack/{legacy => }/plugins/maps/public/embeddable/merge_input_with_saved_map.js (89%) rename x-pack/{legacy => }/plugins/maps/public/feature_catalogue_entry.ts (89%) rename x-pack/{legacy => }/plugins/maps/public/help_menu_util.js (81%) rename x-pack/{legacy => }/plugins/maps/public/icon.svg (100%) create mode 100644 x-pack/plugins/maps/public/index.scss create mode 100644 x-pack/plugins/maps/public/maps_vis_type_alias.js rename x-pack/{legacy => }/plugins/maps/public/selectors/map_selectors.d.ts (81%) rename x-pack/{legacy => }/plugins/maps/public/selectors/map_selectors.js (82%) rename x-pack/{legacy => }/plugins/maps/public/selectors/map_selectors.test.js (62%) rename x-pack/{legacy => }/plugins/maps/public/selectors/ui_selectors.ts (74%) diff --git a/x-pack/legacy/plugins/maps/common/constants.ts b/x-pack/legacy/plugins/maps/common/constants.ts deleted file mode 100644 index 98945653c25dc8..00000000000000 --- a/x-pack/legacy/plugins/maps/common/constants.ts +++ /dev/null @@ -1,8 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../plugins/maps/common/constants'; diff --git a/x-pack/legacy/plugins/maps/common/descriptor_types.ts b/x-pack/legacy/plugins/maps/common/descriptor_types.ts deleted file mode 100644 index 1f0eda26e7f7dc..00000000000000 --- a/x-pack/legacy/plugins/maps/common/descriptor_types.ts +++ /dev/null @@ -1,8 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../plugins/maps/common/descriptor_types'; diff --git a/x-pack/legacy/plugins/maps/common/get_join_key.ts b/x-pack/legacy/plugins/maps/common/get_join_key.ts deleted file mode 100644 index 004f12ca08d2ea..00000000000000 --- a/x-pack/legacy/plugins/maps/common/get_join_key.ts +++ /dev/null @@ -1,8 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../plugins/maps/common/get_join_key'; diff --git a/x-pack/legacy/plugins/maps/common/i18n_getters.ts b/x-pack/legacy/plugins/maps/common/i18n_getters.ts deleted file mode 100644 index f9d186dea2e2b9..00000000000000 --- a/x-pack/legacy/plugins/maps/common/i18n_getters.ts +++ /dev/null @@ -1,8 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../plugins/maps/common/i18n_getters'; diff --git a/x-pack/legacy/plugins/maps/common/parse_xml_string.js b/x-pack/legacy/plugins/maps/common/parse_xml_string.js deleted file mode 100644 index 34ec1444728281..00000000000000 --- a/x-pack/legacy/plugins/maps/common/parse_xml_string.js +++ /dev/null @@ -1,8 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../plugins/maps/common/parse_xml_string'; diff --git a/x-pack/legacy/plugins/maps/index.js b/x-pack/legacy/plugins/maps/index.js index f4e01efc05f45f..8546e3712c7630 100644 --- a/x-pack/legacy/plugins/maps/index.js +++ b/x-pack/legacy/plugins/maps/index.js @@ -9,9 +9,14 @@ import mappings from './mappings.json'; import { i18n } from '@kbn/i18n'; import { resolve } from 'path'; import { migrations } from './migrations'; -import { getAppTitle } from './common/i18n_getters'; +import { getAppTitle } from '../../../plugins/maps/common/i18n_getters'; import { MapPlugin } from './server/plugin'; -import { APP_ID, APP_ICON, createMapPath, MAP_SAVED_OBJECT_TYPE } from './common/constants'; +import { + APP_ID, + APP_ICON, + createMapPath, + MAP_SAVED_OBJECT_TYPE, +} from '../../../plugins/maps/common/constants'; import { DEFAULT_APP_CATEGORIES } from '../../../../src/core/utils'; export function maps(kibana) { @@ -53,7 +58,6 @@ export function maps(kibana) { }; }, embeddableFactories: ['plugins/maps/embeddable/map_embeddable_factory'], - home: ['plugins/maps/legacy_register_feature'], styleSheetPaths: `${__dirname}/public/index.scss`, savedObjectSchemas: { 'maps-telemetry': { @@ -78,7 +82,6 @@ export function maps(kibana) { }, mappings, migrations, - hacks: ['plugins/maps/register_vis_type_alias'], }, config(Joi) { return Joi.object({ diff --git a/x-pack/legacy/plugins/maps/migrations.js b/x-pack/legacy/plugins/maps/migrations.js index a8e69eef7a02fd..d3666025082b78 100644 --- a/x-pack/legacy/plugins/maps/migrations.js +++ b/x-pack/legacy/plugins/maps/migrations.js @@ -4,14 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import { extractReferences } from './common/migrations/references'; -import { emsRasterTileToEmsVectorTile } from './common/migrations/ems_raster_tile_to_ems_vector_tile'; -import { topHitsTimeToSort } from './common/migrations/top_hits_time_to_sort'; -import { moveApplyGlobalQueryToSources } from './common/migrations/move_apply_global_query'; -import { addFieldMetaOptions } from './common/migrations/add_field_meta_options'; -import { migrateSymbolStyleDescriptor } from './common/migrations/migrate_symbol_style_descriptor'; -import { migrateUseTopHitsToScalingType } from './common/migrations/scaling_type'; -import { migrateJoinAggKey } from './common/migrations/join_agg_key'; +import { extractReferences } from '../../../plugins/maps/common/migrations/references'; +import { emsRasterTileToEmsVectorTile } from '../../../plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile'; +import { topHitsTimeToSort } from '../../../plugins/maps/common/migrations/top_hits_time_to_sort'; +import { moveApplyGlobalQueryToSources } from '../../../plugins/maps/common/migrations/move_apply_global_query'; +import { addFieldMetaOptions } from '../../../plugins/maps/common/migrations/add_field_meta_options'; +import { migrateSymbolStyleDescriptor } from '../../../plugins/maps/common/migrations/migrate_symbol_style_descriptor'; +import { migrateUseTopHitsToScalingType } from '../../../plugins/maps/common/migrations/scaling_type'; +import { migrateJoinAggKey } from '../../../plugins/maps/common/migrations/join_agg_key'; export const migrations = { map: { diff --git a/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts b/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts deleted file mode 100644 index 34f8c30b51874b..00000000000000 --- a/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts +++ /dev/null @@ -1,8 +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. - */ -/* eslint-disable @typescript-eslint/consistent-type-definitions */ - -export * from '../../../../../plugins/maps/public/actions/map_actions'; diff --git a/x-pack/legacy/plugins/maps/public/actions/map_actions.js b/x-pack/legacy/plugins/maps/public/actions/map_actions.js deleted file mode 100644 index 7bfbf5761c5b8c..00000000000000 --- a/x-pack/legacy/plugins/maps/public/actions/map_actions.js +++ /dev/null @@ -1,978 +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 'lodash'; -import turf from 'turf'; -import turfBooleanContains from '@turf/boolean-contains'; -import uuid from 'uuid/v4'; -import { - getLayerList, - getLayerListRaw, - getDataFilters, - getSelectedLayerId, - getMapReady, - getWaitingForMapReadyLayerListRaw, - getTransientLayerId, - getOpenTooltips, - getQuery, - getDataRequestDescriptor, -} from '../selectors/map_selectors'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE } from '../../../../../plugins/maps/public/reducers/ui'; -import { - cancelRequest, - registerCancelCallback, - unregisterCancelCallback, - getEventHandlers, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/reducers/non_serializable_instances'; -import { updateFlyout } from '../actions/ui_actions'; -import { - FEATURE_ID_PROPERTY_NAME, - LAYER_TYPE, - SOURCE_DATA_ID_ORIGIN, -} from '../../common/constants'; - -import { - SET_SELECTED_LAYER, - SET_TRANSIENT_LAYER, - UPDATE_LAYER_ORDER, - ADD_LAYER, - SET_LAYER_ERROR_STATUS, - ADD_WAITING_FOR_MAP_READY_LAYER, - CLEAR_WAITING_FOR_MAP_READY_LAYER_LIST, - REMOVE_LAYER, - SET_LAYER_VISIBILITY, - MAP_EXTENT_CHANGED, - MAP_READY, - MAP_DESTROYED, - LAYER_DATA_LOAD_STARTED, - LAYER_DATA_LOAD_ENDED, - LAYER_DATA_LOAD_ERROR, - UPDATE_SOURCE_DATA_REQUEST, - SET_JOINS, - SET_QUERY, - TRIGGER_REFRESH_TIMER, - UPDATE_LAYER_PROP, - UPDATE_LAYER_STYLE, - SET_LAYER_STYLE_META, - UPDATE_SOURCE_PROP, - SET_REFRESH_CONFIG, - SET_MOUSE_COORDINATES, - CLEAR_MOUSE_COORDINATES, - SET_GOTO, - CLEAR_GOTO, - TRACK_CURRENT_LAYER_STATE, - ROLLBACK_TO_TRACKED_LAYER_STATE, - REMOVE_TRACKED_LAYER_STATE, - SET_OPEN_TOOLTIPS, - UPDATE_DRAW_STATE, - SET_SCROLL_ZOOM, - SET_MAP_INIT_ERROR, - SET_INTERACTIVE, - DISABLE_TOOLTIP_CONTROL, - HIDE_TOOLBAR_OVERLAY, - HIDE_LAYER_CONTROL, - HIDE_VIEW_CONTROL, - SET_WAITING_FOR_READY_HIDDEN_LAYERS, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/actions/map_actions'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../../plugins/maps/public/actions/map_actions'; - -function getLayerLoadingCallbacks(dispatch, getState, layerId) { - return { - startLoading: (dataId, requestToken, meta) => - dispatch(startDataLoad(layerId, dataId, requestToken, meta)), - stopLoading: (dataId, requestToken, data, meta) => - dispatch(endDataLoad(layerId, dataId, requestToken, data, meta)), - onLoadError: (dataId, requestToken, errorMessage) => - dispatch(onDataLoadError(layerId, dataId, requestToken, errorMessage)), - updateSourceData: newData => { - dispatch(updateSourceDataRequest(layerId, newData)); - }, - isRequestStillActive: (dataId, requestToken) => { - const dataRequest = getDataRequestDescriptor(getState(), layerId, dataId); - if (!dataRequest) { - return false; - } - return dataRequest.dataRequestToken === requestToken; - }, - registerCancelCallback: (requestToken, callback) => - dispatch(registerCancelCallback(requestToken, callback)), - }; -} - -function getLayerById(layerId, state) { - return getLayerList(state).find(layer => { - return layerId === layer.getId(); - }); -} - -async function syncDataForAllLayers(dispatch, getState, dataFilters) { - const state = getState(); - const layerList = getLayerList(state); - const syncs = layerList.map(layer => { - const loadingFunctions = getLayerLoadingCallbacks(dispatch, getState, layer.getId()); - return layer.syncData({ ...loadingFunctions, dataFilters }); - }); - await Promise.all(syncs); -} - -export function cancelAllInFlightRequests() { - return (dispatch, getState) => { - getLayerList(getState()).forEach(layer => { - 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: [], - }); - }; -} - -export function setMapInitError(errorMessage) { - return { - type: SET_MAP_INIT_ERROR, - errorMessage, - }; -} - -export function trackCurrentLayerState(layerId) { - return { - type: TRACK_CURRENT_LAYER_STATE, - layerId: layerId, - }; -} - -export function rollbackToTrackedLayerStateForSelectedLayer() { - return async (dispatch, getState) => { - const layerId = getSelectedLayerId(getState()); - await dispatch({ - type: ROLLBACK_TO_TRACKED_LAYER_STATE, - layerId: layerId, - }); - - // Ensure updateStyleMeta is triggered - // syncDataForLayer may not trigger endDataLoad if no re-fetch is required - dispatch(updateStyleMeta(layerId)); - - dispatch(syncDataForLayer(layerId)); - }; -} - -export function removeTrackedLayerStateForSelectedLayer() { - return (dispatch, getState) => { - const layerId = getSelectedLayerId(getState()); - dispatch({ - type: REMOVE_TRACKED_LAYER_STATE, - layerId: layerId, - }); - }; -} - -export function replaceLayerList(newLayerList) { - return (dispatch, getState) => { - const isMapReady = getMapReady(getState()); - if (!isMapReady) { - dispatch({ - type: CLEAR_WAITING_FOR_MAP_READY_LAYER_LIST, - }); - } else { - getLayerListRaw(getState()).forEach(({ id }) => { - dispatch(removeLayerFromLayerList(id)); - }); - } - - newLayerList.forEach(layerDescriptor => { - dispatch(addLayer(layerDescriptor)); - }); - }; -} - -export function cloneLayer(layerId) { - return async (dispatch, getState) => { - const layer = getLayerById(layerId, getState()); - if (!layer) { - return; - } - - const clonedDescriptor = await layer.cloneDescriptor(); - dispatch(addLayer(clonedDescriptor)); - }; -} - -export function addLayer(layerDescriptor) { - return (dispatch, getState) => { - const isMapReady = getMapReady(getState()); - if (!isMapReady) { - dispatch({ - type: ADD_WAITING_FOR_MAP_READY_LAYER, - layer: layerDescriptor, - }); - return; - } - - dispatch({ - type: ADD_LAYER, - layer: layerDescriptor, - }); - dispatch(syncDataForLayer(layerDescriptor.id)); - }; -} - -// Do not use when rendering a map. Method exists to enable selectors for getLayerList when -// rendering is not needed. -export function addLayerWithoutDataSync(layerDescriptor) { - return { - type: ADD_LAYER, - layer: layerDescriptor, - }; -} - -function setLayerDataLoadErrorStatus(layerId, errorMessage) { - return dispatch => { - dispatch({ - type: SET_LAYER_ERROR_STATUS, - isInErrorState: errorMessage !== null, - layerId, - errorMessage, - }); - }; -} - -export function cleanTooltipStateForLayer(layerId, layerFeatures = []) { - return (dispatch, getState) => { - let featuresRemoved = false; - const openTooltips = getOpenTooltips(getState()) - .map(tooltipState => { - const nextFeatures = tooltipState.features.filter(tooltipFeature => { - if (tooltipFeature.layerId !== layerId) { - // feature from another layer, keep it - return true; - } - - // Keep feature if it is still in layer - return layerFeatures.some(layerFeature => { - return layerFeature.properties[FEATURE_ID_PROPERTY_NAME] === tooltipFeature.id; - }); - }); - - if (tooltipState.features.length !== nextFeatures.length) { - featuresRemoved = true; - } - - return { ...tooltipState, features: nextFeatures }; - }) - .filter(tooltipState => { - return tooltipState.features.length > 0; - }); - - if (featuresRemoved) { - dispatch({ - type: SET_OPEN_TOOLTIPS, - openTooltips, - }); - } - }; -} - -export function setLayerVisibility(layerId, makeVisible) { - return async (dispatch, getState) => { - //if the current-state is invisible, we also want to sync data - //e.g. if a layer was invisible at start-up, it won't have any data loaded - const layer = getLayerById(layerId, getState()); - - // If the layer visibility is already what we want it to be, do nothing - if (!layer || layer.isVisible() === makeVisible) { - return; - } - - if (!makeVisible) { - dispatch(cleanTooltipStateForLayer(layerId)); - } - - await dispatch({ - type: SET_LAYER_VISIBILITY, - layerId, - visibility: makeVisible, - }); - if (makeVisible) { - dispatch(syncDataForLayer(layerId)); - } - }; -} - -export function toggleLayerVisible(layerId) { - return async (dispatch, getState) => { - const layer = getLayerById(layerId, getState()); - if (!layer) { - return; - } - const makeVisible = !layer.isVisible(); - - dispatch(setLayerVisibility(layerId, makeVisible)); - }; -} - -export function setSelectedLayer(layerId) { - return async (dispatch, getState) => { - const oldSelectedLayer = getSelectedLayerId(getState()); - if (oldSelectedLayer) { - await dispatch(rollbackToTrackedLayerStateForSelectedLayer()); - } - if (layerId) { - dispatch(trackCurrentLayerState(layerId)); - } - dispatch({ - type: SET_SELECTED_LAYER, - selectedLayerId: layerId, - }); - }; -} - -export function removeTransientLayer() { - return async (dispatch, getState) => { - const transientLayerId = getTransientLayerId(getState()); - if (transientLayerId) { - await dispatch(removeLayerFromLayerList(transientLayerId)); - await dispatch(setTransientLayer(null)); - } - }; -} - -export function setTransientLayer(layerId) { - return { - type: SET_TRANSIENT_LAYER, - transientLayerId: layerId, - }; -} - -export function clearTransientLayerStateAndCloseFlyout() { - return async dispatch => { - await dispatch(updateFlyout(FLYOUT_STATE.NONE)); - await dispatch(setSelectedLayer(null)); - await dispatch(removeTransientLayer()); - }; -} - -export function updateLayerOrder(newLayerOrder) { - return { - type: UPDATE_LAYER_ORDER, - newLayerOrder, - }; -} - -export function mapReady() { - return (dispatch, getState) => { - dispatch({ - type: MAP_READY, - }); - - getWaitingForMapReadyLayerListRaw(getState()).forEach(layerDescriptor => { - dispatch(addLayer(layerDescriptor)); - }); - - dispatch({ - type: CLEAR_WAITING_FOR_MAP_READY_LAYER_LIST, - }); - }; -} - -export function mapDestroyed() { - return { - type: MAP_DESTROYED, - }; -} - -export function mapExtentChanged(newMapConstants) { - return async (dispatch, getState) => { - const state = getState(); - const dataFilters = getDataFilters(state); - const { extent, zoom: newZoom } = newMapConstants; - const { buffer, zoom: currentZoom } = dataFilters; - - if (extent) { - let doesBufferContainExtent = false; - if (buffer) { - const bufferGeometry = turf.bboxPolygon([ - buffer.minLon, - buffer.minLat, - buffer.maxLon, - buffer.maxLat, - ]); - const extentGeometry = turf.bboxPolygon([ - extent.minLon, - extent.minLat, - extent.maxLon, - extent.maxLat, - ]); - - doesBufferContainExtent = turfBooleanContains(bufferGeometry, extentGeometry); - } - - if (!doesBufferContainExtent || currentZoom !== newZoom) { - const scaleFactor = 0.5; // TODO put scale factor in store and fetch with selector - const width = extent.maxLon - extent.minLon; - const height = extent.maxLat - extent.minLat; - dataFilters.buffer = { - minLon: extent.minLon - width * scaleFactor, - minLat: extent.minLat - height * scaleFactor, - maxLon: extent.maxLon + width * scaleFactor, - maxLat: extent.maxLat + height * scaleFactor, - }; - } - } - - dispatch({ - type: MAP_EXTENT_CHANGED, - mapState: { - ...dataFilters, - ...newMapConstants, - }, - }); - const newDataFilters = { ...dataFilters, ...newMapConstants }; - await syncDataForAllLayers(dispatch, getState, newDataFilters); - }; -} - -export function closeOnClickTooltip(tooltipId) { - return (dispatch, getState) => { - dispatch({ - type: SET_OPEN_TOOLTIPS, - openTooltips: getOpenTooltips(getState()).filter(({ id }) => { - return tooltipId !== id; - }), - }); - }; -} - -export function openOnClickTooltip(tooltipState) { - return (dispatch, getState) => { - const openTooltips = getOpenTooltips(getState()).filter(({ features, location, isLocked }) => { - return ( - isLocked && - !_.isEqual(location, tooltipState.location) && - !_.isEqual(features, tooltipState.features) - ); - }); - - openTooltips.push({ - ...tooltipState, - isLocked: true, - id: uuid(), - }); - - dispatch({ - type: SET_OPEN_TOOLTIPS, - openTooltips, - }); - }; -} - -export function closeOnHoverTooltip() { - return (dispatch, getState) => { - if (getOpenTooltips(getState()).length) { - dispatch({ - type: SET_OPEN_TOOLTIPS, - openTooltips: [], - }); - } - }; -} - -export function openOnHoverTooltip(tooltipState) { - return { - type: SET_OPEN_TOOLTIPS, - openTooltips: [ - { - ...tooltipState, - isLocked: false, - id: uuid(), - }, - ], - }; -} - -export function setMouseCoordinates({ lat, lon }) { - let safeLon = lon; - if (lon > 180) { - const overlapWestOfDateLine = lon - 180; - safeLon = -180 + overlapWestOfDateLine; - } else if (lon < -180) { - const overlapEastOfDateLine = Math.abs(lon) - 180; - safeLon = 180 - overlapEastOfDateLine; - } - - return { - type: SET_MOUSE_COORDINATES, - lat, - lon: safeLon, - }; -} - -export function clearMouseCoordinates() { - return { type: CLEAR_MOUSE_COORDINATES }; -} - -export function disableScrollZoom() { - return { type: SET_SCROLL_ZOOM, scrollZoom: false }; -} - -export function fitToLayerExtent(layerId) { - return async function(dispatch, getState) { - const targetLayer = getLayerById(layerId, getState()); - - if (targetLayer) { - const dataFilters = getDataFilters(getState()); - const bounds = await targetLayer.getBounds(dataFilters); - if (bounds) { - await dispatch(setGotoWithBounds(bounds)); - } - } - }; -} - -export function setGotoWithBounds(bounds) { - return { - type: SET_GOTO, - bounds: bounds, - }; -} - -export function setGotoWithCenter({ lat, lon, zoom }) { - return { - type: SET_GOTO, - center: { lat, lon, zoom }, - }; -} - -export function clearGoto() { - return { type: CLEAR_GOTO }; -} - -export function startDataLoad(layerId, dataId, requestToken, meta = {}) { - return (dispatch, getState) => { - const layer = getLayerById(layerId, getState()); - if (layer) { - dispatch(cancelRequest(layer.getPrevRequestToken(dataId))); - } - - const eventHandlers = getEventHandlers(getState()); - if (eventHandlers && eventHandlers.onDataLoad) { - eventHandlers.onDataLoad({ - layerId, - dataId, - }); - } - - dispatch({ - meta, - type: LAYER_DATA_LOAD_STARTED, - layerId, - dataId, - requestToken, - }); - }; -} - -export function updateSourceDataRequest(layerId, newData) { - return dispatch => { - dispatch({ - type: UPDATE_SOURCE_DATA_REQUEST, - dataId: SOURCE_DATA_ID_ORIGIN, - layerId, - newData, - }); - - dispatch(updateStyleMeta(layerId)); - }; -} - -export function endDataLoad(layerId, dataId, requestToken, data, meta) { - return async (dispatch, getState) => { - dispatch(unregisterCancelCallback(requestToken)); - - const features = data && data.features ? data.features : []; - - const eventHandlers = getEventHandlers(getState()); - if (eventHandlers && eventHandlers.onDataLoadEnd) { - const layer = getLayerById(layerId, getState()); - const resultMeta = {}; - if (layer && layer.getType() === LAYER_TYPE.VECTOR) { - resultMeta.featuresCount = features.length; - } - - eventHandlers.onDataLoadEnd({ - layerId, - dataId, - resultMeta, - }); - } - - dispatch(cleanTooltipStateForLayer(layerId, features)); - dispatch({ - type: LAYER_DATA_LOAD_ENDED, - layerId, - dataId, - data, - meta, - requestToken, - }); - - //Clear any data-load errors when there is a succesful data return. - //Co this on end-data-load iso at start-data-load to avoid blipping the error status between true/false. - //This avoids jitter in the warning icon of the TOC when the requests continues to return errors. - dispatch(setLayerDataLoadErrorStatus(layerId, null)); - - dispatch(updateStyleMeta(layerId)); - }; -} - -export function onDataLoadError(layerId, dataId, requestToken, errorMessage) { - return async (dispatch, getState) => { - dispatch(unregisterCancelCallback(requestToken)); - - const eventHandlers = getEventHandlers(getState()); - if (eventHandlers && eventHandlers.onDataLoadError) { - eventHandlers.onDataLoadError({ - layerId, - dataId, - errorMessage, - }); - } - - dispatch(cleanTooltipStateForLayer(layerId)); - dispatch({ - type: LAYER_DATA_LOAD_ERROR, - data: null, - layerId, - dataId, - requestToken, - }); - - dispatch(setLayerDataLoadErrorStatus(layerId, errorMessage)); - }; -} - -export function updateSourceProp(layerId, propName, value, newLayerType) { - return async dispatch => { - dispatch({ - type: UPDATE_SOURCE_PROP, - layerId, - propName, - value, - }); - 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()); - if (targetLayer) { - const dataFilters = getDataFilters(getState()); - const loadingFunctions = getLayerLoadingCallbacks(dispatch, getState, layerId); - await targetLayer.syncData({ - ...loadingFunctions, - dataFilters, - }); - } - }; -} - -export function updateLayerLabel(id, newLabel) { - return { - type: UPDATE_LAYER_PROP, - id, - propName: 'label', - newValue: newLabel, - }; -} - -export function updateLayerMinZoom(id, minZoom) { - return { - type: UPDATE_LAYER_PROP, - id, - propName: 'minZoom', - newValue: minZoom, - }; -} - -export function updateLayerMaxZoom(id, maxZoom) { - return { - type: UPDATE_LAYER_PROP, - id, - propName: 'maxZoom', - newValue: maxZoom, - }; -} - -export function updateLayerAlpha(id, alpha) { - return { - type: UPDATE_LAYER_PROP, - id, - propName: 'alpha', - newValue: alpha, - }; -} - -export function setLayerQuery(id, query) { - return dispatch => { - dispatch({ - type: UPDATE_LAYER_PROP, - id, - propName: 'query', - newValue: query, - }); - - dispatch(syncDataForLayer(id)); - }; -} - -export function removeSelectedLayer() { - return (dispatch, getState) => { - const state = getState(); - const layerId = getSelectedLayerId(state); - dispatch(removeLayer(layerId)); - }; -} - -export function removeLayer(layerId) { - return async (dispatch, getState) => { - const state = getState(); - const selectedLayerId = getSelectedLayerId(state); - if (layerId === selectedLayerId) { - dispatch(updateFlyout(FLYOUT_STATE.NONE)); - await dispatch(setSelectedLayer(null)); - } - dispatch(removeLayerFromLayerList(layerId)); - }; -} - -function removeLayerFromLayerList(layerId) { - return (dispatch, getState) => { - const layerGettingRemoved = getLayerById(layerId, getState()); - if (!layerGettingRemoved) { - return; - } - - layerGettingRemoved.getInFlightRequestTokens().forEach(requestToken => { - dispatch(cancelRequest(requestToken)); - }); - dispatch(cleanTooltipStateForLayer(layerId)); - layerGettingRemoved.destroy(); - dispatch({ - type: REMOVE_LAYER, - id: layerId, - }); - }; -} - -export function setQuery({ query, timeFilters, filters = [], refresh = false }) { - function generateQueryTimestamp() { - return new Date().toISOString(); - } - return async (dispatch, getState) => { - const prevQuery = getQuery(getState()); - const prevTriggeredAt = - prevQuery && prevQuery.queryLastTriggeredAt - ? prevQuery.queryLastTriggeredAt - : generateQueryTimestamp(); - - dispatch({ - type: SET_QUERY, - timeFilters, - query: { - ...query, - // ensure query changes to trigger re-fetch when "Refresh" clicked - queryLastTriggeredAt: refresh ? generateQueryTimestamp() : prevTriggeredAt, - }, - filters, - }); - - const dataFilters = getDataFilters(getState()); - await syncDataForAllLayers(dispatch, getState, dataFilters); - }; -} - -export function setRefreshConfig({ isPaused, interval }) { - return { - type: SET_REFRESH_CONFIG, - isPaused, - interval, - }; -} - -export function triggerRefreshTimer() { - return async (dispatch, getState) => { - dispatch({ - type: TRIGGER_REFRESH_TIMER, - }); - - const dataFilters = getDataFilters(getState()); - await syncDataForAllLayers(dispatch, getState, dataFilters); - }; -} - -export function clearMissingStyleProperties(layerId) { - return async (dispatch, getState) => { - const targetLayer = getLayerById(layerId, getState()); - if (!targetLayer) { - return; - } - - const style = targetLayer.getCurrentStyle(); - if (!style) { - return; - } - - const nextFields = await targetLayer.getFields(); //take into account all fields, since labels can be driven by any field (source or join) - const { hasChanges, nextStyleDescriptor } = style.getDescriptorWithMissingStylePropsRemoved( - nextFields - ); - if (hasChanges) { - dispatch(updateLayerStyle(layerId, nextStyleDescriptor)); - } - }; -} - -export function updateLayerStyle(layerId, styleDescriptor) { - return dispatch => { - dispatch({ - type: UPDATE_LAYER_STYLE, - layerId, - style: { - ...styleDescriptor, - }, - }); - - // Ensure updateStyleMeta is triggered - // syncDataForLayer may not trigger endDataLoad if no re-fetch is required - dispatch(updateStyleMeta(layerId)); - - // Style update may require re-fetch, for example ES search may need to retrieve field used for dynamic styling - dispatch(syncDataForLayer(layerId)); - }; -} - -export function updateStyleMeta(layerId) { - return async (dispatch, getState) => { - const layer = getLayerById(layerId, getState()); - if (!layer) { - return; - } - const sourceDataRequest = layer.getSourceDataRequest(); - const style = layer.getCurrentStyle(); - if (!style || !sourceDataRequest) { - return; - } - const styleMeta = await style.pluckStyleMetaFromSourceDataRequest(sourceDataRequest); - dispatch({ - type: SET_LAYER_STYLE_META, - layerId, - styleMeta, - }); - }; -} - -export function updateLayerStyleForSelectedLayer(styleDescriptor) { - return (dispatch, getState) => { - const selectedLayerId = getSelectedLayerId(getState()); - if (!selectedLayerId) { - return; - } - dispatch(updateLayerStyle(selectedLayerId, styleDescriptor)); - }; -} - -export function setJoinsForLayer(layer, joins) { - return async dispatch => { - await dispatch({ - type: SET_JOINS, - layer: layer, - joins: joins, - }); - - await dispatch(clearMissingStyleProperties(layer.getId())); - dispatch(syncDataForLayer(layer.getId())); - }; -} - -export function updateDrawState(drawState) { - return dispatch => { - if (drawState !== null) { - dispatch({ type: SET_OPEN_TOOLTIPS, openTooltips: [] }); // tooltips just get in the way - } - dispatch({ - type: UPDATE_DRAW_STATE, - drawState: drawState, - }); - }; -} - -export function disableInteractive() { - return { type: SET_INTERACTIVE, disableInteractive: true }; -} - -export function disableTooltipControl() { - return { type: DISABLE_TOOLTIP_CONTROL, disableTooltipControl: true }; -} - -export function hideToolbarOverlay() { - return { type: HIDE_TOOLBAR_OVERLAY, hideToolbarOverlay: true }; -} - -export function hideLayerControl() { - return { type: HIDE_LAYER_CONTROL, hideLayerControl: true }; -} -export function hideViewControl() { - return { type: HIDE_VIEW_CONTROL, hideViewControl: true }; -} - -export function setHiddenLayers(hiddenLayerIds) { - return (dispatch, getState) => { - const isMapReady = getMapReady(getState()); - - if (!isMapReady) { - dispatch({ type: SET_WAITING_FOR_READY_HIDDEN_LAYERS, hiddenLayerIds }); - } else { - getLayerListRaw(getState()).forEach(layer => - dispatch(setLayerVisibility(layer.id, !hiddenLayerIds.includes(layer.id))) - ); - } - }; -} diff --git a/x-pack/legacy/plugins/maps/public/actions/ui_actions.js b/x-pack/legacy/plugins/maps/public/actions/ui_actions.js deleted file mode 100644 index 33ab2fd74122a6..00000000000000 --- a/x-pack/legacy/plugins/maps/public/actions/ui_actions.js +++ /dev/null @@ -1,91 +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 { - UPDATE_FLYOUT, - CLOSE_SET_VIEW, - OPEN_SET_VIEW, - SET_IS_LAYER_TOC_OPEN, - SET_FULL_SCREEN, - SET_READ_ONLY, - SET_OPEN_TOC_DETAILS, - SHOW_TOC_DETAILS, - HIDE_TOC_DETAILS, - UPDATE_INDEXING_STAGE, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/actions/ui_actions'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -export * from '../../../../../plugins/maps/public/actions/ui_actions'; - -export function exitFullScreen() { - return { - type: SET_FULL_SCREEN, - isFullScreen: false, - }; -} - -export function updateFlyout(display) { - return { - type: UPDATE_FLYOUT, - display, - }; -} -export function closeSetView() { - return { - type: CLOSE_SET_VIEW, - }; -} -export function openSetView() { - return { - type: OPEN_SET_VIEW, - }; -} -export function setIsLayerTOCOpen(isLayerTOCOpen) { - return { - type: SET_IS_LAYER_TOC_OPEN, - isLayerTOCOpen, - }; -} -export function enableFullScreen() { - return { - type: SET_FULL_SCREEN, - isFullScreen: true, - }; -} -export function setReadOnly(isReadOnly) { - return { - type: SET_READ_ONLY, - isReadOnly, - }; -} - -export function setOpenTOCDetails(layerIds) { - return { - type: SET_OPEN_TOC_DETAILS, - layerIds, - }; -} - -export function showTOCDetails(layerId) { - return { - type: SHOW_TOC_DETAILS, - layerId, - }; -} - -export function hideTOCDetails(layerId) { - return { - type: HIDE_TOC_DETAILS, - layerId, - }; -} - -export function updateIndexingStage(stage) { - return { - type: UPDATE_INDEXING_STAGE, - stage, - }; -} diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.js b/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.js deleted file mode 100644 index 686259aeaaba44..00000000000000 --- a/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.js +++ /dev/null @@ -1,54 +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 'lodash'; -// Import each layer type, even those not used, to init in registry -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/wms_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/ems_file_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/es_search_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/es_pew_pew_source/es_pew_pew_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/kibana_regionmap_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/es_geo_grid_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import '../../../../../plugins/maps/public/layers/sources/xyz_tms_source'; - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { KibanaTilemapSource } from '../../../../../plugins/maps/public/layers/sources/kibana_tilemap_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { EMSTMSSource } from '../../../../../plugins/maps/public/layers/sources/ems_tms_source'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInjectedVarFunc } from '../../../../../plugins/maps/public/kibana_services'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getKibanaTileMap } from '../../../../../plugins/maps/public/meta'; - -export function getInitialLayers(layerListJSON, initialLayers = []) { - if (layerListJSON) { - return JSON.parse(layerListJSON); - } - - const tilemapSourceFromKibana = getKibanaTileMap(); - if (_.get(tilemapSourceFromKibana, 'url')) { - const sourceDescriptor = KibanaTilemapSource.createDescriptor(); - const source = new KibanaTilemapSource(sourceDescriptor); - const layer = source.createDefaultLayer(); - return [layer.toLayerDescriptor(), ...initialLayers]; - } - - const isEmsEnabled = getInjectedVarFunc()('isEmsEnabled', true); - if (isEmsEnabled) { - const descriptor = EMSTMSSource.createDescriptor({ isAutoSelect: true }); - const source = new EMSTMSSource(descriptor); - const layer = source.createDefaultLayer(); - return [layer.toLayerDescriptor(), ...initialLayers]; - } - - return initialLayers; -} diff --git a/x-pack/legacy/plugins/maps/public/angular/map_controller.js b/x-pack/legacy/plugins/maps/public/angular/map_controller.js index 6bc8a4d0be5aca..9522fd12ad37d1 100644 --- a/x-pack/legacy/plugins/maps/public/angular/map_controller.js +++ b/x-pack/legacy/plugins/maps/public/angular/map_controller.js @@ -28,8 +28,10 @@ import { // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { createMapStore } from '../../../../../plugins/maps/public/reducers/store'; import { Provider } from 'react-redux'; -import { GisMap } from '../connected_components/gis_map'; -import { addHelpMenuToAppChrome } from '../help_menu_util'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { GisMap } from '../../../../../plugins/maps/public/connected_components/gis_map'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { addHelpMenuToAppChrome } from '../../../../../plugins/maps/public/help_menu_util'; import { setSelectedLayer, setRefreshConfig, @@ -37,7 +39,8 @@ import { replaceLayerList, setQuery, clearTransientLayerStateAndCloseFlyout, -} from '../actions/map_actions'; + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../plugins/maps/public/actions/map_actions'; import { DEFAULT_IS_LAYER_TOC_OPEN, FLYOUT_STATE, @@ -49,22 +52,29 @@ import { setReadOnly, setIsLayerTOCOpen, setOpenTOCDetails, -} from '../actions/ui_actions'; -import { getIsFullScreen } from '../selectors/ui_selectors'; + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../plugins/maps/public/actions/ui_actions'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getIsFullScreen } from '../../../../../plugins/maps/public/selectors/ui_selectors'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { copyPersistentState } from '../../../../../plugins/maps/public/reducers/util'; import { getQueryableUniqueIndexPatternIds, hasDirtyState, getLayerListRaw, -} from '../selectors/map_selectors'; + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../plugins/maps/public/selectors/map_selectors'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { getInspectorAdapters } from '../../../../../plugins/maps/public/reducers/non_serializable_instances'; -import { getInitialLayers } from './get_initial_layers'; -import { getInitialQuery } from './get_initial_query'; -import { getInitialTimeFilters } from './get_initial_time_filters'; -import { getInitialRefreshConfig } from './get_initial_refresh_config'; -import { MAP_SAVED_OBJECT_TYPE, MAP_APP_PATH } from '../../common/constants'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInitialLayers } from '../../../../../plugins/maps/public/angular/get_initial_layers'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInitialQuery } from '../../../../../plugins/maps/public/angular/get_initial_query'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInitialTimeFilters } from '../../../../../plugins/maps/public/angular/get_initial_time_filters'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInitialRefreshConfig } from '../../../../../plugins/maps/public/angular/get_initial_refresh_config'; +import { MAP_SAVED_OBJECT_TYPE, MAP_APP_PATH } from '../../../../../plugins/maps/common/constants'; import { npSetup, npStart } from 'ui/new_platform'; import { esFilters } from '../../../../../../src/plugins/data/public'; import { diff --git a/x-pack/legacy/plugins/maps/public/components/_index.scss b/x-pack/legacy/plugins/maps/public/components/_index.scss deleted file mode 100644 index 0b327194424244..00000000000000 --- a/x-pack/legacy/plugins/maps/public/components/_index.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import './metric_editors'; -@import './geometry_filter'; -@import './tooltip_selector'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/_index.scss b/x-pack/legacy/plugins/maps/public/connected_components/_index.scss deleted file mode 100644 index 99a2e222ea6c14..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/_index.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import './gis_map/gis_map'; -@import './layer_addpanel/source_select/index'; -@import './layer_panel/index'; -@import './widget_overlay/index'; -@import './toolbar_overlay/index'; -@import './map/features_tooltip/index'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss b/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss deleted file mode 100644 index 7fe1396fcca16e..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './source_select'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_index.scss b/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_index.scss deleted file mode 100644 index fd074edf032fa0..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_index.scss +++ /dev/null @@ -1,4 +0,0 @@ -@import './layer_panel'; -@import './filter_editor/filter_editor'; -@import './join_editor/resources/join'; -@import './style_settings/style_settings'; \ No newline at end of file diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts b/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts deleted file mode 100644 index cf4fdc7be70c68..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts +++ /dev/null @@ -1,8 +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. - */ -/* eslint-disable @typescript-eslint/consistent-type-definitions */ - -export * from '../../../../../../plugins/maps/public/connected_components/layer_panel/view'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/utils.js b/x-pack/legacy/plugins/maps/public/connected_components/map/mb/utils.js deleted file mode 100644 index a1d1341b7c4f7e..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/utils.js +++ /dev/null @@ -1,107 +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 'lodash'; -import { - loadSpriteSheetImageData, - addSpriteSheetToMapFromImageData, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../plugins/maps/public/connected_components/map/mb/utils'; - -export { loadSpriteSheetImageData, addSpriteSheetToMapFromImageData }; - -export function removeOrphanedSourcesAndLayers(mbMap, layerList) { - const mbStyle = mbMap.getStyle(); - - const mbLayerIdsToRemove = []; - mbStyle.layers.forEach(mbLayer => { - const layer = layerList.find(layer => { - return layer.ownsMbLayerId(mbLayer.id); - }); - if (!layer) { - mbLayerIdsToRemove.push(mbLayer.id); - } - }); - mbLayerIdsToRemove.forEach(mbLayerId => mbMap.removeLayer(mbLayerId)); - - const mbSourcesToRemove = []; - for (const mbSourceId in mbStyle.sources) { - if (mbStyle.sources.hasOwnProperty(mbSourceId)) { - const layer = layerList.find(layer => { - return layer.ownsMbSourceId(mbSourceId); - }); - if (!layer) { - mbSourcesToRemove.push(mbSourceId); - } - } - } - mbSourcesToRemove.forEach(mbSourceId => mbMap.removeSource(mbSourceId)); -} - -/** - * This is function assumes only a single layer moved in the layerList, compared to mbMap - * It is optimized to minimize the amount of mbMap.moveLayer calls. - * @param mbMap - * @param layerList - */ -export function syncLayerOrderForSingleLayer(mbMap, layerList) { - if (!layerList || layerList.length === 0) { - return; - } - - const mbLayers = mbMap.getStyle().layers.slice(); - const layerIds = mbLayers.map(mbLayer => { - const layer = layerList.find(layer => layer.ownsMbLayerId(mbLayer.id)); - return layer.getId(); - }); - - const currentLayerOrderLayerIds = _.uniq(layerIds); - - const newLayerOrderLayerIdsUnfiltered = layerList.map(l => l.getId()); - const newLayerOrderLayerIds = newLayerOrderLayerIdsUnfiltered.filter(layerId => - currentLayerOrderLayerIds.includes(layerId) - ); - - let netPos = 0; - let netNeg = 0; - const movementArr = currentLayerOrderLayerIds.reduce((accu, id, idx) => { - const movement = newLayerOrderLayerIds.findIndex(newOId => newOId === id) - idx; - movement > 0 ? netPos++ : movement < 0 && netNeg++; - accu.push({ id, movement }); - return accu; - }, []); - if (netPos === 0 && netNeg === 0) { - return; - } - const movedLayerId = - (netPos >= netNeg && movementArr.find(l => l.movement < 0).id) || - (netPos < netNeg && movementArr.find(l => l.movement > 0).id); - const nextLayerIdx = newLayerOrderLayerIds.findIndex(layerId => layerId === movedLayerId) + 1; - - let nextMbLayerId; - if (nextLayerIdx === newLayerOrderLayerIds.length) { - nextMbLayerId = null; - } else { - const foundLayer = mbLayers.find(({ id: mbLayerId }) => { - const layerId = newLayerOrderLayerIds[nextLayerIdx]; - const layer = layerList.find(layer => layer.getId() === layerId); - return layer.ownsMbLayerId(mbLayerId); - }); - nextMbLayerId = foundLayer.id; - } - - const movedLayer = layerList.find(layer => layer.getId() === movedLayerId); - mbLayers.forEach(({ id: mbLayerId }) => { - if (movedLayer.ownsMbLayerId(mbLayerId)) { - mbMap.moveLayer(mbLayerId, nextMbLayerId); - } - }); -} - -export async function addSpritesheetToMap(json, imgUrl, mbMap) { - const imgData = await loadSpriteSheetImageData(imgUrl); - addSpriteSheetToMapFromImageData(json, imgData, mbMap); -} diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_index.scss b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_index.scss deleted file mode 100644 index cc1ab35039dac2..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_index.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import './mixins'; - -@import './widget_overlay'; -@import './attribution_control/attribution_control'; -@import './layer_control/index'; -@import './view_control/view_control'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss deleted file mode 100644 index 761ef9d17b4c2d..00000000000000 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import './layer_control'; -@import './layer_toc/toc_entry/toc_entry'; diff --git a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable_factory.ts b/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable_factory.ts index 96c3baf634a834..90b17412377f52 100644 --- a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable_factory.ts +++ b/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable_factory.ts @@ -4,153 +4,25 @@ * you may not use this file except in compliance with the Elastic License. */ -import _ from 'lodash'; -import { i18n } from '@kbn/i18n'; +/* + Maintain legacy embeddable legacy present while apps switch over + */ + import { npSetup, npStart } from 'ui/new_platform'; -import { IIndexPattern } from 'src/plugins/data/public'; -// @ts-ignore -import { getMapsSavedObjectLoader } from '../angular/services/gis_map_saved_object_loader'; -import { MapEmbeddable, MapEmbeddableInput } from './map_embeddable'; import { - getIndexPatternService, - getHttp, - getMapsCapabilities, + bindSetupCoreAndPlugins, + bindStartCoreAndPlugins, // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/kibana_services'; -import { - EmbeddableFactoryDefinition, - IContainer, -} from '../../../../../../src/plugins/embeddable/public'; - -import { createMapPath, MAP_SAVED_OBJECT_TYPE, APP_ICON } from '../../common/constants'; +} from '../../../../../plugins/maps/public/plugin'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createMapStore } from '../../../../../plugins/maps/public/reducers/store'; -import { addLayerWithoutDataSync } from '../actions/map_actions'; -import { getQueryableUniqueIndexPatternIds } from '../selectors/map_selectors'; -import { getInitialLayers } from '../angular/get_initial_layers'; -import { mergeInputWithSavedMap } from './merge_input_with_saved_map'; -import '../angular/services/gis_map_saved_object_loader'; -// @ts-ignore -import { - bindSetupCoreAndPlugins as bindNpSetupCoreAndPlugins, - bindStartCoreAndPlugins as bindNpStartCoreAndPlugins, -} from '../../../../../plugins/maps/public/plugin'; // eslint-disable-line @kbn/eslint/no-restricted-paths - -export class MapEmbeddableFactory implements EmbeddableFactoryDefinition { - type = MAP_SAVED_OBJECT_TYPE; - savedObjectMetaData = { - name: i18n.translate('xpack.maps.mapSavedObjectLabel', { - defaultMessage: 'Map', - }), - type: MAP_SAVED_OBJECT_TYPE, - getIconForSavedObject: () => APP_ICON, - }; - constructor() { - // Init required services. Necessary while in legacy - bindNpSetupCoreAndPlugins(npSetup.core, npSetup.plugins); - bindNpStartCoreAndPlugins(npStart.core, npStart.plugins); - } - - async isEditable() { - return getMapsCapabilities().save as boolean; - } - - // Not supported yet for maps types. - canCreateNew() { - return false; - } - - getDisplayName() { - return i18n.translate('xpack.maps.embeddableDisplayName', { - defaultMessage: 'map', - }); - } - - async _getIndexPatterns(layerList: unknown[]): Promise { - // Need to extract layerList from store to get queryable index pattern ids - const store = createMapStore(); - let queryableIndexPatternIds; - try { - layerList.forEach((layerDescriptor: unknown) => { - store.dispatch(addLayerWithoutDataSync(layerDescriptor)); - }); - queryableIndexPatternIds = getQueryableUniqueIndexPatternIds(store.getState()); - } catch (error) { - throw new Error( - i18n.translate('xpack.maps.mapEmbeddableFactory.invalidLayerList', { - defaultMessage: 'Unable to load map, malformed layer list', - }) - ); - } - - const promises = queryableIndexPatternIds.map(async indexPatternId => { - try { - return await getIndexPatternService().get(indexPatternId); - } catch (error) { - // Unable to load index pattern, better to not throw error so map embeddable can render - // Error will be surfaced by map embeddable since it too will be unable to locate the index pattern - return null; - } - }); - const indexPatterns = await Promise.all(promises); - return _.compact(indexPatterns) as IIndexPattern[]; - } - - async _fetchSavedMap(savedObjectId: string) { - const savedObjectLoader = getMapsSavedObjectLoader(); - return await savedObjectLoader.get(savedObjectId); - } - - createFromSavedObject = async ( - savedObjectId: string, - input: MapEmbeddableInput, - parent?: IContainer - ) => { - const savedMap = await this._fetchSavedMap(savedObjectId); - const layerList = getInitialLayers(savedMap.layerListJSON); - const indexPatterns = await this._getIndexPatterns(layerList); - - const embeddable = new MapEmbeddable( - { - layerList, - title: savedMap.title, - editUrl: getHttp().basePath.prepend(createMapPath(savedObjectId)), - indexPatterns, - editable: await this.isEditable(), - }, - input, - parent - ); - - try { - embeddable.updateInput(mergeInputWithSavedMap(input, savedMap)); - } catch (error) { - throw new Error( - i18n.translate('xpack.maps.mapEmbeddableFactory.invalidSavedObject', { - defaultMessage: 'Unable to load map, malformed saved object', - }) - ); - } - - return embeddable; - }; +import { MAP_SAVED_OBJECT_TYPE } from '../../../../../plugins/maps/common/constants'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { MapEmbeddableFactory } from '../../../../../plugins/maps/public/embeddable'; - create = async (input: MapEmbeddableInput, parent?: IContainer) => { - const layerList = getInitialLayers(); - const indexPatterns = await this._getIndexPatterns(layerList); +bindSetupCoreAndPlugins(npSetup.core, npSetup.plugins); +bindStartCoreAndPlugins(npStart.core, npStart.plugins); - return new MapEmbeddable( - { - layerList, - title: input.title ?? '', - indexPatterns, - editable: false, - }, - input, - parent - ); - }; -} +export * from '../../../../../plugins/maps/public/embeddable/map_embeddable_factory'; npSetup.plugins.embeddable.registerEmbeddableFactory( MAP_SAVED_OBJECT_TYPE, diff --git a/x-pack/legacy/plugins/maps/public/index.scss b/x-pack/legacy/plugins/maps/public/index.scss index b2ac514299d80c..b2a228f01b9210 100644 --- a/x-pack/legacy/plugins/maps/public/index.scss +++ b/x-pack/legacy/plugins/maps/public/index.scss @@ -1,17 +1,3 @@ -// Import the EUI global scope so we can use EUI constants -@import 'src/legacy/ui/public/styles/_styling_constants'; - /* GIS plugin styles */ -// Prefix all styles with "map" to avoid conflicts. -// Examples -// mapChart -// mapChart__legend -// mapChart__legend--small -// mapChart__legend-isLoading - -@import './main'; -@import './mapbox_hacks'; -@import './connected_components/index'; -@import './components/index'; -@import '../../../../plugins/maps/public/layers/index'; +@import '../../../../plugins/maps/public/index'; diff --git a/x-pack/legacy/plugins/maps/public/index.ts b/x-pack/legacy/plugins/maps/public/index.ts index 8555594e909d38..98db26859297b9 100644 --- a/x-pack/legacy/plugins/maps/public/index.ts +++ b/x-pack/legacy/plugins/maps/public/index.ts @@ -15,15 +15,14 @@ import 'uiExports/embeddableActions'; import 'ui/autoload/all'; import 'react-vis/dist/style.css'; - -import './angular/services/gis_map_saved_object_loader'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import '../../../../plugins/maps/public/angular/services/gis_map_saved_object_loader'; import './angular/map_controller'; import './routes'; // @ts-ignore -import { PluginInitializerContext } from 'kibana/public'; import { MapsPlugin } from './plugin'; -export const plugin = (initializerContext: PluginInitializerContext) => { +export const plugin = () => { return new MapsPlugin(); }; @@ -32,4 +31,4 @@ export { RenderTooltipContentParams, ITooltipProperty, } from '../../../../plugins/maps/public/layers/tooltips/tooltip_property'; -export { MapEmbeddable, MapEmbeddableInput } from './embeddable'; +export { MapEmbeddable, MapEmbeddableInput } from '../../../../plugins/maps/public/embeddable'; diff --git a/x-pack/legacy/plugins/maps/public/legacy.ts b/x-pack/legacy/plugins/maps/public/legacy.ts index 96d9e09c1d09a1..bcbfca17755fb4 100644 --- a/x-pack/legacy/plugins/maps/public/legacy.ts +++ b/x-pack/legacy/plugins/maps/public/legacy.ts @@ -7,10 +7,9 @@ import { npSetup, npStart } from 'ui/new_platform'; // @ts-ignore Untyped Module import { uiModules } from 'ui/modules'; -import { PluginInitializerContext } from 'kibana/public'; // eslint-disable-line import/order import { plugin } from '.'; -const pluginInstance = plugin({} as PluginInitializerContext); +const pluginInstance = plugin(); const setupPlugins = { __LEGACY: { diff --git a/x-pack/legacy/plugins/maps/public/legacy_register_feature.ts b/x-pack/legacy/plugins/maps/public/legacy_register_feature.ts deleted file mode 100644 index 00f788f267d4b1..00000000000000 --- a/x-pack/legacy/plugins/maps/public/legacy_register_feature.ts +++ /dev/null @@ -1,14 +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 } from 'ui/new_platform'; -import { featureCatalogueEntry } from './feature_catalogue_entry'; - -const { - plugins: { home }, -} = npSetup; - -home.featureCatalogue.register(featureCatalogueEntry); diff --git a/x-pack/legacy/plugins/maps/public/plugin.ts b/x-pack/legacy/plugins/maps/public/plugin.ts index 71f1a30c1fbef9..0123e32b6d3b93 100644 --- a/x-pack/legacy/plugins/maps/public/plugin.ts +++ b/x-pack/legacy/plugins/maps/public/plugin.ts @@ -10,7 +10,7 @@ import { Start as InspectorStartContract } from 'src/plugins/inspector/public'; // @ts-ignore import { wrapInI18nContext } from 'ui/i18n'; // @ts-ignore -import { MapListing } from './components/map_listing'; +import { MapListing } from '../../../../plugins/maps/public/components/map_listing'; // eslint-disable-line @kbn/eslint/no-restricted-paths // @ts-ignore import { bindSetupCoreAndPlugins as bindNpSetupCoreAndPlugins, @@ -18,7 +18,6 @@ import { } from '../../../../plugins/maps/public/plugin'; // eslint-disable-line @kbn/eslint/no-restricted-paths import { HomePublicPluginSetup } from '../../../../../src/plugins/home/public'; import { LicensingPluginSetup } from '../../../../plugins/licensing/public'; -import { featureCatalogueEntry } from './feature_catalogue_entry'; import { DataPublicPluginSetup, DataPublicPluginStart, @@ -57,8 +56,6 @@ export class MapsPlugin implements Plugin { }); bindNpSetupCoreAndPlugins(core, np); - - np.home.featureCatalogue.register(featureCatalogueEntry); } public start(core: CoreStart, plugins: MapsPluginStartDependencies) { diff --git a/x-pack/legacy/plugins/maps/public/register_vis_type_alias.js b/x-pack/legacy/plugins/maps/public/register_vis_type_alias.js deleted file mode 100644 index 9dc07bcb5dc0e9..00000000000000 --- a/x-pack/legacy/plugins/maps/public/register_vis_type_alias.js +++ /dev/null @@ -1,49 +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 { i18n } from '@kbn/i18n'; -import { APP_ID, APP_ICON, MAP_BASE_URL } from '../common/constants'; -import { - getInjectedVarFunc, - getVisualizations, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../plugins/maps/public/kibana_services'; -import { npSetup } from 'ui/new_platform'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { bindSetupCoreAndPlugins } from '../../../../plugins/maps/public/plugin'; - -bindSetupCoreAndPlugins(npSetup.core, npSetup.plugins); - -const showMapVisualizationTypes = getInjectedVarFunc()('showMapVisualizationTypes', false); - -const description = i18n.translate('xpack.maps.visTypeAlias.description', { - defaultMessage: 'Create and style maps with multiple layers and indices.', -}); - -const legacyMapVisualizationWarning = i18n.translate( - 'xpack.maps.visTypeAlias.legacyMapVizWarning', - { - defaultMessage: `Use the Maps app instead of Coordinate Map and Region Map. -The Maps app offers more functionality and is easier to use.`, - } -); - -getVisualizations().registerAlias({ - aliasUrl: MAP_BASE_URL, - name: APP_ID, - title: i18n.translate('xpack.maps.visTypeAlias.title', { - defaultMessage: 'Maps', - }), - description: showMapVisualizationTypes - ? `${description} ${legacyMapVisualizationWarning}` - : description, - icon: APP_ICON, - stage: 'production', -}); - -if (!showMapVisualizationTypes) { - getVisualizations().hideTypes(['region_map', 'tile_map']); -} diff --git a/x-pack/legacy/plugins/maps/public/routes.js b/x-pack/legacy/plugins/maps/public/routes.js index c082e0e1352c0e..70c1c4a50efd45 100644 --- a/x-pack/legacy/plugins/maps/public/routes.js +++ b/x-pack/legacy/plugins/maps/public/routes.js @@ -6,15 +6,18 @@ import { i18n } from '@kbn/i18n'; import routes from 'ui/routes'; -import listingTemplate from './angular/listing_ng_wrapper.html'; -import mapTemplate from './angular/map.html'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import listingTemplate from '../../../../plugins/maps/public/angular/listing_ng_wrapper.html'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import mapTemplate from '../../../../plugins/maps/public/angular/map.html'; import { getSavedObjectsClient, getCoreChrome, getMapsCapabilities, // eslint-disable-next-line @kbn/eslint/no-restricted-paths } from '../../../../plugins/maps/public/kibana_services'; -import { getMapsSavedObjectLoader } from './angular/services/gis_map_saved_object_loader'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getMapsSavedObjectLoader } from '../../../../plugins/maps/public/angular/services/gis_map_saved_object_loader'; routes.enable(); diff --git a/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.js b/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.js index c5522b7ba21c58..e2a758075155a5 100644 --- a/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.js +++ b/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.js @@ -5,7 +5,10 @@ */ import _ from 'lodash'; -import { DEFAULT_MAX_RESULT_WINDOW, DEFAULT_MAX_INNER_RESULT_WINDOW } from '../../common/constants'; +import { + DEFAULT_MAX_RESULT_WINDOW, + DEFAULT_MAX_INNER_RESULT_WINDOW, +} from '../../../../../plugins/maps/common/constants'; export function getIndexPatternSettings(indicesSettingsResp) { let maxResultWindow = Infinity; diff --git a/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.test.js b/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.test.js index 01a1ba2703cba3..c152f5bfffc31c 100644 --- a/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.test.js +++ b/x-pack/legacy/plugins/maps/server/lib/get_index_pattern_settings.test.js @@ -5,7 +5,10 @@ */ import { getIndexPatternSettings } from './get_index_pattern_settings'; -import { DEFAULT_MAX_RESULT_WINDOW, DEFAULT_MAX_INNER_RESULT_WINDOW } from '../../common/constants'; +import { + DEFAULT_MAX_RESULT_WINDOW, + DEFAULT_MAX_INNER_RESULT_WINDOW, +} from '../../../../../plugins/maps/common/constants'; describe('max_result_window and max_inner_result_window are not set', () => { test('Should provide default values when values not set', () => { diff --git a/x-pack/legacy/plugins/maps/server/maps_telemetry/collectors/register.ts b/x-pack/legacy/plugins/maps/server/maps_telemetry/collectors/register.ts index 652bb83a0d781c..d34e306d1fff90 100644 --- a/x-pack/legacy/plugins/maps/server/maps_telemetry/collectors/register.ts +++ b/x-pack/legacy/plugins/maps/server/maps_telemetry/collectors/register.ts @@ -9,7 +9,7 @@ import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { SavedObjectsClientContract } from 'src/core/server'; import { getMapsTelemetry } from '../maps_telemetry'; // @ts-ignore -import { TELEMETRY_TYPE } from '../../../common/constants'; +import { TELEMETRY_TYPE } from '../../../../../../plugins/maps/common/constants'; export function registerMapsUsageCollector( usageCollection: UsageCollectionSetup, 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 27c0211446e852..4610baabad3fe5 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 @@ -16,8 +16,8 @@ import { ES_GEO_FIELD_TYPE, MAP_SAVED_OBJECT_TYPE, TELEMETRY_TYPE, -} from '../../common/constants'; -import { LayerDescriptor } from '../../common/descriptor_types'; +} from '../../../../../plugins/maps/common/constants'; +import { LayerDescriptor } from '../../../../../plugins/maps/common/descriptor_types'; import { MapSavedObject } from '../../../../../plugins/maps/common/map_saved_object_type'; interface IStats { diff --git a/x-pack/legacy/plugins/maps/server/plugin.js b/x-pack/legacy/plugins/maps/server/plugin.js index 25c552433e9f82..79f3dcf76b82eb 100644 --- a/x-pack/legacy/plugins/maps/server/plugin.js +++ b/x-pack/legacy/plugins/maps/server/plugin.js @@ -4,7 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ import { i18n } from '@kbn/i18n'; -import { APP_ID, APP_ICON, createMapPath, MAP_SAVED_OBJECT_TYPE } from '../common/constants'; +import { + APP_ID, + APP_ICON, + createMapPath, + MAP_SAVED_OBJECT_TYPE, +} from '../../../../plugins/maps/common/constants'; import { getEcommerceSavedObjects } from './sample_data/ecommerce_saved_objects'; import { getFlightsSavedObjects } from './sample_data/flights_saved_objects.js'; import { getWebLogsSavedObjects } from './sample_data/web_logs_saved_objects.js'; diff --git a/x-pack/legacy/plugins/maps/server/routes.js b/x-pack/legacy/plugins/maps/server/routes.js index 20e022001577a8..d49f9827e3ea04 100644 --- a/x-pack/legacy/plugins/maps/server/routes.js +++ b/x-pack/legacy/plugins/maps/server/routes.js @@ -21,7 +21,7 @@ import { GIS_API_PATH, EMS_SPRITES_PATH, INDEX_SETTINGS_API_PATH, -} from '../common/constants'; +} from '../../../../plugins/maps/common/constants'; import { EMSClient } from '@elastic/ems-client'; import fetch from 'node-fetch'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/legacy/plugins/maps/common/migrations/add_field_meta_options.js b/x-pack/plugins/maps/common/migrations/add_field_meta_options.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/add_field_meta_options.js rename to x-pack/plugins/maps/common/migrations/add_field_meta_options.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/add_field_meta_options.test.js b/x-pack/plugins/maps/common/migrations/add_field_meta_options.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/add_field_meta_options.test.js rename to x-pack/plugins/maps/common/migrations/add_field_meta_options.test.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js b/x-pack/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js rename to x-pack/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.test.js b/x-pack/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.test.js rename to x-pack/plugins/maps/common/migrations/ems_raster_tile_to_ems_vector_tile.test.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/join_agg_key.test.ts b/x-pack/plugins/maps/common/migrations/join_agg_key.test.ts similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/join_agg_key.test.ts rename to x-pack/plugins/maps/common/migrations/join_agg_key.test.ts diff --git a/x-pack/legacy/plugins/maps/common/migrations/join_agg_key.ts b/x-pack/plugins/maps/common/migrations/join_agg_key.ts similarity index 97% rename from x-pack/legacy/plugins/maps/common/migrations/join_agg_key.ts rename to x-pack/plugins/maps/common/migrations/join_agg_key.ts index 29661aedb550c5..97b9ee4692c253 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/join_agg_key.ts +++ b/x-pack/plugins/maps/common/migrations/join_agg_key.ts @@ -20,7 +20,7 @@ import { LayerDescriptor, VectorLayerDescriptor, } from '../descriptor_types'; -import { MapSavedObjectAttributes } from '../../../../../plugins/maps/common/map_saved_object_type'; +import { MapSavedObjectAttributes } from '../map_saved_object_type'; const GROUP_BY_DELIMITER = '_groupby_'; diff --git a/x-pack/legacy/plugins/maps/common/migrations/migrate_symbol_style_descriptor.js b/x-pack/plugins/maps/common/migrations/migrate_symbol_style_descriptor.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/migrate_symbol_style_descriptor.js rename to x-pack/plugins/maps/common/migrations/migrate_symbol_style_descriptor.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/migrate_symbol_style_descriptor.test.js b/x-pack/plugins/maps/common/migrations/migrate_symbol_style_descriptor.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/migrate_symbol_style_descriptor.test.js rename to x-pack/plugins/maps/common/migrations/migrate_symbol_style_descriptor.test.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js b/x-pack/plugins/maps/common/migrations/move_apply_global_query.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.js rename to x-pack/plugins/maps/common/migrations/move_apply_global_query.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.test.js b/x-pack/plugins/maps/common/migrations/move_apply_global_query.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/move_apply_global_query.test.js rename to x-pack/plugins/maps/common/migrations/move_apply_global_query.test.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/references.js b/x-pack/plugins/maps/common/migrations/references.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/references.js rename to x-pack/plugins/maps/common/migrations/references.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/references.test.js b/x-pack/plugins/maps/common/migrations/references.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/references.test.js rename to x-pack/plugins/maps/common/migrations/references.test.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/scaling_type.test.ts b/x-pack/plugins/maps/common/migrations/scaling_type.test.ts similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/scaling_type.test.ts rename to x-pack/plugins/maps/common/migrations/scaling_type.test.ts diff --git a/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts b/x-pack/plugins/maps/common/migrations/scaling_type.ts similarity index 93% rename from x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts rename to x-pack/plugins/maps/common/migrations/scaling_type.ts index 551975fbacea52..98a06a764f4ec4 100644 --- a/x-pack/legacy/plugins/maps/common/migrations/scaling_type.ts +++ b/x-pack/plugins/maps/common/migrations/scaling_type.ts @@ -7,7 +7,7 @@ import _ from 'lodash'; import { SOURCE_TYPES, SCALING_TYPES } from '../constants'; import { LayerDescriptor, ESSearchSourceDescriptor } from '../descriptor_types'; -import { MapSavedObjectAttributes } from '../../../../../plugins/maps/common/map_saved_object_type'; +import { MapSavedObjectAttributes } from '../map_saved_object_type'; function isEsDocumentSource(layerDescriptor: LayerDescriptor) { const sourceType = _.get(layerDescriptor, 'sourceDescriptor.type'); diff --git a/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js b/x-pack/plugins/maps/common/migrations/top_hits_time_to_sort.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.js rename to x-pack/plugins/maps/common/migrations/top_hits_time_to_sort.js diff --git a/x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.test.js b/x-pack/plugins/maps/common/migrations/top_hits_time_to_sort.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/common/migrations/top_hits_time_to_sort.test.js rename to x-pack/plugins/maps/common/migrations/top_hits_time_to_sort.test.js diff --git a/x-pack/plugins/maps/kibana.json b/x-pack/plugins/maps/kibana.json index b2aec30c113eb6..00c5e70ad6b8de 100644 --- a/x-pack/plugins/maps/kibana.json +++ b/x-pack/plugins/maps/kibana.json @@ -3,6 +3,14 @@ "version": "8.0.0", "kibanaVersion": "kibana", "configPath": ["xpack", "maps"], - "requiredPlugins": ["inspector"], + "requiredPlugins": [ + "inspector", + "home", + "data", + "fileUpload", + "uiActions", + "navigation", + "visualizations" + ], "ui": true } diff --git a/x-pack/legacy/plugins/maps/public/_main.scss b/x-pack/plugins/maps/public/_main.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/_main.scss rename to x-pack/plugins/maps/public/_main.scss diff --git a/x-pack/legacy/plugins/maps/public/_mapbox_hacks.scss b/x-pack/plugins/maps/public/_mapbox_hacks.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/_mapbox_hacks.scss rename to x-pack/plugins/maps/public/_mapbox_hacks.scss diff --git a/x-pack/plugins/maps/public/actions/map_actions.js b/x-pack/plugins/maps/public/actions/map_actions.js index 13cb3d5f898601..572385d628b16a 100644 --- a/x-pack/plugins/maps/public/actions/map_actions.js +++ b/x-pack/plugins/maps/public/actions/map_actions.js @@ -4,6 +4,37 @@ * you may not use this file except in compliance with the Elastic License. */ +import _ from 'lodash'; +import turf from 'turf'; +import turfBooleanContains from '@turf/boolean-contains'; +import uuid from 'uuid/v4'; +import { + getLayerList, + getLayerListRaw, + getDataFilters, + getSelectedLayerId, + getMapReady, + getWaitingForMapReadyLayerListRaw, + getTransientLayerId, + getOpenTooltips, + getQuery, + getDataRequestDescriptor, +} from '../selectors/map_selectors'; + +import { FLYOUT_STATE } from '../reducers/ui'; +import { + cancelRequest, + registerCancelCallback, + unregisterCancelCallback, + getEventHandlers, +} from '../reducers/non_serializable_instances'; +import { updateFlyout } from './ui_actions'; +import { + FEATURE_ID_PROPERTY_NAME, + LAYER_TYPE, + SOURCE_DATA_ID_ORIGIN, +} from '../../common/constants'; + export const SET_SELECTED_LAYER = 'SET_SELECTED_LAYER'; export const SET_TRANSIENT_LAYER = 'SET_TRANSIENT_LAYER'; export const UPDATE_LAYER_ORDER = 'UPDATE_LAYER_ORDER'; @@ -45,3 +76,897 @@ export const HIDE_TOOLBAR_OVERLAY = 'HIDE_TOOLBAR_OVERLAY'; export const HIDE_LAYER_CONTROL = 'HIDE_LAYER_CONTROL'; export const HIDE_VIEW_CONTROL = 'HIDE_VIEW_CONTROL'; export const SET_WAITING_FOR_READY_HIDDEN_LAYERS = 'SET_WAITING_FOR_READY_HIDDEN_LAYERS'; + +function getLayerLoadingCallbacks(dispatch, getState, layerId) { + return { + startLoading: (dataId, requestToken, meta) => + dispatch(startDataLoad(layerId, dataId, requestToken, meta)), + stopLoading: (dataId, requestToken, data, meta) => + dispatch(endDataLoad(layerId, dataId, requestToken, data, meta)), + onLoadError: (dataId, requestToken, errorMessage) => + dispatch(onDataLoadError(layerId, dataId, requestToken, errorMessage)), + updateSourceData: newData => { + dispatch(updateSourceDataRequest(layerId, newData)); + }, + isRequestStillActive: (dataId, requestToken) => { + const dataRequest = getDataRequestDescriptor(getState(), layerId, dataId); + if (!dataRequest) { + return false; + } + return dataRequest.dataRequestToken === requestToken; + }, + registerCancelCallback: (requestToken, callback) => + dispatch(registerCancelCallback(requestToken, callback)), + }; +} + +function getLayerById(layerId, state) { + return getLayerList(state).find(layer => { + return layerId === layer.getId(); + }); +} + +async function syncDataForAllLayers(dispatch, getState, dataFilters) { + const state = getState(); + const layerList = getLayerList(state); + const syncs = layerList.map(layer => { + const loadingFunctions = getLayerLoadingCallbacks(dispatch, getState, layer.getId()); + return layer.syncData({ ...loadingFunctions, dataFilters }); + }); + await Promise.all(syncs); +} + +export function cancelAllInFlightRequests() { + return (dispatch, getState) => { + getLayerList(getState()).forEach(layer => { + 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: [], + }); + }; +} + +export function setMapInitError(errorMessage) { + return { + type: SET_MAP_INIT_ERROR, + errorMessage, + }; +} + +export function trackCurrentLayerState(layerId) { + return { + type: TRACK_CURRENT_LAYER_STATE, + layerId: layerId, + }; +} + +export function rollbackToTrackedLayerStateForSelectedLayer() { + return async (dispatch, getState) => { + const layerId = getSelectedLayerId(getState()); + await dispatch({ + type: ROLLBACK_TO_TRACKED_LAYER_STATE, + layerId: layerId, + }); + + // Ensure updateStyleMeta is triggered + // syncDataForLayer may not trigger endDataLoad if no re-fetch is required + dispatch(updateStyleMeta(layerId)); + + dispatch(syncDataForLayer(layerId)); + }; +} + +export function removeTrackedLayerStateForSelectedLayer() { + return (dispatch, getState) => { + const layerId = getSelectedLayerId(getState()); + dispatch({ + type: REMOVE_TRACKED_LAYER_STATE, + layerId: layerId, + }); + }; +} + +export function replaceLayerList(newLayerList) { + return (dispatch, getState) => { + const isMapReady = getMapReady(getState()); + if (!isMapReady) { + dispatch({ + type: CLEAR_WAITING_FOR_MAP_READY_LAYER_LIST, + }); + } else { + getLayerListRaw(getState()).forEach(({ id }) => { + dispatch(removeLayerFromLayerList(id)); + }); + } + + newLayerList.forEach(layerDescriptor => { + dispatch(addLayer(layerDescriptor)); + }); + }; +} + +export function cloneLayer(layerId) { + return async (dispatch, getState) => { + const layer = getLayerById(layerId, getState()); + if (!layer) { + return; + } + + const clonedDescriptor = await layer.cloneDescriptor(); + dispatch(addLayer(clonedDescriptor)); + }; +} + +export function addLayer(layerDescriptor) { + return (dispatch, getState) => { + const isMapReady = getMapReady(getState()); + if (!isMapReady) { + dispatch({ + type: ADD_WAITING_FOR_MAP_READY_LAYER, + layer: layerDescriptor, + }); + return; + } + + dispatch({ + type: ADD_LAYER, + layer: layerDescriptor, + }); + dispatch(syncDataForLayer(layerDescriptor.id)); + }; +} + +// Do not use when rendering a map. Method exists to enable selectors for getLayerList when +// rendering is not needed. +export function addLayerWithoutDataSync(layerDescriptor) { + return { + type: ADD_LAYER, + layer: layerDescriptor, + }; +} + +function setLayerDataLoadErrorStatus(layerId, errorMessage) { + return dispatch => { + dispatch({ + type: SET_LAYER_ERROR_STATUS, + isInErrorState: errorMessage !== null, + layerId, + errorMessage, + }); + }; +} + +export function cleanTooltipStateForLayer(layerId, layerFeatures = []) { + return (dispatch, getState) => { + let featuresRemoved = false; + const openTooltips = getOpenTooltips(getState()) + .map(tooltipState => { + const nextFeatures = tooltipState.features.filter(tooltipFeature => { + if (tooltipFeature.layerId !== layerId) { + // feature from another layer, keep it + return true; + } + + // Keep feature if it is still in layer + return layerFeatures.some(layerFeature => { + return layerFeature.properties[FEATURE_ID_PROPERTY_NAME] === tooltipFeature.id; + }); + }); + + if (tooltipState.features.length !== nextFeatures.length) { + featuresRemoved = true; + } + + return { ...tooltipState, features: nextFeatures }; + }) + .filter(tooltipState => { + return tooltipState.features.length > 0; + }); + + if (featuresRemoved) { + dispatch({ + type: SET_OPEN_TOOLTIPS, + openTooltips, + }); + } + }; +} + +export function setLayerVisibility(layerId, makeVisible) { + return async (dispatch, getState) => { + //if the current-state is invisible, we also want to sync data + //e.g. if a layer was invisible at start-up, it won't have any data loaded + const layer = getLayerById(layerId, getState()); + + // If the layer visibility is already what we want it to be, do nothing + if (!layer || layer.isVisible() === makeVisible) { + return; + } + + if (!makeVisible) { + dispatch(cleanTooltipStateForLayer(layerId)); + } + + await dispatch({ + type: SET_LAYER_VISIBILITY, + layerId, + visibility: makeVisible, + }); + if (makeVisible) { + dispatch(syncDataForLayer(layerId)); + } + }; +} + +export function toggleLayerVisible(layerId) { + return async (dispatch, getState) => { + const layer = getLayerById(layerId, getState()); + if (!layer) { + return; + } + const makeVisible = !layer.isVisible(); + + dispatch(setLayerVisibility(layerId, makeVisible)); + }; +} + +export function setSelectedLayer(layerId) { + return async (dispatch, getState) => { + const oldSelectedLayer = getSelectedLayerId(getState()); + if (oldSelectedLayer) { + await dispatch(rollbackToTrackedLayerStateForSelectedLayer()); + } + if (layerId) { + dispatch(trackCurrentLayerState(layerId)); + } + dispatch({ + type: SET_SELECTED_LAYER, + selectedLayerId: layerId, + }); + }; +} + +export function removeTransientLayer() { + return async (dispatch, getState) => { + const transientLayerId = getTransientLayerId(getState()); + if (transientLayerId) { + await dispatch(removeLayerFromLayerList(transientLayerId)); + await dispatch(setTransientLayer(null)); + } + }; +} + +export function setTransientLayer(layerId) { + return { + type: SET_TRANSIENT_LAYER, + transientLayerId: layerId, + }; +} + +export function clearTransientLayerStateAndCloseFlyout() { + return async dispatch => { + await dispatch(updateFlyout(FLYOUT_STATE.NONE)); + await dispatch(setSelectedLayer(null)); + await dispatch(removeTransientLayer()); + }; +} + +export function updateLayerOrder(newLayerOrder) { + return { + type: UPDATE_LAYER_ORDER, + newLayerOrder, + }; +} + +export function mapReady() { + return (dispatch, getState) => { + dispatch({ + type: MAP_READY, + }); + + getWaitingForMapReadyLayerListRaw(getState()).forEach(layerDescriptor => { + dispatch(addLayer(layerDescriptor)); + }); + + dispatch({ + type: CLEAR_WAITING_FOR_MAP_READY_LAYER_LIST, + }); + }; +} + +export function mapDestroyed() { + return { + type: MAP_DESTROYED, + }; +} + +export function mapExtentChanged(newMapConstants) { + return async (dispatch, getState) => { + const state = getState(); + const dataFilters = getDataFilters(state); + const { extent, zoom: newZoom } = newMapConstants; + const { buffer, zoom: currentZoom } = dataFilters; + + if (extent) { + let doesBufferContainExtent = false; + if (buffer) { + const bufferGeometry = turf.bboxPolygon([ + buffer.minLon, + buffer.minLat, + buffer.maxLon, + buffer.maxLat, + ]); + const extentGeometry = turf.bboxPolygon([ + extent.minLon, + extent.minLat, + extent.maxLon, + extent.maxLat, + ]); + + doesBufferContainExtent = turfBooleanContains(bufferGeometry, extentGeometry); + } + + if (!doesBufferContainExtent || currentZoom !== newZoom) { + const scaleFactor = 0.5; // TODO put scale factor in store and fetch with selector + const width = extent.maxLon - extent.minLon; + const height = extent.maxLat - extent.minLat; + dataFilters.buffer = { + minLon: extent.minLon - width * scaleFactor, + minLat: extent.minLat - height * scaleFactor, + maxLon: extent.maxLon + width * scaleFactor, + maxLat: extent.maxLat + height * scaleFactor, + }; + } + } + + dispatch({ + type: MAP_EXTENT_CHANGED, + mapState: { + ...dataFilters, + ...newMapConstants, + }, + }); + const newDataFilters = { ...dataFilters, ...newMapConstants }; + await syncDataForAllLayers(dispatch, getState, newDataFilters); + }; +} + +export function closeOnClickTooltip(tooltipId) { + return (dispatch, getState) => { + dispatch({ + type: SET_OPEN_TOOLTIPS, + openTooltips: getOpenTooltips(getState()).filter(({ id }) => { + return tooltipId !== id; + }), + }); + }; +} + +export function openOnClickTooltip(tooltipState) { + return (dispatch, getState) => { + const openTooltips = getOpenTooltips(getState()).filter(({ features, location, isLocked }) => { + return ( + isLocked && + !_.isEqual(location, tooltipState.location) && + !_.isEqual(features, tooltipState.features) + ); + }); + + openTooltips.push({ + ...tooltipState, + isLocked: true, + id: uuid(), + }); + + dispatch({ + type: SET_OPEN_TOOLTIPS, + openTooltips, + }); + }; +} + +export function closeOnHoverTooltip() { + return (dispatch, getState) => { + if (getOpenTooltips(getState()).length) { + dispatch({ + type: SET_OPEN_TOOLTIPS, + openTooltips: [], + }); + } + }; +} + +export function openOnHoverTooltip(tooltipState) { + return { + type: SET_OPEN_TOOLTIPS, + openTooltips: [ + { + ...tooltipState, + isLocked: false, + id: uuid(), + }, + ], + }; +} + +export function setMouseCoordinates({ lat, lon }) { + let safeLon = lon; + if (lon > 180) { + const overlapWestOfDateLine = lon - 180; + safeLon = -180 + overlapWestOfDateLine; + } else if (lon < -180) { + const overlapEastOfDateLine = Math.abs(lon) - 180; + safeLon = 180 - overlapEastOfDateLine; + } + + return { + type: SET_MOUSE_COORDINATES, + lat, + lon: safeLon, + }; +} + +export function clearMouseCoordinates() { + return { type: CLEAR_MOUSE_COORDINATES }; +} + +export function disableScrollZoom() { + return { type: SET_SCROLL_ZOOM, scrollZoom: false }; +} + +export function fitToLayerExtent(layerId) { + return async function(dispatch, getState) { + const targetLayer = getLayerById(layerId, getState()); + + if (targetLayer) { + const dataFilters = getDataFilters(getState()); + const bounds = await targetLayer.getBounds(dataFilters); + if (bounds) { + await dispatch(setGotoWithBounds(bounds)); + } + } + }; +} + +export function setGotoWithBounds(bounds) { + return { + type: SET_GOTO, + bounds: bounds, + }; +} + +export function setGotoWithCenter({ lat, lon, zoom }) { + return { + type: SET_GOTO, + center: { lat, lon, zoom }, + }; +} + +export function clearGoto() { + return { type: CLEAR_GOTO }; +} + +export function startDataLoad(layerId, dataId, requestToken, meta = {}) { + return (dispatch, getState) => { + const layer = getLayerById(layerId, getState()); + if (layer) { + dispatch(cancelRequest(layer.getPrevRequestToken(dataId))); + } + + const eventHandlers = getEventHandlers(getState()); + if (eventHandlers && eventHandlers.onDataLoad) { + eventHandlers.onDataLoad({ + layerId, + dataId, + }); + } + + dispatch({ + meta, + type: LAYER_DATA_LOAD_STARTED, + layerId, + dataId, + requestToken, + }); + }; +} + +export function updateSourceDataRequest(layerId, newData) { + return dispatch => { + dispatch({ + type: UPDATE_SOURCE_DATA_REQUEST, + dataId: SOURCE_DATA_ID_ORIGIN, + layerId, + newData, + }); + + dispatch(updateStyleMeta(layerId)); + }; +} + +export function endDataLoad(layerId, dataId, requestToken, data, meta) { + return async (dispatch, getState) => { + dispatch(unregisterCancelCallback(requestToken)); + + const features = data && data.features ? data.features : []; + + const eventHandlers = getEventHandlers(getState()); + if (eventHandlers && eventHandlers.onDataLoadEnd) { + const layer = getLayerById(layerId, getState()); + const resultMeta = {}; + if (layer && layer.getType() === LAYER_TYPE.VECTOR) { + resultMeta.featuresCount = features.length; + } + + eventHandlers.onDataLoadEnd({ + layerId, + dataId, + resultMeta, + }); + } + + dispatch(cleanTooltipStateForLayer(layerId, features)); + dispatch({ + type: LAYER_DATA_LOAD_ENDED, + layerId, + dataId, + data, + meta, + requestToken, + }); + + //Clear any data-load errors when there is a succesful data return. + //Co this on end-data-load iso at start-data-load to avoid blipping the error status between true/false. + //This avoids jitter in the warning icon of the TOC when the requests continues to return errors. + dispatch(setLayerDataLoadErrorStatus(layerId, null)); + + dispatch(updateStyleMeta(layerId)); + }; +} + +export function onDataLoadError(layerId, dataId, requestToken, errorMessage) { + return async (dispatch, getState) => { + dispatch(unregisterCancelCallback(requestToken)); + + const eventHandlers = getEventHandlers(getState()); + if (eventHandlers && eventHandlers.onDataLoadError) { + eventHandlers.onDataLoadError({ + layerId, + dataId, + errorMessage, + }); + } + + dispatch(cleanTooltipStateForLayer(layerId)); + dispatch({ + type: LAYER_DATA_LOAD_ERROR, + data: null, + layerId, + dataId, + requestToken, + }); + + dispatch(setLayerDataLoadErrorStatus(layerId, errorMessage)); + }; +} + +export function updateSourceProp(layerId, propName, value, newLayerType) { + return async dispatch => { + dispatch({ + type: UPDATE_SOURCE_PROP, + layerId, + propName, + value, + }); + 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()); + if (targetLayer) { + const dataFilters = getDataFilters(getState()); + const loadingFunctions = getLayerLoadingCallbacks(dispatch, getState, layerId); + await targetLayer.syncData({ + ...loadingFunctions, + dataFilters, + }); + } + }; +} + +export function updateLayerLabel(id, newLabel) { + return { + type: UPDATE_LAYER_PROP, + id, + propName: 'label', + newValue: newLabel, + }; +} + +export function updateLayerMinZoom(id, minZoom) { + return { + type: UPDATE_LAYER_PROP, + id, + propName: 'minZoom', + newValue: minZoom, + }; +} + +export function updateLayerMaxZoom(id, maxZoom) { + return { + type: UPDATE_LAYER_PROP, + id, + propName: 'maxZoom', + newValue: maxZoom, + }; +} + +export function updateLayerAlpha(id, alpha) { + return { + type: UPDATE_LAYER_PROP, + id, + propName: 'alpha', + newValue: alpha, + }; +} + +export function setLayerQuery(id, query) { + return dispatch => { + dispatch({ + type: UPDATE_LAYER_PROP, + id, + propName: 'query', + newValue: query, + }); + + dispatch(syncDataForLayer(id)); + }; +} + +export function removeSelectedLayer() { + return (dispatch, getState) => { + const state = getState(); + const layerId = getSelectedLayerId(state); + dispatch(removeLayer(layerId)); + }; +} + +export function removeLayer(layerId) { + return async (dispatch, getState) => { + const state = getState(); + const selectedLayerId = getSelectedLayerId(state); + if (layerId === selectedLayerId) { + dispatch(updateFlyout(FLYOUT_STATE.NONE)); + await dispatch(setSelectedLayer(null)); + } + dispatch(removeLayerFromLayerList(layerId)); + }; +} + +function removeLayerFromLayerList(layerId) { + return (dispatch, getState) => { + const layerGettingRemoved = getLayerById(layerId, getState()); + if (!layerGettingRemoved) { + return; + } + + layerGettingRemoved.getInFlightRequestTokens().forEach(requestToken => { + dispatch(cancelRequest(requestToken)); + }); + dispatch(cleanTooltipStateForLayer(layerId)); + layerGettingRemoved.destroy(); + dispatch({ + type: REMOVE_LAYER, + id: layerId, + }); + }; +} + +export function setQuery({ query, timeFilters, filters = [], refresh = false }) { + function generateQueryTimestamp() { + return new Date().toISOString(); + } + return async (dispatch, getState) => { + const prevQuery = getQuery(getState()); + const prevTriggeredAt = + prevQuery && prevQuery.queryLastTriggeredAt + ? prevQuery.queryLastTriggeredAt + : generateQueryTimestamp(); + + dispatch({ + type: SET_QUERY, + timeFilters, + query: { + ...query, + // ensure query changes to trigger re-fetch when "Refresh" clicked + queryLastTriggeredAt: refresh ? generateQueryTimestamp() : prevTriggeredAt, + }, + filters, + }); + + const dataFilters = getDataFilters(getState()); + await syncDataForAllLayers(dispatch, getState, dataFilters); + }; +} + +export function setRefreshConfig({ isPaused, interval }) { + return { + type: SET_REFRESH_CONFIG, + isPaused, + interval, + }; +} + +export function triggerRefreshTimer() { + return async (dispatch, getState) => { + dispatch({ + type: TRIGGER_REFRESH_TIMER, + }); + + const dataFilters = getDataFilters(getState()); + await syncDataForAllLayers(dispatch, getState, dataFilters); + }; +} + +export function clearMissingStyleProperties(layerId) { + return async (dispatch, getState) => { + const targetLayer = getLayerById(layerId, getState()); + if (!targetLayer) { + return; + } + + const style = targetLayer.getCurrentStyle(); + if (!style) { + return; + } + + const nextFields = await targetLayer.getFields(); //take into account all fields, since labels can be driven by any field (source or join) + const { hasChanges, nextStyleDescriptor } = style.getDescriptorWithMissingStylePropsRemoved( + nextFields + ); + if (hasChanges) { + dispatch(updateLayerStyle(layerId, nextStyleDescriptor)); + } + }; +} + +export function updateLayerStyle(layerId, styleDescriptor) { + return dispatch => { + dispatch({ + type: UPDATE_LAYER_STYLE, + layerId, + style: { + ...styleDescriptor, + }, + }); + + // Ensure updateStyleMeta is triggered + // syncDataForLayer may not trigger endDataLoad if no re-fetch is required + dispatch(updateStyleMeta(layerId)); + + // Style update may require re-fetch, for example ES search may need to retrieve field used for dynamic styling + dispatch(syncDataForLayer(layerId)); + }; +} + +export function updateStyleMeta(layerId) { + return async (dispatch, getState) => { + const layer = getLayerById(layerId, getState()); + if (!layer) { + return; + } + const sourceDataRequest = layer.getSourceDataRequest(); + const style = layer.getCurrentStyle(); + if (!style || !sourceDataRequest) { + return; + } + const styleMeta = await style.pluckStyleMetaFromSourceDataRequest(sourceDataRequest); + dispatch({ + type: SET_LAYER_STYLE_META, + layerId, + styleMeta, + }); + }; +} + +export function updateLayerStyleForSelectedLayer(styleDescriptor) { + return (dispatch, getState) => { + const selectedLayerId = getSelectedLayerId(getState()); + if (!selectedLayerId) { + return; + } + dispatch(updateLayerStyle(selectedLayerId, styleDescriptor)); + }; +} + +export function setJoinsForLayer(layer, joins) { + return async dispatch => { + await dispatch({ + type: SET_JOINS, + layer: layer, + joins: joins, + }); + + await dispatch(clearMissingStyleProperties(layer.getId())); + dispatch(syncDataForLayer(layer.getId())); + }; +} + +export function updateDrawState(drawState) { + return dispatch => { + if (drawState !== null) { + dispatch({ type: SET_OPEN_TOOLTIPS, openTooltips: [] }); // tooltips just get in the way + } + dispatch({ + type: UPDATE_DRAW_STATE, + drawState: drawState, + }); + }; +} + +export function disableInteractive() { + return { type: SET_INTERACTIVE, disableInteractive: true }; +} + +export function disableTooltipControl() { + return { type: DISABLE_TOOLTIP_CONTROL, disableTooltipControl: true }; +} + +export function hideToolbarOverlay() { + return { type: HIDE_TOOLBAR_OVERLAY, hideToolbarOverlay: true }; +} + +export function hideLayerControl() { + return { type: HIDE_LAYER_CONTROL, hideLayerControl: true }; +} +export function hideViewControl() { + return { type: HIDE_VIEW_CONTROL, hideViewControl: true }; +} + +export function setHiddenLayers(hiddenLayerIds) { + return (dispatch, getState) => { + const isMapReady = getMapReady(getState()); + + if (!isMapReady) { + dispatch({ type: SET_WAITING_FOR_READY_HIDDEN_LAYERS, hiddenLayerIds }); + } else { + getLayerListRaw(getState()).forEach(layer => + dispatch(setLayerVisibility(layer.id, !hiddenLayerIds.includes(layer.id))) + ); + } + }; +} diff --git a/x-pack/legacy/plugins/maps/public/actions/map_actions.test.js b/x-pack/plugins/maps/public/actions/map_actions.test.js similarity index 98% rename from x-pack/legacy/plugins/maps/public/actions/map_actions.test.js rename to x-pack/plugins/maps/public/actions/map_actions.test.js index 7e2a3c827fa88f..c280b8af7ab80d 100644 --- a/x-pack/legacy/plugins/maps/public/actions/map_actions.test.js +++ b/x-pack/plugins/maps/public/actions/map_actions.test.js @@ -5,7 +5,7 @@ */ jest.mock('../selectors/map_selectors', () => ({})); -jest.mock('../../../../../plugins/maps/public/kibana_services', () => ({})); +jest.mock('../kibana_services', () => ({})); import { mapExtentChanged, setMouseCoordinates } from './map_actions'; diff --git a/x-pack/legacy/plugins/maps/public/actions/ui_actions.d.ts b/x-pack/plugins/maps/public/actions/ui_actions.d.ts similarity index 54% rename from x-pack/legacy/plugins/maps/public/actions/ui_actions.d.ts rename to x-pack/plugins/maps/public/actions/ui_actions.d.ts index 233918847de08b..e087dc70256f06 100644 --- a/x-pack/legacy/plugins/maps/public/actions/ui_actions.d.ts +++ b/x-pack/plugins/maps/public/actions/ui_actions.d.ts @@ -6,6 +6,17 @@ import { AnyAction } from 'redux'; +export const UPDATE_FLYOUT: string; +export const CLOSE_SET_VIEW: string; +export const OPEN_SET_VIEW: string; +export const SET_IS_LAYER_TOC_OPEN: string; +export const SET_FULL_SCREEN: string; +export const SET_READ_ONLY: string; +export const SET_OPEN_TOC_DETAILS: string; +export const SHOW_TOC_DETAILS: string; +export const HIDE_TOC_DETAILS: string; +export const UPDATE_INDEXING_STAGE: string; + export function setOpenTOCDetails(layerIds?: string[]): AnyAction; export function setIsLayerTOCOpen(open: boolean): AnyAction; diff --git a/x-pack/plugins/maps/public/actions/ui_actions.js b/x-pack/plugins/maps/public/actions/ui_actions.js index 59ae56c15056a0..77fdf6b0f12d23 100644 --- a/x-pack/plugins/maps/public/actions/ui_actions.js +++ b/x-pack/plugins/maps/public/actions/ui_actions.js @@ -14,3 +14,73 @@ export const SET_OPEN_TOC_DETAILS = 'SET_OPEN_TOC_DETAILS'; export const SHOW_TOC_DETAILS = 'SHOW_TOC_DETAILS'; export const HIDE_TOC_DETAILS = 'HIDE_TOC_DETAILS'; export const UPDATE_INDEXING_STAGE = 'UPDATE_INDEXING_STAGE'; + +export function exitFullScreen() { + return { + type: SET_FULL_SCREEN, + isFullScreen: false, + }; +} + +export function updateFlyout(display) { + return { + type: UPDATE_FLYOUT, + display, + }; +} +export function closeSetView() { + return { + type: CLOSE_SET_VIEW, + }; +} +export function openSetView() { + return { + type: OPEN_SET_VIEW, + }; +} +export function setIsLayerTOCOpen(isLayerTOCOpen) { + return { + type: SET_IS_LAYER_TOC_OPEN, + isLayerTOCOpen, + }; +} +export function enableFullScreen() { + return { + type: SET_FULL_SCREEN, + isFullScreen: true, + }; +} +export function setReadOnly(isReadOnly) { + return { + type: SET_READ_ONLY, + isReadOnly, + }; +} + +export function setOpenTOCDetails(layerIds) { + return { + type: SET_OPEN_TOC_DETAILS, + layerIds, + }; +} + +export function showTOCDetails(layerId) { + return { + type: SHOW_TOC_DETAILS, + layerId, + }; +} + +export function hideTOCDetails(layerId) { + return { + type: HIDE_TOC_DETAILS, + layerId, + }; +} + +export function updateIndexingStage(stage) { + return { + type: UPDATE_INDEXING_STAGE, + stage, + }; +} diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.d.ts b/x-pack/plugins/maps/public/angular/get_initial_layers.d.ts similarity index 100% rename from x-pack/legacy/plugins/maps/public/angular/get_initial_layers.d.ts rename to x-pack/plugins/maps/public/angular/get_initial_layers.d.ts diff --git a/x-pack/plugins/maps/public/angular/get_initial_layers.js b/x-pack/plugins/maps/public/angular/get_initial_layers.js new file mode 100644 index 00000000000000..1eb5dac309f28c --- /dev/null +++ b/x-pack/plugins/maps/public/angular/get_initial_layers.js @@ -0,0 +1,53 @@ +/* + * 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 'lodash'; +// Import each layer type, even those not used, to init in registry + +import '../layers/sources/wms_source'; + +import '../layers/sources/ems_file_source'; + +import '../layers/sources/es_search_source'; + +import '../layers/sources/es_pew_pew_source/es_pew_pew_source'; + +import '../layers/sources/kibana_regionmap_source'; + +import '../layers/sources/es_geo_grid_source'; + +import '../layers/sources/xyz_tms_source'; + +import { KibanaTilemapSource } from '../layers/sources/kibana_tilemap_source'; + +import { EMSTMSSource } from '../layers/sources/ems_tms_source'; + +import { getInjectedVarFunc } from '../kibana_services'; + +import { getKibanaTileMap } from '../meta'; + +export function getInitialLayers(layerListJSON, initialLayers = []) { + if (layerListJSON) { + return JSON.parse(layerListJSON); + } + + const tilemapSourceFromKibana = getKibanaTileMap(); + if (_.get(tilemapSourceFromKibana, 'url')) { + const sourceDescriptor = KibanaTilemapSource.createDescriptor(); + const source = new KibanaTilemapSource(sourceDescriptor); + const layer = source.createDefaultLayer(); + return [layer.toLayerDescriptor(), ...initialLayers]; + } + + const isEmsEnabled = getInjectedVarFunc()('isEmsEnabled', true); + if (isEmsEnabled) { + const descriptor = EMSTMSSource.createDescriptor({ isAutoSelect: true }); + const source = new EMSTMSSource(descriptor); + const layer = source.createDefaultLayer(); + return [layer.toLayerDescriptor(), ...initialLayers]; + } + + return initialLayers; +} diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.test.js b/x-pack/plugins/maps/public/angular/get_initial_layers.test.js similarity index 80% rename from x-pack/legacy/plugins/maps/public/angular/get_initial_layers.test.js rename to x-pack/plugins/maps/public/angular/get_initial_layers.test.js index 8c9185a16ea0e7..f41ed26b2a05d3 100644 --- a/x-pack/legacy/plugins/maps/public/angular/get_initial_layers.test.js +++ b/x-pack/plugins/maps/public/angular/get_initial_layers.test.js @@ -4,10 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -jest.mock('../../../../../plugins/maps/public/meta', () => { +jest.mock('../meta', () => { return {}; }); -jest.mock('../../../../../plugins/maps/public/kibana_services'); +jest.mock('../kibana_services'); import { getInitialLayers } from './get_initial_layers'; @@ -15,8 +15,7 @@ const layerListNotProvided = undefined; describe('Saved object has layer list', () => { beforeEach(() => { - require('../../../../../plugins/maps/public/kibana_services').getInjectedVarFunc = () => - jest.fn(); + require('../kibana_services').getInjectedVarFunc = () => jest.fn(); }); it('Should get initial layers from saved object', () => { @@ -33,7 +32,7 @@ describe('Saved object has layer list', () => { describe('kibana.yml configured with map.tilemap.url', () => { beforeAll(() => { - require('../../../../../plugins/maps/public/meta').getKibanaTileMap = () => { + require('../meta').getKibanaTileMap = () => { return { url: 'myTileUrl', }; @@ -63,10 +62,10 @@ describe('kibana.yml configured with map.tilemap.url', () => { describe('EMS is enabled', () => { beforeAll(() => { - require('../../../../../plugins/maps/public/meta').getKibanaTileMap = () => { + require('../meta').getKibanaTileMap = () => { return null; }; - require('../../../../../plugins/maps/public/kibana_services').getInjectedVarFunc = () => key => { + require('../kibana_services').getInjectedVarFunc = () => key => { switch (key) { case 'emsTileLayerId': return { @@ -107,11 +106,11 @@ describe('EMS is enabled', () => { describe('EMS is not enabled', () => { beforeAll(() => { - require('../../../../../plugins/maps/public/meta').getKibanaTileMap = () => { + require('../meta').getKibanaTileMap = () => { return null; }; - require('../../../../../plugins/maps/public/kibana_services').getInjectedVarFunc = () => key => { + require('../kibana_services').getInjectedVarFunc = () => key => { switch (key) { case 'isEmsEnabled': return false; diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_query.js b/x-pack/plugins/maps/public/angular/get_initial_query.js similarity index 82% rename from x-pack/legacy/plugins/maps/public/angular/get_initial_query.js rename to x-pack/plugins/maps/public/angular/get_initial_query.js index c50ecb2b05dc07..4f61142413671d 100644 --- a/x-pack/legacy/plugins/maps/public/angular/get_initial_query.js +++ b/x-pack/plugins/maps/public/angular/get_initial_query.js @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getUiSettings } from '../../../../../plugins/maps/public/kibana_services'; +import { getUiSettings } from '../kibana_services'; export function getInitialQuery({ mapStateJSON, appState = {}, userQueryLanguage }) { const settings = getUiSettings(); diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_refresh_config.js b/x-pack/plugins/maps/public/angular/get_initial_refresh_config.js similarity index 84% rename from x-pack/legacy/plugins/maps/public/angular/get_initial_refresh_config.js rename to x-pack/plugins/maps/public/angular/get_initial_refresh_config.js index 8735d45debfc4c..f13e435cd1d5cf 100644 --- a/x-pack/legacy/plugins/maps/public/angular/get_initial_refresh_config.js +++ b/x-pack/plugins/maps/public/angular/get_initial_refresh_config.js @@ -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. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getUiSettings } from '../../../../../plugins/maps/public/kibana_services'; + +import { getUiSettings } from '../kibana_services'; export function getInitialRefreshConfig({ mapStateJSON, globalState = {} }) { const uiSettings = getUiSettings(); diff --git a/x-pack/legacy/plugins/maps/public/angular/get_initial_time_filters.js b/x-pack/plugins/maps/public/angular/get_initial_time_filters.js similarity index 80% rename from x-pack/legacy/plugins/maps/public/angular/get_initial_time_filters.js rename to x-pack/plugins/maps/public/angular/get_initial_time_filters.js index 74fbf603e99f5e..75d9f0e95ccf08 100644 --- a/x-pack/legacy/plugins/maps/public/angular/get_initial_time_filters.js +++ b/x-pack/plugins/maps/public/angular/get_initial_time_filters.js @@ -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. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getUiSettings } from '../../../../../plugins/maps/public/kibana_services'; + +import { getUiSettings } from '../kibana_services'; export function getInitialTimeFilters({ mapStateJSON, globalState = {} }) { if (mapStateJSON) { diff --git a/x-pack/legacy/plugins/maps/public/angular/listing_ng_wrapper.html b/x-pack/plugins/maps/public/angular/listing_ng_wrapper.html similarity index 100% rename from x-pack/legacy/plugins/maps/public/angular/listing_ng_wrapper.html rename to x-pack/plugins/maps/public/angular/listing_ng_wrapper.html diff --git a/x-pack/legacy/plugins/maps/public/angular/map.html b/x-pack/plugins/maps/public/angular/map.html similarity index 100% rename from x-pack/legacy/plugins/maps/public/angular/map.html rename to x-pack/plugins/maps/public/angular/map.html diff --git a/x-pack/legacy/plugins/maps/public/angular/services/gis_map_saved_object_loader.js b/x-pack/plugins/maps/public/angular/services/gis_map_saved_object_loader.js similarity index 79% rename from x-pack/legacy/plugins/maps/public/angular/services/gis_map_saved_object_loader.js rename to x-pack/plugins/maps/public/angular/services/gis_map_saved_object_loader.js index 710997a9c0d7f3..2dcec35960b080 100644 --- a/x-pack/legacy/plugins/maps/public/angular/services/gis_map_saved_object_loader.js +++ b/x-pack/plugins/maps/public/angular/services/gis_map_saved_object_loader.js @@ -6,15 +6,14 @@ import _ from 'lodash'; import { createSavedGisMapClass } from './saved_gis_map'; -import { SavedObjectLoader } from '../../../../../../../src/plugins/saved_objects/public'; +import { SavedObjectLoader } from '../../../../../../src/plugins/saved_objects/public'; import { getCoreChrome, getSavedObjectsClient, getIndexPatternService, getCoreOverlays, getData, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../plugins/maps/public/kibana_services'; +} from '../../kibana_services'; export const getMapsSavedObjectLoader = _.once(function() { const services = { diff --git a/x-pack/legacy/plugins/maps/public/angular/services/saved_gis_map.js b/x-pack/plugins/maps/public/angular/services/saved_gis_map.js similarity index 88% rename from x-pack/legacy/plugins/maps/public/angular/services/saved_gis_map.js rename to x-pack/plugins/maps/public/angular/services/saved_gis_map.js index 990a0613da681c..1c47e0ab7dc2a4 100644 --- a/x-pack/legacy/plugins/maps/public/angular/services/saved_gis_map.js +++ b/x-pack/plugins/maps/public/angular/services/saved_gis_map.js @@ -5,7 +5,7 @@ */ import _ from 'lodash'; -import { createSavedObjectClass } from '../../../../../../../src/plugins/saved_objects/public'; +import { createSavedObjectClass } from '../../../../../../src/plugins/saved_objects/public'; import { getTimeFilters, getMapZoom, @@ -17,10 +17,10 @@ import { getFilters, } from '../../selectors/map_selectors'; import { getIsLayerTOCOpen, getOpenTOCDetails } from '../../selectors/ui_selectors'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { convertMapExtentToPolygon } from '../../../../../../plugins/maps/public/elasticsearch_geo_utils'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { copyPersistentState } from '../../../../../../plugins/maps/public/reducers/util'; + +import { convertMapExtentToPolygon } from '../../elasticsearch_geo_utils'; + +import { copyPersistentState } from '../../reducers/util'; import { extractReferences, injectReferences } from '../../../common/migrations/references'; import { MAP_SAVED_OBJECT_TYPE } from '../../../common/constants'; diff --git a/x-pack/legacy/plugins/maps/public/components/__snapshots__/geometry_filter_form.test.js.snap b/x-pack/plugins/maps/public/components/__snapshots__/geometry_filter_form.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/__snapshots__/geometry_filter_form.test.js.snap rename to x-pack/plugins/maps/public/components/__snapshots__/geometry_filter_form.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/components/__snapshots__/layer_toc_actions.test.js.snap b/x-pack/plugins/maps/public/components/__snapshots__/layer_toc_actions.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/__snapshots__/layer_toc_actions.test.js.snap rename to x-pack/plugins/maps/public/components/__snapshots__/layer_toc_actions.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/components/_geometry_filter.scss b/x-pack/plugins/maps/public/components/_geometry_filter.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/_geometry_filter.scss rename to x-pack/plugins/maps/public/components/_geometry_filter.scss diff --git a/x-pack/plugins/maps/public/components/_index.scss b/x-pack/plugins/maps/public/components/_index.scss new file mode 100644 index 00000000000000..161b3fefdb8f9e --- /dev/null +++ b/x-pack/plugins/maps/public/components/_index.scss @@ -0,0 +1,3 @@ +@import 'metric_editors'; +@import './geometry_filter'; +@import 'tooltip_selector'; diff --git a/x-pack/legacy/plugins/maps/public/components/_metric_editors.scss b/x-pack/plugins/maps/public/components/_metric_editors.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/_metric_editors.scss rename to x-pack/plugins/maps/public/components/_metric_editors.scss diff --git a/x-pack/legacy/plugins/maps/public/components/_tooltip_selector.scss b/x-pack/plugins/maps/public/components/_tooltip_selector.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/_tooltip_selector.scss rename to x-pack/plugins/maps/public/components/_tooltip_selector.scss diff --git a/x-pack/legacy/plugins/maps/public/components/distance_filter_form.tsx b/x-pack/plugins/maps/public/components/distance_filter_form.tsx similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/distance_filter_form.tsx rename to x-pack/plugins/maps/public/components/distance_filter_form.tsx diff --git a/x-pack/legacy/plugins/maps/public/components/geo_field_with_index.ts b/x-pack/plugins/maps/public/components/geo_field_with_index.ts similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/geo_field_with_index.ts rename to x-pack/plugins/maps/public/components/geo_field_with_index.ts diff --git a/x-pack/legacy/plugins/maps/public/components/geometry_filter_form.js b/x-pack/plugins/maps/public/components/geometry_filter_form.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/geometry_filter_form.js rename to x-pack/plugins/maps/public/components/geometry_filter_form.js diff --git a/x-pack/legacy/plugins/maps/public/components/geometry_filter_form.test.js b/x-pack/plugins/maps/public/components/geometry_filter_form.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/geometry_filter_form.test.js rename to x-pack/plugins/maps/public/components/geometry_filter_form.test.js diff --git a/x-pack/legacy/plugins/maps/public/components/global_filter_checkbox.js b/x-pack/plugins/maps/public/components/global_filter_checkbox.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/global_filter_checkbox.js rename to x-pack/plugins/maps/public/components/global_filter_checkbox.js diff --git a/x-pack/legacy/plugins/maps/public/components/layer_toc_actions.js b/x-pack/plugins/maps/public/components/layer_toc_actions.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/layer_toc_actions.js rename to x-pack/plugins/maps/public/components/layer_toc_actions.js diff --git a/x-pack/legacy/plugins/maps/public/components/layer_toc_actions.test.js b/x-pack/plugins/maps/public/components/layer_toc_actions.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/layer_toc_actions.test.js rename to x-pack/plugins/maps/public/components/layer_toc_actions.test.js diff --git a/x-pack/legacy/plugins/maps/public/components/map_listing.js b/x-pack/plugins/maps/public/components/map_listing.js similarity index 98% rename from x-pack/legacy/plugins/maps/public/components/map_listing.js rename to x-pack/plugins/maps/public/components/map_listing.js index ef1d524cb91dd2..ee10fe30130f37 100644 --- a/x-pack/legacy/plugins/maps/public/components/map_listing.js +++ b/x-pack/plugins/maps/public/components/map_listing.js @@ -7,8 +7,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import _ from 'lodash'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getToasts } from '../../../../../plugins/maps/public/kibana_services'; + +import { getToasts } from '../kibana_services'; import { EuiTitle, EuiFieldSearch, diff --git a/x-pack/legacy/plugins/maps/public/components/multi_index_geo_field_select.tsx b/x-pack/plugins/maps/public/components/multi_index_geo_field_select.tsx similarity index 100% rename from x-pack/legacy/plugins/maps/public/components/multi_index_geo_field_select.tsx rename to x-pack/plugins/maps/public/components/multi_index_geo_field_select.tsx diff --git a/x-pack/plugins/maps/public/connected_components/_index.scss b/x-pack/plugins/maps/public/connected_components/_index.scss new file mode 100644 index 00000000000000..83042ae1d586cc --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/_index.scss @@ -0,0 +1,6 @@ +@import 'gis_map/gis_map'; +@import 'layer_addpanel/source_select/index'; +@import 'layer_panel/index'; +@import 'widget_overlay/index'; +@import 'toolbar_overlay/index'; +@import 'map/features_tooltip/index'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/_gis_map.scss b/x-pack/plugins/maps/public/connected_components/gis_map/_gis_map.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/gis_map/_gis_map.scss rename to x-pack/plugins/maps/public/connected_components/gis_map/_gis_map.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.d.ts b/x-pack/plugins/maps/public/connected_components/gis_map/index.d.ts similarity index 73% rename from x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.d.ts rename to x-pack/plugins/maps/public/connected_components/gis_map/index.d.ts index 8689d882971719..92d92dfbd142da 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.d.ts +++ b/x-pack/plugins/maps/public/connected_components/gis_map/index.d.ts @@ -6,8 +6,8 @@ import React from 'react'; import { Filter } from 'src/plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { RenderToolTipContent } from '../../../../../../plugins/maps/public/layers/tooltips/tooltip_property'; + +import { RenderToolTipContent } from '../../layers/tooltips/tooltip_property'; export const GisMap: React.ComponentType<{ addFilters: ((filters: Filter[]) => void) | null; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.js b/x-pack/plugins/maps/public/connected_components/gis_map/index.js similarity index 85% rename from x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.js rename to x-pack/plugins/maps/public/connected_components/gis_map/index.js index 2d8265bae93878..c825fdab75ca74 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/index.js +++ b/x-pack/plugins/maps/public/connected_components/gis_map/index.js @@ -6,8 +6,8 @@ import { connect } from 'react-redux'; import { GisMap } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE } from '../../../../../../plugins/maps/public/reducers/ui'; + +import { FLYOUT_STATE } from '../../reducers/ui'; import { exitFullScreen } from '../../actions/ui_actions'; import { getFlyoutDisplay, getIsFullScreen } from '../../selectors/ui_selectors'; import { triggerRefreshTimer, cancelAllInFlightRequests } from '../../actions/map_actions'; @@ -18,8 +18,8 @@ import { getQueryableUniqueIndexPatternIds, isToolbarOverlayHidden, } from '../../selectors/map_selectors'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getCoreChrome } from '../../../../../../plugins/maps/public/kibana_services'; + +import { getCoreChrome } from '../../kibana_services'; function mapStateToProps(state = {}) { const flyoutDisplay = getFlyoutDisplay(state); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/view.js b/x-pack/plugins/maps/public/connected_components/gis_map/view.js similarity index 92% rename from x-pack/legacy/plugins/maps/public/connected_components/gis_map/view.js rename to x-pack/plugins/maps/public/connected_components/gis_map/view.js index 06097ebea1900a..28ad12133d6118 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/gis_map/view.js +++ b/x-pack/plugins/maps/public/connected_components/gis_map/view.js @@ -7,17 +7,16 @@ import _ from 'lodash'; import React, { Component } from 'react'; import { MBMapContainer } from '../map/mb'; -import { WidgetOverlay } from '../widget_overlay/index'; -import { ToolbarOverlay } from '../toolbar_overlay/index'; -import { LayerPanel } from '../layer_panel/index'; -import { AddLayerPanel } from '../layer_addpanel/index'; +import { WidgetOverlay } from '../widget_overlay'; +import { ToolbarOverlay } from '../toolbar_overlay'; +import { LayerPanel } from '../layer_panel'; +import { AddLayerPanel } from '../layer_addpanel'; import { EuiFlexGroup, EuiFlexItem, EuiCallOut } from '@elastic/eui'; -import { ExitFullScreenButton } from '../../../../../../../src/plugins/kibana_react/public'; +import { ExitFullScreenButton } from '../../../../../../src/plugins/kibana_react/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getIndexPatternsFromIds } from '../../../../../../plugins/maps/public/index_pattern_util'; +import { getIndexPatternsFromIds } from '../../index_pattern_util'; import { ES_GEO_FIELD_TYPE } from '../../../common/constants'; -import { indexPatterns as indexPatternsUtils } from '../../../../../../../src/plugins/data/public'; +import { indexPatterns as indexPatternsUtils } from '../../../../../../src/plugins/data/public'; import { i18n } from '@kbn/i18n'; import uuid from 'uuid/v4'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/index.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/index.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/view.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/view.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/flyout_footer/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js similarity index 76% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js index e8192795f98aef..bff235a7d27fcd 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/index.js @@ -6,10 +6,10 @@ import { connect } from 'react-redux'; import { ImportEditor } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInspectorAdapters } from '../../../../../../../plugins/maps/public/reducers/non_serializable_instances'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { INDEXING_STAGE } from '../../../../../../../plugins/maps/public/reducers/ui'; + +import { getInspectorAdapters } from '../../../reducers/non_serializable_instances'; + +import { INDEXING_STAGE } from '../../../reducers/ui'; import { updateIndexingStage } from '../../../actions/ui_actions'; import { getIndexingStage } from '../../../selectors/ui_selectors'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js similarity index 89% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js index cb20d80733c33b..a4fa0d492bf3f5 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/import_editor/view.js @@ -7,8 +7,8 @@ import React, { Fragment } from 'react'; import { EuiSpacer, EuiPanel, EuiButtonEmpty } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { uploadLayerWizardConfig } from '../../../../../../../plugins/maps/public/layers/sources/client_file_source'; + +import { uploadLayerWizardConfig } from '../../../layers/sources/client_file_source'; export const ImportEditor = ({ clearSource, isIndexingTriggered, ...props }) => { const editorProperties = getEditorProperties({ isIndexingTriggered, ...props }); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/index.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/index.js similarity index 85% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/index.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/index.js index c4e2fa5169b0fa..24c1f5ced4fe65 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/index.js +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/index.js @@ -6,13 +6,13 @@ import { connect } from 'react-redux'; import { AddLayerPanel } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE, INDEXING_STAGE } from '../../../../../../plugins/maps/public/reducers/ui'; + +import { FLYOUT_STATE, INDEXING_STAGE } from '../../reducers/ui'; import { updateFlyout, updateIndexingStage } from '../../actions/ui_actions'; import { getFlyoutDisplay, getIndexingStage } from '../../selectors/ui_selectors'; import { getMapColors } from '../../selectors/map_selectors'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInspectorAdapters } from '../../../../../../plugins/maps/public/reducers/non_serializable_instances'; + +import { getInspectorAdapters } from '../../reducers/non_serializable_instances'; import { setTransientLayer, addLayer, diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js similarity index 75% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js index 553e54ee897665..8937f32d3bf05d 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_editor/index.js @@ -6,8 +6,8 @@ import { connect } from 'react-redux'; import { SourceEditor } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInspectorAdapters } from '../../../../../../../plugins/maps/public/reducers/non_serializable_instances'; + +import { getInspectorAdapters } from '../../../reducers/non_serializable_instances'; function mapStateToProps(state = {}) { return { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_editor/view.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_editor/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_editor/view.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/source_editor/view.js diff --git a/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss new file mode 100644 index 00000000000000..8ae6970315e132 --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_index.scss @@ -0,0 +1 @@ +@import 'source_select'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_source_select.scss b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_source_select.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/_source_select.scss rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/_source_select.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js similarity index 90% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js index 67cc17ebaa2241..80b05a0fd015b7 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js +++ b/x-pack/plugins/maps/public/connected_components/layer_addpanel/source_select/source_select.js @@ -5,8 +5,8 @@ */ import React, { Fragment } from 'react'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getLayerWizards } from '../../../../../../../plugins/maps/public/layers/layer_wizard_registry'; + +import { getLayerWizards } from '../../../layers/layer_wizard_registry'; import { EuiTitle, EuiSpacer, EuiCard, EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import _ from 'lodash'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/view.js b/x-pack/plugins/maps/public/connected_components/layer_addpanel/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_addpanel/view.js rename to x-pack/plugins/maps/public/connected_components/layer_addpanel/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/__snapshots__/view.test.js.snap b/x-pack/plugins/maps/public/connected_components/layer_panel/__snapshots__/view.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/__snapshots__/view.test.js.snap rename to x-pack/plugins/maps/public/connected_components/layer_panel/__snapshots__/view.test.js.snap diff --git a/x-pack/plugins/maps/public/connected_components/layer_panel/_index.scss b/x-pack/plugins/maps/public/connected_components/layer_panel/_index.scss new file mode 100644 index 00000000000000..41b4826a02c675 --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/_index.scss @@ -0,0 +1,4 @@ +@import 'layer_panel'; +@import 'filter_editor/filter_editor'; +@import 'join_editor/resources/join'; +@import 'style_settings/style_settings'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_layer_panel.scss b/x-pack/plugins/maps/public/connected_components/layer_panel/_layer_panel.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/_layer_panel.scss rename to x-pack/plugins/maps/public/connected_components/layer_panel/_layer_panel.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/_filter_editor.scss b/x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/_filter_editor.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/_filter_editor.scss rename to x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/_filter_editor.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js b/x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js similarity index 96% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js index 40fdac38493d4b..fba2ec05d0b1d6 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/filter_editor.js @@ -20,12 +20,7 @@ import { import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { - getIndexPatternService, - getUiSettings, - getData, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../plugins/maps/public/kibana_services'; +import { getIndexPatternService, getUiSettings, getData } from '../../../kibana_services'; import { GlobalFilterCheckbox } from '../../../components/global_filter_checkbox'; export class FilterEditor extends Component { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/filter_editor/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/filter_editor/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js similarity index 89% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js index 287f0019f18ecd..621ce209eb982f 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/flyout_footer/index.js @@ -6,8 +6,8 @@ import { connect } from 'react-redux'; import { FlyoutFooter } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE } from '../../../../../../../plugins/maps/public/reducers/ui'; + +import { FLYOUT_STATE } from '../../../reducers/ui'; import { updateFlyout } from '../../../actions/ui_actions'; import { hasDirtyState } from '../../../selectors/map_selectors'; import { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/flyout_footer/view.js b/x-pack/plugins/maps/public/connected_components/layer_panel/flyout_footer/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/flyout_footer/view.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/flyout_footer/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/__snapshots__/metrics_expression.test.js.snap b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/__snapshots__/metrics_expression.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/__snapshots__/metrics_expression.test.js.snap rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/__snapshots__/metrics_expression.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/_join.scss b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/_join.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/_join.scss rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/_join.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js similarity index 95% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js index 9c4e1cfdb5467c..0d26354e2449b2 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join.js @@ -13,9 +13,9 @@ import { MetricsExpression } from './metrics_expression'; import { WhereExpression } from './where_expression'; import { GlobalFilterCheckbox } from '../../../../components/global_filter_checkbox'; -import { indexPatterns } from '../../../../../../../../../src/plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getIndexPatternService } from '../../../../../../../../plugins/maps/public/kibana_services'; +import { indexPatterns } from '../../../../../../../../src/plugins/data/public'; + +import { getIndexPatternService } from '../../../../kibana_services'; export class Join extends Component { state = { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js similarity index 93% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js index 73600c81d221e2..12ca2f3c514a06 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/join_expression.js @@ -16,16 +16,15 @@ import { EuiFormHelpText, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { SingleFieldSelect } from '../../../../../../../../plugins/maps/public/components/single_field_select'; + +import { SingleFieldSelect } from '../../../../components/single_field_select'; import { FormattedMessage } from '@kbn/i18n/react'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getTermsFields } from '../../../../../../../../plugins/maps/public/index_pattern_util'; + +import { getTermsFields } from '../../../../index_pattern_util'; import { getIndexPatternService, getIndexPatternSelectComponent, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../../plugins/maps/public/kibana_services'; +} from '../../../../kibana_services'; export class JoinExpression extends Component { state = { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js similarity index 95% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js index c6a79a398f9af2..8c83743ac4c962 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.js @@ -14,8 +14,8 @@ import { EuiFormErrorText, EuiFormHelpText, } from '@elastic/eui'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MetricsEditor } from '../../../../../../../../plugins/maps/public/components/metrics_editor'; + +import { MetricsEditor } from '../../../../components/metrics_editor'; import { FormattedMessage } from '@kbn/i18n/react'; import { AGG_TYPE } from '../../../../../common/constants'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js similarity index 92% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js index d8bf8622494484..3cd8a3c42879a3 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/metrics_expression.test.js @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -jest.mock('../../../../../../../../plugins/maps/public/components/metric_editor', () => ({ +jest.mock('../../../../components/metric_editor', () => ({ MetricsEditor: () => { return

mockMetricsEditor
; }, diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js similarity index 94% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js index 54ec0ac46fa3d9..7c9b4f7b7b9a4d 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/resources/where_expression.js @@ -8,11 +8,7 @@ import React, { Component } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButton, EuiPopover, EuiExpression, EuiFormHelpText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { - getUiSettings, - getData, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../../plugins/maps/public/kibana_services'; +import { getUiSettings, getData } from '../../../../kibana_services'; export class WhereExpression extends Component { state = { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/view.js b/x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/join_editor/view.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/join_editor/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/__snapshots__/layer_errors.test.js.snap b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/__snapshots__/layer_errors.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/__snapshots__/layer_errors.test.js.snap rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/__snapshots__/layer_errors.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.js b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.test.js b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.test.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_errors/layer_errors.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js similarity index 94% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js index e8f980bbbf2b40..e2f22c584d3b31 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/index.js @@ -13,7 +13,7 @@ import { updateLayerMinZoom, updateLayerAlpha, } from '../../../actions/map_actions'; -import { MAX_ZOOM } from '../../../../../../../plugins/maps/common/constants'; +import { MAX_ZOOM } from '../../../../common/constants'; function mapStateToProps(state = {}) { const selectedLayer = getSelectedLayer(state); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js similarity index 92% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js index 1d352913e54a36..168c735ab7a6c1 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/layer_settings/layer_settings.js @@ -8,11 +8,10 @@ import React, { Fragment } from 'react'; import { EuiTitle, EuiPanel, EuiFormRow, EuiFieldText, EuiSpacer } from '@elastic/eui'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ValidatedRange } from '../../../../../../../plugins/maps/public/components/validated_range'; +import { ValidatedRange } from '../../../components/validated_range'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { ValidatedDualRange } from '../../../../../../../../src/plugins/kibana_react/public'; +import { ValidatedDualRange } from '../../../../../../../src/plugins/kibana_react/public'; export function LayerSettings(props) { const onLabelChange = event => { const label = event.target.value; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/_style_settings.scss b/x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/_style_settings.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/_style_settings.scss rename to x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/_style_settings.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/index.js b/x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/index.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/style_settings.js b/x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/style_settings.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/style_settings/style_settings.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/style_settings/style_settings.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.js b/x-pack/plugins/maps/public/connected_components/layer_panel/view.js similarity index 95% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/view.js index 2521318f0b3c9c..f8b7c417e67fd2 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.js +++ b/x-pack/plugins/maps/public/connected_components/layer_panel/view.js @@ -28,10 +28,10 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public'; -import { Storage } from '../../../../../../../src/plugins/kibana_utils/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getData, getCore } from '../../../../../../plugins/maps/public/kibana_services'; +import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; +import { Storage } from '../../../../../../src/plugins/kibana_utils/public'; + +import { getData, getCore } from '../../kibana_services'; const localStorage = new Storage(window.localStorage); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.test.js b/x-pack/plugins/maps/public/connected_components/layer_panel/view.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.test.js rename to x-pack/plugins/maps/public/connected_components/layer_panel/view.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/feature_properties.test.js.snap b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/feature_properties.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/feature_properties.test.js.snap rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/feature_properties.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/tooltip_header.test.js.snap b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/tooltip_header.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/tooltip_header.test.js.snap rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/__snapshots__/tooltip_header.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/_index.scss b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/_index.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/_index.scss rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/_index.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js similarity index 92% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js index 15824b82965e83..b103fb43af97c7 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js +++ b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_geometry_filter_form.js @@ -8,12 +8,12 @@ import React, { Component, Fragment } from 'react'; import { EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createSpatialFilterWithGeometry } from '../../../../../../../plugins/maps/public/elasticsearch_geo_utils'; + +import { createSpatialFilterWithGeometry } from '../../../elasticsearch_geo_utils'; import { GEO_JSON_TYPE } from '../../../../common/constants'; import { GeometryFilterForm } from '../../../components/geometry_filter_form'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { UrlOverflowService } from '../../../../../../../../src/plugins/kibana_legacy/public'; + +import { UrlOverflowService } from '../../../../../../../src/plugins/kibana_legacy/public'; import rison from 'rison-node'; // over estimated and imprecise value to ensure filter has additional room for any meta keys added when filter is mapped. diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.test.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.test.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/feature_properties.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/features_tooltip.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/features_tooltip.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/features_tooltip.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/features_tooltip.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.test.js b/x-pack/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.test.js rename to x-pack/plugins/maps/public/connected_components/map/features_tooltip/tooltip_header.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_circle.ts b/x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_circle.ts similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_circle.ts rename to x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_circle.ts diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js b/x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js similarity index 96% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js rename to x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js index cc0e665525036f..d20faa39d6492a 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js +++ b/x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_control.js @@ -15,8 +15,7 @@ import { createSpatialFilterWithGeometry, getBoundingBoxGeometry, roundCoordinates, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../../plugins/maps/public/elasticsearch_geo_utils'; +} from '../../../../elasticsearch_geo_utils'; import { DrawTooltip } from './draw_tooltip'; const mbDrawModes = MapboxDraw.modes; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_tooltip.js b/x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_tooltip.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/draw_tooltip.js rename to x-pack/plugins/maps/public/connected_components/map/mb/draw_control/draw_tooltip.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/index.js b/x-pack/plugins/maps/public/connected_components/map/mb/draw_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/draw_control/index.js rename to x-pack/plugins/maps/public/connected_components/map/mb/draw_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/index.js b/x-pack/plugins/maps/public/connected_components/map/mb/index.js similarity index 91% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/index.js rename to x-pack/plugins/maps/public/connected_components/map/mb/index.js index 350cb7028abee2..d864b60eb433bf 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/index.js +++ b/x-pack/plugins/maps/public/connected_components/map/mb/index.js @@ -24,8 +24,8 @@ import { isTooltipControlDisabled, isViewControlHidden, } from '../../../selectors/map_selectors'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInspectorAdapters } from '../../../../../../../plugins/maps/public/reducers/non_serializable_instances'; + +import { getInspectorAdapters } from '../../../reducers/non_serializable_instances'; function mapStateToProps(state = {}) { return { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/mb.utils.test.js b/x-pack/plugins/maps/public/connected_components/map/mb/mb.utils.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/mb.utils.test.js rename to x-pack/plugins/maps/public/connected_components/map/mb/mb.utils.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_control.test.js.snap b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_control.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_control.test.js.snap rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_control.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_popover.test.js.snap b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_popover.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_popover.test.js.snap rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/__snapshots__/tooltip_popover.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/index.js b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/index.js rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.js b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.js rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.test.js b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.test.js rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_control.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.js b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.js rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.test.js b/x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.test.js rename to x-pack/plugins/maps/public/connected_components/map/mb/tooltip_control/tooltip_popover.test.js diff --git a/x-pack/plugins/maps/public/connected_components/map/mb/utils.js b/x-pack/plugins/maps/public/connected_components/map/mb/utils.js index 15aacfbf1f38db..7be2cd9e670843 100644 --- a/x-pack/plugins/maps/public/connected_components/map/mb/utils.js +++ b/x-pack/plugins/maps/public/connected_components/map/mb/utils.js @@ -4,8 +4,102 @@ * you may not use this file except in compliance with the Elastic License. */ +import _ from 'lodash'; import { RGBAImage } from './image_utils'; +export function removeOrphanedSourcesAndLayers(mbMap, layerList) { + const mbStyle = mbMap.getStyle(); + + const mbLayerIdsToRemove = []; + mbStyle.layers.forEach(mbLayer => { + const layer = layerList.find(layer => { + return layer.ownsMbLayerId(mbLayer.id); + }); + if (!layer) { + mbLayerIdsToRemove.push(mbLayer.id); + } + }); + mbLayerIdsToRemove.forEach(mbLayerId => mbMap.removeLayer(mbLayerId)); + + const mbSourcesToRemove = []; + for (const mbSourceId in mbStyle.sources) { + if (mbStyle.sources.hasOwnProperty(mbSourceId)) { + const layer = layerList.find(layer => { + return layer.ownsMbSourceId(mbSourceId); + }); + if (!layer) { + mbSourcesToRemove.push(mbSourceId); + } + } + } + mbSourcesToRemove.forEach(mbSourceId => mbMap.removeSource(mbSourceId)); +} + +/** + * This is function assumes only a single layer moved in the layerList, compared to mbMap + * It is optimized to minimize the amount of mbMap.moveLayer calls. + * @param mbMap + * @param layerList + */ +export function syncLayerOrderForSingleLayer(mbMap, layerList) { + if (!layerList || layerList.length === 0) { + return; + } + + const mbLayers = mbMap.getStyle().layers.slice(); + const layerIds = mbLayers.map(mbLayer => { + const layer = layerList.find(layer => layer.ownsMbLayerId(mbLayer.id)); + return layer.getId(); + }); + + const currentLayerOrderLayerIds = _.uniq(layerIds); + + const newLayerOrderLayerIdsUnfiltered = layerList.map(l => l.getId()); + const newLayerOrderLayerIds = newLayerOrderLayerIdsUnfiltered.filter(layerId => + currentLayerOrderLayerIds.includes(layerId) + ); + + let netPos = 0; + let netNeg = 0; + const movementArr = currentLayerOrderLayerIds.reduce((accu, id, idx) => { + const movement = newLayerOrderLayerIds.findIndex(newOId => newOId === id) - idx; + movement > 0 ? netPos++ : movement < 0 && netNeg++; + accu.push({ id, movement }); + return accu; + }, []); + if (netPos === 0 && netNeg === 0) { + return; + } + const movedLayerId = + (netPos >= netNeg && movementArr.find(l => l.movement < 0).id) || + (netPos < netNeg && movementArr.find(l => l.movement > 0).id); + const nextLayerIdx = newLayerOrderLayerIds.findIndex(layerId => layerId === movedLayerId) + 1; + + let nextMbLayerId; + if (nextLayerIdx === newLayerOrderLayerIds.length) { + nextMbLayerId = null; + } else { + const foundLayer = mbLayers.find(({ id: mbLayerId }) => { + const layerId = newLayerOrderLayerIds[nextLayerIdx]; + const layer = layerList.find(layer => layer.getId() === layerId); + return layer.ownsMbLayerId(mbLayerId); + }); + nextMbLayerId = foundLayer.id; + } + + const movedLayer = layerList.find(layer => layer.getId() === movedLayerId); + mbLayers.forEach(({ id: mbLayerId }) => { + if (movedLayer.ownsMbLayerId(mbLayerId)) { + mbMap.moveLayer(mbLayerId, nextMbLayerId); + } + }); +} + +export async function addSpritesheetToMap(json, imgUrl, mbMap) { + const imgData = await loadSpriteSheetImageData(imgUrl); + addSpriteSheetToMapFromImageData(json, imgData, mbMap); +} + function getImageData(img) { const canvas = window.document.createElement('canvas'); const context = canvas.getContext('2d'); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/view.js b/x-pack/plugins/maps/public/connected_components/map/mb/view.js similarity index 94% rename from x-pack/legacy/plugins/maps/public/connected_components/map/mb/view.js rename to x-pack/plugins/maps/public/connected_components/map/mb/view.js index a36e1d7048e92f..2d95de184f0f4e 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/map/mb/view.js +++ b/x-pack/plugins/maps/public/connected_components/map/mb/view.js @@ -6,14 +6,14 @@ import _ from 'lodash'; import React from 'react'; -import { ResizeChecker } from '../../../../../../../../src/plugins/kibana_utils/public'; +import { ResizeChecker } from '../../../../../../../src/plugins/kibana_utils/public'; import { syncLayerOrderForSingleLayer, removeOrphanedSourcesAndLayers, addSpritesheetToMap, } from './utils'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getGlyphUrl, isRetina } from '../../../../../../../plugins/maps/public/meta'; + +import { getGlyphUrl, isRetina } from '../../../meta'; import { DECIMAL_DEGREES_PRECISION, MAX_ZOOM, @@ -28,13 +28,9 @@ import sprites1 from '@elastic/maki/dist/sprite@1.png'; import sprites2 from '@elastic/maki/dist/sprite@2.png'; import { DrawControl } from './draw_control'; import { TooltipControl } from './tooltip_control'; -import { - clampToLatBounds, - clampToLonBounds, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../../../plugins/maps/public/elasticsearch_geo_utils'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInjectedVarFunc } from '../../../../../../../plugins/maps/public/kibana_services'; +import { clampToLatBounds, clampToLonBounds } from '../../../elasticsearch_geo_utils'; + +import { getInjectedVarFunc } from '../../../kibana_services'; mapboxgl.workerUrl = mbWorkerUrl; mapboxgl.setRTLTextPlugin(mbRtlPlugin); diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/_index.scss b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/_index.scss similarity index 93% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/_index.scss rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/_index.scss index 01aea403b27f09..2754a3e204263f 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/_index.scss +++ b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/_index.scss @@ -1,4 +1,4 @@ -@import './tools_control/index'; +@import 'tools_control/index'; .mapToolbarOverlay { position: absolute; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/index.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/index.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/index.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/index.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/set_view_control.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/set_view_control.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/set_view_control.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/set_view_control/set_view_control.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/toolbar_overlay.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/toolbar_overlay.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/toolbar_overlay.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/toolbar_overlay.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/__snapshots__/tools_control.test.js.snap b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/__snapshots__/tools_control.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/__snapshots__/tools_control.test.js.snap rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/__snapshots__/tools_control.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/_index.scss b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/_index.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/_index.scss rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/_index.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/index.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/index.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.test.js b/x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.test.js rename to x-pack/plugins/maps/public/connected_components/toolbar_overlay/tools_control/tools_control.test.js diff --git a/x-pack/plugins/maps/public/connected_components/widget_overlay/_index.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/_index.scss new file mode 100644 index 00000000000000..5e5086bed2763f --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/widget_overlay/_index.scss @@ -0,0 +1,6 @@ +@import 'mixins'; + +@import 'widget_overlay'; +@import 'attribution_control/attribution_control'; +@import 'layer_control/index'; +@import 'view_control/view_control'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_mixins.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/_mixins.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_mixins.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/_mixins.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_widget_overlay.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/_widget_overlay.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/_widget_overlay.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/_widget_overlay.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/__snapshots__/view.test.js.snap b/x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/__snapshots__/view.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/__snapshots__/view.test.js.snap rename to x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/__snapshots__/view.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.test.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.test.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/__snapshots__/view.test.js.snap b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/__snapshots__/view.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/__snapshots__/view.test.js.snap rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/__snapshots__/view.test.js.snap diff --git a/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss new file mode 100644 index 00000000000000..9a3e3a45d6c4e5 --- /dev/null +++ b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_index.scss @@ -0,0 +1,2 @@ +@import 'layer_control'; +@import 'layer_toc/toc_entry/toc_entry'; diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_layer_control.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_layer_control.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/_layer_control.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/_layer_control.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js similarity index 90% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js index 04de5f71f5bfc4..8780bac59e4b72 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js +++ b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/index.js @@ -6,8 +6,8 @@ import { connect } from 'react-redux'; import { LayerControl } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE } from '../../../../../../../plugins/maps/public/reducers/ui'; + +import { FLYOUT_STATE } from '../../../reducers/ui'; import { updateFlyout, setIsLayerTOCOpen } from '../../../actions/ui_actions'; import { setSelectedLayer } from '../../../actions/map_actions'; import { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/__snapshots__/view.test.js.snap b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/__snapshots__/view.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/__snapshots__/view.test.js.snap rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/__snapshots__/view.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/__snapshots__/view.test.js.snap b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/__snapshots__/view.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/__snapshots__/view.test.js.snap rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/__snapshots__/view.test.js.snap diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/_toc_entry.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/_toc_entry.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/_toc_entry.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/_toc_entry.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js similarity index 93% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js index 588445d0b49928..ca3c6d325687dd 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js +++ b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/index.js @@ -7,8 +7,8 @@ import _ from 'lodash'; import { connect } from 'react-redux'; import { TOCEntry } from './view'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE } from '../../../../../../../../../plugins/maps/public/reducers/ui'; + +import { FLYOUT_STATE } from '../../../../../reducers/ui'; import { updateFlyout, hideTOCDetails, showTOCDetails } from '../../../../../actions/ui_actions'; import { getIsReadOnly, getOpenTOCDetails } from '../../../../../selectors/ui_selectors'; import { diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.test.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.test.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/toc_entry/view.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.test.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.test.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/layer_toc/view.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/view.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/view.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/view.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/view.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/view.test.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/view.test.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/layer_control/view.test.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/layer_control/view.test.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/_view_control.scss b/x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/_view_control.scss similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/_view_control.scss rename to x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/_view_control.scss diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/index.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/index.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/index.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/index.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/view_control.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/view_control.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/view_control/view_control.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/view_control/view_control.js diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/widget_overlay.js b/x-pack/plugins/maps/public/connected_components/widget_overlay/widget_overlay.js similarity index 100% rename from x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/widget_overlay.js rename to x-pack/plugins/maps/public/connected_components/widget_overlay/widget_overlay.js diff --git a/x-pack/legacy/plugins/maps/public/embeddable/README.md b/x-pack/plugins/maps/public/embeddable/README.md similarity index 100% rename from x-pack/legacy/plugins/maps/public/embeddable/README.md rename to x-pack/plugins/maps/public/embeddable/README.md diff --git a/x-pack/legacy/plugins/maps/public/embeddable/index.ts b/x-pack/plugins/maps/public/embeddable/index.ts similarity index 100% rename from x-pack/legacy/plugins/maps/public/embeddable/index.ts rename to x-pack/plugins/maps/public/embeddable/index.ts diff --git a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.tsx b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx similarity index 90% rename from x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.tsx rename to x-pack/plugins/maps/public/embeddable/map_embeddable.tsx index b8e4c84ad56a17..dbd48d614e99b4 100644 --- a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.tsx +++ b/x-pack/plugins/maps/public/embeddable/map_embeddable.tsx @@ -9,8 +9,6 @@ import React from 'react'; import { Provider } from 'react-redux'; import { render, unmountComponentAtNode } from 'react-dom'; import 'mapbox-gl/dist/mapbox-gl.css'; - -import { I18nContext } from 'ui/i18n'; import { Subscription } from 'rxjs'; import { Unsubscribe } from 'redux'; import { @@ -18,8 +16,8 @@ import { IContainer, EmbeddableInput, EmbeddableOutput, -} from '../../../../../../src/plugins/embeddable/public'; -import { APPLY_FILTER_TRIGGER } from '../../../../../../src/plugins/ui_actions/public'; +} from '../../../../../src/plugins/embeddable/public'; +import { APPLY_FILTER_TRIGGER } from '../../../../../src/plugins/ui_actions/public'; import { esFilters, IIndexPattern, @@ -27,11 +25,9 @@ import { Filter, Query, RefreshInterval, -} from '../../../../../../src/plugins/data/public'; - +} from '../../../../../src/plugins/data/public'; import { GisMap } from '../connected_components/gis_map'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createMapStore, MapStore } from '../../../../../plugins/maps/public/reducers/store'; +import { createMapStore, MapStore } from '../reducers/store'; import { setGotoWithCenter, replaceLayerList, @@ -45,21 +41,18 @@ import { hideViewControl, setHiddenLayers, } from '../actions/map_actions'; -import { MapCenterAndZoom } from '../../../../../plugins/maps/common/descriptor_types'; +import { MapCenterAndZoom } from '../../common/descriptor_types'; import { setReadOnly, setIsLayerTOCOpen, setOpenTOCDetails } from '../actions/ui_actions'; import { getIsLayerTOCOpen, getOpenTOCDetails } from '../selectors/ui_selectors'; import { getInspectorAdapters, setEventHandlers, EventHandlers, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/reducers/non_serializable_instances'; +} from '../reducers/non_serializable_instances'; import { getMapCenter, getMapZoom, getHiddenLayerIds } from '../selectors/map_selectors'; import { MAP_SAVED_OBJECT_TYPE } from '../../common/constants'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { RenderToolTipContent } from '../../../../../plugins/maps/public/layers/tooltips/tooltip_property'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getUiActions } from '../../../../../plugins/maps/public/kibana_services'; +import { RenderToolTipContent } from '../layers/tooltips/tooltip_property'; +import { getUiActions, getCoreI18n } from '../kibana_services'; interface MapEmbeddableConfig { editUrl?: string; @@ -247,6 +240,8 @@ export class MapEmbeddable extends Embeddable diff --git a/x-pack/plugins/maps/public/embeddable/map_embeddable_factory.ts b/x-pack/plugins/maps/public/embeddable/map_embeddable_factory.ts new file mode 100644 index 00000000000000..a99fe63c5f3863 --- /dev/null +++ b/x-pack/plugins/maps/public/embeddable/map_embeddable_factory.ts @@ -0,0 +1,136 @@ +/* + * 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 'lodash'; +import { i18n } from '@kbn/i18n'; +import { IIndexPattern } from 'src/plugins/data/public'; +// @ts-ignore +import { getMapsSavedObjectLoader } from '../angular/services/gis_map_saved_object_loader'; +import { MapEmbeddable, MapEmbeddableInput } from './map_embeddable'; +import { getIndexPatternService, getHttp, getMapsCapabilities } from '../kibana_services'; +import { + EmbeddableFactoryDefinition, + IContainer, +} from '../../../../../src/plugins/embeddable/public'; + +import { createMapPath, MAP_SAVED_OBJECT_TYPE, APP_ICON } from '../../common/constants'; + +import { createMapStore } from '../reducers/store'; +import { addLayerWithoutDataSync } from '../actions/map_actions'; +import { getQueryableUniqueIndexPatternIds } from '../selectors/map_selectors'; +import { getInitialLayers } from '../angular/get_initial_layers'; +import { mergeInputWithSavedMap } from './merge_input_with_saved_map'; + +export class MapEmbeddableFactory implements EmbeddableFactoryDefinition { + type = MAP_SAVED_OBJECT_TYPE; + savedObjectMetaData = { + name: i18n.translate('xpack.maps.mapSavedObjectLabel', { + defaultMessage: 'Map', + }), + type: MAP_SAVED_OBJECT_TYPE, + getIconForSavedObject: () => APP_ICON, + }; + + async isEditable() { + return getMapsCapabilities().save as boolean; + } + + // Not supported yet for maps types. + canCreateNew() { + return false; + } + + getDisplayName() { + return i18n.translate('xpack.maps.embeddableDisplayName', { + defaultMessage: 'map', + }); + } + + async _getIndexPatterns(layerList: unknown[]): Promise { + // Need to extract layerList from store to get queryable index pattern ids + const store = createMapStore(); + let queryableIndexPatternIds; + try { + layerList.forEach((layerDescriptor: unknown) => { + store.dispatch(addLayerWithoutDataSync(layerDescriptor)); + }); + queryableIndexPatternIds = getQueryableUniqueIndexPatternIds(store.getState()); + } catch (error) { + throw new Error( + i18n.translate('xpack.maps.mapEmbeddableFactory.invalidLayerList', { + defaultMessage: 'Unable to load map, malformed layer list', + }) + ); + } + + const promises = queryableIndexPatternIds.map(async indexPatternId => { + try { + return await getIndexPatternService().get(indexPatternId); + } catch (error) { + // Unable to load index pattern, better to not throw error so map embeddable can render + // Error will be surfaced by map embeddable since it too will be unable to locate the index pattern + return null; + } + }); + const indexPatterns = await Promise.all(promises); + return _.compact(indexPatterns) as IIndexPattern[]; + } + + async _fetchSavedMap(savedObjectId: string) { + const savedObjectLoader = getMapsSavedObjectLoader(); + return await savedObjectLoader.get(savedObjectId); + } + + createFromSavedObject = async ( + savedObjectId: string, + input: MapEmbeddableInput, + parent?: IContainer + ) => { + const savedMap = await this._fetchSavedMap(savedObjectId); + const layerList = getInitialLayers(savedMap.layerListJSON); + const indexPatterns = await this._getIndexPatterns(layerList); + + const embeddable = new MapEmbeddable( + { + layerList, + title: savedMap.title, + editUrl: getHttp().basePath.prepend(createMapPath(savedObjectId)), + indexPatterns, + editable: await this.isEditable(), + }, + input, + parent + ); + + try { + embeddable.updateInput(mergeInputWithSavedMap(input, savedMap)); + } catch (error) { + throw new Error( + i18n.translate('xpack.maps.mapEmbeddableFactory.invalidSavedObject', { + defaultMessage: 'Unable to load map, malformed saved object', + }) + ); + } + + return embeddable; + }; + + create = async (input: MapEmbeddableInput, parent?: IContainer) => { + const layerList = getInitialLayers(); + const indexPatterns = await this._getIndexPatterns(layerList); + + return new MapEmbeddable( + { + layerList, + title: input.title ?? '', + indexPatterns, + editable: false, + }, + input, + parent + ); + }; +} diff --git a/x-pack/legacy/plugins/maps/public/embeddable/merge_input_with_saved_map.d.ts b/x-pack/plugins/maps/public/embeddable/merge_input_with_saved_map.d.ts similarity index 100% rename from x-pack/legacy/plugins/maps/public/embeddable/merge_input_with_saved_map.d.ts rename to x-pack/plugins/maps/public/embeddable/merge_input_with_saved_map.d.ts diff --git a/x-pack/legacy/plugins/maps/public/embeddable/merge_input_with_saved_map.js b/x-pack/plugins/maps/public/embeddable/merge_input_with_saved_map.js similarity index 89% rename from x-pack/legacy/plugins/maps/public/embeddable/merge_input_with_saved_map.js rename to x-pack/plugins/maps/public/embeddable/merge_input_with_saved_map.js index 8e3e0a9168e30e..d91c91b3b223c9 100644 --- a/x-pack/legacy/plugins/maps/public/embeddable/merge_input_with_saved_map.js +++ b/x-pack/plugins/maps/public/embeddable/merge_input_with_saved_map.js @@ -5,8 +5,8 @@ */ import _ from 'lodash'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { DEFAULT_IS_LAYER_TOC_OPEN } from '../../../../../plugins/maps/public/reducers/ui'; + +import { DEFAULT_IS_LAYER_TOC_OPEN } from '../reducers/ui'; const MAP_EMBEDDABLE_INPUT_KEYS = [ 'hideFilterActions', diff --git a/x-pack/legacy/plugins/maps/public/feature_catalogue_entry.ts b/x-pack/plugins/maps/public/feature_catalogue_entry.ts similarity index 89% rename from x-pack/legacy/plugins/maps/public/feature_catalogue_entry.ts rename to x-pack/plugins/maps/public/feature_catalogue_entry.ts index fdda76b4e12127..6c2579bd3e4e2a 100644 --- a/x-pack/legacy/plugins/maps/public/feature_catalogue_entry.ts +++ b/x-pack/plugins/maps/public/feature_catalogue_entry.ts @@ -6,7 +6,7 @@ import { i18n } from '@kbn/i18n'; import { APP_ID, APP_ICON } from '../common/constants'; import { getAppTitle } from '../common/i18n_getters'; -import { FeatureCatalogueCategory } from '../../../../../src/plugins/home/public'; +import { FeatureCatalogueCategory } from '../../../../src/plugins/home/public'; export const featureCatalogueEntry = { id: APP_ID, diff --git a/x-pack/legacy/plugins/maps/public/help_menu_util.js b/x-pack/plugins/maps/public/help_menu_util.js similarity index 81% rename from x-pack/legacy/plugins/maps/public/help_menu_util.js rename to x-pack/plugins/maps/public/help_menu_util.js index 70b9340b562cd1..053caf66883094 100644 --- a/x-pack/legacy/plugins/maps/public/help_menu_util.js +++ b/x-pack/plugins/maps/public/help_menu_util.js @@ -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. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getDocLinks, getCoreChrome } from '../../../../plugins/maps/public/kibana_services'; + +import { getDocLinks, getCoreChrome } from './kibana_services'; export function addHelpMenuToAppChrome() { const { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } = getDocLinks(); diff --git a/x-pack/legacy/plugins/maps/public/icon.svg b/x-pack/plugins/maps/public/icon.svg similarity index 100% rename from x-pack/legacy/plugins/maps/public/icon.svg rename to x-pack/plugins/maps/public/icon.svg diff --git a/x-pack/plugins/maps/public/index.scss b/x-pack/plugins/maps/public/index.scss new file mode 100644 index 00000000000000..8b2f6d3cb61563 --- /dev/null +++ b/x-pack/plugins/maps/public/index.scss @@ -0,0 +1,17 @@ +/* GIS plugin styles */ + +// Import the EUI global scope so we can use EUI constants +@import 'src/legacy/ui/public/styles/_styling_constants'; + +// Prefix all styles with "map" to avoid conflicts. +// Examples +// mapChart +// mapChart__legend +// mapChart__legend--small +// mapChart__legend-isLoading + +@import 'main'; +@import 'mapbox_hacks'; +@import 'connected_components/index'; +@import 'components/index'; +@import 'layers/index'; diff --git a/x-pack/plugins/maps/public/layers/layer.js b/x-pack/plugins/maps/public/layers/layer.js index 19dcbaf1dfcfdc..9362ce2c028e6e 100644 --- a/x-pack/plugins/maps/public/layers/layer.js +++ b/x-pack/plugins/maps/public/layers/layer.js @@ -14,7 +14,7 @@ import { SOURCE_DATA_ID_ORIGIN, } from '../../common/constants'; import uuid from 'uuid/v4'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths + import { copyPersistentState } from '../reducers/util.js'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/plugins/maps/public/layers/sources/es_source/es_source.js b/x-pack/plugins/maps/public/layers/sources/es_source/es_source.js index 3402e367cbd736..9ab87577b77806 100644 --- a/x-pack/plugins/maps/public/layers/sources/es_source/es_source.js +++ b/x-pack/plugins/maps/public/layers/sources/es_source/es_source.js @@ -16,7 +16,7 @@ import { createExtentFilter } from '../../../elasticsearch_geo_utils'; import _ from 'lodash'; import { i18n } from '@kbn/i18n'; import uuid from 'uuid/v4'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths + import { copyPersistentState } from '../../../reducers/util'; import { ES_GEO_FIELD_TYPE } from '../../../../common/constants'; import { DataRequestAbortError } from '../../util/data_request'; diff --git a/x-pack/plugins/maps/public/layers/sources/source.js b/x-pack/plugins/maps/public/layers/sources/source.js index 555b8999d62847..fd93daf249b265 100644 --- a/x-pack/plugins/maps/public/layers/sources/source.js +++ b/x-pack/plugins/maps/public/layers/sources/source.js @@ -4,7 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths import { copyPersistentState } from '../../reducers/util'; import { MIN_ZOOM, MAX_ZOOM } from '../../../common/constants'; diff --git a/x-pack/plugins/maps/public/maps_vis_type_alias.js b/x-pack/plugins/maps/public/maps_vis_type_alias.js new file mode 100644 index 00000000000000..85613f4608c6f4 --- /dev/null +++ b/x-pack/plugins/maps/public/maps_vis_type_alias.js @@ -0,0 +1,41 @@ +/* + * 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 { APP_ID, APP_ICON, MAP_BASE_URL } from '../common/constants'; +import { getInjectedVarFunc, getVisualizations } from './kibana_services'; + +export function getMapsVisTypeAlias() { + const showMapVisualizationTypes = getInjectedVarFunc()('showMapVisualizationTypes', false); + if (!showMapVisualizationTypes) { + getVisualizations().hideTypes(['region_map', 'tile_map']); + } + + const description = i18n.translate('xpack.maps.visTypeAlias.description', { + defaultMessage: 'Create and style maps with multiple layers and indices.', + }); + + const legacyMapVisualizationWarning = i18n.translate( + 'xpack.maps.visTypeAlias.legacyMapVizWarning', + { + defaultMessage: `Use the Maps app instead of Coordinate Map and Region Map. +The Maps app offers more functionality and is easier to use.`, + } + ); + + return { + aliasUrl: MAP_BASE_URL, + name: APP_ID, + title: i18n.translate('xpack.maps.visTypeAlias.title', { + defaultMessage: 'Maps', + }), + description: showMapVisualizationTypes + ? `${description} ${legacyMapVisualizationWarning}` + : description, + icon: APP_ICON, + stage: 'production', + }; +} diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index d3b9626dc83661..0b076621326ce3 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -33,10 +33,17 @@ import { setVisualizations, // @ts-ignore } from './kibana_services'; +import { featureCatalogueEntry } from './feature_catalogue_entry'; +// @ts-ignore +import { getMapsVisTypeAlias } from './maps_vis_type_alias'; import { registerLayerWizards } from './layers/load_layer_wizards'; +import { HomePublicPluginSetup } from '../../../../src/plugins/home/public'; +import { VisualizationsSetup } from '../../../../src/plugins/visualizations/public'; export interface MapsPluginSetupDependencies { inspector: InspectorSetupContract; + home: HomePublicPluginSetup; + visualizations: VisualizationsSetup; } // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface MapsPluginStartDependencies {} @@ -94,8 +101,15 @@ export class MapsPlugin MapsPluginStartDependencies > { public setup(core: CoreSetup, plugins: MapsPluginSetupDependencies) { - plugins.inspector.registerView(MapView); + const { inspector, home, visualizations } = plugins; + bindSetupCoreAndPlugins(core, plugins); + + inspector.registerView(MapView); + home.featureCatalogue.register(featureCatalogueEntry); + visualizations.registerAlias(getMapsVisTypeAlias()); } - public start(core: CoreStart, plugins: any) {} + public start(core: CoreStart, plugins: any) { + bindStartCoreAndPlugins(core, plugins); + } } diff --git a/x-pack/plugins/maps/public/reducers/ui.ts b/x-pack/plugins/maps/public/reducers/ui.ts index 7429545ec0e46e..f577618c74ffef 100644 --- a/x-pack/plugins/maps/public/reducers/ui.ts +++ b/x-pack/plugins/maps/public/reducers/ui.ts @@ -16,7 +16,6 @@ import { SHOW_TOC_DETAILS, HIDE_TOC_DETAILS, UPDATE_INDEXING_STAGE, - // @ts-ignore } from '../actions/ui_actions'; export enum FLYOUT_STATE { diff --git a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.d.ts b/x-pack/plugins/maps/public/selectors/map_selectors.d.ts similarity index 81% rename from x-pack/legacy/plugins/maps/public/selectors/map_selectors.d.ts rename to x-pack/plugins/maps/public/selectors/map_selectors.d.ts index 8c99e0adcc14fe..32579d036590e3 100644 --- a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.d.ts +++ b/x-pack/plugins/maps/public/selectors/map_selectors.d.ts @@ -6,8 +6,8 @@ import { AnyAction } from 'redux'; import { MapCenter } from '../../common/descriptor_types'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MapStoreState } from '../../../../../plugins/maps/public/reducers/store'; + +import { MapStoreState } from '../reducers/store'; export function getHiddenLayerIds(state: MapStoreState): string[]; diff --git a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.js b/x-pack/plugins/maps/public/selectors/map_selectors.js similarity index 82% rename from x-pack/legacy/plugins/maps/public/selectors/map_selectors.js rename to x-pack/plugins/maps/public/selectors/map_selectors.js index 1e710259355198..c7073efa96cd55 100644 --- a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.js +++ b/x-pack/plugins/maps/public/selectors/map_selectors.js @@ -6,31 +6,27 @@ import { createSelector } from 'reselect'; import _ from 'lodash'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { TileLayer } from '../../../../../plugins/maps/public/layers/tile_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { VectorTileLayer } from '../../../../../plugins/maps/public/layers/vector_tile_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { VectorLayer } from '../../../../../plugins/maps/public/layers/vector_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { HeatmapLayer } from '../../../../../plugins/maps/public/layers/heatmap_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { BlendedVectorLayer } from '../../../../../plugins/maps/public/layers/blended_vector_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getTimeFilter } from '../../../../../plugins/maps/public/kibana_services'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { TiledVectorLayer } from '../../../../../plugins/maps/public/layers/tiled_vector_layer'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getInspectorAdapters } from '../../../../../plugins/maps/public/reducers/non_serializable_instances'; -import { - copyPersistentState, - TRACKED_LAYER_DESCRIPTOR, - // eslint-disable-next-line @kbn/eslint/no-restricted-paths -} from '../../../../../plugins/maps/public/reducers/util'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { InnerJoin } from '../../../../../plugins/maps/public/layers/joins/inner_join'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { getSourceByType } from '../../../../../plugins/maps/public/layers/sources/source_registry'; + +import { TileLayer } from '../layers/tile_layer'; + +import { VectorTileLayer } from '../layers/vector_tile_layer'; + +import { VectorLayer } from '../layers/vector_layer'; + +import { HeatmapLayer } from '../layers/heatmap_layer'; + +import { BlendedVectorLayer } from '../layers/blended_vector_layer'; + +import { getTimeFilter } from '../kibana_services'; + +import { getInspectorAdapters } from '../reducers/non_serializable_instances'; +import { TiledVectorLayer } from '../layers/tiled_vector_layer'; + +import { copyPersistentState, TRACKED_LAYER_DESCRIPTOR } from '../reducers/util'; + +import { InnerJoin } from '../layers/joins/inner_join'; + +import { getSourceByType } from '../layers/sources/source_registry'; function createLayerInstance(layerDescriptor, inspectorAdapters) { const source = createSourceInstance(layerDescriptor.sourceDescriptor, inspectorAdapters); diff --git a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.test.js b/x-pack/plugins/maps/public/selectors/map_selectors.test.js similarity index 62% rename from x-pack/legacy/plugins/maps/public/selectors/map_selectors.test.js rename to x-pack/plugins/maps/public/selectors/map_selectors.test.js index 72cc7486175401..fec16251914ead 100644 --- a/x-pack/legacy/plugins/maps/public/selectors/map_selectors.test.js +++ b/x-pack/plugins/maps/public/selectors/map_selectors.test.js @@ -4,18 +4,18 @@ * you may not use this file except in compliance with the Elastic License. */ -jest.mock('../../../../../plugins/maps/public/layers/vector_layer', () => {}); -jest.mock('../../../../../plugins/maps/public/layers/tiled_vector_layer', () => {}); -jest.mock('../../../../../plugins/maps/public/layers/blended_vector_layer', () => {}); -jest.mock('../../../../../plugins/maps/public/layers/heatmap_layer', () => {}); -jest.mock('../../../../../plugins/maps/public/layers/vector_tile_layer', () => {}); -jest.mock('../../../../../plugins/maps/public/layers/joins/inner_join', () => {}); -jest.mock('../../../../../plugins/maps/public/reducers/non_serializable_instances', () => ({ +jest.mock('../layers/vector_layer', () => {}); +jest.mock('../layers/tiled_vector_layer', () => {}); +jest.mock('../layers/blended_vector_layer', () => {}); +jest.mock('../layers/heatmap_layer', () => {}); +jest.mock('../layers/vector_tile_layer', () => {}); +jest.mock('../layers/joins/inner_join', () => {}); +jest.mock('../reducers/non_serializable_instances', () => ({ getInspectorAdapters: () => { return {}; }, })); -jest.mock('../../../../../plugins/maps/public/kibana_services', () => ({ +jest.mock('../kibana_services', () => ({ getTimeFilter: () => ({ getTime: () => { return { diff --git a/x-pack/legacy/plugins/maps/public/selectors/ui_selectors.ts b/x-pack/plugins/maps/public/selectors/ui_selectors.ts similarity index 74% rename from x-pack/legacy/plugins/maps/public/selectors/ui_selectors.ts rename to x-pack/plugins/maps/public/selectors/ui_selectors.ts index fdf2a8ea0e4f37..32d4beeb381d7f 100644 --- a/x-pack/legacy/plugins/maps/public/selectors/ui_selectors.ts +++ b/x-pack/plugins/maps/public/selectors/ui_selectors.ts @@ -4,10 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { MapStoreState } from '../../../../../plugins/maps/public/reducers/store'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { FLYOUT_STATE, INDEXING_STAGE } from '../../../../../plugins/maps/public/reducers/ui'; +import { MapStoreState } from '../reducers/store'; + +import { FLYOUT_STATE, INDEXING_STAGE } from '../reducers/ui'; export const getFlyoutDisplay = ({ ui }: MapStoreState): FLYOUT_STATE => ui.flyoutDisplay; export const getIsSetViewOpen = ({ ui }: MapStoreState): boolean => ui.isSetViewOpen; From 2caed9b7be951cd65c1cb84ab2f1150e6ee57503 Mon Sep 17 00:00:00 2001 From: Frank Hassanabad Date: Mon, 20 Apr 2020 17:43:48 -0600 Subject: [PATCH 20/39] [SIEM] Adds recursive exact key checks for validation and formatter ## Summary * Adds exact check to cause failures whenever a schema is using t.exact({}) and that schema has extra keys at any level of the schema hierarchy. * Fixes the exact check to work with unknown in a safe way and only do recursive checks for keys only when the unknown is an Object. * Changes the output to use a format error mechanism which pushes all the errors onto one line to be consistent with the response errors. We can change this as a team to whatever we want I just put it to a comma separator as that is what the responses type checks were using downstream. * Moves the downstream code up higher to be used within SIEM for timeline and detection engine. * Adds tests in TDD/red light/green light fashion where I fail the extra key checks first and then pass them second. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md#cross-browser-compatibility) were updated or added to match the most common scenarios --- .../detection_engine/routes/rules/validate.ts | 4 +- .../schemas/response/__mocks__/utils.ts | 37 ----------- .../response/check_type_dependents.test.ts | 10 +-- .../schemas/response/error_schema.test.ts | 5 +- .../response/find_rules_schema.test.ts | 10 +-- .../response/import_rules_schema.test.ts | 27 ++++++-- .../response/prepackaged_rules_schema.test.ts | 4 +- .../prepackaged_rules_status_schema.test.ts | 4 +- .../response/rules_bulk_schema.test.ts | 10 +-- .../schemas/response/rules_schema.test.ts | 5 +- .../type_timeline_only_schema.test.ts | 4 +- .../schemas/types/iso_date_string.test.ts | 2 +- .../schemas/types/lists_default_array.test.ts | 2 +- ...positive_integer_greater_than_zero.test.ts | 2 +- .../schemas/types/postive_integer.test.ts | 2 +- .../types/references_default_array.test.ts | 2 +- .../routes/schemas/types/risk_score.test.ts | 2 +- .../routes/schemas/types/uuid.test.ts | 2 +- .../routes/export_timelines_route.test.ts | 8 +-- .../routes/import_timelines_route.test.ts | 5 +- .../utils/build_validation/__mocks__/utils.ts | 43 +++++++++++++ .../build_validation}/exact_check.test.ts | 21 +++---- .../build_validation}/exact_check.ts | 59 ++++++++--------- .../build_validation/format_errors.test.ts} | 11 +--- .../build_validation/format_errors.ts} | 0 .../build_validation/route_validation.test.ts | 63 ++++++++++++++++--- .../build_validation/route_validation.ts | 6 +- 27 files changed, 199 insertions(+), 151 deletions(-) create mode 100644 x-pack/plugins/siem/server/utils/build_validation/__mocks__/utils.ts rename x-pack/plugins/siem/server/{lib/detection_engine/routes/schemas/response => utils/build_validation}/exact_check.test.ts (94%) rename x-pack/plugins/siem/server/{lib/detection_engine/routes/schemas/response => utils/build_validation}/exact_check.ts (59%) rename x-pack/plugins/siem/server/{lib/detection_engine/routes/schemas/response/utils.test.ts => utils/build_validation/format_errors.test.ts} (94%) rename x-pack/plugins/siem/server/{lib/detection_engine/routes/schemas/response/utils.ts => utils/build_validation/format_errors.ts} (100%) diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/rules/validate.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/rules/validate.ts index c207d075331b6e..cfba40fc225a24 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/rules/validate.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/rules/validate.ts @@ -9,8 +9,9 @@ import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import * as t from 'io-ts'; +import { formatErrors } from '../../../../utils/build_validation/format_errors'; +import { exactCheck } from '../../../../utils/build_validation/exact_check'; import { PartialAlert, FindResult } from '../../../../../../alerting/server'; -import { formatErrors } from '../schemas/response/utils'; import { isAlertType, IRuleSavedAttributesSavedObjectAttributes, @@ -19,7 +20,6 @@ import { import { OutputRuleAlertRest } from '../../types'; import { createBulkErrorObject, BulkError } from '../utils'; import { rulesSchema, RulesSchema } from '../schemas/response/rules_schema'; -import { exactCheck } from '../schemas/response/exact_check'; import { transformFindAlerts, transform, transformAlertToRule } from './utils'; import { findRulesSchema } from '../schemas/response/find_rules_schema'; import { RuleActions } from '../../rule_actions/types'; diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts index 21f18f9db55fba..fef6bcf42e49f0 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts @@ -4,32 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import * as t from 'io-ts'; -import { fold } from 'fp-ts/lib/Either'; import { RulesSchema } from '../rules_schema'; import { RulesBulkSchema } from '../rules_bulk_schema'; import { ErrorSchema } from '../error_schema'; import { FindRulesSchema } from '../find_rules_schema'; -import { formatErrors } from '../utils'; -import { pipe } from 'fp-ts/lib/pipeable'; - -interface Message { - errors: t.Errors; - schema: T | {}; -} - -const onLeft = (errors: t.Errors): Message => { - return { schema: {}, errors }; -}; - -const onRight = (schema: T): Message => { - return { - schema, - errors: [], - }; -}; - -export const foldLeftRight = fold(onLeft, onRight); export const ANCHOR_DATE = '2020-02-20T03:57:54.037Z'; @@ -127,18 +105,3 @@ export const getFindResponseSingle = (): FindRulesSchema => ({ total: 1, data: [getBaseResponsePayload()], }); - -/** - * Convenience utility to keep the error message handling within tests to be - * very concise. - * @param validation The validation to get the errors from - */ -export const getPaths = (validation: t.Validation): string[] => { - return pipe( - validation, - fold( - errors => formatErrors(errors), - () => ['no errors'] - ) - ); -}; diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/check_type_dependents.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/check_type_dependents.test.ts index 0eda2a7a13d96f..fbd2382e2826d4 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/check_type_dependents.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/check_type_dependents.test.ts @@ -15,17 +15,13 @@ import { addQueryFields, addMlFields, } from './check_type_dependents'; -import { - foldLeftRight, - getBaseResponsePayload, - getPaths, - getMlRuleResponsePayload, -} from './__mocks__/utils'; +import { getBaseResponsePayload, getMlRuleResponsePayload } from './__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; -import { exactCheck } from './exact_check'; import { RulesSchema } from './rules_schema'; import { TypeAndTimelineOnly } from './type_timeline_only_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; describe('check_type_dependents', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/error_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/error_schema.test.ts index 11d8b85f259206..6e159a792edb66 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/error_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/error_schema.test.ts @@ -7,10 +7,11 @@ import { left } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; -import { exactCheck } from './exact_check'; -import { foldLeftRight, getErrorPayload, getPaths } from './__mocks__/utils'; +import { getErrorPayload } from './__mocks__/utils'; import { errorSchema, ErrorSchema } from './error_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('error_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/find_rules_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/find_rules_schema.test.ts index f5c1970ee8c55c..68b67db595d76d 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/find_rules_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/find_rules_schema.test.ts @@ -5,17 +5,13 @@ */ import { findRulesSchema, FindRulesSchema } from './find_rules_schema'; -import { exactCheck } from './exact_check'; import { pipe } from 'fp-ts/lib/pipeable'; -import { - foldLeftRight, - getFindResponseSingle, - getBaseResponsePayload, - getPaths, -} from './__mocks__/utils'; +import { getFindResponseSingle, getBaseResponsePayload } from './__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; import { RulesSchema } from './rules_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { getPaths, foldLeftRight } from '../../../../../utils/build_validation/__mocks__/utils'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; describe('find_rules_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/import_rules_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/import_rules_schema.test.ts index ce4bbf420a634b..b0b863ebbbc0b2 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/import_rules_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/import_rules_schema.test.ts @@ -4,13 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import { exactCheck } from './exact_check'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from './__mocks__/utils'; -import { left } from 'fp-ts/lib/Either'; +import { left, Either } from 'fp-ts/lib/Either'; import { ImportRulesSchema, importRulesSchema } from './import_rules_schema'; import { ErrorSchema } from './error_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { getPaths, foldLeftRight } from '../../../../../utils/build_validation/__mocks__/utils'; +import { Errors } from 'io-ts'; describe('import_rules_schema', () => { beforeAll(() => { @@ -79,13 +80,31 @@ describe('import_rules_schema', () => { }); test('it should NOT validate a success that is not a boolean', () => { + type UnsafeCastForTest = Either< + Errors, + { + success: string; + success_count: number; + errors: Array< + { + id?: string | undefined; + rule_id?: string | undefined; + } & { + error: { + status_code: number; + message: string; + }; + } + >; + } + >; const payload: Omit & { success: string } = { success: 'hello', success_count: 0, errors: [], }; const decoded = importRulesSchema.decode(payload); - const checked = exactCheck(payload, decoded); + const checked = exactCheck(payload, decoded as UnsafeCastForTest); const message = pipe(checked, foldLeftRight); expect(getPaths(left(message.errors))).toEqual(['Invalid value "hello" supplied to "success"']); diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_schema.test.ts index 46667826416e1f..827167c63fd58e 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_schema.test.ts @@ -4,12 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { exactCheck } from './exact_check'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from './__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; import { PrePackagedRulesSchema, prePackagedRulesSchema } from './prepackaged_rules_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('prepackaged_rules_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_status_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_status_schema.test.ts index 1c270ff402f75e..a864667583c0a8 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_status_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/prepackaged_rules_status_schema.test.ts @@ -4,15 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import { exactCheck } from './exact_check'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from './__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; import { PrePackagedRulesStatusSchema, prePackagedRulesStatusSchema, } from './prepackaged_rules_status_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('prepackaged_rules_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_bulk_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_bulk_schema.test.ts index 8dc97d727c4d1d..9a7cf5e2c2871c 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_bulk_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_bulk_schema.test.ts @@ -7,17 +7,13 @@ import { left } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; -import { exactCheck } from './exact_check'; -import { - foldLeftRight, - getBaseResponsePayload, - getErrorPayload, - getPaths, -} from './__mocks__/utils'; +import { getBaseResponsePayload, getErrorPayload } from './__mocks__/utils'; import { RulesBulkSchema, rulesBulkSchema } from './rules_bulk_schema'; import { RulesSchema } from './rules_schema'; import { ErrorSchema } from './error_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('prepackaged_rule_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_schema.test.ts index 4bfc51c1a66aab..82a6682e6461f9 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/rules_schema.test.ts @@ -7,10 +7,11 @@ import { left } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; -import { exactCheck } from './exact_check'; import { rulesSchema, RulesSchema, removeList } from './rules_schema'; -import { foldLeftRight, getBaseResponsePayload, getPaths } from './__mocks__/utils'; +import { getBaseResponsePayload } from './__mocks__/utils'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; export const ANCHOR_DATE = '2020-02-20T03:57:54.037Z'; diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/type_timeline_only_schema.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/type_timeline_only_schema.test.ts index 68a3c8b3038239..85fb124464487a 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/type_timeline_only_schema.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/type_timeline_only_schema.test.ts @@ -7,10 +7,10 @@ import { left } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; -import { exactCheck } from './exact_check'; -import { foldLeftRight, getPaths } from './__mocks__/utils'; import { TypeAndTimelineOnly, typeAndTimelineOnlySchema } from './type_timeline_only_schema'; import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { exactCheck } from '../../../../../utils/build_validation/exact_check'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('prepackaged_rule_schema', () => { beforeAll(() => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/iso_date_string.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/iso_date_string.test.ts index fbafaf7f52ecb6..ff62ea4443f3f6 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/iso_date_string.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/iso_date_string.test.ts @@ -6,8 +6,8 @@ import { IsoDateString } from './iso_date_string'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('ios_date_string', () => { test('it should validate a iso string', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts index e8a9c7b0886a19..2a97c8a4a143e8 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts @@ -6,8 +6,8 @@ import { ListsDefaultArray } from './lists_default_array'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('lists_default_array', () => { test('it should validate an empty array', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/positive_integer_greater_than_zero.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/positive_integer_greater_than_zero.test.ts index bc17303f242038..d6f21681df88fe 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/positive_integer_greater_than_zero.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/positive_integer_greater_than_zero.test.ts @@ -6,8 +6,8 @@ import { PositiveIntegerGreaterThanZero } from './positive_integer_greater_than_zero'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('positive_integer_greater_than_zero', () => { test('it should validate a positive number', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/postive_integer.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/postive_integer.test.ts index cee451279663a7..26441745a7f29e 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/postive_integer.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/postive_integer.test.ts @@ -6,8 +6,8 @@ import { PositiveInteger } from './positive_integer'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('positive_integer_greater_than_zero', () => { test('it should validate a positive number', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/references_default_array.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/references_default_array.test.ts index 3ae8415b4f170f..76f722274ce23a 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/references_default_array.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/references_default_array.test.ts @@ -6,8 +6,8 @@ import { ReferencesDefaultArray } from './references_default_array'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('references_default_array', () => { test('it should validate an empty array', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/risk_score.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/risk_score.test.ts index ab3f80944489fe..76e3445358dd9b 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/risk_score.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/risk_score.test.ts @@ -6,8 +6,8 @@ import { RiskScore } from './risk_score'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('risk_score', () => { test('it should validate a positive number', () => { diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/uuid.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/uuid.test.ts index 342e6f2db2e16d..7b68dbcef2d7ed 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/uuid.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/types/uuid.test.ts @@ -6,8 +6,8 @@ import { UUID } from './uuid'; import { pipe } from 'fp-ts/lib/pipeable'; -import { foldLeftRight, getPaths } from '../response/__mocks__/utils'; import { left } from 'fp-ts/lib/Either'; +import { foldLeftRight, getPaths } from '../../../../../utils/build_validation/__mocks__/utils'; describe('uuid', () => { test('it should validate a uuid', () => { diff --git a/x-pack/plugins/siem/server/lib/timeline/routes/export_timelines_route.test.ts b/x-pack/plugins/siem/server/lib/timeline/routes/export_timelines_route.test.ts index 47ca25e16bd50d..2bccb7c393837b 100644 --- a/x-pack/plugins/siem/server/lib/timeline/routes/export_timelines_route.test.ts +++ b/x-pack/plugins/siem/server/lib/timeline/routes/export_timelines_route.test.ts @@ -85,7 +85,7 @@ describe('export timelines', () => { const result = server.validate(request); expect(result.badRequest.mock.calls[0][0]).toEqual( - 'Invalid value undefined supplied to : { ids: Array }/ids: Array' + 'Invalid value "undefined" supplied to "ids"' ); }); @@ -98,11 +98,7 @@ describe('export timelines', () => { const result = server.validate(request); expect(result.badRequest.mock.calls[1][0]).toEqual( - [ - 'Invalid value undefined supplied to : { file_name: string, exclude_export_details: ("true" | "false") }/file_name: string', - 'Invalid value undefined supplied to : { file_name: string, exclude_export_details: ("true" | "false") }/exclude_export_details: ("true" | "false")/0: "true"', - 'Invalid value undefined supplied to : { file_name: string, exclude_export_details: ("true" | "false") }/exclude_export_details: ("true" | "false")/1: "false"', - ].join('\n') + 'Invalid value "undefined" supplied to "file_name",Invalid value "undefined" supplied to "exclude_export_details",Invalid value "undefined" supplied to "exclude_export_details"' ); }); }); diff --git a/x-pack/plugins/siem/server/lib/timeline/routes/import_timelines_route.test.ts b/x-pack/plugins/siem/server/lib/timeline/routes/import_timelines_route.test.ts index 3931bf0e5bea51..9f41943cfa27f7 100644 --- a/x-pack/plugins/siem/server/lib/timeline/routes/import_timelines_route.test.ts +++ b/x-pack/plugins/siem/server/lib/timeline/routes/import_timelines_route.test.ts @@ -332,10 +332,7 @@ describe('import timelines', () => { const result = server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - [ - 'Invalid value undefined supplied to : { file: (ReadableRt & { hapi: { filename: string } }) }/file: (ReadableRt & { hapi: { filename: string } })/0: ReadableRt', - 'Invalid value undefined supplied to : { file: (ReadableRt & { hapi: { filename: string } }) }/file: (ReadableRt & { hapi: { filename: string } })/1: { hapi: { filename: string } }', - ].join('\n') + 'Invalid value "undefined" supplied to "file",Invalid value "undefined" supplied to "file"' ); }); }); diff --git a/x-pack/plugins/siem/server/utils/build_validation/__mocks__/utils.ts b/x-pack/plugins/siem/server/utils/build_validation/__mocks__/utils.ts new file mode 100644 index 00000000000000..578972dda5aeff --- /dev/null +++ b/x-pack/plugins/siem/server/utils/build_validation/__mocks__/utils.ts @@ -0,0 +1,43 @@ +/* + * 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 { fold } from 'fp-ts/lib/Either'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { formatErrors } from '../format_errors'; + +interface Message { + errors: t.Errors; + schema: T | {}; +} + +const onLeft = (errors: t.Errors): Message => { + return { schema: {}, errors }; +}; + +const onRight = (schema: T): Message => { + return { + schema, + errors: [], + }; +}; + +export const foldLeftRight = fold(onLeft, onRight); + +/** + * Convenience utility to keep the error message handling within tests to be + * very concise. + * @param validation The validation to get the errors from + */ +export const getPaths = (validation: t.Validation): string[] => { + return pipe( + validation, + fold( + errors => formatErrors(errors), + () => ['no errors'] + ) + ); +}; diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.test.ts b/x-pack/plugins/siem/server/utils/build_validation/exact_check.test.ts similarity index 94% rename from x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.test.ts rename to x-pack/plugins/siem/server/utils/build_validation/exact_check.test.ts index cae4365d06856f..1e70deaeed4386 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.test.ts +++ b/x-pack/plugins/siem/server/utils/build_validation/exact_check.test.ts @@ -5,22 +5,13 @@ */ import * as t from 'io-ts'; -import { left, right } from 'fp-ts/lib/Either'; +import { left, right, Either } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import { foldLeftRight, getPaths } from './__mocks__/utils'; import { exactCheck, findDifferencesRecursive } from './exact_check'; -import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; describe('exact_check', () => { - beforeAll(() => { - setFeatureFlagsForTestsOnly(); - }); - - afterAll(() => { - unSetFeatureFlagsForTestsOnly(); - }); - test('it returns an error if given extra object properties', () => { const someType = t.exact( t.type({ @@ -36,14 +27,22 @@ describe('exact_check', () => { }); test('it returns an error if the data type is not as expected', () => { + type UnsafeCastForTest = Either< + t.Errors, + { + a: number; + } + >; + const someType = t.exact( t.type({ a: t.string, }) ); + const payload = { a: 1 }; const decoded = someType.decode(payload); - const checked = exactCheck(payload, decoded); + const checked = exactCheck(payload, decoded as UnsafeCastForTest); const message = pipe(checked, foldLeftRight); expect(getPaths(left(message.errors))).toEqual(['Invalid value "1" supplied to "a"']); expect(message.schema).toEqual({}); diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.ts b/x-pack/plugins/siem/server/utils/build_validation/exact_check.ts similarity index 59% rename from x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.ts rename to x-pack/plugins/siem/server/utils/build_validation/exact_check.ts index 6fa04729501892..9484765f9973df 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/exact_check.ts +++ b/x-pack/plugins/siem/server/utils/build_validation/exact_check.ts @@ -25,10 +25,7 @@ import { isObject, get } from 'lodash/fp'; * @param decoded The decoded either which has either an existing error or the * decoded object which could have additional keys stripped from it. */ -export const exactCheck = ( - original: object, - decoded: Either -): Either => { +export const exactCheck = (original: T, decoded: Either): Either => { const onLeft = (errors: t.Errors): Either => left(errors); const onRight = (decodedValue: T): Either => { const differences = findDifferencesRecursive(original, decodedValue); @@ -47,7 +44,7 @@ export const exactCheck = ( return pipe(decoded, fold(onLeft, onRight)); }; -export const findDifferencesRecursive = (original: object, decodedValue: T): string[] => { +export const findDifferencesRecursive = (original: T, decodedValue: T): string[] => { if (decodedValue == null) { try { // It is null and painful when the original contains an object or an array @@ -56,29 +53,33 @@ export const findDifferencesRecursive = (original: object, decodedValue: T): } catch (err) { return ['circular reference']; } + } else if (typeof original !== 'object' || original == null) { + // We are not an object or null so do not report differences + return []; + } else { + const decodedKeys = Object.keys(decodedValue); + const differences = Object.keys(original).flatMap(originalKey => { + const foundKey = decodedKeys.some(key => key === originalKey); + const topLevelKey = foundKey ? [] : [originalKey]; + // I use lodash to cheat and get an any (not going to lie ;-)) + const valueObjectOrArrayOriginal = get(originalKey, original); + const valueObjectOrArrayDecoded = get(originalKey, decodedValue); + if (isObject(valueObjectOrArrayOriginal)) { + return [ + ...topLevelKey, + ...findDifferencesRecursive(valueObjectOrArrayOriginal, valueObjectOrArrayDecoded), + ]; + } else if (Array.isArray(valueObjectOrArrayOriginal)) { + return [ + ...topLevelKey, + ...valueObjectOrArrayOriginal.flatMap((arrayElement, index) => + findDifferencesRecursive(arrayElement, get(index, valueObjectOrArrayDecoded)) + ), + ]; + } else { + return topLevelKey; + } + }); + return differences; } - const decodedKeys = Object.keys(decodedValue); - const differences = Object.keys(original).flatMap(originalKey => { - const foundKey = decodedKeys.some(key => key === originalKey); - const topLevelKey = foundKey ? [] : [originalKey]; - // I use lodash to cheat and get an any (not going to lie ;-)) - const valueObjectOrArrayOriginal = get(originalKey, original); - const valueObjectOrArrayDecoded = get(originalKey, decodedValue); - if (isObject(valueObjectOrArrayOriginal)) { - return [ - ...topLevelKey, - ...findDifferencesRecursive(valueObjectOrArrayOriginal, valueObjectOrArrayDecoded), - ]; - } else if (Array.isArray(valueObjectOrArrayOriginal)) { - return [ - ...topLevelKey, - ...valueObjectOrArrayOriginal.flatMap((arrayElement, index) => - findDifferencesRecursive(arrayElement, get(index, valueObjectOrArrayDecoded)) - ), - ]; - } else { - return topLevelKey; - } - }); - return differences; }; diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/utils.test.ts b/x-pack/plugins/siem/server/utils/build_validation/format_errors.test.ts similarity index 94% rename from x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/utils.test.ts rename to x-pack/plugins/siem/server/utils/build_validation/format_errors.test.ts index c1eb32be4895c2..f9dd9e76a1d9c6 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/utils.test.ts +++ b/x-pack/plugins/siem/server/utils/build_validation/format_errors.test.ts @@ -5,18 +5,9 @@ */ import * as t from 'io-ts'; -import { formatErrors } from './utils'; -import { setFeatureFlagsForTestsOnly, unSetFeatureFlagsForTestsOnly } from '../../../feature_flags'; +import { formatErrors } from './format_errors'; describe('utils', () => { - beforeAll(() => { - setFeatureFlagsForTestsOnly(); - }); - - afterAll(() => { - unSetFeatureFlagsForTestsOnly(); - }); - test('returns an empty error message string if there are no errors', () => { const errors: t.Errors = []; const output = formatErrors(errors); diff --git a/x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/utils.ts b/x-pack/plugins/siem/server/utils/build_validation/format_errors.ts similarity index 100% rename from x-pack/plugins/siem/server/lib/detection_engine/routes/schemas/response/utils.ts rename to x-pack/plugins/siem/server/utils/build_validation/format_errors.ts diff --git a/x-pack/plugins/siem/server/utils/build_validation/route_validation.test.ts b/x-pack/plugins/siem/server/utils/build_validation/route_validation.test.ts index d17a8457ff81be..866dbe9480ca59 100644 --- a/x-pack/plugins/siem/server/utils/build_validation/route_validation.test.ts +++ b/x-pack/plugins/siem/server/utils/build_validation/route_validation.test.ts @@ -9,9 +9,33 @@ import * as rt from 'io-ts'; import { RouteValidationResultFactory } from '../../../../../../src/core/server/http'; describe('buildRouteValidation', () => { - const schema = rt.type({ - ids: rt.array(rt.string), - }); + const schema = rt.exact( + rt.type({ + ids: rt.array(rt.string), + }) + ); + type Schema = rt.TypeOf; + + /** + * If your schema is using exact all the way down then the validation will + * catch any additional keys that should not be present within the validation + * when the route_validation uses the exact check. + */ + const deepSchema = rt.exact( + rt.type({ + topLevel: rt.exact( + rt.type({ + secondLevel: rt.exact( + rt.type({ + thirdLevel: rt.string, + }) + ), + }) + ), + }) + ); + type DeepSchema = rt.TypeOf; + const validationResult: RouteValidationResultFactory = { ok: jest.fn().mockImplementation(validatedInput => validatedInput), badRequest: jest.fn().mockImplementation(e => e), @@ -22,18 +46,41 @@ describe('buildRouteValidation', () => { }); test('return validation error', () => { - const input = { id: 'someId' }; + const input: Omit & { id: string } = { id: 'someId' }; const result = buildRouteValidation(schema)(input, validationResult); - expect(result).toEqual( - 'Invalid value undefined supplied to : { ids: Array }/ids: Array' - ); + expect(result).toEqual('Invalid value "undefined" supplied to "ids"'); }); test('return validated input', () => { - const input = { ids: ['someId'] }; + const input: Schema = { ids: ['someId'] }; const result = buildRouteValidation(schema)(input, validationResult); expect(result).toEqual(input); }); + + test('returns validation error if given extra keys on input for an array', () => { + const input: Schema & { somethingExtra: string } = { + ids: ['someId'], + somethingExtra: 'hello', + }; + const result = buildRouteValidation(schema)(input, validationResult); + expect(result).toEqual('invalid keys "somethingExtra"'); + }); + + test('return validation input for a deep 3rd level object', () => { + const input: DeepSchema = { topLevel: { secondLevel: { thirdLevel: 'hello' } } }; + const result = buildRouteValidation(deepSchema)(input, validationResult); + expect(result).toEqual(input); + }); + + test('return validation error for a deep 3rd level object that has an extra key value of "somethingElse"', () => { + const input: DeepSchema & { + topLevel: { secondLevel: { thirdLevel: string; somethingElse: string } }; + } = { + topLevel: { secondLevel: { thirdLevel: 'hello', somethingElse: 'extraKey' } }, + }; + const result = buildRouteValidation(deepSchema)(input, validationResult); + expect(result).toEqual('invalid keys "somethingElse"'); + }); }); diff --git a/x-pack/plugins/siem/server/utils/build_validation/route_validation.ts b/x-pack/plugins/siem/server/utils/build_validation/route_validation.ts index bfcd0998fe6900..30b95dcfa94ee3 100644 --- a/x-pack/plugins/siem/server/utils/build_validation/route_validation.ts +++ b/x-pack/plugins/siem/server/utils/build_validation/route_validation.ts @@ -7,12 +7,13 @@ import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import * as rt from 'io-ts'; -import { failure } from 'io-ts/lib/PathReporter'; import { RouteValidationFunction, RouteValidationResultFactory, RouteValidationError, } from '../../../../../../src/core/server'; +import { exactCheck } from './exact_check'; +import { formatErrors } from './format_errors'; type RequestValidationResult = | { @@ -32,8 +33,9 @@ export const buildRouteValidation = >( ) => pipe( schema.decode(inputValue), + decoded => exactCheck(inputValue, decoded), fold>( - (errors: rt.Errors) => validationResult.badRequest(failure(errors).join('\n')), + (errors: rt.Errors) => validationResult.badRequest(formatErrors(errors).join()), (validatedInput: A) => validationResult.ok(validatedInput) ) ); From f76669b17ad14cf22a9e6136402de9dfc0ea48dc Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Mon, 20 Apr 2020 16:52:02 -0700 Subject: [PATCH 21/39] Fix page layouts, clean up unused code (#63992) --- .../ingest_manager/components/header.tsx | 6 +++--- .../applications/ingest_manager/layouts/default.tsx | 2 -- .../ingest_manager/layouts/with_header.tsx | 12 ++++++++---- .../ingest_manager/layouts/without_header.tsx | 2 -- .../create_datasource_page/components/layout.tsx | 6 ++---- .../agent_config/create_datasource_page/index.tsx | 9 +-------- .../agent_config/create_datasource_page/types.ts | 1 - 7 files changed, 14 insertions(+), 24 deletions(-) diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/header.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/header.tsx index 1aab6d901a9926..ceb87fb048ae3c 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/header.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/components/header.tsx @@ -31,7 +31,7 @@ const Tabs = styled(EuiTabs)` `; export interface HeaderProps { - restrictHeaderWidth?: number; + maxWidth?: number; leftColumn?: JSX.Element; rightColumn?: JSX.Element; rightColumnGrow?: EuiFlexItemProps['grow']; @@ -52,10 +52,10 @@ export const Header: React.FC = ({ rightColumn, rightColumnGrow, tabs, - restrictHeaderWidth, + maxWidth, }) => ( - + props.theme.eui.euiHeaderChildSize}); background: ${props => props.theme.eui.euiColorEmptyShade}; - display: flex; - flex-direction: column; `; const Nav = styled.nav` diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx index bb867718204b2c..d5ce5e17ad84ec 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/with_header.tsx @@ -10,18 +10,22 @@ import { Header, HeaderProps } from '../components'; const Page = styled(EuiPage)` background: ${props => props.theme.eui.euiColorEmptyShade}; - flex: 1; - align-items: flex-start; `; interface Props extends HeaderProps { restrictWidth?: number; + restrictHeaderWidth?: number; children?: React.ReactNode; } -export const WithHeaderLayout: React.FC = ({ restrictWidth, children, ...rest }) => ( +export const WithHeaderLayout: React.FC = ({ + restrictWidth, + restrictHeaderWidth, + children, + ...rest +}) => ( -
+
diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx index 9f9fa03942c094..cad98c5a0a7e1d 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/without_header.tsx @@ -9,8 +9,6 @@ import { EuiPage, EuiPageBody, EuiSpacer } from '@elastic/eui'; const Page = styled(EuiPage)` background: ${props => props.theme.eui.euiColorEmptyShade}; - flex: 1; - align-items: flex-start; `; interface Props { diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/layout.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/layout.tsx index 73a7ba8ec119d9..39d882f7fdf65e 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/layout.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/layout.tsx @@ -18,16 +18,14 @@ import { import { WithHeaderLayout } from '../../../../layouts'; import { AgentConfig, PackageInfo } from '../../../../types'; import { PackageIcon } from '../../../../components/package_icon'; -import { CreateDatasourceFrom, CreateDatasourceStep } from '../types'; +import { CreateDatasourceFrom } from '../types'; export const CreateDatasourcePageLayout: React.FunctionComponent<{ from: CreateDatasourceFrom; - basePath: string; cancelUrl: string; - maxStep: CreateDatasourceStep | ''; agentConfig?: AgentConfig; packageInfo?: PackageInfo; -}> = ({ from, basePath, cancelUrl, maxStep, agentConfig, packageInfo, children }) => { +}> = ({ from, cancelUrl, agentConfig, packageInfo, children }) => { const leftColumn = ( diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/index.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/index.tsx index 1ad579d591b211..3c79fe17fdbb51 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/index.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/index.tsx @@ -28,12 +28,11 @@ import { } from '../../../hooks'; import { useLinks as useEPMLinks } from '../../epm/hooks'; import { CreateDatasourcePageLayout, ConfirmCreateDatasourceModal } from './components'; -import { CreateDatasourceFrom, CreateDatasourceStep } from './types'; +import { CreateDatasourceFrom } from './types'; import { DatasourceValidationResults, validateDatasource, validationHasErrors } from './services'; import { StepSelectPackage } from './step_select_package'; import { StepSelectConfig } from './step_select_config'; import { StepConfigureDatasource } from './step_configure_datasource'; - import { StepDefineDatasource } from './step_define_datasource'; export const CreateDatasourcePage: React.FunctionComponent = () => { @@ -43,11 +42,9 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { } = useConfig(); const { params: { configId, pkgkey }, - url: basePath, } = useRouteMatch(); const history = useHistory(); const from: CreateDatasourceFrom = configId ? 'config' : 'package'; - const [maxStep, setMaxStep] = useState(''); // Agent config and package info states const [agentConfig, setAgentConfig] = useState(); @@ -91,7 +88,6 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { } else { setFormState('INVALID'); setPackageInfo(undefined); - setMaxStep(''); } // eslint-disable-next-line no-console @@ -105,7 +101,6 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { } else { setFormState('INVALID'); setAgentConfig(undefined); - setMaxStep(''); } // eslint-disable-next-line no-console @@ -189,9 +184,7 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { const layoutProps = { from, - basePath, cancelUrl, - maxStep, agentConfig, packageInfo, }; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/types.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/types.ts index bd05be2d8a558d..85cc758fc4c464 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/types.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/types.ts @@ -5,4 +5,3 @@ */ export type CreateDatasourceFrom = 'package' | 'config'; -export type CreateDatasourceStep = 'selectConfig' | 'selectPackage' | 'configure' | 'review'; From f6f610db471f2585dedccf5d0fa28f751079d38f Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Tue, 21 Apr 2020 07:43:35 +0200 Subject: [PATCH 22/39] kbn/config-schema: Consider maybe properties as optional keys in ObjectType (#63838) * consider optional properties as optional keys in ObjectType * fix type on security config * fix ObjectTypeOptions --- .../src/types/object_type.test.ts | 24 +++++++++++++++++++ .../src/types/object_type.ts | 23 ++++++++++++++---- .../server/http/router/validator/validator.ts | 17 +++++++++---- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/packages/kbn-config-schema/src/types/object_type.test.ts b/packages/kbn-config-schema/src/types/object_type.test.ts index 47a0f5f7a5491c..5ab59d1c020779 100644 --- a/packages/kbn-config-schema/src/types/object_type.test.ts +++ b/packages/kbn-config-schema/src/types/object_type.test.ts @@ -18,6 +18,7 @@ */ import { schema } from '..'; +import { TypeOf } from './object_type'; test('returns value by default', () => { const type = schema.object({ @@ -350,3 +351,26 @@ test('unknowns = `ignore` affects only own keys', () => { }) ).toThrowErrorMatchingInlineSnapshot(`"[foo.baz]: definition for this key is missing"`); }); + +test('handles optional properties', () => { + const type = schema.object({ + required: schema.string(), + optional: schema.maybe(schema.string()), + }); + + type SchemaType = TypeOf; + + let foo: SchemaType = { + required: 'foo', + }; + foo = { + required: 'hello', + optional: undefined, + }; + foo = { + required: 'hello', + optional: 'bar', + }; + + expect(foo).toBeDefined(); +}); diff --git a/packages/kbn-config-schema/src/types/object_type.ts b/packages/kbn-config-schema/src/types/object_type.ts index 5a50e714a59311..fee2d02c1bfb96 100644 --- a/packages/kbn-config-schema/src/types/object_type.ts +++ b/packages/kbn-config-schema/src/types/object_type.ts @@ -26,9 +26,26 @@ export type Props = Record>; export type TypeOf> = RT['type']; +type OptionalProperties = Pick< + Base, + { + [Key in keyof Base]: undefined extends TypeOf ? Key : never; + }[keyof Base] +>; + +type RequiredProperties = Pick< + Base, + { + [Key in keyof Base]: undefined extends TypeOf ? never : Key; + }[keyof Base] +>; + // Because of https://github.com/Microsoft/TypeScript/issues/14041 // this might not have perfect _rendering_ output, but it will be typed. -export type ObjectResultType

= Readonly<{ [K in keyof P]: TypeOf }>; +export type ObjectResultType

= Readonly< + { [K in keyof OptionalProperties

]?: TypeOf } & + { [K in keyof RequiredProperties

]: TypeOf } +>; interface UnknownOptions { /** @@ -40,9 +57,7 @@ interface UnknownOptions { unknowns?: 'allow' | 'ignore' | 'forbid'; } -export type ObjectTypeOptions

= TypeOptions< - { [K in keyof P]: TypeOf } -> & +export type ObjectTypeOptions

= TypeOptions> & UnknownOptions; export class ObjectType

extends Type> { diff --git a/src/core/server/http/router/validator/validator.ts b/src/core/server/http/router/validator/validator.ts index 6c766e69f0f37f..a2299b47ae253d 100644 --- a/src/core/server/http/router/validator/validator.ts +++ b/src/core/server/http/router/validator/validator.ts @@ -17,7 +17,14 @@ * under the License. */ -import { ValidationError, Type, schema, ObjectType, isConfigSchema } from '@kbn/config-schema'; +import { + ValidationError, + Type, + schema, + ObjectType, + TypeOf, + isConfigSchema, +} from '@kbn/config-schema'; import { Stream } from 'stream'; import { RouteValidationError } from './validator_error'; @@ -85,7 +92,7 @@ type RouteValidationResultType | undefined> = T extends RouteValidationFunction ? ReturnType['value'] : T extends Type - ? ReturnType + ? TypeOf : undefined >; @@ -170,7 +177,7 @@ export class RouteValidator

{ * @internal */ public getParams(data: unknown, namespace?: string): Readonly

{ - return this.validate(this.config.params, this.options.unsafe?.params, data, namespace); + return this.validate(this.config.params, this.options.unsafe?.params, data, namespace) as P; } /** @@ -178,7 +185,7 @@ export class RouteValidator

{ * @internal */ public getQuery(data: unknown, namespace?: string): Readonly { - return this.validate(this.config.query, this.options.unsafe?.query, data, namespace); + return this.validate(this.config.query, this.options.unsafe?.query, data, namespace) as Q; } /** @@ -186,7 +193,7 @@ export class RouteValidator

{ * @internal */ public getBody(data: unknown, namespace?: string): Readonly { - return this.validate(this.config.body, this.options.unsafe?.body, data, namespace); + return this.validate(this.config.body, this.options.unsafe?.body, data, namespace) as B; } /** From d6fdb689e83330795dbae3640224c0a23091be43 Mon Sep 17 00:00:00 2001 From: Ben Skelker <54019610+benskelker@users.noreply.github.com> Date: Tue, 21 Apr 2020 09:26:06 +0300 Subject: [PATCH 23/39] [Docs]Adds saved object key setting to load balancing kib instances (#63935) * adds saved object key setting to load balancing kib instances * SIEM section doc updates * Revert "SIEM section doc updates" - wrong PR This reverts commit fc55d90a6d1fe30b2f9f06e3bf6b7efee52c84d5. * corrections --- docs/setup/production.asciidoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/setup/production.asciidoc b/docs/setup/production.asciidoc index eef2b11e53d85f..19f9d64d13623d 100644 --- a/docs/setup/production.asciidoc +++ b/docs/setup/production.asciidoc @@ -133,7 +133,8 @@ server.port Settings that must be the same: -------- xpack.security.encryptionKey //decrypting session cookies -xpack.reporting.encryptionKey //decrypting reports stored in Elasticsearch +xpack.reporting.encryptionKey //decrypting reports +xpack.encryptedSavedObjects.encryptionKey // decrypting saved objects -------- Separate configuration files can be used from the command line by using the `-c` flag: From 5adccd005b107a64acf732b178109ec4fc61e6d9 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Tue, 21 Apr 2020 08:37:02 +0200 Subject: [PATCH 24/39] follow conventions for saved object definitions (#63571) --- .../server/saved_objects/index.ts | 20 +++++++++++++++++++ .../tsvb_telemetry.ts} | 0 .../validation_telemetry_service.ts | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/plugins/vis_type_timeseries/server/saved_objects/index.ts rename src/plugins/vis_type_timeseries/server/{validation_telemetry/saved_object_type.ts => saved_objects/tsvb_telemetry.ts} (100%) diff --git a/src/plugins/vis_type_timeseries/server/saved_objects/index.ts b/src/plugins/vis_type_timeseries/server/saved_objects/index.ts new file mode 100644 index 00000000000000..5f7f5767f423de --- /dev/null +++ b/src/plugins/vis_type_timeseries/server/saved_objects/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 { tsvbTelemetrySavedObjectType } from './tsvb_telemetry'; diff --git a/src/plugins/vis_type_timeseries/server/validation_telemetry/saved_object_type.ts b/src/plugins/vis_type_timeseries/server/saved_objects/tsvb_telemetry.ts similarity index 100% rename from src/plugins/vis_type_timeseries/server/validation_telemetry/saved_object_type.ts rename to src/plugins/vis_type_timeseries/server/saved_objects/tsvb_telemetry.ts diff --git a/src/plugins/vis_type_timeseries/server/validation_telemetry/validation_telemetry_service.ts b/src/plugins/vis_type_timeseries/server/validation_telemetry/validation_telemetry_service.ts index 779d9441df2fd9..e4b8ca19094e48 100644 --- a/src/plugins/vis_type_timeseries/server/validation_telemetry/validation_telemetry_service.ts +++ b/src/plugins/vis_type_timeseries/server/validation_telemetry/validation_telemetry_service.ts @@ -19,7 +19,7 @@ import { APICaller, CoreSetup, Plugin, PluginInitializerContext } from 'kibana/server'; import { UsageCollectionSetup } from '../../../usage_collection/server'; -import { tsvbTelemetrySavedObjectType } from './saved_object_type'; +import { tsvbTelemetrySavedObjectType } from '../saved_objects'; export interface ValidationTelemetryServiceSetup { logFailedValidation: () => void; From 46f6f8779e7564778042578b4ecfbe91ab12713b Mon Sep 17 00:00:00 2001 From: Diana Derevyankina <54894989+DziyanaDzeraviankina@users.noreply.github.com> Date: Tue, 21 Apr 2020 09:55:06 +0300 Subject: [PATCH 25/39] Enable include/exclude in Terms agg for numeric fields (#59425) * Enable include/exclude in Terms agg for numeric fields Closes #4576 * Added a new component that allows adding multiple values * Added some validation to include/exclude fields * Removed unnecessary comments and accepted API changes * Fixed i18n ID issue * Refactored some code and fixed discard button issue * Added SimpleNumberList component and value parsing in include_exclude.tsx * Fixed merge conflict * Fixed merge conflict * Refactored some code * Got rid of lodash isArray, added Number.isFinite where needed and changed symbol of string join and array split * Added some more test cases to cover migrate_include_exclude_format write method Co-authored-by: Elastic Machine --- src/plugins/data/public/index.ts | 2 + src/plugins/data/public/public.api.md | 33 +++-- .../buckets/migrate_include_exclude_format.ts | 15 +- .../public/search/aggs/buckets/terms.test.ts | 60 ++++++++ .../data/public/search/aggs/buckets/terms.ts | 9 +- .../public/components/agg_params_map.ts | 2 + .../controls/components/number_list/utils.ts | 2 +- .../components/simple_number_list.tsx | 140 ++++++++++++++++++ .../components/controls/include_exclude.tsx | 49 ++++++ .../public/components/controls/index.ts | 1 + 10 files changed, 289 insertions(+), 24 deletions(-) create mode 100644 src/plugins/vis_default_editor/public/components/controls/components/simple_number_list.tsx create mode 100644 src/plugins/vis_default_editor/public/components/controls/include_exclude.tsx diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index b62b728beca35f..05a4141483587f 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -293,6 +293,7 @@ import { convertIPRangeToString, intervalOptions, // only used in Discover isDateHistogramBucketAggConfig, + isNumberType, isStringType, isType, parentPipelineType, @@ -392,6 +393,7 @@ export const search = { InvalidEsCalendarIntervalError, InvalidEsIntervalFormatError, isDateHistogramBucketAggConfig, + isNumberType, isStringType, isType, isValidEsInterval, diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index 427c4f7864554d..6383f618641469 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -1545,8 +1545,9 @@ export const search: { InvalidEsCalendarIntervalError: typeof InvalidEsCalendarIntervalError; InvalidEsIntervalFormatError: typeof InvalidEsIntervalFormatError; isDateHistogramBucketAggConfig: typeof isDateHistogramBucketAggConfig; + isNumberType: (agg: import("./search").AggConfig) => boolean; isStringType: (agg: import("./search").AggConfig) => boolean; - isType: (type: string) => (agg: import("./search").AggConfig) => boolean; + isType: (...types: string[]) => (agg: import("./search").AggConfig) => boolean; isValidEsInterval: typeof isValidEsInterval; isValidInterval: typeof isValidInterval; parentPipelineType: string; @@ -1874,21 +1875,21 @@ export type TSearchStrategyProvider = (context: ISearc // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "flattenHitWrapper" needs to be exported by the entry point index.d.ts // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "getRoutes" needs to be exported by the entry point index.d.ts // src/plugins/data/public/index.ts:234:27 - (ae-forgotten-export) The symbol "formatHitProvider" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:382:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:382:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:382:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:382:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:387:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:388:1 - (ae-forgotten-export) The symbol "convertDateRangeToString" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:390:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:399:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:400:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:401:1 - (ae-forgotten-export) The symbol "isDateHistogramBucketAggConfig" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:404:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:405:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:408:1 - (ae-forgotten-export) The symbol "parseInterval" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:409:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts -// src/plugins/data/public/index.ts:412:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:383:20 - (ae-forgotten-export) The symbol "getRequestInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:383:20 - (ae-forgotten-export) The symbol "getResponseInspectorStats" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:383:20 - (ae-forgotten-export) The symbol "tabifyAggResponse" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:383:20 - (ae-forgotten-export) The symbol "tabifyGetColumns" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:388:1 - (ae-forgotten-export) The symbol "CidrMask" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:389:1 - (ae-forgotten-export) The symbol "convertDateRangeToString" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:391:1 - (ae-forgotten-export) The symbol "dateHistogramInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:400:1 - (ae-forgotten-export) The symbol "InvalidEsCalendarIntervalError" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:401:1 - (ae-forgotten-export) The symbol "InvalidEsIntervalFormatError" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:402:1 - (ae-forgotten-export) The symbol "isDateHistogramBucketAggConfig" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:406:1 - (ae-forgotten-export) The symbol "isValidEsInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:407:1 - (ae-forgotten-export) The symbol "isValidInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:410:1 - (ae-forgotten-export) The symbol "parseInterval" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:411:1 - (ae-forgotten-export) The symbol "propFilter" needs to be exported by the entry point index.d.ts +// src/plugins/data/public/index.ts:414:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/public/query/state_sync/connect_to_query_state.ts:33:33 - (ae-forgotten-export) The symbol "FilterStateStore" needs to be exported by the entry point index.d.ts // src/plugins/data/public/query/state_sync/connect_to_query_state.ts:37:1 - (ae-forgotten-export) The symbol "QueryStateChange" needs to be exported by the entry point index.d.ts // src/plugins/data/public/types.ts:52:5 - (ae-forgotten-export) The symbol "createFiltersFromEvent" needs to be exported by the entry point index.d.ts diff --git a/src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts b/src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts index 0beeb1c3722752..116f8cfad60f6d 100644 --- a/src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts +++ b/src/plugins/data/public/search/aggs/buckets/migrate_include_exclude_format.ts @@ -21,20 +21,22 @@ import { isString, isObject } from 'lodash'; import { IBucketAggConfig, BucketAggType, BucketAggParam } from './bucket_agg_type'; import { IAggConfig } from '../agg_config'; -export const isType = (type: string) => { +export const isType = (...types: string[]) => { return (agg: IAggConfig): boolean => { const field = agg.params.field; - return field && field.type === type; + return types.some(type => field && field.type === type); }; }; +export const isNumberType = isType('number'); export const isStringType = isType('string'); +export const isStringOrNumberType = isType('string', 'number'); export const migrateIncludeExcludeFormat = { serialize(this: BucketAggParam, value: any, agg: IBucketAggConfig) { if (this.shouldShow && !this.shouldShow(agg)) return; - if (!value || isString(value)) return value; + if (!value || isString(value) || Array.isArray(value)) return value; else return value.pattern; }, write( @@ -44,7 +46,12 @@ export const migrateIncludeExcludeFormat = { ) { const value = aggConfig.getParam(this.name); - if (isObject(value)) { + if (Array.isArray(value) && value.length > 0 && isNumberType(aggConfig)) { + const parsedValue = value.filter((val): val is number => Number.isFinite(val)); + if (parsedValue.length) { + output.params[this.name] = parsedValue; + } + } else if (isObject(value)) { output.params[this.name] = value.pattern; } else if (value && isStringType(aggConfig)) { output.params[this.name] = value; 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 0dc052bd1fdf6d..9769efb6da7494 100644 --- a/src/plugins/data/public/search/aggs/buckets/terms.test.ts +++ b/src/plugins/data/public/search/aggs/buckets/terms.test.ts @@ -75,5 +75,65 @@ describe('Terms Agg', () => { expect(params.include).toBe('404'); expect(params.exclude).toBe('400'); }); + + test('accepts string from string field type and writes this value', () => { + const aggConfigs = getAggConfigs({ + include: 'include value', + exclude: 'exclude value', + field: { + name: 'string_field', + type: 'string', + }, + orderAgg: { + type: 'count', + }, + }); + + const { [BUCKET_TYPES.TERMS]: params } = aggConfigs.aggs[0].toDsl(); + + expect(params.field).toBe('string_field'); + expect(params.include).toBe('include value'); + expect(params.exclude).toBe('exclude value'); + }); + + test('accepts empty array from number field type and does not write a value', () => { + const aggConfigs = getAggConfigs({ + include: [], + exclude: [], + field: { + name: 'empty_number_field', + type: 'number', + }, + orderAgg: { + type: 'count', + }, + }); + + const { [BUCKET_TYPES.TERMS]: params } = aggConfigs.aggs[0].toDsl(); + + expect(params.field).toBe('empty_number_field'); + expect(params.include).toBe(undefined); + expect(params.exclude).toBe(undefined); + }); + + test('filters array with empty strings from number field type and writes only numbers', () => { + const aggConfigs = getAggConfigs({ + include: [1.1, 2, '', 3.33, ''], + exclude: ['', 4, 5.555, '', 6], + field: { + name: 'number_field', + type: 'number', + }, + orderAgg: { + type: 'count', + }, + }); + + const { [BUCKET_TYPES.TERMS]: params } = aggConfigs.aggs[0].toDsl(); + + expect(params.field).toBe('number_field'); + expect(params.include).toStrictEqual([1.1, 2, 3.33]); + expect(params.exclude).toStrictEqual([4, 5.555, 6]); + }); }); }); diff --git a/src/plugins/data/public/search/aggs/buckets/terms.ts b/src/plugins/data/public/search/aggs/buckets/terms.ts index 5baa38af0e8d61..698e0dfb1d3404 100644 --- a/src/plugins/data/public/search/aggs/buckets/terms.ts +++ b/src/plugins/data/public/search/aggs/buckets/terms.ts @@ -22,7 +22,10 @@ import { i18n } from '@kbn/i18n'; import { BucketAggType, IBucketAggConfig } from './bucket_agg_type'; import { BUCKET_TYPES } from './bucket_agg_types'; import { createFilterTerms } from './create_filter/terms'; -import { isStringType, migrateIncludeExcludeFormat } from './migrate_include_exclude_format'; +import { + isStringOrNumberType, + migrateIncludeExcludeFormat, +} from './migrate_include_exclude_format'; import { IAggConfigs } from '../agg_configs'; import { Adapters } from '../../../../../inspector/public'; @@ -266,7 +269,7 @@ export const getTermsBucketAgg = ({ getInternalStartServices }: TermsBucketAggDe }), type: 'string', advanced: true, - shouldShow: isStringType, + shouldShow: isStringOrNumberType, ...migrateIncludeExcludeFormat, }, { @@ -276,7 +279,7 @@ export const getTermsBucketAgg = ({ getInternalStartServices }: TermsBucketAggDe }), type: 'string', advanced: true, - shouldShow: isStringType, + shouldShow: isStringOrNumberType, ...migrateIncludeExcludeFormat, }, ], diff --git a/src/plugins/vis_default_editor/public/components/agg_params_map.ts b/src/plugins/vis_default_editor/public/components/agg_params_map.ts index 5af3cfc5b09289..9bc3146b9903bb 100644 --- a/src/plugins/vis_default_editor/public/components/agg_params_map.ts +++ b/src/plugins/vis_default_editor/public/components/agg_params_map.ts @@ -58,6 +58,8 @@ const buckets = { size: controls.SizeParamEditor, }, [BUCKET_TYPES.TERMS]: { + include: controls.IncludeExcludeParamEditor, + exclude: controls.IncludeExcludeParamEditor, orderBy: controls.OrderByParamEditor, orderAgg: controls.OrderAggParamEditor, order: wrapWithInlineComp(controls.OrderParamEditor), diff --git a/src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts b/src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts index dac86249ebbb99..5cb594ade8dba7 100644 --- a/src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts +++ b/src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts @@ -119,7 +119,7 @@ function getNextModel(list: NumberRowModel[], range: NumberListRange): NumberRow }; } -function getInitModelList(list: Array): NumberRowModel[] { +function getInitModelList(list: Array): NumberRowModel[] { return list.length ? list.map(num => ({ value: (num === undefined ? EMPTY_STRING : num) as NumberRowModel['value'], diff --git a/src/plugins/vis_default_editor/public/components/controls/components/simple_number_list.tsx b/src/plugins/vis_default_editor/public/components/controls/components/simple_number_list.tsx new file mode 100644 index 00000000000000..becf8e47ef5736 --- /dev/null +++ b/src/plugins/vis_default_editor/public/components/controls/components/simple_number_list.tsx @@ -0,0 +1,140 @@ +/* + * 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, { Fragment, useCallback, useEffect, useMemo, useState } from 'react'; +import { isArray } from 'lodash'; +import { EuiButtonEmpty, EuiFlexItem, EuiFormRow, EuiSpacer, htmlIdGenerator } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { EMPTY_STRING, getInitModelList, getRange, parse } from './number_list/utils'; +import { NumberRow, NumberRowModel } from './number_list/number_row'; +import { AggParamEditorProps } from '../../agg_param_props'; + +const generateId = htmlIdGenerator(); + +function SimpleNumberList({ + agg, + aggParam, + value, + setValue, + setTouched, +}: AggParamEditorProps>) { + const [numbers, setNumbers] = useState( + getInitModelList(value && isArray(value) ? value : [EMPTY_STRING]) + ); + const numberRange = useMemo(() => getRange('[-Infinity,Infinity]'), []); + + // This useEffect is needed to discard changes, it sets numbers a mapped value if they are different + useEffect(() => { + if ( + isArray(value) && + (value.length !== numbers.length || + !value.every((numberValue, index) => numberValue === numbers[index].value)) + ) { + setNumbers( + value.map(numberValue => ({ + id: generateId(), + value: numberValue, + isInvalid: false, + })) + ); + } + }, [numbers, value]); + + const onUpdate = useCallback( + (numberList: NumberRowModel[]) => { + setNumbers(numberList); + setValue(numberList.map(({ value: numberValue }) => numberValue)); + }, + [setValue] + ); + + const onChangeValue = useCallback( + (numberField: { id: string; value: string }) => { + onUpdate( + numbers.map(number => + number.id === numberField.id + ? { + id: numberField.id, + value: parse(numberField.value), + isInvalid: false, + } + : number + ) + ); + }, + [numbers, onUpdate] + ); + + // Add an item to the end of the list + const onAdd = useCallback(() => { + const newArray = [ + ...numbers, + { + id: generateId(), + value: EMPTY_STRING as '', + isInvalid: false, + }, + ]; + onUpdate(newArray); + }, [numbers, onUpdate]); + + const onDelete = useCallback( + (id: string) => onUpdate(numbers.filter(number => number.id !== id)), + [numbers, onUpdate] + ); + + return ( + + <> + {numbers.map((number, arrayIndex) => ( + + + {numbers.length - 1 !== arrayIndex && } + + ))} + + + + + + + + + ); +} + +export { SimpleNumberList }; diff --git a/src/plugins/vis_default_editor/public/components/controls/include_exclude.tsx b/src/plugins/vis_default_editor/public/components/controls/include_exclude.tsx new file mode 100644 index 00000000000000..f60f6ce7ce249b --- /dev/null +++ b/src/plugins/vis_default_editor/public/components/controls/include_exclude.tsx @@ -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 React, { useEffect } from 'react'; +import { AggParamEditorProps } from '../agg_param_props'; +import { StringParamEditor } from './string'; +import { search } from '../../../../data/public'; +import { SimpleNumberList } from './components/simple_number_list'; +const { isNumberType } = search.aggs; + +export function IncludeExcludeParamEditor(props: AggParamEditorProps>) { + const { agg, value, setValue } = props; + const isAggOfNumberType = isNumberType(agg); + + // This useEffect converts value from string type to number and back when the field type is changed + useEffect(() => { + if (isAggOfNumberType && !Array.isArray(value) && value !== undefined) { + const numberArray = value + .split('|') + .map(item => parseFloat(item)) + .filter(number => Number.isFinite(number)); + setValue(numberArray.length ? numberArray : ['']); + } else if (!isAggOfNumberType && Array.isArray(value) && value !== undefined) { + setValue(value.filter(item => item !== '').join('|')); + } + }, [isAggOfNumberType, setValue, value]); + + return isAggOfNumberType ? ( + } /> + ) : ( + + ); +} diff --git a/src/plugins/vis_default_editor/public/components/controls/index.ts b/src/plugins/vis_default_editor/public/components/controls/index.ts index e8944aa667853f..cfb236e5e22e37 100644 --- a/src/plugins/vis_default_editor/public/components/controls/index.ts +++ b/src/plugins/vis_default_editor/public/components/controls/index.ts @@ -24,6 +24,7 @@ export { ExtendedBoundsParamEditor } from './extended_bounds'; export { FieldParamEditor } from './field'; export { FiltersParamEditor } from './filters'; export { HasExtendedBoundsParamEditor } from './has_extended_bounds'; +export { IncludeExcludeParamEditor } from './include_exclude'; export { IpRangesParamEditor } from './ip_ranges'; export { IpRangeTypeParamEditor } from './ip_range_type'; export { IsFilteredByCollarParamEditor } from './is_filtered_by_collar'; From 2f363ba14482d2734be8ff65c7813abb0dfb69cb Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Tue, 21 Apr 2020 09:49:48 +0200 Subject: [PATCH 26/39] Migrate vis_type_table to kibana/new platform (#63105) * Move vis_type_table to Kibana Platform * Adapt mocha tests * Adapt CODEOWNERS * Adapt SCSS --- .github/CODEOWNERS | 1 + .i18nrc.json | 2 +- .../__tests__/vis_type_table}/agg_table.js | 16 ++- .../vis_type_table}/agg_table_group.js | 15 ++- .../__tests__/vis_type_table}/legacy.ts | 18 +-- .../vis_type_table}/tabified_data.js | 0 .../core_plugins/vis_type_table/index.ts | 44 ------- .../core_plugins/vis_type_table/package.json | 4 - .../public/agg_table/_index.scss | 1 - .../public/paginated_table/_index.scss | 1 - .../vis_type_table/public/table_vis_type.ts | 98 ---------------- .../vis_type_table/public/vis_controller.ts | 104 ----------------- .../public/angular/angular_config.tsx | 6 +- .../vis_type_table/config.ts} | 8 +- src/plugins/vis_type_table/kibana.json | 11 ++ .../__snapshots__/table_vis_fn.test.ts.snap | 0 .../vis_type_table/public/_table_vis.scss | 0 .../public/agg_table/_agg_table.scss | 0 .../public/agg_table/_index.scss | 1 + .../public/agg_table/agg_table.html | 0 .../public/agg_table/agg_table.js | 4 +- .../public/agg_table/agg_table_group.html | 0 .../public/agg_table/agg_table_group.js | 0 .../public/components/table_vis_options.tsx | 8 +- .../vis_type_table/public/components/utils.ts | 0 .../public/get_inner_angular.ts | 8 +- .../vis_type_table/public/index.scss | 6 +- .../vis_type_table/public/index.ts | 4 +- .../public/paginated_table/_index.scss | 1 + .../paginated_table/_table_cell_filter.scss | 0 .../paginated_table/paginated_table.html | 0 .../public/paginated_table/paginated_table.js | 0 .../paginated_table/paginated_table.test.ts | 11 +- .../public/paginated_table/rows.js | 0 .../paginated_table/table_cell_filter.html | 0 .../vis_type_table/public/plugin.ts | 17 +-- .../vis_type_table/public/services.ts | 4 +- .../vis_type_table/public/table_vis.html | 0 .../public/table_vis_controller.js | 0 .../public/table_vis_controller.test.ts | 31 +++-- .../public/table_vis_fn.test.ts | 2 +- .../vis_type_table/public/table_vis_fn.ts | 6 +- .../public/table_vis_legacy_module.ts | 0 .../public/table_vis_response_handler.ts | 0 .../vis_type_table/public/table_vis_type.ts | 100 ++++++++++++++++ .../vis_type_table/public/types.ts | 2 +- .../vis_type_table/public/vis_controller.ts | 109 ++++++++++++++++++ src/plugins/vis_type_table/server/index.ts | 34 ++++++ 48 files changed, 354 insertions(+), 323 deletions(-) rename src/legacy/core_plugins/{vis_type_table/public/agg_table/__tests__ => kibana/public/__tests__/vis_type_table}/agg_table.js (94%) rename src/legacy/core_plugins/{vis_type_table/public/agg_table/__tests__ => kibana/public/__tests__/vis_type_table}/agg_table_group.js (81%) rename src/legacy/core_plugins/{vis_type_table/public => kibana/public/__tests__/vis_type_table}/legacy.ts (69%) rename src/legacy/core_plugins/{vis_type_table/public/agg_table/__tests__ => kibana/public/__tests__/vis_type_table}/tabified_data.js (100%) delete mode 100644 src/legacy/core_plugins/vis_type_table/index.ts delete mode 100644 src/legacy/core_plugins/vis_type_table/package.json delete mode 100644 src/legacy/core_plugins/vis_type_table/public/agg_table/_index.scss delete mode 100644 src/legacy/core_plugins/vis_type_table/public/paginated_table/_index.scss delete mode 100644 src/legacy/core_plugins/vis_type_table/public/table_vis_type.ts delete mode 100644 src/legacy/core_plugins/vis_type_table/public/vis_controller.ts rename src/{legacy/core_plugins/vis_type_table/public/legacy_imports.ts => plugins/vis_type_table/config.ts} (79%) create mode 100644 src/plugins/vis_type_table/kibana.json rename src/{legacy/core_plugins => plugins}/vis_type_table/public/__snapshots__/table_vis_fn.test.ts.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/_table_vis.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/agg_table/_agg_table.scss (100%) create mode 100644 src/plugins/vis_type_table/public/agg_table/_index.scss rename src/{legacy/core_plugins => plugins}/vis_type_table/public/agg_table/agg_table.html (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/agg_table/agg_table.js (98%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/agg_table/agg_table_group.html (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/agg_table/agg_table_group.js (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/components/table_vis_options.tsx (96%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/components/utils.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/get_inner_angular.ts (91%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/index.scss (61%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/index.ts (92%) create mode 100644 src/plugins/vis_type_table/public/paginated_table/_index.scss rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/_table_cell_filter.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/paginated_table.html (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/paginated_table.js (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/paginated_table.test.ts (98%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/rows.js (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/paginated_table/table_cell_filter.html (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/plugin.ts (80%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/services.ts (86%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis.html (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_controller.js (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_controller.test.ts (89%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_fn.test.ts (95%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_fn.ts (94%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_legacy_module.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_type_table/public/table_vis_response_handler.ts (100%) create mode 100644 src/plugins/vis_type_table/public/table_vis_type.ts rename src/{legacy/core_plugins => plugins}/vis_type_table/public/types.ts (94%) create mode 100644 src/plugins/vis_type_table/public/vis_controller.ts create mode 100644 src/plugins/vis_type_table/server/index.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ab05b32ab063e2..c32bf8cbaa1c3e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,6 +13,7 @@ /src/legacy/core_plugins/kibana/public/dev_tools/ @elastic/kibana-app /src/legacy/core_plugins/vis_type_vislib/ @elastic/kibana-app /src/plugins/vis_type_xy/ @elastic/kibana-app +/src/plugins/vis_type_table/ @elastic/kibana-app /src/plugins/kibana_legacy/ @elastic/kibana-app /src/plugins/vis_type_timelion/ @elastic/kibana-app /src/plugins/dashboard/ @elastic/kibana-app diff --git a/.i18nrc.json b/.i18nrc.json index 4a516f23ebf05d..d4286a7bd50e0f 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -48,7 +48,7 @@ "visDefaultEditor": "src/plugins/vis_default_editor", "visTypeMarkdown": "src/plugins/vis_type_markdown", "visTypeMetric": "src/plugins/vis_type_metric", - "visTypeTable": "src/legacy/core_plugins/vis_type_table", + "visTypeTable": "src/plugins/vis_type_table", "visTypeTagCloud": "src/legacy/core_plugins/vis_type_tagcloud", "visTypeTimeseries": ["src/legacy/core_plugins/vis_type_timeseries", "src/plugins/vis_type_timeseries"], "visTypeVega": "src/legacy/core_plugins/vis_type_vega", diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table.js b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table.js similarity index 94% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table.js rename to src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table.js index a23407a599ae27..b212ecf578dd1f 100644 --- a/src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table.js +++ b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table.js @@ -22,11 +22,18 @@ import moment from 'moment'; import ngMock from 'ng_mock'; import expect from '@kbn/expect'; import sinon from 'sinon'; -import { npStart } from '../../legacy_imports'; +import './legacy'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { npStart } from 'ui/new_platform'; import { round } from 'lodash'; -import { getAngularModule } from '../../get_inner_angular'; -import { initTableVisLegacyModule } from '../../table_vis_legacy_module'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInnerAngular } from '../../../../../../plugins/vis_type_table/public/get_inner_angular'; + +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { initTableVisLegacyModule } from '../../../../../../plugins/vis_type_table/public/table_vis_legacy_module'; import { tabifiedData } from './tabified_data'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { configureAppAngularModule } from '../../../../../../plugins/kibana_legacy/public/angular'; describe('Table Vis - AggTable Directive', function() { let $rootScope; @@ -34,7 +41,8 @@ describe('Table Vis - AggTable Directive', function() { let settings; const initLocalAngular = () => { - const tableVisModule = getAngularModule('kibana/table_vis', npStart.core); + const tableVisModule = getInnerAngular('kibana/table_vis', npStart.core); + configureAppAngularModule(tableVisModule, npStart.core, true); initTableVisLegacyModule(tableVisModule); }; diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table_group.js b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table_group.js similarity index 81% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table_group.js rename to src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table_group.js index 40a0993ccb0175..3cd7de393d66a8 100644 --- a/src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/agg_table_group.js +++ b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/agg_table_group.js @@ -20,17 +20,24 @@ import $ from 'jquery'; import ngMock from 'ng_mock'; import expect from '@kbn/expect'; -import { npStart } from '../../legacy_imports'; -import { getAngularModule } from '../../get_inner_angular'; -import { initTableVisLegacyModule } from '../../table_vis_legacy_module'; +import './legacy'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { getInnerAngular } from '../../../../../../plugins/vis_type_table/public/get_inner_angular'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { initTableVisLegacyModule } from '../../../../../../plugins/vis_type_table/public/table_vis_legacy_module'; import { tabifiedData } from './tabified_data'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { npStart } from 'ui/new_platform'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { configureAppAngularModule } from '../../../../../../plugins/kibana_legacy/public/angular'; describe('Table Vis - AggTableGroup Directive', function() { let $rootScope; let $compile; const initLocalAngular = () => { - const tableVisModule = getAngularModule('kibana/table_vis', npStart.core); + const tableVisModule = getInnerAngular('kibana/table_vis', npStart.core); + configureAppAngularModule(tableVisModule, npStart.core, true); initTableVisLegacyModule(tableVisModule); }; diff --git a/src/legacy/core_plugins/vis_type_table/public/legacy.ts b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts similarity index 69% rename from src/legacy/core_plugins/vis_type_table/public/legacy.ts rename to src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts index 3d5f8c1b3efe92..c6467a5beae686 100644 --- a/src/legacy/core_plugins/vis_type_table/public/legacy.ts +++ b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts @@ -16,19 +16,23 @@ * specific language governing permissions and limitations * under the License. */ - import { PluginInitializerContext } from 'kibana/public'; -import { npSetup, npStart } from './legacy_imports'; -import { plugin } from '.'; - -import { TablePluginSetupDependencies } from './plugin'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { npStart, npSetup } from 'ui/new_platform'; +import { + TableVisPlugin, + TablePluginSetupDependencies, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../../../plugins/vis_type_table/public/plugin'; const plugins: Readonly = { expressions: npSetup.plugins.expressions, visualizations: npSetup.plugins.visualizations, }; -const pluginInstance = plugin({} as PluginInitializerContext); +const pluginInstance = new TableVisPlugin({} as PluginInitializerContext); export const setup = pluginInstance.setup(npSetup.core, plugins); -export const start = pluginInstance.start(npStart.core, { data: npStart.plugins.data }); +export const start = pluginInstance.start(npStart.core, { + data: npStart.plugins.data, +}); diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/tabified_data.js b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/tabified_data.js similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/__tests__/tabified_data.js rename to src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/tabified_data.js diff --git a/src/legacy/core_plugins/vis_type_table/index.ts b/src/legacy/core_plugins/vis_type_table/index.ts deleted file mode 100644 index 04ca9da7de32b8..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/index.ts +++ /dev/null @@ -1,44 +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 { resolve } from 'path'; -import { Legacy } from 'kibana'; - -import { LegacyPluginApi, LegacyPluginInitializer } from '../../../../src/legacy/types'; - -const tableVisPluginInitializer: LegacyPluginInitializer = ({ Plugin }: LegacyPluginApi) => - new Plugin({ - id: 'table_vis', - require: ['kibana', 'elasticsearch'], - publicDir: resolve(__dirname, 'public'), - uiExports: { - styleSheetPaths: resolve(__dirname, 'public/index.scss'), - hacks: [resolve(__dirname, 'public/legacy')], - injectDefaultVars: server => ({}), - }, - init: (server: Legacy.Server) => ({}), - config(Joi: any) { - return Joi.object({ - enabled: Joi.boolean().default(true), - }).default(); - }, - } as Legacy.PluginSpecOptions); - -// eslint-disable-next-line import/no-default-export -export default tableVisPluginInitializer; diff --git a/src/legacy/core_plugins/vis_type_table/package.json b/src/legacy/core_plugins/vis_type_table/package.json deleted file mode 100644 index 2809b0e0478365..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "table_vis", - "version": "kibana" -} diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/_index.scss b/src/legacy/core_plugins/vis_type_table/public/agg_table/_index.scss deleted file mode 100644 index b19d4a887a7f39..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/public/agg_table/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'agg_table'; diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/_index.scss b/src/legacy/core_plugins/vis_type_table/public/paginated_table/_index.scss deleted file mode 100644 index 9473b847d3c2bd..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/public/paginated_table/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import './table_cell_filter'; diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_type.ts b/src/legacy/core_plugins/vis_type_table/public/table_vis_type.ts deleted file mode 100644 index 43816121bc23bc..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/public/table_vis_type.ts +++ /dev/null @@ -1,98 +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 { i18n } from '@kbn/i18n'; -import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../../../plugins/vis_default_editor/public'; -import { Vis } from '../../../../plugins/visualizations/public'; -import { tableVisResponseHandler } from './table_vis_response_handler'; -// @ts-ignore -import tableVisTemplate from './table_vis.html'; -import { TableOptions } from './components/table_vis_options'; -import { TableVisualizationController } from './vis_controller'; - -export const tableVisTypeDefinition = { - type: 'table', - name: 'table', - title: i18n.translate('visTypeTable.tableVisTitle', { - defaultMessage: 'Data Table', - }), - icon: 'visTable', - description: i18n.translate('visTypeTable.tableVisDescription', { - defaultMessage: 'Display values in a table', - }), - visualization: TableVisualizationController, - visConfig: { - defaults: { - perPage: 10, - showPartialRows: false, - showMetricsAtAllLevels: false, - sort: { - columnIndex: null, - direction: null, - }, - showTotal: false, - totalFunc: 'sum', - percentageCol: '', - }, - template: tableVisTemplate, - }, - editorConfig: { - optionsTemplate: TableOptions, - schemas: new Schemas([ - { - group: AggGroupNames.Metrics, - name: 'metric', - title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.metricTitle', { - defaultMessage: 'Metric', - }), - aggFilter: ['!geo_centroid', '!geo_bounds'], - aggSettings: { - top_hits: { - allowStrings: true, - }, - }, - min: 1, - defaults: [{ type: 'count', schema: 'metric' }], - }, - { - group: AggGroupNames.Buckets, - name: 'bucket', - title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.bucketTitle', { - defaultMessage: 'Split rows', - }), - aggFilter: ['!filter'], - }, - { - group: AggGroupNames.Buckets, - name: 'split', - title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.splitTitle', { - defaultMessage: 'Split table', - }), - min: 0, - max: 1, - aggFilter: ['!filter'], - }, - ]), - }, - responseHandler: tableVisResponseHandler, - hierarchicalData: (vis: Vis) => { - return Boolean(vis.params.showPartialRows || vis.params.showMetricsAtAllLevels); - }, -}; diff --git a/src/legacy/core_plugins/vis_type_table/public/vis_controller.ts b/src/legacy/core_plugins/vis_type_table/public/vis_controller.ts deleted file mode 100644 index 5bb730d2f9b105..00000000000000 --- a/src/legacy/core_plugins/vis_type_table/public/vis_controller.ts +++ /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 angular, { IModule, auto, IRootScopeService, IScope, ICompileService } from 'angular'; -import $ from 'jquery'; - -import { VisParams, ExprVis } from '../../../../plugins/visualizations/public'; -import { npStart } from './legacy_imports'; -import { getAngularModule } from './get_inner_angular'; -import { initTableVisLegacyModule } from './table_vis_legacy_module'; - -const innerAngularName = 'kibana/table_vis'; - -export class TableVisualizationController { - private tableVisModule: IModule | undefined; - private injector: auto.IInjectorService | undefined; - el: JQuery; - vis: ExprVis; - $rootScope: IRootScopeService | null = null; - $scope: (IScope & { [key: string]: any }) | undefined; - $compile: ICompileService | undefined; - - constructor(domeElement: Element, vis: ExprVis) { - this.el = $(domeElement); - this.vis = vis; - } - - getInjector() { - if (!this.injector) { - const mountpoint = document.createElement('div'); - mountpoint.setAttribute('style', 'height: 100%; width: 100%;'); - this.injector = angular.bootstrap(mountpoint, [innerAngularName]); - this.el.append(mountpoint); - } - - return this.injector; - } - - initLocalAngular() { - if (!this.tableVisModule) { - this.tableVisModule = getAngularModule(innerAngularName, npStart.core); - initTableVisLegacyModule(this.tableVisModule); - } - } - - async render(esResponse: object, visParams: VisParams) { - this.initLocalAngular(); - - return new Promise(async (resolve, reject) => { - if (!this.$rootScope) { - const $injector = this.getInjector(); - this.$rootScope = $injector.get('$rootScope'); - this.$compile = $injector.get('$compile'); - } - const updateScope = () => { - if (!this.$scope) { - return; - } - this.$scope.vis = this.vis; - this.$scope.visState = { params: visParams }; - this.$scope.esResponse = esResponse; - - this.$scope.visParams = visParams; - this.$scope.renderComplete = resolve; - this.$scope.renderFailed = reject; - this.$scope.resize = Date.now(); - this.$scope.$apply(); - }; - - if (!this.$scope && this.$compile) { - this.$scope = this.$rootScope.$new(); - this.$scope.uiState = this.vis.getUiState(); - updateScope(); - this.el.find('div').append(this.$compile(this.vis.type!.visConfig.template)(this.$scope)); - this.$scope.$apply(); - } else { - updateScope(); - } - }); - } - - destroy() { - if (this.$rootScope) { - this.$rootScope.$destroy(); - this.$rootScope = null; - } - } -} diff --git a/src/plugins/kibana_legacy/public/angular/angular_config.tsx b/src/plugins/kibana_legacy/public/angular/angular_config.tsx index 71cd57ef2d72ec..295cf27688c805 100644 --- a/src/plugins/kibana_legacy/public/angular/angular_config.tsx +++ b/src/plugins/kibana_legacy/public/angular/angular_config.tsx @@ -92,9 +92,9 @@ export const configureAppAngularModule = ( ) => { const core = 'core' in newPlatform ? newPlatform.core : newPlatform; const packageInfo = - 'injectedMetadata' in newPlatform - ? newPlatform.injectedMetadata.getLegacyMetadata() - : newPlatform.env.packageInfo; + 'env' in newPlatform + ? newPlatform.env.packageInfo + : newPlatform.injectedMetadata.getLegacyMetadata(); if ('injectedMetadata' in newPlatform) { forOwn(newPlatform.injectedMetadata.getInjectedVars(), (val, name) => { diff --git a/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts b/src/plugins/vis_type_table/config.ts similarity index 79% rename from src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts rename to src/plugins/vis_type_table/config.ts index 1030e971d64504..6749bd83de39f9 100644 --- a/src/legacy/core_plugins/vis_type_table/public/legacy_imports.ts +++ b/src/plugins/vis_type_table/config.ts @@ -17,4 +17,10 @@ * under the License. */ -export { npSetup, npStart } from 'ui/new_platform'; +import { schema, TypeOf } from '@kbn/config-schema'; + +export const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: true }), +}); + +export type ConfigSchema = TypeOf; diff --git a/src/plugins/vis_type_table/kibana.json b/src/plugins/vis_type_table/kibana.json new file mode 100644 index 00000000000000..bb0f6478a42408 --- /dev/null +++ b/src/plugins/vis_type_table/kibana.json @@ -0,0 +1,11 @@ +{ + "id": "visTypeTable", + "version": "kibana", + "server": true, + "ui": true, + "requiredPlugins": [ + "expressions", + "visualizations", + "data" + ] +} diff --git a/src/legacy/core_plugins/vis_type_table/public/__snapshots__/table_vis_fn.test.ts.snap b/src/plugins/vis_type_table/public/__snapshots__/table_vis_fn.test.ts.snap similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/__snapshots__/table_vis_fn.test.ts.snap rename to src/plugins/vis_type_table/public/__snapshots__/table_vis_fn.test.ts.snap diff --git a/src/legacy/core_plugins/vis_type_table/public/_table_vis.scss b/src/plugins/vis_type_table/public/_table_vis.scss similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/_table_vis.scss rename to src/plugins/vis_type_table/public/_table_vis.scss diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/_agg_table.scss b/src/plugins/vis_type_table/public/agg_table/_agg_table.scss similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/_agg_table.scss rename to src/plugins/vis_type_table/public/agg_table/_agg_table.scss diff --git a/src/plugins/vis_type_table/public/agg_table/_index.scss b/src/plugins/vis_type_table/public/agg_table/_index.scss new file mode 100644 index 00000000000000..340e08a76f1bdb --- /dev/null +++ b/src/plugins/vis_type_table/public/agg_table/_index.scss @@ -0,0 +1 @@ +@import './agg_table'; diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table.html b/src/plugins/vis_type_table/public/agg_table/agg_table.html similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table.html rename to src/plugins/vis_type_table/public/agg_table/agg_table.html diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table.js b/src/plugins/vis_type_table/public/agg_table/agg_table.js similarity index 98% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table.js rename to src/plugins/vis_type_table/public/agg_table/agg_table.js index b9e79f96e4fc13..0cd501e2d0344c 100644 --- a/src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table.js +++ b/src/plugins/vis_type_table/public/agg_table/agg_table.js @@ -238,9 +238,9 @@ export function KbnAggTable(config, RecursionHelper) { } /** - * @param {[]Object} columns - the formatted columns that will be displayed + * @param {Object[]} columns - the formatted columns that will be displayed * @param {String} title - the title of the column to add to - * @param {[]Object} rows - the row data for the columns + * @param {Object[]} rows - the row data for the columns * @param {Number} insertAtIndex - the index to insert the percentage column at * @returns {Object} - cols and rows for the table to render now included percentage column(s) */ diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table_group.html b/src/plugins/vis_type_table/public/agg_table/agg_table_group.html similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table_group.html rename to src/plugins/vis_type_table/public/agg_table/agg_table_group.html diff --git a/src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table_group.js b/src/plugins/vis_type_table/public/agg_table/agg_table_group.js similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/agg_table/agg_table_group.js rename to src/plugins/vis_type_table/public/agg_table/agg_table_group.js diff --git a/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx b/src/plugins/vis_type_table/public/components/table_vis_options.tsx similarity index 96% rename from src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx rename to src/plugins/vis_type_table/public/components/table_vis_options.tsx index 265528f33f9cd0..68348d5ef10604 100644 --- a/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx +++ b/src/plugins/vis_type_table/public/components/table_vis_options.tsx @@ -24,12 +24,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; -import { search } from '../../../../../plugins/data/public'; -import { - SwitchOption, - SelectOption, - NumberInputOption, -} from '../../../../../plugins/charts/public'; +import { search } from '../../../data/public'; +import { SwitchOption, SelectOption, NumberInputOption } from '../../../charts/public'; import { TableVisParams } from '../types'; import { totalAggregations } from './utils'; diff --git a/src/legacy/core_plugins/vis_type_table/public/components/utils.ts b/src/plugins/vis_type_table/public/components/utils.ts similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/components/utils.ts rename to src/plugins/vis_type_table/public/components/utils.ts diff --git a/src/legacy/core_plugins/vis_type_table/public/get_inner_angular.ts b/src/plugins/vis_type_table/public/get_inner_angular.ts similarity index 91% rename from src/legacy/core_plugins/vis_type_table/public/get_inner_angular.ts rename to src/plugins/vis_type_table/public/get_inner_angular.ts index 6208e358b4184f..d69b9bba31b032 100644 --- a/src/legacy/core_plugins/vis_type_table/public/get_inner_angular.ts +++ b/src/plugins/vis_type_table/public/get_inner_angular.ts @@ -23,7 +23,7 @@ import angular from 'angular'; import 'angular-recursion'; import { i18nDirective, i18nFilter, I18nProvider } from '@kbn/i18n/angular'; -import { CoreStart, LegacyCoreStart, IUiSettingsClient } from 'kibana/public'; +import { CoreStart, IUiSettingsClient, PluginInitializerContext } from 'kibana/public'; import { initAngularBootstrap, PaginateDirectiveProvider, @@ -32,15 +32,15 @@ import { watchMultiDecorator, KbnAccessibleClickProvider, configureAppAngularModule, -} from '../../../../plugins/kibana_legacy/public'; +} from '../../kibana_legacy/public'; initAngularBootstrap(); const thirdPartyAngularDependencies = ['ngSanitize', 'ui.bootstrap', 'RecursionHelper']; -export function getAngularModule(name: string, core: CoreStart) { +export function getAngularModule(name: string, core: CoreStart, context: PluginInitializerContext) { const uiModule = getInnerAngular(name, core); - configureAppAngularModule(uiModule, core as LegacyCoreStart, true); + configureAppAngularModule(uiModule, { core, env: context.env }, true); return uiModule; } diff --git a/src/legacy/core_plugins/vis_type_table/public/index.scss b/src/plugins/vis_type_table/public/index.scss similarity index 61% rename from src/legacy/core_plugins/vis_type_table/public/index.scss rename to src/plugins/vis_type_table/public/index.scss index 54124ebc42620b..0972c85e0dbe03 100644 --- a/src/legacy/core_plugins/vis_type_table/public/index.scss +++ b/src/plugins/vis_type_table/public/index.scss @@ -1,5 +1,3 @@ -@import 'src/legacy/ui/public/styles/styling_constants'; - // Prefix all styles with "tbv" to avoid conflicts. // Examples // tbvChart @@ -7,6 +5,6 @@ // tbvChart__legend--small // tbvChart__legend-isLoading -@import 'agg_table/index'; -@import 'paginated_table/index'; +@import './agg_table/index'; +@import './paginated_table/index'; @import './table_vis'; diff --git a/src/legacy/core_plugins/vis_type_table/public/index.ts b/src/plugins/vis_type_table/public/index.ts similarity index 92% rename from src/legacy/core_plugins/vis_type_table/public/index.ts rename to src/plugins/vis_type_table/public/index.ts index efbaf69659ea29..5621fdb0947724 100644 --- a/src/legacy/core_plugins/vis_type_table/public/index.ts +++ b/src/plugins/vis_type_table/public/index.ts @@ -16,8 +16,8 @@ * specific language governing permissions and limitations * under the License. */ - -import { PluginInitializerContext } from '../../../../core/public'; +import './index.scss'; +import { PluginInitializerContext } from 'kibana/public'; import { TableVisPlugin as Plugin } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { diff --git a/src/plugins/vis_type_table/public/paginated_table/_index.scss b/src/plugins/vis_type_table/public/paginated_table/_index.scss new file mode 100644 index 00000000000000..23d56c09b2818a --- /dev/null +++ b/src/plugins/vis_type_table/public/paginated_table/_index.scss @@ -0,0 +1 @@ +@import './_table_cell_filter'; diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/_table_cell_filter.scss b/src/plugins/vis_type_table/public/paginated_table/_table_cell_filter.scss similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/_table_cell_filter.scss rename to src/plugins/vis_type_table/public/paginated_table/_table_cell_filter.scss diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.html b/src/plugins/vis_type_table/public/paginated_table/paginated_table.html similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.html rename to src/plugins/vis_type_table/public/paginated_table/paginated_table.html diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.js b/src/plugins/vis_type_table/public/paginated_table/paginated_table.js similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.js rename to src/plugins/vis_type_table/public/paginated_table/paginated_table.js diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.test.ts b/src/plugins/vis_type_table/public/paginated_table/paginated_table.test.ts similarity index 98% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.test.ts rename to src/plugins/vis_type_table/public/paginated_table/paginated_table.test.ts index 7352236f03febf..23e4aee0378dc6 100644 --- a/src/legacy/core_plugins/vis_type_table/public/paginated_table/paginated_table.test.ts +++ b/src/plugins/vis_type_table/public/paginated_table/paginated_table.test.ts @@ -25,10 +25,9 @@ import 'angular-mocks'; import { getAngularModule } from '../get_inner_angular'; import { initTableVisLegacyModule } from '../table_vis_legacy_module'; -import { coreMock } from '../../../../../core/public/mocks'; +import { coreMock } from '../../../../core/public/mocks'; -jest.mock('ui/new_platform'); -jest.mock('../../../../../plugins/kibana_legacy/public/angular/angular_config', () => ({ +jest.mock('../../../kibana_legacy/public/angular/angular_config', () => ({ configureAppAngularModule: () => {}, })); @@ -73,7 +72,11 @@ describe('Table Vis - Paginated table', () => { let paginatedTable: any; const initLocalAngular = () => { - const tableVisModule = getAngularModule('kibana/table_vis', coreMock.createStart()); + const tableVisModule = getAngularModule( + 'kibana/table_vis', + coreMock.createStart(), + coreMock.createPluginInitializerContext() + ); initTableVisLegacyModule(tableVisModule); }; diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/rows.js b/src/plugins/vis_type_table/public/paginated_table/rows.js similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/rows.js rename to src/plugins/vis_type_table/public/paginated_table/rows.js diff --git a/src/legacy/core_plugins/vis_type_table/public/paginated_table/table_cell_filter.html b/src/plugins/vis_type_table/public/paginated_table/table_cell_filter.html similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/paginated_table/table_cell_filter.html rename to src/plugins/vis_type_table/public/paginated_table/table_cell_filter.html diff --git a/src/legacy/core_plugins/vis_type_table/public/plugin.ts b/src/plugins/vis_type_table/public/plugin.ts similarity index 80% rename from src/legacy/core_plugins/vis_type_table/public/plugin.ts rename to src/plugins/vis_type_table/public/plugin.ts index ea12a5320a14d4..a41d939523bcca 100644 --- a/src/legacy/core_plugins/vis_type_table/public/plugin.ts +++ b/src/plugins/vis_type_table/public/plugin.ts @@ -16,14 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -import { Plugin as ExpressionsPublicPlugin } from '../../../../plugins/expressions/public'; -import { VisualizationsSetup } from '../../../../plugins/visualizations/public'; - -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '../../../../core/public'; +import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'kibana/public'; +import { Plugin as ExpressionsPublicPlugin } from '../../expressions/public'; +import { VisualizationsSetup } from '../../visualizations/public'; import { createTableVisFn } from './table_vis_fn'; -import { tableVisTypeDefinition } from './table_vis_type'; -import { DataPublicPluginStart } from '../../../../plugins/data/public'; +import { getTableVisTypeDefinition } from './table_vis_type'; +import { DataPublicPluginStart } from '../../data/public'; import { setFormatService } from './services'; /** @internal */ @@ -40,6 +39,7 @@ export interface TablePluginStartDependencies { /** @internal */ export class TableVisPlugin implements Plugin, void> { initializerContext: PluginInitializerContext; + createBaseVisualization: any; constructor(initializerContext: PluginInitializerContext) { this.initializerContext = initializerContext; @@ -50,8 +50,9 @@ export class TableVisPlugin implements Plugin, void> { { expressions, visualizations }: TablePluginSetupDependencies ) { expressions.registerFunction(createTableVisFn); - - visualizations.createBaseVisualization(tableVisTypeDefinition); + visualizations.createBaseVisualization( + getTableVisTypeDefinition(core, this.initializerContext) + ); } public start(core: CoreStart, { data }: TablePluginStartDependencies) { diff --git a/src/legacy/core_plugins/vis_type_table/public/services.ts b/src/plugins/vis_type_table/public/services.ts similarity index 86% rename from src/legacy/core_plugins/vis_type_table/public/services.ts rename to src/plugins/vis_type_table/public/services.ts index b4b491ac7a5552..3aaffe75e27f14 100644 --- a/src/legacy/core_plugins/vis_type_table/public/services.ts +++ b/src/plugins/vis_type_table/public/services.ts @@ -17,8 +17,8 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; -import { DataPublicPluginStart } from '../../../../plugins/data/public'; +import { createGetterSetter } from '../../kibana_utils/public'; +import { DataPublicPluginStart } from '../../data/public'; export const [getFormatService, setFormatService] = createGetterSetter< DataPublicPluginStart['fieldFormats'] diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis.html b/src/plugins/vis_type_table/public/table_vis.html similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/table_vis.html rename to src/plugins/vis_type_table/public/table_vis.html diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_controller.js b/src/plugins/vis_type_table/public/table_vis_controller.js similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_controller.js rename to src/plugins/vis_type_table/public/table_vis_controller.js diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_controller.test.ts b/src/plugins/vis_type_table/public/table_vis_controller.test.ts similarity index 89% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_controller.test.ts rename to src/plugins/vis_type_table/public/table_vis_controller.test.ts index 8d6f88bf8dd4af..4607324ca150c6 100644 --- a/src/legacy/core_plugins/vis_type_table/public/table_vis_controller.test.ts +++ b/src/plugins/vis_type_table/public/table_vis_controller.test.ts @@ -26,24 +26,23 @@ import $ from 'jquery'; import StubIndexPattern from 'test_utils/stub_index_pattern'; import { getAngularModule } from './get_inner_angular'; import { initTableVisLegacyModule } from './table_vis_legacy_module'; -import { tableVisTypeDefinition } from './table_vis_type'; -import { Vis } from '../../../../plugins/visualizations/public'; +import { getTableVisTypeDefinition } from './table_vis_type'; +import { Vis } from '../../visualizations/public'; // eslint-disable-next-line -import { stubFields } from '../../../../plugins/data/public/stubs'; +import { stubFields } from '../../data/public/stubs'; // eslint-disable-next-line import { tableVisResponseHandler } from './table_vis_response_handler'; -import { coreMock } from '../../../../core/public/mocks'; +import { coreMock } from '../../../core/public/mocks'; +import { IAggConfig, search } from '../../data/public'; +// TODO: remove linting disable // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { npStart } from './legacy_imports'; -import { IAggConfig, search } from '../../../../plugins/data/public'; +import { searchStartMock } from '../../data/public/search/mocks'; -// should be mocked once get rid of 'ui/new_platform' legacy imports -const { createAggConfigs } = npStart.plugins.data.search.aggs; +const { createAggConfigs } = searchStartMock.aggs; const { tabifyAggResponse } = search; -jest.mock('ui/new_platform'); -jest.mock('../../../../plugins/kibana_legacy/public/angular/angular_config', () => ({ +jest.mock('../../kibana_legacy/public/angular/angular_config', () => ({ configureAppAngularModule: () => {}, })); @@ -89,7 +88,11 @@ describe('Table Vis - Controller', () => { let stubIndexPattern: any; const initLocalAngular = () => { - const tableVisModule = getAngularModule('kibana/table_vis', coreMock.createStart()); + const tableVisModule = getAngularModule( + 'kibana/table_vis', + coreMock.createStart(), + coreMock.createPluginInitializerContext() + ); initTableVisLegacyModule(tableVisModule); }; @@ -110,9 +113,13 @@ describe('Table Vis - Controller', () => { (cfg: any) => cfg, 'time', stubFields, - coreMock.createStart() + coreMock.createSetup() ); }); + const tableVisTypeDefinition = getTableVisTypeDefinition( + coreMock.createSetup(), + coreMock.createPluginInitializerContext() + ); function getRangeVis(params?: object) { return ({ diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_fn.test.ts b/src/plugins/vis_type_table/public/table_vis_fn.test.ts similarity index 95% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_fn.test.ts rename to src/plugins/vis_type_table/public/table_vis_fn.test.ts index 36392c10f93f32..9accf8950d910b 100644 --- a/src/legacy/core_plugins/vis_type_table/public/table_vis_fn.test.ts +++ b/src/plugins/vis_type_table/public/table_vis_fn.test.ts @@ -21,7 +21,7 @@ import { createTableVisFn } from './table_vis_fn'; import { tableVisResponseHandler } from './table_vis_response_handler'; // eslint-disable-next-line -import { functionWrapper } from '../../../../plugins/expressions/common/expression_functions/specs/tests/utils'; +import { functionWrapper } from '../../expressions/common/expression_functions/specs/tests/utils'; jest.mock('./table_vis_response_handler', () => ({ tableVisResponseHandler: jest.fn().mockReturnValue({ diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_fn.ts b/src/plugins/vis_type_table/public/table_vis_fn.ts similarity index 94% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_fn.ts rename to src/plugins/vis_type_table/public/table_vis_fn.ts index a97e596e89754c..9739a7a284e6cf 100644 --- a/src/legacy/core_plugins/vis_type_table/public/table_vis_fn.ts +++ b/src/plugins/vis_type_table/public/table_vis_fn.ts @@ -19,11 +19,7 @@ import { i18n } from '@kbn/i18n'; import { tableVisResponseHandler, TableContext } from './table_vis_response_handler'; -import { - ExpressionFunctionDefinition, - KibanaDatatable, - Render, -} from '../../../../plugins/expressions/public'; +import { ExpressionFunctionDefinition, KibanaDatatable, Render } from '../../expressions/public'; export type Input = KibanaDatatable; diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_legacy_module.ts b/src/plugins/vis_type_table/public/table_vis_legacy_module.ts similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_legacy_module.ts rename to src/plugins/vis_type_table/public/table_vis_legacy_module.ts diff --git a/src/legacy/core_plugins/vis_type_table/public/table_vis_response_handler.ts b/src/plugins/vis_type_table/public/table_vis_response_handler.ts similarity index 100% rename from src/legacy/core_plugins/vis_type_table/public/table_vis_response_handler.ts rename to src/plugins/vis_type_table/public/table_vis_response_handler.ts diff --git a/src/plugins/vis_type_table/public/table_vis_type.ts b/src/plugins/vis_type_table/public/table_vis_type.ts new file mode 100644 index 00000000000000..26e5ac8cfd71ab --- /dev/null +++ b/src/plugins/vis_type_table/public/table_vis_type.ts @@ -0,0 +1,100 @@ +/* + * 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 { CoreSetup, PluginInitializerContext } from 'kibana/public'; +import { i18n } from '@kbn/i18n'; +import { AggGroupNames } from '../../data/public'; +import { Schemas } from '../../vis_default_editor/public'; +import { Vis } from '../../visualizations/public'; +import { tableVisResponseHandler } from './table_vis_response_handler'; +// @ts-ignore +import tableVisTemplate from './table_vis.html'; +import { TableOptions } from './components/table_vis_options'; +import { getTableVisualizationControllerClass } from './vis_controller'; + +export function getTableVisTypeDefinition(core: CoreSetup, context: PluginInitializerContext) { + return { + type: 'table', + name: 'table', + title: i18n.translate('visTypeTable.tableVisTitle', { + defaultMessage: 'Data Table', + }), + icon: 'visTable', + description: i18n.translate('visTypeTable.tableVisDescription', { + defaultMessage: 'Display values in a table', + }), + visualization: getTableVisualizationControllerClass(core, context), + visConfig: { + defaults: { + perPage: 10, + showPartialRows: false, + showMetricsAtAllLevels: false, + sort: { + columnIndex: null, + direction: null, + }, + showTotal: false, + totalFunc: 'sum', + percentageCol: '', + }, + template: tableVisTemplate, + }, + editorConfig: { + optionsTemplate: TableOptions, + schemas: new Schemas([ + { + group: AggGroupNames.Metrics, + name: 'metric', + title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.metricTitle', { + defaultMessage: 'Metric', + }), + aggFilter: ['!geo_centroid', '!geo_bounds'], + aggSettings: { + top_hits: { + allowStrings: true, + }, + }, + min: 1, + defaults: [{ type: 'count', schema: 'metric' }], + }, + { + group: AggGroupNames.Buckets, + name: 'bucket', + title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.bucketTitle', { + defaultMessage: 'Split rows', + }), + aggFilter: ['!filter'], + }, + { + group: AggGroupNames.Buckets, + name: 'split', + title: i18n.translate('visTypeTable.tableVisEditorConfig.schemas.splitTitle', { + defaultMessage: 'Split table', + }), + min: 0, + max: 1, + aggFilter: ['!filter'], + }, + ]), + }, + responseHandler: tableVisResponseHandler, + hierarchicalData: (vis: Vis) => { + return Boolean(vis.params.showPartialRows || vis.params.showMetricsAtAllLevels); + }, + }; +} diff --git a/src/legacy/core_plugins/vis_type_table/public/types.ts b/src/plugins/vis_type_table/public/types.ts similarity index 94% rename from src/legacy/core_plugins/vis_type_table/public/types.ts rename to src/plugins/vis_type_table/public/types.ts index c6de14b9f050c6..39023d1305cb63 100644 --- a/src/legacy/core_plugins/vis_type_table/public/types.ts +++ b/src/plugins/vis_type_table/public/types.ts @@ -17,7 +17,7 @@ * under the License. */ -import { SchemaConfig } from '../../../../plugins/visualizations/public'; +import { SchemaConfig } from '../../visualizations/public'; export enum AggTypes { SUM = 'sum', diff --git a/src/plugins/vis_type_table/public/vis_controller.ts b/src/plugins/vis_type_table/public/vis_controller.ts new file mode 100644 index 00000000000000..d49dd32c8c89c3 --- /dev/null +++ b/src/plugins/vis_type_table/public/vis_controller.ts @@ -0,0 +1,109 @@ +/* + * 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 { CoreSetup, PluginInitializerContext } from 'kibana/public'; +import angular, { IModule, auto, IRootScopeService, IScope, ICompileService } from 'angular'; +import $ from 'jquery'; + +import { VisParams, ExprVis } from '../../visualizations/public'; +import { getAngularModule } from './get_inner_angular'; +import { initTableVisLegacyModule } from './table_vis_legacy_module'; + +const innerAngularName = 'kibana/table_vis'; + +export function getTableVisualizationControllerClass( + core: CoreSetup, + context: PluginInitializerContext +) { + return class TableVisualizationController { + private tableVisModule: IModule | undefined; + private injector: auto.IInjectorService | undefined; + el: JQuery; + vis: ExprVis; + $rootScope: IRootScopeService | null = null; + $scope: (IScope & { [key: string]: any }) | undefined; + $compile: ICompileService | undefined; + + constructor(domeElement: Element, vis: ExprVis) { + this.el = $(domeElement); + this.vis = vis; + } + + getInjector() { + if (!this.injector) { + const mountpoint = document.createElement('div'); + mountpoint.setAttribute('style', 'height: 100%; width: 100%;'); + this.injector = angular.bootstrap(mountpoint, [innerAngularName]); + this.el.append(mountpoint); + } + + return this.injector; + } + + async initLocalAngular() { + if (!this.tableVisModule) { + const [coreStart] = await core.getStartServices(); + this.tableVisModule = getAngularModule(innerAngularName, coreStart, context); + initTableVisLegacyModule(this.tableVisModule); + } + } + + async render(esResponse: object, visParams: VisParams) { + await this.initLocalAngular(); + + return new Promise(async (resolve, reject) => { + if (!this.$rootScope) { + const $injector = this.getInjector(); + this.$rootScope = $injector.get('$rootScope'); + this.$compile = $injector.get('$compile'); + } + const updateScope = () => { + if (!this.$scope) { + return; + } + this.$scope.vis = this.vis; + this.$scope.visState = { params: visParams }; + this.$scope.esResponse = esResponse; + + this.$scope.visParams = visParams; + this.$scope.renderComplete = resolve; + this.$scope.renderFailed = reject; + this.$scope.resize = Date.now(); + this.$scope.$apply(); + }; + + if (!this.$scope && this.$compile) { + this.$scope = this.$rootScope.$new(); + this.$scope.uiState = this.vis.getUiState(); + updateScope(); + this.el.find('div').append(this.$compile(this.vis.type!.visConfig.template)(this.$scope)); + this.$scope.$apply(); + } else { + updateScope(); + } + }); + } + + destroy() { + if (this.$rootScope) { + this.$rootScope.$destroy(); + this.$rootScope = null; + } + } + }; +} diff --git a/src/plugins/vis_type_table/server/index.ts b/src/plugins/vis_type_table/server/index.ts new file mode 100644 index 00000000000000..882958a28777d1 --- /dev/null +++ b/src/plugins/vis_type_table/server/index.ts @@ -0,0 +1,34 @@ +/* + * 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 { PluginConfigDescriptor } from 'kibana/server'; + +import { configSchema, ConfigSchema } from '../config'; + +export const config: PluginConfigDescriptor = { + schema: configSchema, + deprecations: ({ renameFromRoot }) => [ + renameFromRoot('table_vis.enabled', 'vis_type_table.enabled'), + ], +}; + +export const plugin = () => ({ + setup() {}, + start() {}, +}); From 1deb5d63eb4c941cc2c318a1417ea0c0efa659d8 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 21 Apr 2020 12:31:05 +0200 Subject: [PATCH 27/39] Move authz lib out of snapshot restore (#63947) Created the first entry for the new __packages_do_no_import__ folder that will house ESUIs private packages. --- .../components/authorization_provider.tsx | 73 +++++++++++++++++++ .../authorization/components/index.ts | 30 ++++++++ .../components/not_authorized_section.tsx | 30 ++++++++ .../components/section_error.tsx | 19 ++++- .../components/with_privileges.tsx | 26 +++++-- .../authorization/index.ts | 30 ++++++++ .../authorization/types.ts | 27 +++++++ .../public/authorization/index.ts | 20 +++++ src/plugins/es_ui_shared/public/index.ts | 12 +++ .../snapshot_restore/common/types/index.ts | 1 - .../common/types/privileges.ts | 14 ---- .../public/application/app.tsx | 15 ++-- .../public/application/app_providers.tsx | 7 +- .../public/application/components/index.ts | 1 - .../policy_form/steps/step_logistics.tsx | 4 +- .../components/repository_form/step_one.tsx | 5 +- .../repository_form/type_settings/index.tsx | 4 +- .../components/authorization_provider.tsx | 47 ------------ .../lib/authorization/components/index.ts | 11 --- .../components/not_authorized_section.tsx | 17 ----- .../application/lib/authorization/index.ts | 7 -- .../policy_details/policy_details.tsx | 3 +- .../sections/home/policy_list/policy_list.tsx | 12 ++- .../policy_list/policy_table/policy_table.tsx | 2 +- .../repository_details/repository_details.tsx | 7 +- .../home/repository_list/repository_list.tsx | 3 +- .../repository_table/repository_table.tsx | 5 +- .../home/restore_list/restore_list.tsx | 11 ++- .../snapshot_details/snapshot_details.tsx | 8 +- .../home/snapshot_list/snapshot_list.tsx | 6 +- .../snapshot_table/snapshot_table.tsx | 2 +- .../sections/policy_add/policy_add.tsx | 6 +- .../sections/policy_edit/policy_edit.tsx | 3 +- .../repository_add/repository_add.tsx | 4 +- .../repository_edit/repository_edit.tsx | 3 +- .../restore_snapshot/restore_snapshot.tsx | 3 +- .../application/services/http/use_request.ts | 5 +- .../snapshot_restore/public/shared_imports.ts | 6 ++ .../snapshot_restore/server/routes/api/app.ts | 5 +- 39 files changed, 335 insertions(+), 159 deletions(-) create mode 100644 src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/authorization_provider.tsx create mode 100644 src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/index.ts create mode 100644 src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/not_authorized_section.tsx rename {x-pack/plugins/snapshot_restore/public/application => src/plugins/es_ui_shared/__packages_do_not_import__/authorization}/components/section_error.tsx (54%) rename {x-pack/plugins/snapshot_restore/public/application/lib => src/plugins/es_ui_shared/__packages_do_not_import__}/authorization/components/with_privileges.tsx (70%) create mode 100644 src/plugins/es_ui_shared/__packages_do_not_import__/authorization/index.ts create mode 100644 src/plugins/es_ui_shared/__packages_do_not_import__/authorization/types.ts create mode 100644 src/plugins/es_ui_shared/public/authorization/index.ts delete mode 100644 x-pack/plugins/snapshot_restore/common/types/privileges.ts delete mode 100644 x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/authorization_provider.tsx delete mode 100644 x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/index.ts delete mode 100644 x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/not_authorized_section.tsx delete mode 100644 x-pack/plugins/snapshot_restore/public/application/lib/authorization/index.ts diff --git a/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/authorization_provider.tsx b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/authorization_provider.tsx new file mode 100644 index 00000000000000..68f1cf2045efb2 --- /dev/null +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/authorization_provider.tsx @@ -0,0 +1,73 @@ +/* + * 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 { HttpSetup } from 'kibana/public'; +import React, { createContext, useContext } from 'react'; + +import { useRequest } from '../../../public'; + +import { Error as CustomError } from './section_error'; + +import { Privileges } from '../types'; + +interface Authorization { + isLoading: boolean; + apiError: CustomError | null; + privileges: Privileges; +} + +const initialValue: Authorization = { + isLoading: true, + apiError: null, + privileges: { + hasAllPrivileges: true, + missingPrivileges: {}, + }, +}; + +export const AuthorizationContext = createContext(initialValue); + +export const useAuthorizationContext = () => { + const ctx = useContext(AuthorizationContext); + if (!ctx) { + throw new Error('AuthorizationContext can only be used inside of AuthorizationProvider!'); + } + return ctx; +}; + +interface Props { + privilegesEndpoint: string; + children: React.ReactNode; + httpClient: HttpSetup; +} + +export const AuthorizationProvider = ({ privilegesEndpoint, httpClient, children }: Props) => { + const { isLoading, error, data: privilegesData } = useRequest(httpClient, { + path: privilegesEndpoint, + method: 'get', + }); + + const value = { + isLoading, + privileges: isLoading ? { hasAllPrivileges: true, missingPrivileges: {} } : privilegesData, + apiError: error ? error : null, + } as Authorization; + + return {children}; +}; diff --git a/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/index.ts b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/index.ts new file mode 100644 index 00000000000000..71be3cc6152ca8 --- /dev/null +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/index.ts @@ -0,0 +1,30 @@ +/* + * 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 { + AuthorizationProvider, + AuthorizationContext, + useAuthorizationContext, +} from './authorization_provider'; + +export { WithPrivileges } from './with_privileges'; + +export { NotAuthorizedSection } from './not_authorized_section'; + +export { Error, SectionError } from './section_error'; diff --git a/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/not_authorized_section.tsx b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/not_authorized_section.tsx new file mode 100644 index 00000000000000..c35f674ef9ec42 --- /dev/null +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/not_authorized_section.tsx @@ -0,0 +1,30 @@ +/* + * 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 { EuiEmptyPrompt } from '@elastic/eui'; + +interface Props { + title: React.ReactNode; + message: React.ReactNode | string; +} + +export const NotAuthorizedSection = ({ title, message }: Props) => ( + {title}} body={

{message}

} /> +); diff --git a/x-pack/plugins/snapshot_restore/public/application/components/section_error.tsx b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/section_error.tsx similarity index 54% rename from x-pack/plugins/snapshot_restore/public/application/components/section_error.tsx rename to src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/section_error.tsx index bd9e48796779e7..3d56309adae97f 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/section_error.tsx +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/section_error.tsx @@ -1,7 +1,20 @@ /* - * 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. + * 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 { EuiCallOut, EuiSpacer } from '@elastic/eui'; diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/with_privileges.tsx b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/with_privileges.tsx similarity index 70% rename from x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/with_privileges.tsx rename to src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/with_privileges.tsx index 223a2882c3cab3..8f4b2b976d1411 100644 --- a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/with_privileges.tsx +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/components/with_privileges.tsx @@ -1,13 +1,25 @@ /* - * 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. + * 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 { useContext } from 'react'; +import { MissingPrivileges } from '../types'; -import { MissingPrivileges } from '../../../../../common/types'; -import { AuthorizationContext } from './authorization_provider'; +import { useAuthorizationContext } from './authorization_provider'; interface Props { /** @@ -29,7 +41,7 @@ const toArray = (value: string | string[]): string[] => Array.isArray(value) ? (value as string[]) : ([value] as string[]); export const WithPrivileges = ({ privileges: requiredPrivileges, children }: Props) => { - const { isLoading, privileges } = useContext(AuthorizationContext); + const { isLoading, privileges } = useAuthorizationContext(); const privilegesToArray: Privilege[] = toArray(requiredPrivileges).map(p => { const [section, privilege] = p.split('.'); diff --git a/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/index.ts b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/index.ts new file mode 100644 index 00000000000000..ad89052b3bb541 --- /dev/null +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/index.ts @@ -0,0 +1,30 @@ +/* + * 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 { + WithPrivileges, + NotAuthorizedSection, + AuthorizationProvider, + AuthorizationContext, + SectionError, + Error, + useAuthorizationContext, +} from './components'; + +export { Privileges, MissingPrivileges } from './types'; diff --git a/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/types.ts b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/types.ts new file mode 100644 index 00000000000000..cdc2052122688a --- /dev/null +++ b/src/plugins/es_ui_shared/__packages_do_not_import__/authorization/types.ts @@ -0,0 +1,27 @@ +/* + * 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 interface MissingPrivileges { + [key: string]: string[] | undefined; +} + +export interface Privileges { + hasAllPrivileges: boolean; + missingPrivileges: MissingPrivileges; +} diff --git a/src/plugins/es_ui_shared/public/authorization/index.ts b/src/plugins/es_ui_shared/public/authorization/index.ts new file mode 100644 index 00000000000000..3a02c0d2694f3d --- /dev/null +++ b/src/plugins/es_ui_shared/public/authorization/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 * from '../../__packages_do_not_import__/authorization'; diff --git a/src/plugins/es_ui_shared/public/index.ts b/src/plugins/es_ui_shared/public/index.ts index a0371bf351193c..7e5510d7c9c651 100644 --- a/src/plugins/es_ui_shared/public/index.ts +++ b/src/plugins/es_ui_shared/public/index.ts @@ -47,6 +47,18 @@ export { expandLiteralStrings, } from './console_lang'; +export { + AuthorizationContext, + AuthorizationProvider, + NotAuthorizedSection, + WithPrivileges, + Privileges, + MissingPrivileges, + SectionError, + Error, + useAuthorizationContext, +} from './authorization'; + /** dummy plugin, we just want esUiShared to have its own bundle */ export function plugin() { return new (class EsUiSharedPlugin { diff --git a/x-pack/plugins/snapshot_restore/common/types/index.ts b/x-pack/plugins/snapshot_restore/common/types/index.ts index 5cb3839fa9e01d..d52584ca737a2a 100644 --- a/x-pack/plugins/snapshot_restore/common/types/index.ts +++ b/x-pack/plugins/snapshot_restore/common/types/index.ts @@ -8,4 +8,3 @@ export * from './repository'; export * from './snapshot'; export * from './restore'; export * from './policy'; -export * from './privileges'; diff --git a/x-pack/plugins/snapshot_restore/common/types/privileges.ts b/x-pack/plugins/snapshot_restore/common/types/privileges.ts deleted file mode 100644 index bf710b8225599e..00000000000000 --- a/x-pack/plugins/snapshot_restore/common/types/privileges.ts +++ /dev/null @@ -1,14 +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 interface MissingPrivileges { - [key: string]: string[] | undefined; -} - -export interface Privileges { - hasAllPrivileges: boolean; - missingPrivileges: MissingPrivileges; -} diff --git a/x-pack/plugins/snapshot_restore/public/application/app.tsx b/x-pack/plugins/snapshot_restore/public/application/app.tsx index 77ef697814b2c4..350d8aec711edf 100644 --- a/x-pack/plugins/snapshot_restore/public/application/app.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/app.tsx @@ -4,13 +4,19 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useContext } from 'react'; +import React from 'react'; import { Redirect, Route, Switch } from 'react-router-dom'; import { EuiPageContent } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { APP_REQUIRED_CLUSTER_PRIVILEGES } from '../../common/constants'; -import { SectionLoading, SectionError } from './components'; +import { APP_REQUIRED_CLUSTER_PRIVILEGES } from '../../common'; +import { + useAuthorizationContext, + SectionError, + WithPrivileges, + NotAuthorizedSection, +} from '../shared_imports'; +import { SectionLoading } from './components'; import { BASE_PATH, DEFAULT_SECTION, Section } from './constants'; import { RepositoryAdd, @@ -21,11 +27,10 @@ import { PolicyEdit, } from './sections'; import { useConfig } from './app_context'; -import { AuthorizationContext, WithPrivileges, NotAuthorizedSection } from './lib/authorization'; export const App: React.FunctionComponent = () => { const { slm_ui: slmUi } = useConfig(); - const { apiError } = useContext(AuthorizationContext); + const { apiError } = useAuthorizationContext(); const sections: Section[] = ['repositories', 'snapshots', 'restore_status']; diff --git a/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx b/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx index e2732c0051337a..3ca25b7d32dba7 100644 --- a/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/app_providers.tsx @@ -5,8 +5,8 @@ */ import React from 'react'; -import { API_BASE_PATH } from '../../common/constants'; -import { AuthorizationProvider } from './lib/authorization'; +import { API_BASE_PATH } from '../../common'; +import { AuthorizationProvider } from '../shared_imports'; import { AppContextProvider, AppDependencies } from './app_context'; interface Props { @@ -18,10 +18,11 @@ export const AppProviders = ({ appDependencies, children }: Props) => { const { core } = appDependencies; const { i18n: { Context: I18nContext }, + http, } = core; return ( - + {children} diff --git a/x-pack/plugins/snapshot_restore/public/application/components/index.ts b/x-pack/plugins/snapshot_restore/public/application/components/index.ts index a7038ebd715785..f5bb8923898702 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/index.ts +++ b/x-pack/plugins/snapshot_restore/public/application/components/index.ts @@ -10,7 +10,6 @@ export { RepositoryDeleteProvider } from './repository_delete_provider'; export { RepositoryForm } from './repository_form'; export { RepositoryVerificationBadge } from './repository_verification_badge'; export { RepositoryTypeLogo } from './repository_type_logo'; -export { SectionError, Error } from './section_error'; export { SectionLoading } from './section_loading'; export { SnapshotDeleteProvider } from './snapshot_delete_provider'; export { RestoreSnapshotForm } from './restore_snapshot_form'; diff --git a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx index f2d4e2bd74598f..105f0601e3dfbb 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/policy_form/steps/step_logistics.tsx @@ -21,13 +21,13 @@ import { } from '@elastic/eui'; import { Repository } from '../../../../../common/types'; -import { CronEditor } from '../../../../shared_imports'; +import { CronEditor, SectionError } from '../../../../shared_imports'; import { useServices } from '../../../app_context'; import { DEFAULT_POLICY_SCHEDULE, DEFAULT_POLICY_FREQUENCY } from '../../../constants'; import { useLoadRepositories } from '../../../services/http'; import { linkToAddRepository } from '../../../services/navigation'; import { documentationLinksService } from '../../../services/documentation'; -import { SectionLoading, SectionError } from '../../'; +import { SectionLoading } from '../../'; import { StepProps } from './'; export const PolicyStepLogistics: React.FunctionComponent = ({ diff --git a/x-pack/plugins/snapshot_restore/public/application/components/repository_form/step_one.tsx b/x-pack/plugins/snapshot_restore/public/application/components/repository_form/step_one.tsx index 3b4c9d595b9f28..34bc06343a780a 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/repository_form/step_one.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/repository_form/step_one.tsx @@ -23,13 +23,14 @@ import { } from '@elastic/eui'; import { Repository, RepositoryType, EmptyRepository } from '../../../../common/types'; -import { REPOSITORY_TYPES } from '../../../../common/constants'; +import { REPOSITORY_TYPES } from '../../../../common'; +import { SectionError, Error } from '../../../shared_imports'; import { documentationLinksService } from '../../services/documentation'; import { useLoadRepositoryTypes } from '../../services/http'; import { textService } from '../../services/text'; import { RepositoryValidation } from '../../services/validation'; -import { SectionError, SectionLoading, RepositoryTypeLogo, Error } from '../'; +import { SectionLoading, RepositoryTypeLogo } from '../'; interface Props { repository: Repository | EmptyRepository; diff --git a/x-pack/plugins/snapshot_restore/public/application/components/repository_form/type_settings/index.tsx b/x-pack/plugins/snapshot_restore/public/application/components/repository_form/type_settings/index.tsx index 75295a1205cef9..1e54868397a6da 100644 --- a/x-pack/plugins/snapshot_restore/public/application/components/repository_form/type_settings/index.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/components/repository_form/type_settings/index.tsx @@ -6,11 +6,11 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; -import { REPOSITORY_TYPES } from '../../../../../common/constants'; +import { REPOSITORY_TYPES } from '../../../../../common'; import { Repository, RepositoryType, EmptyRepository } from '../../../../../common/types'; +import { SectionError } from '../../../../shared_imports'; import { useServices } from '../../../app_context'; import { RepositorySettingsValidation } from '../../../services/validation'; -import { SectionError } from '../../index'; import { AzureSettings } from './azure_settings'; import { FSSettings } from './fs_settings'; diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/authorization_provider.tsx b/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/authorization_provider.tsx deleted file mode 100644 index d32fe29cc1dfa4..00000000000000 --- a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/authorization_provider.tsx +++ /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 React, { createContext } from 'react'; -import { useRequest } from '../../../services/http/use_request'; -import { Privileges } from '../../../../../common/types'; -import { Error } from '../../../components/section_error'; - -interface Authorization { - isLoading: boolean; - apiError: Error | null; - privileges: Privileges; -} - -const initialValue: Authorization = { - isLoading: true, - apiError: null, - privileges: { - hasAllPrivileges: true, - missingPrivileges: {}, - }, -}; - -export const AuthorizationContext = createContext(initialValue); - -interface Props { - privilegesEndpoint: string; - children: React.ReactNode; -} - -export const AuthorizationProvider = ({ privilegesEndpoint, children }: Props) => { - const { isLoading, error, data: privilegesData } = useRequest({ - path: privilegesEndpoint, - method: 'get', - }); - - const value = { - isLoading, - privileges: isLoading ? { hasAllPrivileges: true, missingPrivileges: {} } : privilegesData, - apiError: error ? error : null, - } as Authorization; - - return {children}; -}; diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/index.ts b/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/index.ts deleted file mode 100644 index ac77aa52686602..00000000000000 --- a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/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 { AuthorizationProvider, AuthorizationContext } from './authorization_provider'; - -export { WithPrivileges } from './with_privileges'; - -export { NotAuthorizedSection } from './not_authorized_section'; diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/not_authorized_section.tsx b/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/not_authorized_section.tsx deleted file mode 100644 index 3fc13245708e85..00000000000000 --- a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/components/not_authorized_section.tsx +++ /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 React from 'react'; -import { EuiEmptyPrompt } from '@elastic/eui'; - -interface Props { - title: React.ReactNode; - message: React.ReactNode | string; -} - -export const NotAuthorizedSection = ({ title, message }: Props) => ( - {title}} body={

{message}

} /> -); diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/index.ts b/x-pack/plugins/snapshot_restore/public/application/lib/authorization/index.ts deleted file mode 100644 index 73bbde465146c0..00000000000000 --- a/x-pack/plugins/snapshot_restore/public/application/lib/authorization/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 './components'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_details/policy_details.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_details/policy_details.tsx index f3110199ee17c6..03d381c9f3aa3d 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_details/policy_details.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_details/policy_details.tsx @@ -26,6 +26,7 @@ import { import { SlmPolicy } from '../../../../../../common/types'; import { useServices } from '../../../../app_context'; +import { SectionError, Error } from '../../../../../shared_imports'; import { UIM_POLICY_DETAIL_PANEL_SUMMARY_TAB, UIM_POLICY_DETAIL_PANEL_HISTORY_TAB, @@ -34,11 +35,9 @@ import { useLoadPolicy } from '../../../../services/http'; import { linkToEditPolicy, linkToSnapshot } from '../../../../services/navigation'; import { - SectionError, SectionLoading, PolicyExecuteProvider, PolicyDeleteProvider, - Error, } from '../../../../components'; import { TabSummary, TabHistory } from './tabs'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index 0122e25e5e1657..51297038b0f3fa 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -9,13 +9,19 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { RouteComponentProps } from 'react-router-dom'; import { EuiEmptyPrompt, EuiButton, EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { + SectionError, + Error, + WithPrivileges, + NotAuthorizedSection, +} from '../../../../shared_imports'; + import { SlmPolicy } from '../../../../../common/types'; -import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common/constants'; -import { SectionError, SectionLoading, Error } from '../../../components'; +import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common'; +import { SectionLoading } from '../../../components'; import { BASE_PATH, UIM_POLICY_LIST_LOAD } from '../../../constants'; import { useLoadPolicies, useLoadRetentionSettings } from '../../../services/http'; import { linkToAddPolicy, linkToPolicy } from '../../../services/navigation'; -import { WithPrivileges, NotAuthorizedSection } from '../../../lib/authorization'; import { useServices } from '../../../app_context'; import { PolicyDetails } from './policy_details'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_table/policy_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_table/policy_table.tsx index 7f9c5c5af7705c..ba28bcddf53470 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_table/policy_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_table/policy_table.tsx @@ -21,6 +21,7 @@ import { } from '@elastic/eui'; import { SlmPolicy } from '../../../../../../common/types'; +import { Error } from '../../../../../shared_imports'; import { UIM_POLICY_SHOW_DETAILS_CLICK } from '../../../../constants'; import { useServices } from '../../../../app_context'; import { @@ -28,7 +29,6 @@ import { PolicyExecuteProvider, PolicyDeleteProvider, } from '../../../../components'; -import { Error } from '../../../../components/section_error'; import { linkToAddPolicy, linkToEditPolicy } from '../../../../services/navigation'; import { SendRequestResponse } from '../../../../../shared_imports'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_details/repository_details.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_details/repository_details.tsx index d293f194f647a0..9932f146640760 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_details/repository_details.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_details/repository_details.tsx @@ -25,6 +25,8 @@ import { import 'brace/theme/textmate'; +import { SectionError, Error } from '../../../../../shared_imports'; + import { useServices } from '../../../../app_context'; import { documentationLinksService } from '../../../../services/documentation'; import { @@ -35,7 +37,8 @@ import { import { textService } from '../../../../services/text'; import { linkToSnapshots, linkToEditRepository } from '../../../../services/navigation'; -import { REPOSITORY_TYPES } from '../../../../../../common/constants'; +import { REPOSITORY_TYPES } from '../../../../../../common'; + import { Repository, RepositoryVerification, @@ -43,10 +46,8 @@ import { } from '../../../../../../common/types'; import { RepositoryDeleteProvider, - SectionError, SectionLoading, RepositoryVerificationBadge, - Error, } from '../../../../components'; import { TypeDetails } from './type_details'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_list.tsx index 6fa12537e9d6f8..2256fa5991decf 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_list.tsx @@ -10,7 +10,8 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; import { Repository } from '../../../../../common/types'; -import { SectionError, SectionLoading, Error } from '../../../components'; +import { SectionError, Error } from '../../../../shared_imports'; +import { SectionLoading } from '../../../components'; import { BASE_PATH, UIM_REPOSITORY_LIST_LOAD } from '../../../constants'; import { useServices } from '../../../app_context'; import { useLoadRepositories } from '../../../services/http'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_table/repository_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_table/repository_table.tsx index 7c0438f6b837fa..bf2643d78bca16 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_table/repository_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/repository_list/repository_table/repository_table.tsx @@ -15,15 +15,14 @@ import { EuiIconTip, } from '@elastic/eui'; -import { REPOSITORY_TYPES } from '../../../../../../common/constants'; +import { REPOSITORY_TYPES } from '../../../../../../common'; import { Repository, RepositoryType } from '../../../../../../common/types'; -import { Error } from '../../../../components/section_error'; +import { Error, SendRequestResponse } from '../../../../../shared_imports'; import { RepositoryDeleteProvider } from '../../../../components'; import { UIM_REPOSITORY_SHOW_DETAILS_CLICK } from '../../../../constants'; import { useServices } from '../../../../app_context'; import { textService } from '../../../../services/text'; import { linkToEditRepository, linkToAddRepository } from '../../../../services/navigation'; -import { SendRequestResponse } from '../../../../../shared_imports'; interface Props { repositories: Repository[]; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/restore_list/restore_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/restore_list/restore_list.tsx index da9ce3b124a11a..0e3d9363d05359 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/restore_list/restore_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/restore_list/restore_list.tsx @@ -18,14 +18,19 @@ import { EuiLoadingSpinner, EuiLink, } from '@elastic/eui'; -import { APP_RESTORE_INDEX_PRIVILEGES } from '../../../../../common/constants'; -import { SectionError, SectionLoading, Error } from '../../../components'; +import { APP_RESTORE_INDEX_PRIVILEGES } from '../../../../../common'; +import { + WithPrivileges, + NotAuthorizedSection, + SectionError, + Error, +} from '../../../../shared_imports'; +import { SectionLoading } from '../../../components'; import { UIM_RESTORE_LIST_LOAD } from '../../../constants'; import { useLoadRestores } from '../../../services/http'; import { linkToSnapshots } from '../../../services/navigation'; import { useServices } from '../../../app_context'; import { RestoreTable } from './restore_table'; -import { WithPrivileges, NotAuthorizedSection } from '../../../lib/authorization'; const ONE_SECOND_MS = 1000; const TEN_SECONDS_MS = 10 * 1000; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/snapshot_details.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/snapshot_details.tsx index d16545debe1ecf..1943762a3c36e9 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/snapshot_details.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/snapshot_details.tsx @@ -23,12 +23,8 @@ import React, { Fragment, useState, useEffect } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { SnapshotDetails as ISnapshotDetails } from '../../../../../../common/types'; -import { - SectionError, - SectionLoading, - SnapshotDeleteProvider, - Error, -} from '../../../../components'; +import { SectionError, Error } from '../../../../../shared_imports'; +import { SectionLoading, SnapshotDeleteProvider } from '../../../../components'; import { useServices } from '../../../../app_context'; import { UIM_SNAPSHOT_DETAIL_PANEL_SUMMARY_TAB, diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_list.tsx index fe99ccb6f596c8..30e4c771644bc0 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_list.tsx @@ -10,10 +10,10 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { RouteComponentProps } from 'react-router-dom'; import { EuiButton, EuiCallOut, EuiLink, EuiEmptyPrompt, EuiSpacer, EuiIcon } from '@elastic/eui'; -import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common/constants'; -import { SectionError, SectionLoading, Error } from '../../../components'; +import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common'; +import { WithPrivileges, SectionError, Error } from '../../../../shared_imports'; +import { SectionLoading } from '../../../components'; import { BASE_PATH, UIM_SNAPSHOT_LIST_LOAD } from '../../../constants'; -import { WithPrivileges } from '../../../lib/authorization'; import { documentationLinksService } from '../../../services/documentation'; import { useLoadSnapshots } from '../../../services/http'; import { diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_table/snapshot_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_table/snapshot_table.tsx index ad64dcc7adcfee..427c241970007e 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_table/snapshot_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_table/snapshot_table.tsx @@ -17,10 +17,10 @@ import { } from '@elastic/eui'; import { SnapshotDetails } from '../../../../../../common/types'; +import { Error } from '../../../../../shared_imports'; import { SNAPSHOT_STATE, UIM_SNAPSHOT_SHOW_DETAILS_CLICK } from '../../../../constants'; import { useServices } from '../../../../app_context'; import { linkToRepository, linkToRestoreSnapshot } from '../../../../services/navigation'; -import { Error } from '../../../../components/section_error'; import { DataPlaceholder, FormattedDateTime, SnapshotDeleteProvider } from '../../../../components'; import { SendRequestResponse } from '../../../../../shared_imports'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/policy_add/policy_add.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/policy_add/policy_add.tsx index 4eb0f54978d094..6d1a432be7f9f0 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/policy_add/policy_add.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/policy_add/policy_add.tsx @@ -9,9 +9,11 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiPageBody, EuiPageContent, EuiSpacer, EuiTitle } from '@elastic/eui'; import { SlmPolicyPayload } from '../../../../common/types'; -import { TIME_UNITS } from '../../../../common/constants'; +import { TIME_UNITS } from '../../../../common'; -import { PolicyForm, SectionError, SectionLoading, Error } from '../../components'; +import { SectionError, Error } from '../../../shared_imports'; + +import { PolicyForm, SectionLoading } from '../../components'; import { BASE_PATH, DEFAULT_POLICY_SCHEDULE } from '../../constants'; import { breadcrumbService, docTitleService } from '../../services/navigation'; import { addPolicy, useLoadIndices } from '../../services/http'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/policy_edit/policy_edit.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/policy_edit/policy_edit.tsx index 9ca7eba5c4eebb..0f1473fc054925 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/policy_edit/policy_edit.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/policy_edit/policy_edit.tsx @@ -9,8 +9,9 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiPageBody, EuiPageContent, EuiSpacer, EuiTitle, EuiCallOut } from '@elastic/eui'; import { SlmPolicyPayload } from '../../../../common/types'; +import { SectionError, Error } from '../../../shared_imports'; import { TIME_UNITS } from '../../../../common/constants'; -import { SectionError, SectionLoading, PolicyForm, Error } from '../../components'; +import { SectionLoading, PolicyForm } from '../../components'; import { BASE_PATH } from '../../constants'; import { useServices } from '../../app_context'; import { breadcrumbService, docTitleService } from '../../services/navigation'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/repository_add/repository_add.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/repository_add/repository_add.tsx index 126e04bc7dc1d7..08bfde833c3688 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/repository_add/repository_add.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/repository_add/repository_add.tsx @@ -12,7 +12,9 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiPageBody, EuiPageContent, EuiSpacer, EuiTitle } from '@elastic/eui'; import { Repository, EmptyRepository } from '../../../../common/types'; -import { RepositoryForm, SectionError } from '../../components'; +import { SectionError } from '../../../shared_imports'; + +import { RepositoryForm } from '../../components'; import { BASE_PATH, Section } from '../../constants'; import { breadcrumbService, docTitleService } from '../../services/navigation'; import { addRepository } from '../../services/http'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/repository_edit/repository_edit.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/repository_edit/repository_edit.tsx index aa29b8b9f05518..95f8b9b8bde7d0 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/repository_edit/repository_edit.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/repository_edit/repository_edit.tsx @@ -10,7 +10,8 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiCallOut, EuiPageBody, EuiPageContent, EuiSpacer, EuiTitle } from '@elastic/eui'; import { Repository, EmptyRepository } from '../../../../common/types'; -import { RepositoryForm, SectionError, SectionLoading, Error } from '../../components'; +import { SectionError, Error } from '../../../shared_imports'; +import { RepositoryForm, SectionLoading } from '../../components'; import { BASE_PATH, Section } from '../../constants'; import { useServices } from '../../app_context'; import { breadcrumbService, docTitleService } from '../../services/navigation'; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/restore_snapshot/restore_snapshot.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/restore_snapshot/restore_snapshot.tsx index 252fd07a85f800..9eabed8341ee02 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/restore_snapshot/restore_snapshot.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/restore_snapshot/restore_snapshot.tsx @@ -9,8 +9,9 @@ import { RouteComponentProps } from 'react-router-dom'; import { EuiPageBody, EuiPageContent, EuiSpacer, EuiTitle } from '@elastic/eui'; import { SnapshotDetails, RestoreSettings } from '../../../../common/types'; +import { SectionError, Error } from '../../../shared_imports'; import { BASE_PATH } from '../../constants'; -import { SectionError, SectionLoading, RestoreSnapshotForm, Error } from '../../components'; +import { SectionLoading, RestoreSnapshotForm } from '../../components'; import { useServices } from '../../app_context'; import { breadcrumbService, docTitleService } from '../../services/navigation'; import { useLoadSnapshot, executeRestore } from '../../services/http'; diff --git a/x-pack/plugins/snapshot_restore/public/application/services/http/use_request.ts b/x-pack/plugins/snapshot_restore/public/application/services/http/use_request.ts index 200d601fd2ce98..27a565ccb74bc9 100644 --- a/x-pack/plugins/snapshot_restore/public/application/services/http/use_request.ts +++ b/x-pack/plugins/snapshot_restore/public/application/services/http/use_request.ts @@ -9,11 +9,10 @@ import { UseRequestConfig, sendRequest as _sendRequest, useRequest as _useRequest, + Error as CustomError, } from '../../../shared_imports'; -import { Error as CustomError } from '../../components/section_error'; - -import { httpService } from './index'; +import { httpService } from '.'; export const sendRequest = (config: SendRequestConfig) => { return _sendRequest(httpService.httpClient, config); diff --git a/x-pack/plugins/snapshot_restore/public/shared_imports.ts b/x-pack/plugins/snapshot_restore/public/shared_imports.ts index 7e7ef09d0c09dc..e0024ea8e0c126 100644 --- a/x-pack/plugins/snapshot_restore/public/shared_imports.ts +++ b/x-pack/plugins/snapshot_restore/public/shared_imports.ts @@ -12,4 +12,10 @@ export { useRequest, CronEditor, DAY, + SectionError, + Error, + WithPrivileges, + useAuthorizationContext, + NotAuthorizedSection, + AuthorizationProvider, } from '../../../../src/plugins/es_ui_shared/public'; diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/app.ts b/x-pack/plugins/snapshot_restore/server/routes/api/app.ts index 5d334fddc144bc..bda64fdb665714 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/app.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/app.ts @@ -3,12 +3,13 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { Privileges } from '../../../common/types'; +import { Privileges } from '../../../../../../src/plugins/es_ui_shared/public'; + import { APP_REQUIRED_CLUSTER_PRIVILEGES, APP_RESTORE_INDEX_PRIVILEGES, APP_SLM_CLUSTER_PRIVILEGES, -} from '../../../common/constants'; +} from '../../../common'; import { RouteDependencies } from '../../types'; import { addBasePath } from '../helpers'; From 02d55db6cdeec7d7e60a4f12e9a3c2d98f39e460 Mon Sep 17 00:00:00 2001 From: Gidi Meir Morris Date: Tue, 21 Apr 2020 12:32:14 +0100 Subject: [PATCH 28/39] [Alerting] Improve validation and errors handling in PagerDuty action (#63954) Improves the messaging when the Pager Duty action has trouble parsing the timestamp field and adds trimming on the timestamp's field to make us more flexible in handling the parsing and hence more likely to be forgiving of the input by the user. As the timestamp relies on context variables provided via mustcahe templates, we can't reliably validate this field at alert creation time. We address by: 1. Trimming the edges, which is required when parsing a date, should help prevent accidental spaces from breaking the parsing. 2. Checking for a mustache template on the client side and if there are none - we validate for a valid timestamp when the action is created. --- .../builtin_action_types/pagerduty.test.ts | 19 ++++++++++ .../server/builtin_action_types/pagerduty.ts | 24 ++++++++----- .../builtin_action_types/pagerduty.test.tsx | 7 ++-- .../builtin_action_types/pagerduty.tsx | 36 ++++++++++++++++++- .../lib/has_mustache_tokens.test.ts | 23 ++++++++++++ .../application/lib/has_mustache_tokens.ts | 9 +++++ 6 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.ts diff --git a/x-pack/plugins/actions/server/builtin_action_types/pagerduty.test.ts b/x-pack/plugins/actions/server/builtin_action_types/pagerduty.test.ts index 514c9759d7b568..e5521558bc2da8 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/pagerduty.test.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/pagerduty.test.ts @@ -142,6 +142,25 @@ describe('validateParams()', () => { - [eventAction.2]: expected value to equal [acknowledge]" `); }); + + test('should validate and throw error when timestamp has spaces', () => { + const randoDate = new Date('1963-09-23T01:23:45Z').toISOString(); + const timestamp = ` ${randoDate}`; + expect(() => { + validateParams(actionType, { + timestamp, + }); + }).toThrowError(`error validating action params: error parsing timestamp "${timestamp}"`); + }); + + test('should validate and throw error when timestamp is invalid', () => { + const timestamp = `1963-09-55 90:23:45`; + expect(() => { + validateParams(actionType, { + timestamp, + }); + }).toThrowError(`error validating action params: error parsing timestamp "${timestamp}"`); + }); }); describe('execute()', () => { diff --git a/x-pack/plugins/actions/server/builtin_action_types/pagerduty.ts b/x-pack/plugins/actions/server/builtin_action_types/pagerduty.ts index 2b607d0dd41bac..f4d69a4a39e40e 100644 --- a/x-pack/plugins/actions/server/builtin_action_types/pagerduty.ts +++ b/x-pack/plugins/actions/server/builtin_action_types/pagerduty.ts @@ -70,18 +70,26 @@ const ParamsSchema = schema.object( function validateParams(paramsObject: any): string | void { const params: ActionParamsType = paramsObject; - const { timestamp } = params; if (timestamp != null) { - let date; try { - date = Date.parse(timestamp); + const date = Date.parse(timestamp); + if (isNaN(date)) { + return i18n.translate('xpack.actions.builtin.pagerduty.invalidTimestampErrorMessage', { + defaultMessage: `error parsing timestamp "{timestamp}"`, + values: { + timestamp, + }, + }); + } } catch (err) { - return 'error parsing timestamp: ${err.message}'; - } - - if (isNaN(date)) { - return 'error parsing timestamp'; + return i18n.translate('xpack.actions.builtin.pagerduty.timestampParsingFailedErrorMessage', { + defaultMessage: `error parsing timestamp "{timestamp}": {message}`, + values: { + timestamp, + message: err.message, + }, + }); } } } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.test.tsx index 7da97b9fe34360..1c9e87310107fc 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.test.tsx @@ -90,7 +90,7 @@ describe('pagerduty action params validation', () => { summary: '2323', source: 'source', severity: 'critical', - timestamp: '234654564654', + timestamp: new Date().toISOString(), component: 'test', group: 'group', class: 'test class', @@ -99,6 +99,7 @@ describe('pagerduty action params validation', () => { expect(actionTypeModel.validateParams(actionParams)).toEqual({ errors: { summary: [], + timestamp: [], }, }); }); @@ -156,7 +157,7 @@ describe('PagerDutyParamsFields renders', () => { summary: '2323', source: 'source', severity: SeverityActionOptions.CRITICAL, - timestamp: '234654564654', + timestamp: new Date().toISOString(), component: 'test', group: 'group', class: 'test class', @@ -164,7 +165,7 @@ describe('PagerDutyParamsFields renders', () => { const wrapper = mountWithIntl( {}} index={0} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.tsx index d99362c6183565..15f91ae1d46094 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty.tsx @@ -14,6 +14,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; +import moment from 'moment'; import { ActionTypeModel, ActionConnectorFieldsProps, @@ -23,6 +24,7 @@ import { import { PagerDutyActionParams, PagerDutyActionConnector } from './types'; import pagerDutySvg from './pagerduty.svg'; import { AddMessageVariables } from '../add_message_variables'; +import { hasMustacheTokens } from '../../lib/has_mustache_tokens'; export function getActionType(): ActionTypeModel { return { @@ -62,6 +64,7 @@ export function getActionType(): ActionTypeModel { const validationResult = { errors: {} }; const errors = { summary: new Array(), + timestamp: new Array(), }; validationResult.errors = errors; if (!actionParams.summary?.length) { @@ -74,6 +77,24 @@ export function getActionType(): ActionTypeModel { ) ); } + if (actionParams.timestamp && !hasMustacheTokens(actionParams.timestamp)) { + if (isNaN(Date.parse(actionParams.timestamp))) { + const { nowShortFormat, nowLongFormat } = getValidTimestampExamples(); + errors.timestamp.push( + i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.pagerDutyAction.error.invalidTimestamp', + { + defaultMessage: + 'Timestamp must be a valid date, such as {nowShortFormat} or {nowLongFormat}.', + values: { + nowShortFormat, + nowLongFormat, + }, + } + ) + ); + } + } return validationResult; }, actionConnectorFields: PagerDutyActionConnectorFields, @@ -334,6 +355,8 @@ const PagerDutyParamsFields: React.FunctionComponent 0 && timestamp !== undefined} label={i18n.translate( 'xpack.triggersActionsUI.components.builtinActionTypes.pagerDutyAction.timestampTextFieldLabel', { @@ -355,11 +378,14 @@ const PagerDutyParamsFields: React.FunctionComponent 0 && timestamp !== undefined} onChange={(e: React.ChangeEvent) => { editAction('timestamp', e.target.value, index); }} onBlur={() => { - if (!timestamp) { + if (timestamp?.trim()) { + editAction('timestamp', timestamp.trim(), index); + } else { editAction('timestamp', '', index); } }} @@ -534,3 +560,11 @@ const PagerDutyParamsFields: React.FunctionComponent ); }; + +function getValidTimestampExamples() { + const now = moment(); + return { + nowShortFormat: now.format('YYYY-MM-DD'), + nowLongFormat: now.format('YYYY-MM-DD h:mm:ss'), + }; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.test.ts new file mode 100644 index 00000000000000..db4f9fa7991706 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.test.ts @@ -0,0 +1,23 @@ +/* + * 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 uuid from 'uuid'; + +import { hasMustacheTokens } from './has_mustache_tokens'; + +describe('hasMustacheTokens', () => { + test('returns false for empty string', () => { + expect(hasMustacheTokens('')).toBe(false); + }); + + test('returns false for string without tokens', () => { + expect(hasMustacheTokens(`some random string ${uuid.v4()}`)).toBe(false); + }); + + test('returns true when a template token is present', () => { + expect(hasMustacheTokens('{{context.timestamp}}')).toBe(true); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.ts new file mode 100644 index 00000000000000..4dcd8113d51fca --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/has_mustache_tokens.ts @@ -0,0 +1,9 @@ +/* + * 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 function hasMustacheTokens(str: string): boolean { + return null !== str.match(/{{.*}}/); +} From 3b1d0e0c6b5a2b10151858a4e32f2277ea3b038d Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Tue, 21 Apr 2020 13:53:17 +0200 Subject: [PATCH 29/39] [State Management] ScopedHistory support for state syncing utils (#62761) The needed change is to rely on history as source of truth for location instead of window.location. btw, This makes possible to test state syncing utils integration using createMemoryHistory() One issue was discovered after this change: When switching from context to discover url was incorrect. history.location inside state syncing utils didn't get the last update. This happened, because history instance created in discover wasn't used in context app and when all listeners unsubscribed from it - it stopped receiving location updates. To fix this I just reused one history instance in discover, context and their kbnUrlTracker --- .../public/todo/app.tsx | 12 +- .../public/todo/todo.tsx | 10 +- .../public/with_data_services/application.tsx | 4 +- .../kibana/public/discover/build_services.ts | 10 +- .../kibana/public/discover/kibana_services.ts | 6 + .../discover/np_ready/angular/context.js | 1 + .../np_ready/angular/context_state.ts | 8 +- .../discover/np_ready/angular/discover.js | 5 +- .../sidebar/discover_field.test.tsx | 4 +- .../sidebar/discover_sidebar.test.tsx | 4 +- .../sidebar/lib/visualize_url_utils.ts | 2 +- .../kibana/public/discover/plugin.ts | 8 +- .../url/kbn_url_storage.test.ts | 46 ++++- .../state_management/url/kbn_url_storage.ts | 9 +- .../state_management/url/kbn_url_tracker.ts | 9 +- .../public/state_management/url/parse.ts | 5 +- .../create_kbn_url_state_storage.test.ts | 75 +++++++ test/examples/config.js | 1 + test/examples/state_sync/index.ts | 39 ++++ test/examples/state_sync/todo_app.ts | 189 ++++++++++++++++++ 20 files changed, 403 insertions(+), 44 deletions(-) create mode 100644 test/examples/state_sync/index.ts create mode 100644 test/examples/state_sync/todo_app.ts diff --git a/examples/state_containers_examples/public/todo/app.tsx b/examples/state_containers_examples/public/todo/app.tsx index 319680d07f9bc8..f2183613e4a12c 100644 --- a/examples/state_containers_examples/public/todo/app.tsx +++ b/examples/state_containers_examples/public/todo/app.tsx @@ -20,7 +20,7 @@ import { AppMountParameters } from 'kibana/public'; import ReactDOM from 'react-dom'; import React from 'react'; -import { createHashHistory, createBrowserHistory } from 'history'; +import { createHashHistory } from 'history'; import { TodoAppPage } from './todo'; export interface AppOptions { @@ -35,13 +35,10 @@ export enum History { } export const renderApp = ( - { appBasePath, element }: AppMountParameters, + { appBasePath, element, history: platformHistory }: AppMountParameters, { appInstanceId, appTitle, historyType }: AppOptions ) => { - const history = - historyType === History.Browser - ? createBrowserHistory({ basename: appBasePath }) - : createHashHistory(); + const history = historyType === History.Browser ? platformHistory : createHashHistory(); ReactDOM.render( = ({ filter }) => { return ( <>
- + All - + Completed - + Not Completed @@ -121,6 +124,7 @@ const TodoApp: React.FC = ({ filter }) => { }); }} label={todo.text} + data-test-subj={`todoCheckbox-${todo.id}`} /> { - const history = createBrowserHistory({ basename: appBasePath }); const kbnUrlStateStorage = createKbnUrlStateStorage({ useHash: false, history }); ReactDOM.render( diff --git a/src/legacy/core_plugins/kibana/public/discover/build_services.ts b/src/legacy/core_plugins/kibana/public/discover/build_services.ts index a3a99a0ded523c..c56e50f3b27ffe 100644 --- a/src/legacy/core_plugins/kibana/public/discover/build_services.ts +++ b/src/legacy/core_plugins/kibana/public/discover/build_services.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { createHashHistory, History } from 'history'; +import { History } from 'history'; import { Capabilities, @@ -51,7 +51,7 @@ export interface DiscoverServices { data: DataPublicPluginStart; docLinks: DocLinksStart; DocViewer: DocViewerComponent; - history: History; + history: () => History; theme: ChartsPluginStart['theme']; filterManager: FilterManager; indexPatterns: IndexPatternsContract; @@ -67,7 +67,8 @@ export interface DiscoverServices { } export async function buildServices( core: CoreStart, - plugins: DiscoverStartPlugins + plugins: DiscoverStartPlugins, + getHistory: () => History ): Promise { const services = { savedObjectsClient: core.savedObjects.client, @@ -77,6 +78,7 @@ export async function buildServices( overlays: core.overlays, }; const savedObjectService = createSavedSearchesLoader(services); + return { addBasePath: core.http.basePath.prepend, capabilities: core.application.capabilities, @@ -85,11 +87,11 @@ export async function buildServices( data: plugins.data, docLinks: core.docLinks, DocViewer: plugins.discover.docViews.DocViewer, - history: createHashHistory(), theme: plugins.charts.theme, filterManager: plugins.data.query.filterManager, getSavedSearchById: async (id: string) => savedObjectService.get(id), getSavedSearchUrlById: async (id: string) => savedObjectService.urlFor(id), + history: getHistory, indexPatterns: plugins.data.indexPatterns, inspector: plugins.inspector, // @ts-ignore diff --git a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts index 0a81ca0222b0a0..156267bdfa87e0 100644 --- a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts +++ b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +import { createHashHistory } from 'history'; import { DiscoverServices } from './build_services'; import { createGetterSetter } from '../../../../../plugins/kibana_utils/public'; import { search } from '../../../../../plugins/data/public'; @@ -52,6 +53,11 @@ export const [getUrlTracker, setUrlTracker] = createGetterSetter<{ setTrackedUrl: (url: string) => void; }>('urlTracker'); +/** + * Makes sure discover and context are using one instance of history + */ +export const getHistory = _.once(() => createHashHistory()); + export const { getRequestInspectorStats, getResponseInspectorStats, tabifyAggResponse } = search; export { unhashUrl, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context.js index 5b03b313e4e3e6..032ec7af09a301 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context.js @@ -81,6 +81,7 @@ function ContextAppRouteController($routeParams, $scope, $route) { defaultStepSize: getServices().uiSettings.get('context:defaultSize'), timeFieldName: indexPattern.timeFieldName, storeInSessionStorage: getServices().uiSettings.get('state:storeInSessionStorage'), + history: getServices().history(), }); this.state = { ...appState.getState() }; this.anchorId = $routeParams.id; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_state.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_state.ts index ed59143b163f69..b46995d44d826d 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_state.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context_state.ts @@ -17,7 +17,7 @@ * under the License. */ import _ from 'lodash'; -import { createBrowserHistory, History } from 'history'; +import { History } from 'history'; import { createStateContainer, createKbnUrlStateStorage, @@ -71,9 +71,9 @@ interface GetStateParams { */ storeInSessionStorage?: boolean; /** - * Browser history used for testing + * History instance to use */ - history?: History; + history: History; } interface GetStateReturn { @@ -126,7 +126,7 @@ export function getState({ }: GetStateParams): GetStateReturn { const stateStorage = createKbnUrlStateStorage({ useHash: storeInSessionStorage, - history: history ? history : createBrowserHistory(), + history, }); const globalStateInitial = stateStorage.get(GLOBAL_STATE_URL_KEY) as GlobalState; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js index 56966d6294c9a4..567cfda45cc0d1 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js @@ -57,7 +57,7 @@ const { core, chrome, data, - history, + history: getHistory, indexPatterns, filterManager, share, @@ -116,6 +116,7 @@ app.config($routeProvider => { reloadOnSearch: false, resolve: { savedObjects: function($route, Promise) { + const history = getHistory(); const savedSearchId = $route.current.params.id; return ensureDefaultIndexPattern(core, data, history).then(() => { const { appStateContainer } = getState({ history }); @@ -204,6 +205,8 @@ function discoverController( return isDefaultType($scope.indexPattern) ? $scope.indexPattern.timeFieldName : undefined; }; + const history = getHistory(); + const { appStateContainer, startSync: startStateSync, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_field.test.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_field.test.tsx index 9a6bd65813d184..fdae2c0c16c9f2 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_field.test.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_field.test.tsx @@ -31,11 +31,11 @@ import { IndexPatternField } from '../../../../../../../../plugins/data/public'; jest.mock('../../../kibana_services', () => ({ getServices: () => ({ - history: { + history: () => ({ location: { search: '', }, - }, + }), capabilities: { visualize: { show: true, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.test.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.test.tsx index 0df14515adc6d4..29451c075bcad5 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.test.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.test.tsx @@ -36,11 +36,11 @@ import { SavedObject } from '../../../../../../../../core/types'; jest.mock('../../../kibana_services', () => ({ getServices: () => ({ - history: { + history: () => ({ location: { search: '', }, - }, + }), capabilities: { visualize: { show: true, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/lib/visualize_url_utils.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/lib/visualize_url_utils.ts index d146d212055b76..968ceeeab73a5f 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/lib/visualize_url_utils.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/lib/visualize_url_utils.ts @@ -125,7 +125,7 @@ export function getVisualizeUrl( services: DiscoverServices ) { const aggsTermSize = services.uiSettings.get('discover:aggs:terms:size'); - const urlParams = parse(services.history.location.search) as Record; + const urlParams = parse(services.history().location.search) as Record; if ( (field.type === KBN_FIELD_TYPES.GEO_POINT || field.type === KBN_FIELD_TYPES.GEO_SHAPE) && diff --git a/src/legacy/core_plugins/kibana/public/discover/plugin.ts b/src/legacy/core_plugins/kibana/public/discover/plugin.ts index d05e96ccaaf0b0..42883abe98171b 100644 --- a/src/legacy/core_plugins/kibana/public/discover/plugin.ts +++ b/src/legacy/core_plugins/kibana/public/discover/plugin.ts @@ -31,7 +31,7 @@ import { registerFeature } from './np_ready/register_feature'; import './kibana_services'; import { EmbeddableStart, EmbeddableSetup } from '../../../../../plugins/embeddable/public'; import { getInnerAngularModule, getInnerAngularModuleEmbeddable } from './get_inner_angular'; -import { setAngularModule, setServices, setUrlTracker } from './kibana_services'; +import { getHistory, setAngularModule, setServices, setUrlTracker } from './kibana_services'; import { NavigationPublicPluginStart as NavigationStart } from '../../../../../plugins/navigation/public'; import { ChartsPluginStart } from '../../../../../plugins/charts/public'; import { buildServices } from './build_services'; @@ -98,6 +98,10 @@ export class DiscoverPlugin implements Plugin { stop: stopUrlTracker, setActiveUrl: setTrackedUrl, } = createKbnUrlTracker({ + // we pass getter here instead of plain `history`, + // so history is lazily created (when app is mounted) + // this prevents redundant `#` when not in discover app + getHistory, baseUrl: core.http.basePath.prepend('/app/kibana'), defaultSubUrl: '#/discover', storageKey: `lastUrl:${core.http.basePath.get()}:discover`, @@ -174,7 +178,7 @@ export class DiscoverPlugin implements Plugin { if (this.servicesInitialized) { return { core, plugins }; } - const services = await buildServices(core, plugins); + const services = await buildServices(core, plugins, getHistory); setServices(services); this.servicesInitialized = true; diff --git a/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.test.ts b/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.test.ts index 6e4c505c62ebc8..513c70e60048a4 100644 --- a/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.test.ts +++ b/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.test.ts @@ -31,6 +31,7 @@ import { setStateToKbnUrl, getStateFromKbnUrl, } from './kbn_url_storage'; +import { ScopedHistory } from '../../../../../core/public'; describe('kbn_url_storage', () => { describe('getStateFromUrl & setStateToUrl', () => { @@ -187,23 +188,54 @@ describe('kbn_url_storage', () => { urlControls.update('/', true); }); - const getCurrentUrl = () => window.location.href; + const getCurrentUrl = () => history.createHref(history.location); it('should flush async url updates', async () => { const pr1 = urlControls.updateAsync(() => '/1', false); const pr2 = urlControls.updateAsync(() => '/2', false); const pr3 = urlControls.updateAsync(() => '/3', false); - expect(getCurrentUrl()).toBe('http://localhost/'); - expect(urlControls.flush()).toBe('http://localhost/3'); - expect(getCurrentUrl()).toBe('http://localhost/3'); + expect(getCurrentUrl()).toBe('/'); + expect(urlControls.flush()).toBe('/3'); + expect(getCurrentUrl()).toBe('/3'); + await Promise.all([pr1, pr2, pr3]); + expect(getCurrentUrl()).toBe('/3'); + }); + + it('flush() should return undefined, if no url updates happened', () => { + expect(urlControls.flush()).toBeUndefined(); + urlControls.updateAsync(() => '/1', false); + urlControls.updateAsync(() => '/', false); + expect(urlControls.flush()).toBeUndefined(); + }); + }); + + describe('urlControls - scoped history integration', () => { + let history: History; + let urlControls: IKbnUrlControls; + beforeEach(() => { + const parentHistory = createBrowserHistory(); + parentHistory.replace('/app/kibana/'); + history = new ScopedHistory(parentHistory, '/app/kibana/'); + urlControls = createKbnUrlControls(history); + }); + + const getCurrentUrl = () => history.createHref(history.location); + + it('should flush async url updates', async () => { + const pr1 = urlControls.updateAsync(() => '/app/kibana/1', false); + const pr2 = urlControls.updateAsync(() => '/app/kibana/2', false); + const pr3 = urlControls.updateAsync(() => '/app/kibana/3', false); + expect(getCurrentUrl()).toBe('/app/kibana/'); + expect(urlControls.flush()).toBe('/app/kibana/3'); + expect(getCurrentUrl()).toBe('/app/kibana/3'); await Promise.all([pr1, pr2, pr3]); - expect(getCurrentUrl()).toBe('http://localhost/3'); + expect(getCurrentUrl()).toBe('/app/kibana/3'); }); it('flush() should return undefined, if no url updates happened', () => { expect(urlControls.flush()).toBeUndefined(); - urlControls.updateAsync(() => 'http://localhost/1', false); - urlControls.updateAsync(() => 'http://localhost/', false); + urlControls.updateAsync(() => '/app/kibana/1', false); + urlControls.updateAsync(() => '/app/kibana/', false); expect(urlControls.flush()).toBeUndefined(); }); }); diff --git a/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.ts b/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.ts index 40a411d425a54f..337d122e2854be 100644 --- a/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.ts +++ b/src/plugins/kibana_utils/public/state_management/url/kbn_url_storage.ts @@ -154,7 +154,7 @@ export const createKbnUrlControls = ( let shouldReplace = true; function updateUrl(newUrl: string, replace = false): string | undefined { - const currentUrl = getCurrentUrl(); + const currentUrl = getCurrentUrl(history); if (newUrl === currentUrl) return undefined; // skip update const historyPath = getRelativeToHistoryPath(newUrl, history); @@ -165,7 +165,7 @@ export const createKbnUrlControls = ( history.push(historyPath); } - return getCurrentUrl(); + return getCurrentUrl(history); } // queue clean up @@ -187,7 +187,10 @@ export const createKbnUrlControls = ( function getPendingUrl() { if (updateQueue.length === 0) return undefined; - const resultUrl = updateQueue.reduce((url, nextUpdate) => nextUpdate(url), getCurrentUrl()); + const resultUrl = updateQueue.reduce( + (url, nextUpdate) => nextUpdate(url), + getCurrentUrl(history) + ); return resultUrl; } diff --git a/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts b/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts index af8811b1969e69..8adbbfb06e1edf 100644 --- a/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts +++ b/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts @@ -57,6 +57,7 @@ export function createKbnUrlTracker({ navLinkUpdater$, toastNotifications, history, + getHistory, storage, shouldTrackUrlUpdate = pathname => { const currentAppName = defaultSubUrl.slice(2); // cut hash and slash symbols @@ -103,6 +104,12 @@ export function createKbnUrlTracker({ * History object to use to track url changes. If this isn't provided, a local history instance will be created. */ history?: History; + + /** + * Lazily retrieve history instance + */ + getHistory?: () => History; + /** * Storage object to use to persist currently active url. If this isn't provided, the browser wide session storage instance will be used. */ @@ -158,7 +165,7 @@ export function createKbnUrlTracker({ function onMountApp() { unsubscribe(); - const historyInstance = history || createHashHistory(); + const historyInstance = history || (getHistory && getHistory()) || createHashHistory(); // track current hash when within app unsubscribeURLHistory = historyInstance.listen(location => { if (shouldTrackUrlUpdate(location.pathname)) { diff --git a/src/plugins/kibana_utils/public/state_management/url/parse.ts b/src/plugins/kibana_utils/public/state_management/url/parse.ts index 95041d0662f56d..6339002ea5c68b 100644 --- a/src/plugins/kibana_utils/public/state_management/url/parse.ts +++ b/src/plugins/kibana_utils/public/state_management/url/parse.ts @@ -18,12 +18,11 @@ */ import { parse as _parseUrl } from 'url'; +import { History } from 'history'; export const parseUrl = (url: string) => _parseUrl(url, true); export const parseUrlHash = (url: string) => { const hash = parseUrl(url).hash; return hash ? parseUrl(hash.slice(1)) : null; }; -export const getCurrentUrl = () => window.location.href; -export const parseCurrentUrl = () => parseUrl(getCurrentUrl()); -export const parseCurrentUrlHash = () => parseUrlHash(getCurrentUrl()); +export const getCurrentUrl = (history: History) => history.createHref(history.location); diff --git a/src/plugins/kibana_utils/public/state_sync/state_sync_state_storage/create_kbn_url_state_storage.test.ts b/src/plugins/kibana_utils/public/state_sync/state_sync_state_storage/create_kbn_url_state_storage.test.ts index cc3f1df7c1e00a..8a9a4ea71ee9ab 100644 --- a/src/plugins/kibana_utils/public/state_sync/state_sync_state_storage/create_kbn_url_state_storage.test.ts +++ b/src/plugins/kibana_utils/public/state_sync/state_sync_state_storage/create_kbn_url_state_storage.test.ts @@ -21,6 +21,7 @@ import { createKbnUrlStateStorage, IKbnUrlStateStorage } from './create_kbn_url_ import { History, createBrowserHistory } from 'history'; import { takeUntil, toArray } from 'rxjs/operators'; import { Subject } from 'rxjs'; +import { ScopedHistory } from '../../../../../core/public'; describe('KbnUrlStateStorage', () => { describe('useHash: false', () => { @@ -132,4 +133,78 @@ describe('KbnUrlStateStorage', () => { expect(await result).toEqual([{ test: 'test', ok: 1 }, { test: 'test', ok: 2 }, null]); }); }); + + describe('ScopedHistory integration', () => { + let urlStateStorage: IKbnUrlStateStorage; + let history: ScopedHistory; + const getCurrentUrl = () => history.createHref(history.location); + beforeEach(() => { + const parentHistory = createBrowserHistory(); + parentHistory.push('/kibana/app/'); + history = new ScopedHistory(parentHistory, '/kibana/app/'); + urlStateStorage = createKbnUrlStateStorage({ useHash: false, history }); + }); + + it('should persist state to url', async () => { + const state = { test: 'test', ok: 1 }; + const key = '_s'; + await urlStateStorage.set(key, state); + expect(getCurrentUrl()).toMatchInlineSnapshot(`"/kibana/app/#?_s=(ok:1,test:test)"`); + expect(urlStateStorage.get(key)).toEqual(state); + }); + + it('should flush state to url', () => { + const state = { test: 'test', ok: 1 }; + const key = '_s'; + urlStateStorage.set(key, state); + expect(getCurrentUrl()).toMatchInlineSnapshot(`"/kibana/app/"`); + expect(urlStateStorage.flush()).toBe(true); + expect(getCurrentUrl()).toMatchInlineSnapshot(`"/kibana/app/#?_s=(ok:1,test:test)"`); + expect(urlStateStorage.get(key)).toEqual(state); + + expect(urlStateStorage.flush()).toBe(false); // nothing to flush, not update + }); + + it('should cancel url updates', async () => { + const state = { test: 'test', ok: 1 }; + const key = '_s'; + const pr = urlStateStorage.set(key, state); + expect(getCurrentUrl()).toMatchInlineSnapshot(`"/kibana/app/"`); + urlStateStorage.cancel(); + await pr; + expect(getCurrentUrl()).toMatchInlineSnapshot(`"/kibana/app/"`); + expect(urlStateStorage.get(key)).toEqual(null); + }); + + it('should cancel url updates if synchronously returned to the same state', async () => { + const state1 = { test: 'test', ok: 1 }; + const state2 = { test: 'test', ok: 2 }; + const key = '_s'; + const pr1 = urlStateStorage.set(key, state1); + await pr1; + const historyLength = history.length; + const pr2 = urlStateStorage.set(key, state2); + const pr3 = urlStateStorage.set(key, state1); + await Promise.all([pr2, pr3]); + expect(history.length).toBe(historyLength); + }); + + it('should notify about url changes', async () => { + expect(urlStateStorage.change$).toBeDefined(); + const key = '_s'; + const destroy$ = new Subject(); + const result = urlStateStorage.change$!(key) + .pipe(takeUntil(destroy$), toArray()) + .toPromise(); + + history.push(`/#?${key}=(ok:1,test:test)`); + history.push(`/?query=test#?${key}=(ok:2,test:test)&some=test`); + history.push(`/?query=test#?some=test`); + + destroy$.next(); + destroy$.complete(); + + expect(await result).toEqual([{ test: 'test', ok: 1 }, { test: 'test', ok: 2 }, null]); + }); + }); }); diff --git a/test/examples/config.js b/test/examples/config.js index 49d75da2860753..2be34459d8d06f 100644 --- a/test/examples/config.js +++ b/test/examples/config.js @@ -28,6 +28,7 @@ export default async function({ readConfigFile }) { require.resolve('./search'), require.resolve('./embeddables'), require.resolve('./ui_actions'), + require.resolve('./state_sync'), ], services: { ...functionalConfig.get('services'), diff --git a/test/examples/state_sync/index.ts b/test/examples/state_sync/index.ts new file mode 100644 index 00000000000000..3c524f0feb6192 --- /dev/null +++ b/test/examples/state_sync/index.ts @@ -0,0 +1,39 @@ +/* + * 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 { PluginFunctionalProviderContext } from 'test/plugin_functional/services'; + +// eslint-disable-next-line import/no-default-export +export default function({ + getService, + getPageObjects, + loadTestFile, +}: PluginFunctionalProviderContext) { + const browser = getService('browser'); + const PageObjects = getPageObjects(['common']); + + describe('state sync examples', function() { + before(async () => { + await browser.setWindowSize(1300, 900); + await PageObjects.common.navigateToApp('settings'); + }); + + loadTestFile(require.resolve('./todo_app')); + }); +} diff --git a/test/examples/state_sync/todo_app.ts b/test/examples/state_sync/todo_app.ts new file mode 100644 index 00000000000000..4933d746ca4fd8 --- /dev/null +++ b/test/examples/state_sync/todo_app.ts @@ -0,0 +1,189 @@ +/* + * 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 expect from '@kbn/expect'; + +import { PluginFunctionalProviderContext } from 'test/plugin_functional/services'; + +// eslint-disable-next-line import/no-default-export +export default function({ getService, getPageObjects }: PluginFunctionalProviderContext) { + const testSubjects = getService('testSubjects'); + const find = getService('find'); + const retry = getService('retry'); + const appsMenu = getService('appsMenu'); + const browser = getService('browser'); + const PageObjects = getPageObjects(['common']); + const log = getService('log'); + + describe('TODO app', () => { + describe("TODO app with browser history (platform's ScopedHistory)", async () => { + const appId = 'stateContainersExampleBrowserHistory'; + let base: string; + + before(async () => { + base = await PageObjects.common.getHostPort(); + await appsMenu.clickLink('State containers example - browser history routing'); + }); + + it('links are rendered correctly and state is preserved in links', async () => { + const getHrefByLinkTestSubj = async (linkTestSubj: string) => + (await testSubjects.find(linkTestSubj)).getAttribute('href'); + + await expectPathname(await getHrefByLinkTestSubj('filterLinkCompleted'), '/completed'); + await expectPathname( + await getHrefByLinkTestSubj('filterLinkNotCompleted'), + '/not-completed' + ); + await expectPathname(await getHrefByLinkTestSubj('filterLinkAll'), '/'); + }); + + it('TODO app state is synced with url, back navigation works', async () => { + // checking that in initial state checkbox is unchecked and state is synced with url + expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(false); + expect(await browser.getCurrentUrl()).to.contain('completed:!f'); + + // check the checkbox by clicking the label (clicking checkbox directly fails as it is "no intractable") + (await find.byCssSelector('label[for="0"]')).click(); + + // wait for react to update dom and checkbox in checked state + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(true); + }); + // checking that url is updated with checked state + expect(await browser.getCurrentUrl()).to.contain('completed:!t'); + + // checking back and forward button + await browser.goBack(); + expect(await browser.getCurrentUrl()).to.contain('completed:!f'); + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(false); + }); + + await browser.goForward(); + expect(await browser.getCurrentUrl()).to.contain('completed:!t'); + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(true); + }); + }); + + it('links navigation works', async () => { + // click link to filter only not completed + await testSubjects.click('filterLinkNotCompleted'); + await expectPathname(await browser.getCurrentUrl(), '/not-completed'); + // checkbox should be missing because it is "completed" + await testSubjects.missingOrFail('todoCheckbox-0'); + }); + + /** + * Parses app's scoped pathname from absolute url and asserts it against `expectedPathname` + * Also checks that hashes are equal (detail of todo app that state is rendered in links) + * @param absoluteUrl + * @param expectedPathname + */ + async function expectPathname(absoluteUrl: string, expectedPathname: string) { + const scoped = await getScopedUrl(absoluteUrl); + const [pathname, newHash] = scoped.split('#'); + expect(pathname).to.be(expectedPathname); + const [, currentHash] = (await browser.getCurrentUrl()).split('#'); + expect(newHash.replace(/%27/g, "'")).to.be(currentHash.replace(/%27/g, "'")); + } + + /** + * Get's part of url scoped to this app (removed kibana's host and app's pathname) + * @param url - absolute url + */ + async function getScopedUrl(url: string): Promise { + expect(url).to.contain(base); + expect(url).to.contain(appId); + const scopedUrl = url.slice(url.indexOf(appId) + appId.length); + expect(scopedUrl).not.to.contain(appId); // app id in url only once + return scopedUrl; + } + }); + + describe('TODO app with hash history ', async () => { + before(async () => { + await appsMenu.clickLink('State containers example - hash history routing'); + }); + + it('Links are rendered correctly and state is preserved in links', async () => { + const getHrefByLinkTestSubj = async (linkTestSubj: string) => + (await testSubjects.find(linkTestSubj)).getAttribute('href'); + await expectHashPathname(await getHrefByLinkTestSubj('filterLinkCompleted'), '/completed'); + await expectHashPathname( + await getHrefByLinkTestSubj('filterLinkNotCompleted'), + '/not-completed' + ); + await expectHashPathname(await getHrefByLinkTestSubj('filterLinkAll'), '/'); + }); + + it('TODO app state is synced with url, back navigation works', async () => { + // checking that in initial state checkbox is unchecked and state is synced with url + expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(false); + expect(await browser.getCurrentUrl()).to.contain('completed:!f'); + // check the checkbox by clicking the label (clicking checkbox directly fails as it is "no intractable") + (await find.byCssSelector('label[for="0"]')).click(); + + // wait for react to update dom and checkbox in checked state + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(true); + }); + // checking that url is updated with checked state + expect(await browser.getCurrentUrl()).to.contain('completed:!t'); + + // checking back and forward button + await browser.goBack(); + expect(await browser.getCurrentUrl()).to.contain('completed:!f'); + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(false); + }); + + await browser.goForward(); + expect(await browser.getCurrentUrl()).to.contain('completed:!t'); + await retry.tryForTime(1000, async () => { + await expect(await testSubjects.isChecked('todoCheckbox-0')).to.be(true); + }); + }); + + it('links navigation works', async () => { + // click link to filter only not completed + await testSubjects.click('filterLinkNotCompleted'); + await expectHashPathname(await browser.getCurrentUrl(), '/not-completed'); + // checkbox should be missing because it is "completed" + await testSubjects.missingOrFail('todoCheckbox-0'); + }); + + /** + * Parses app's pathname in hash from absolute url and asserts it against `expectedPathname` + * Also checks that queries in hashes are equal (detail of todo app that state is rendered in links) + * @param absoluteUrl + * @param expectedPathname + */ + async function expectHashPathname(hash: string, expectedPathname: string) { + log.debug(`expect hash pathname ${hash} to be ${expectedPathname}`); + const hashPath = hash.split('#')[1]; + const [hashPathname, hashQuery] = hashPath.split('?'); + const [, currentHash] = (await browser.getCurrentUrl()).split('#'); + const [, currentHashQuery] = currentHash.split('?'); + expect(currentHashQuery.replace(/%27/g, "'")).to.be(hashQuery.replace(/%27/g, "'")); + expect(hashPathname).to.be(expectedPathname); + } + }); + }); +} From 698717173d0480438576a5832b7a0a0208ffc0ec Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 21 Apr 2020 15:09:42 +0300 Subject: [PATCH 30/39] [SIEM][CASE] Server common constants (#63952) --- .../siem/public/containers/case/api.test.tsx | 6 +- .../siem/public/containers/case/api.ts | 55 +++++++++++-------- .../public/containers/case/configure/api.ts | 23 ++++---- .../siem/public/containers/case/constants.ts | 2 - x-pack/plugins/case/common/api/helpers.ts | 28 ++++++++++ x-pack/plugins/case/common/constants.ts | 29 ++++++++++ .../api/cases/comments/delete_all_comments.ts | 3 +- .../api/cases/comments/delete_comment.test.ts | 5 +- .../api/cases/comments/delete_comment.ts | 3 +- .../api/cases/comments/find_comments.ts | 3 +- .../api/cases/comments/get_all_comment.ts | 3 +- .../api/cases/comments/get_comment.test.ts | 5 +- .../routes/api/cases/comments/get_comment.ts | 3 +- .../api/cases/comments/patch_comment.test.ts | 7 ++- .../api/cases/comments/patch_comment.ts | 3 +- .../api/cases/comments/post_comment.test.ts | 9 +-- .../routes/api/cases/comments/post_comment.ts | 3 +- .../api/cases/configure/get_configure.test.ts | 9 +-- .../api/cases/configure/get_configure.ts | 3 +- .../cases/configure/get_connectors.test.ts | 5 +- .../api/cases/configure/get_connectors.ts | 4 +- .../cases/configure/patch_configure.test.ts | 11 ++-- .../api/cases/configure/patch_configure.ts | 3 +- .../cases/configure/post_configure.test.ts | 25 +++++---- .../api/cases/configure/post_configure.ts | 3 +- .../routes/api/cases/delete_cases.test.ts | 9 +-- .../server/routes/api/cases/delete_cases.ts | 3 +- .../routes/api/cases/find_cases.test.ts | 3 +- .../server/routes/api/cases/find_cases.ts | 3 +- .../server/routes/api/cases/get_case.test.ts | 9 +-- .../case/server/routes/api/cases/get_case.ts | 3 +- .../server/routes/api/cases/patch_cases.ts | 3 +- .../server/routes/api/cases/post_case.test.ts | 9 +-- .../case/server/routes/api/cases/post_case.ts | 3 +- .../case/server/routes/api/cases/push_case.ts | 3 +- .../api/cases/reporters/get_reporters.ts | 3 +- .../routes/api/cases/status/get_status.ts | 3 +- .../server/routes/api/cases/tags/get_tags.ts | 3 +- .../user_actions/get_all_user_actions.ts | 3 +- 39 files changed, 207 insertions(+), 106 deletions(-) create mode 100644 x-pack/plugins/case/common/api/helpers.ts create mode 100644 x-pack/plugins/case/common/constants.ts 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 index 4f5655cc9f2219..693a7175ebc3eb 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/api.test.tsx @@ -5,6 +5,9 @@ */ import { KibanaServices } from '../../lib/kibana'; + +import { CASES_URL } from '../../../../../../plugins/case/common/constants'; + import { deleteCases, getActionLicense, @@ -22,6 +25,7 @@ import { pushCase, pushToService, } from './api'; + import { actionLicenses, allCases, @@ -44,7 +48,7 @@ import { 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'; diff --git a/x-pack/legacy/plugins/siem/public/containers/case/api.ts b/x-pack/legacy/plugins/siem/public/containers/case/api.ts index 12b4c80a2dd899..b7453616324199 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/api.ts +++ b/x-pack/legacy/plugins/siem/public/containers/case/api.ts @@ -20,6 +20,21 @@ import { ActionTypeExecutorResult, } from '../../../../../../plugins/case/common/api'; +import { + CASE_STATUS_URL, + CASES_URL, + CASE_TAGS_URL, + CASE_REPORTERS_URL, + ACTION_TYPES_URL, + ACTION_URL, +} from '../../../../../../plugins/case/common/constants'; + +import { + getCaseDetailsUrl, + getCaseUserActionUrl, + getCaseCommentsUrl, +} from '../../../../../../plugins/case/common/api/helpers'; + import { KibanaServices } from '../../lib/kibana'; import { @@ -33,8 +48,6 @@ import { CaseUserActions, } from './types'; -import { CASES_URL } from './constants'; - import { convertToCamelCase, convertAllCasesToCamel, @@ -54,7 +67,7 @@ export const getCase = async ( includeComments: boolean = true, signal: AbortSignal ): Promise => { - const response = await KibanaServices.get().http.fetch(`${CASES_URL}/${caseId}`, { + const response = await KibanaServices.get().http.fetch(getCaseDetailsUrl(caseId), { method: 'GET', query: { includeComments, @@ -65,18 +78,15 @@ export const getCase = async ( }; export const getCasesStatus = async (signal: AbortSignal): Promise => { - const response = await KibanaServices.get().http.fetch( - `${CASES_URL}/status`, - { - method: 'GET', - signal, - } - ); + const response = await KibanaServices.get().http.fetch(CASE_STATUS_URL, { + method: 'GET', + signal, + }); return convertToCamelCase(decodeCasesStatusResponse(response)); }; export const getTags = async (signal: AbortSignal): Promise => { - const response = await KibanaServices.get().http.fetch(`${CASES_URL}/tags`, { + const response = await KibanaServices.get().http.fetch(CASE_TAGS_URL, { method: 'GET', signal, }); @@ -84,7 +94,7 @@ export const getTags = async (signal: AbortSignal): Promise => { }; export const getReporters = async (signal: AbortSignal): Promise => { - const response = await KibanaServices.get().http.fetch(`${CASES_URL}/reporters`, { + const response = await KibanaServices.get().http.fetch(CASE_REPORTERS_URL, { method: 'GET', signal, }); @@ -96,7 +106,7 @@ export const getCaseUserActions = async ( signal: AbortSignal ): Promise => { const response = await KibanaServices.get().http.fetch( - `${CASES_URL}/${caseId}/user_actions`, + getCaseUserActionUrl(caseId), { method: 'GET', signal, @@ -193,14 +203,11 @@ export const patchComment = async ( version: string, signal: AbortSignal ): Promise => { - const response = await KibanaServices.get().http.fetch( - `${CASES_URL}/${caseId}/comments`, - { - method: 'PATCH', - body: JSON.stringify({ comment: commentUpdate, id: commentId, version }), - signal, - } - ); + const response = await KibanaServices.get().http.fetch(getCaseCommentsUrl(caseId), { + method: 'PATCH', + body: JSON.stringify({ comment: commentUpdate, id: commentId, version }), + signal, + }); return convertToCamelCase(decodeCaseResponse(response)); }; @@ -219,7 +226,7 @@ export const pushCase = async ( signal: AbortSignal ): Promise => { const response = await KibanaServices.get().http.fetch( - `${CASES_URL}/${caseId}/_push`, + `${getCaseDetailsUrl(caseId)}/_push`, { method: 'POST', body: JSON.stringify(push), @@ -235,7 +242,7 @@ export const pushToService = async ( signal: AbortSignal ): Promise => { const response = await KibanaServices.get().http.fetch( - `/api/action/${connectorId}/_execute`, + `${ACTION_URL}/${connectorId}/_execute`, { method: 'POST', body: JSON.stringify({ params: casePushParams }), @@ -251,7 +258,7 @@ export const pushToService = async ( }; export const getActionLicense = async (signal: AbortSignal): Promise => { - const response = await KibanaServices.get().http.fetch(`/api/action/types`, { + const response = await KibanaServices.get().http.fetch(ACTION_TYPES_URL, { method: 'GET', signal, }); diff --git a/x-pack/legacy/plugins/siem/public/containers/case/configure/api.ts b/x-pack/legacy/plugins/siem/public/containers/case/configure/api.ts index c24081c777a968..85e472811c93bf 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/configure/api.ts +++ b/x-pack/legacy/plugins/siem/public/containers/case/configure/api.ts @@ -13,26 +13,27 @@ import { } from '../../../../../../../plugins/case/common/api'; import { KibanaServices } from '../../../lib/kibana'; -import { CASES_CONFIGURE_URL } from '../constants'; +import { + CASE_CONFIGURE_CONNECTORS_URL, + CASE_CONFIGURE_URL, +} from '../../../../../../../plugins/case/common/constants'; + import { ApiProps } from '../types'; import { convertToCamelCase, decodeCaseConfigureResponse } from '../utils'; import { CaseConfigure } from './types'; export const fetchConnectors = async ({ signal }: ApiProps): Promise => { - const response = await KibanaServices.get().http.fetch( - `${CASES_CONFIGURE_URL}/connectors/_find`, - { - method: 'GET', - signal, - } - ); + const response = await KibanaServices.get().http.fetch(`${CASE_CONFIGURE_CONNECTORS_URL}/_find`, { + method: 'GET', + signal, + }); return response; }; export const getCaseConfigure = async ({ signal }: ApiProps): Promise => { const response = await KibanaServices.get().http.fetch( - CASES_CONFIGURE_URL, + CASE_CONFIGURE_URL, { method: 'GET', signal, @@ -51,7 +52,7 @@ export const postCaseConfigure = async ( signal: AbortSignal ): Promise => { const response = await KibanaServices.get().http.fetch( - CASES_CONFIGURE_URL, + CASE_CONFIGURE_URL, { method: 'POST', body: JSON.stringify(caseConfiguration), @@ -68,7 +69,7 @@ export const patchCaseConfigure = async ( signal: AbortSignal ): Promise => { const response = await KibanaServices.get().http.fetch( - CASES_CONFIGURE_URL, + CASE_CONFIGURE_URL, { method: 'PATCH', body: JSON.stringify(caseConfiguration), diff --git a/x-pack/legacy/plugins/siem/public/containers/case/constants.ts b/x-pack/legacy/plugins/siem/public/containers/case/constants.ts index ab8dc98db4f64b..d8bb499ed7922a 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/constants.ts +++ b/x-pack/legacy/plugins/siem/public/containers/case/constants.ts @@ -4,7 +4,5 @@ * you may not use this file except in compliance with the Elastic License. */ -export const CASES_URL = `/api/cases`; -export const CASES_CONFIGURE_URL = `/api/cases/configure`; export const DEFAULT_TABLE_ACTIVE_PAGE = 1; export const DEFAULT_TABLE_LIMIT = 5; diff --git a/x-pack/plugins/case/common/api/helpers.ts b/x-pack/plugins/case/common/api/helpers.ts new file mode 100644 index 00000000000000..0efdcd38196597 --- /dev/null +++ b/x-pack/plugins/case/common/api/helpers.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 { + CASE_DETAILS_URL, + CASE_COMMENTS_URL, + CASE_USER_ACTIONS_URL, + CASE_COMMENT_DETAILS_URL, +} from '../constants'; + +export const getCaseDetailsUrl = (id: string): string => { + return CASE_DETAILS_URL.replace('{case_id}', id); +}; + +export const getCaseCommentsUrl = (id: string): string => { + return CASE_COMMENTS_URL.replace('{case_id}', id); +}; + +export const getCaseCommentDetailsUrl = (caseId: string, commentId: string): string => { + return CASE_COMMENT_DETAILS_URL.replace('{case_id}', caseId).replace('{comment_id}', commentId); +}; + +export const getCaseUserActionUrl = (id: string): string => { + return CASE_USER_ACTIONS_URL.replace('{case_id}', id); +}; diff --git a/x-pack/plugins/case/common/constants.ts b/x-pack/plugins/case/common/constants.ts new file mode 100644 index 00000000000000..dcfa46bfa60191 --- /dev/null +++ b/x-pack/plugins/case/common/constants.ts @@ -0,0 +1,29 @@ +/* + * 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 const APP_ID = 'case'; + +/** + * Case routes + */ + +export const CASES_URL = '/api/cases'; +export const CASE_DETAILS_URL = `${CASES_URL}/{case_id}`; +export const CASE_CONFIGURE_URL = `${CASES_URL}/configure`; +export const CASE_CONFIGURE_CONNECTORS_URL = `${CASE_CONFIGURE_URL}/connectors`; +export const CASE_COMMENTS_URL = `${CASE_DETAILS_URL}/comments`; +export const CASE_COMMENT_DETAILS_URL = `${CASE_DETAILS_URL}/comments/{comment_id}`; +export const CASE_REPORTERS_URL = `${CASES_URL}/reporters`; +export const CASE_STATUS_URL = `${CASES_URL}/status`; +export const CASE_TAGS_URL = `${CASES_URL}/tags`; +export const CASE_USER_ACTIONS_URL = `${CASE_DETAILS_URL}/user_actions`; + +/** + * Action routes + */ + +export const ACTION_URL = '/api/action'; +export const ACTION_TYPES_URL = '/api/action/types'; diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/delete_all_comments.ts b/x-pack/plugins/case/server/routes/api/cases/comments/delete_all_comments.ts index 1dfab165eccd72..e9bcb9690ebd86 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/delete_all_comments.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/delete_all_comments.ts @@ -9,11 +9,12 @@ import { schema } from '@kbn/config-schema'; import { buildCommentUserActionItem } from '../../../../services/user_actions/helpers'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; export function initDeleteAllCommentsApi({ caseService, router, userActionService }: RouteDeps) { router.delete( { - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.test.ts b/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.test.ts index b2022e6dec26d6..67cb9984095709 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.test.ts @@ -15,6 +15,7 @@ import { mockCaseComments, } from '../../__fixtures__'; import { initDeleteCommentApi } from './delete_comment'; +import { CASE_COMMENT_DETAILS_URL } from '../../../../../common/constants'; describe('DELETE comment', () => { let routeHandler: RequestHandler; @@ -23,7 +24,7 @@ describe('DELETE comment', () => { }); it(`deletes the comment. responds with 204`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, method: 'delete', params: { case_id: 'mock-id-1', @@ -43,7 +44,7 @@ describe('DELETE comment', () => { }); it(`returns an error when thrown from deleteComment service`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, method: 'delete', params: { case_id: 'mock-id-1', diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.ts b/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.ts index ff0729afed96a2..72ef400415d0fb 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/delete_comment.ts @@ -11,11 +11,12 @@ import { CASE_SAVED_OBJECT } from '../../../../saved_object_types'; import { buildCommentUserActionItem } from '../../../../services/user_actions/helpers'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_COMMENT_DETAILS_URL } from '../../../../../common/constants'; export function initDeleteCommentApi({ caseService, router, userActionService }: RouteDeps) { router.delete( { - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/find_comments.ts b/x-pack/plugins/case/server/routes/api/cases/comments/find_comments.ts index 92da64cebee741..3df9fdb80ba8a1 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/find_comments.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/find_comments.ts @@ -18,11 +18,12 @@ import { } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { escapeHatch, transformComments, wrapError } from '../../utils'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; export function initFindCaseCommentsApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/{case_id}/comments/_find', + path: `${CASE_COMMENTS_URL}/_find`, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/get_all_comment.ts b/x-pack/plugins/case/server/routes/api/cases/comments/get_all_comment.ts index 1500039eb2cc28..8d7820d4e8fece 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/get_all_comment.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/get_all_comment.ts @@ -9,11 +9,12 @@ import { schema } from '@kbn/config-schema'; import { AllCommentsResponseRt } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { flattenCommentSavedObjects, wrapError } from '../../utils'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; export function initGetAllCommentsApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.test.ts b/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.test.ts index 9c8d0e5254df0a..b5a7d6367ea4bc 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.test.ts @@ -15,6 +15,7 @@ import { } from '../../__fixtures__'; import { flattenCommentSavedObject } from '../../utils'; import { initGetCommentApi } from './get_comment'; +import { CASE_COMMENT_DETAILS_URL } from '../../../../../common/constants'; describe('GET comment', () => { let routeHandler: RequestHandler; @@ -23,7 +24,7 @@ describe('GET comment', () => { }); it(`returns the comment`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, method: 'get', params: { case_id: 'mock-id-1', @@ -48,7 +49,7 @@ describe('GET comment', () => { }); it(`returns an error when getComment throws`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, method: 'get', params: { case_id: 'mock-id-1', diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.ts b/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.ts index 24f44a5f5129b7..5fa668f6ae5deb 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/get_comment.ts @@ -9,11 +9,12 @@ import { schema } from '@kbn/config-schema'; import { CommentResponseRt } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { flattenCommentSavedObject, wrapError } from '../../utils'; +import { CASE_COMMENT_DETAILS_URL } from '../../../../../common/constants'; export function initGetCommentApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/{case_id}/comments/{comment_id}', + path: CASE_COMMENT_DETAILS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.test.ts b/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.test.ts index 8d9906c2abe7fa..04473e302e4680 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.test.ts @@ -14,6 +14,7 @@ import { mockCases, } from '../../__fixtures__'; import { initPatchCommentApi } from './patch_comment'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; describe('PATCH comment', () => { let routeHandler: RequestHandler; @@ -22,7 +23,7 @@ describe('PATCH comment', () => { }); it(`Patch a comment`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'patch', params: { case_id: 'mock-id-1', @@ -50,7 +51,7 @@ describe('PATCH comment', () => { it(`Fails with 409 if version does not match`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'patch', params: { case_id: 'mock-id-1', @@ -74,7 +75,7 @@ describe('PATCH comment', () => { }); it(`Returns an error if updateComment throws`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'patch', params: { case_id: 'mock-id-1', diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.ts b/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.ts index 3b38afc02ed81b..dd9b124ff1b79f 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/patch_comment.ts @@ -15,11 +15,12 @@ import { CASE_SAVED_OBJECT } from '../../../../saved_object_types'; import { buildCommentUserActionItem } from '../../../../services/user_actions/helpers'; import { RouteDeps } from '../../types'; import { escapeHatch, wrapError, flattenCaseSavedObject } from '../../utils'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; export function initPatchCommentApi({ caseService, router, userActionService }: RouteDeps) { router.patch( { - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.test.ts b/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.test.ts index 23039da681ec65..9006470f36f368 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.test.ts @@ -15,6 +15,7 @@ import { mockCaseComments, } from '../../__fixtures__'; import { initPostCommentApi } from './post_comment'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; describe('POST comment', () => { let routeHandler: RequestHandler; @@ -27,7 +28,7 @@ describe('POST comment', () => { }); it(`Posts a new comment`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'post', params: { case_id: 'mock-id-1', @@ -52,7 +53,7 @@ describe('POST comment', () => { }); it(`Returns an error if the case does not exist`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'post', params: { case_id: 'this-is-not-real', @@ -75,7 +76,7 @@ describe('POST comment', () => { }); it(`Returns an error if postNewCase throws`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'post', params: { case_id: 'mock-id-1', @@ -100,7 +101,7 @@ describe('POST comment', () => { routeHandler = await createRoute(initPostCommentApi, 'post', true); const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, method: 'post', params: { case_id: 'mock-id-1', diff --git a/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.ts b/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.ts index 70405af26f5762..a296d9815f251b 100644 --- a/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.ts +++ b/x-pack/plugins/case/server/routes/api/cases/comments/post_comment.ts @@ -15,11 +15,12 @@ import { CASE_SAVED_OBJECT } from '../../../../saved_object_types'; import { buildCommentUserActionItem } from '../../../../services/user_actions/helpers'; import { escapeHatch, transformNewComment, wrapError, flattenCaseSavedObject } from '../../utils'; import { RouteDeps } from '../../types'; +import { CASE_COMMENTS_URL } from '../../../../../common/constants'; export function initPostCommentApi({ caseService, router, userActionService }: RouteDeps) { router.post( { - path: '/api/cases/{case_id}/comments', + path: CASE_COMMENTS_URL, validate: { params: schema.object({ case_id: schema.string(), 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 index 66d39c3f11d28e..5b3b6e77b94037 100644 --- 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 @@ -15,6 +15,7 @@ import { import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; import { initGetCaseConfigure } from './get_configure'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; describe('GET configuration', () => { let routeHandler: RequestHandler; @@ -24,7 +25,7 @@ describe('GET configuration', () => { it('returns the configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'get', }); @@ -44,7 +45,7 @@ describe('GET configuration', () => { it('handles undefined version correctly', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'get', }); @@ -78,7 +79,7 @@ describe('GET configuration', () => { it('returns an empty object when there is no configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'get', }); @@ -95,7 +96,7 @@ describe('GET configuration', () => { it('returns an error if find throws an error', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'get', }); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.ts b/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.ts index 2832edaa892d5d..03bec1fe72d39a 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/get_configure.ts @@ -7,11 +7,12 @@ import { CaseConfigureResponseRt } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; export function initGetCaseConfigure({ caseConfigureService, caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, validate: false, }, async (context, request, response) => { 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 index 62edaa0a4792aa..09692ff73b94bc 100644 --- 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 @@ -16,6 +16,7 @@ import { import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; import { initCaseConfigureGetActionConnector } from './get_connectors'; import { getActions } from '../../__mocks__/request_responses'; +import { CASE_CONFIGURE_CONNECTORS_URL } from '../../../../../common/constants'; describe('GET connectors', () => { let routeHandler: RequestHandler; @@ -25,7 +26,7 @@ describe('GET connectors', () => { it('returns the connectors', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure/connectors/_find', + path: `${CASE_CONFIGURE_CONNECTORS_URL}/_find`, method: 'get', }); @@ -44,7 +45,7 @@ describe('GET connectors', () => { it('it throws an error when actions client is null', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure/connectors/_find', + path: `${CASE_CONFIGURE_CONNECTORS_URL}/_find`, method: 'get', }); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts index 3e9a1c96d55ed8..00575655d4c426 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/get_connectors.ts @@ -8,6 +8,8 @@ import Boom from 'boom'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_CONFIGURE_CONNECTORS_URL } from '../../../../../common/constants'; + /* * Be aware that this api will only return 20 connectors */ @@ -17,7 +19,7 @@ const CASE_SERVICE_NOW_ACTION = '.servicenow'; export function initCaseConfigureGetActionConnector({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/configure/connectors/_find', + path: `${CASE_CONFIGURE_CONNECTORS_URL}/_find`, validate: false, }, async (context, request, response) => { 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 index 5b3d68a2586644..9b71f777b95ab0 100644 --- 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 @@ -15,6 +15,7 @@ import { import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; import { initPatchCaseConfigure } from './patch_configure'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; describe('PATCH configuration', () => { let routeHandler: RequestHandler; @@ -29,7 +30,7 @@ describe('PATCH configuration', () => { it('patch configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'patch', body: { closure_type: 'close-by-pushing', @@ -61,7 +62,7 @@ describe('PATCH configuration', () => { routeHandler = await createRoute(initPatchCaseConfigure, 'patch', true); const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'patch', body: { closure_type: 'close-by-pushing', @@ -91,7 +92,7 @@ describe('PATCH configuration', () => { it('throw error when configuration have not being created', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'patch', body: { closure_type: 'close-by-pushing', @@ -113,7 +114,7 @@ describe('PATCH configuration', () => { it('throw error when the versions are different', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'patch', body: { closure_type: 'close-by-pushing', @@ -135,7 +136,7 @@ describe('PATCH configuration', () => { it('handles undefined version correctly', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'patch', body: { connector_id: 'no-version', version: mockCaseConfigure[0].version }, }); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.ts b/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.ts index 3a1b9d5059cbc4..47f7d503e32b8d 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/patch_configure.ts @@ -16,11 +16,12 @@ import { } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { wrapError, escapeHatch } from '../../utils'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; export function initPatchCaseConfigure({ caseConfigureService, caseService, router }: RouteDeps) { router.patch( { - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, validate: { body: escapeHatch, }, 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 index 7e40cad5b12981..fb95cc53a17109 100644 --- 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 @@ -16,6 +16,7 @@ import { import { mockCaseConfigure } from '../../__fixtures__/mock_saved_objects'; import { initPostCaseConfigure } from './post_configure'; import { newConfiguration } from '../../__mocks__/request_responses'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; describe('POST configuration', () => { let routeHandler: RequestHandler; @@ -30,7 +31,7 @@ describe('POST configuration', () => { it('create configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -61,7 +62,7 @@ describe('POST configuration', () => { routeHandler = await createRoute(initPostCaseConfigure, 'post', true); const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -90,7 +91,7 @@ describe('POST configuration', () => { it('throws when missing connector_id', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: { connector_name: 'My connector 2', @@ -111,7 +112,7 @@ describe('POST configuration', () => { it('throws when missing connector_name', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: { connector_id: '456', @@ -132,7 +133,7 @@ describe('POST configuration', () => { it('throws when missing closure_type', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: { connector_id: '456', @@ -153,7 +154,7 @@ describe('POST configuration', () => { it('it deletes the previous configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -172,7 +173,7 @@ describe('POST configuration', () => { it('it does NOT delete when not found', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -191,7 +192,7 @@ describe('POST configuration', () => { it('it deletes all configuration', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -214,7 +215,7 @@ describe('POST configuration', () => { it('returns an error if find throws an error', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -232,7 +233,7 @@ describe('POST configuration', () => { it('returns an error if delete throws an error', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: newConfiguration, }); @@ -250,7 +251,7 @@ describe('POST configuration', () => { it('returns an error if post throws an error', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: { connector_id: 'throw-error-create', @@ -272,7 +273,7 @@ describe('POST configuration', () => { it('handles undefined version correctly', async () => { const req = httpServerMock.createKibanaRequest({ - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, method: 'post', body: { ...newConfiguration, connector_id: 'no-version' }, }); diff --git a/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.ts b/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.ts index 2a23abf0cbf217..5c1693e728c377 100644 --- a/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.ts +++ b/x-pack/plugins/case/server/routes/api/cases/configure/post_configure.ts @@ -16,11 +16,12 @@ import { } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { wrapError, escapeHatch } from '../../utils'; +import { CASE_CONFIGURE_URL } from '../../../../../common/constants'; export function initPostCaseConfigure({ caseConfigureService, caseService, router }: RouteDeps) { router.post( { - path: '/api/cases/configure', + path: CASE_CONFIGURE_URL, validate: { body: escapeHatch, }, diff --git a/x-pack/plugins/case/server/routes/api/cases/delete_cases.test.ts b/x-pack/plugins/case/server/routes/api/cases/delete_cases.test.ts index c5be6f78a15708..e655339e05eb12 100644 --- a/x-pack/plugins/case/server/routes/api/cases/delete_cases.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/delete_cases.test.ts @@ -16,6 +16,7 @@ import { mockCaseComments, } from '../__fixtures__'; import { initDeleteCasesApi } from './delete_cases'; +import { CASES_URL } from '../../../../common/constants'; describe('DELETE case', () => { let routeHandler: RequestHandler; @@ -24,7 +25,7 @@ describe('DELETE case', () => { }); it(`deletes the case. responds with 204`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'delete', query: { ids: ['mock-id-1'], @@ -43,7 +44,7 @@ describe('DELETE case', () => { }); it(`returns an error when thrown from deleteCase service`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'delete', query: { ids: ['not-real'], @@ -62,7 +63,7 @@ describe('DELETE case', () => { }); it(`returns an error when thrown from getAllCaseComments service`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'delete', query: { ids: ['bad-guy'], @@ -81,7 +82,7 @@ describe('DELETE case', () => { }); it(`returns an error when thrown from deleteComment service`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'delete', query: { ids: ['valid-id'], diff --git a/x-pack/plugins/case/server/routes/api/cases/delete_cases.ts b/x-pack/plugins/case/server/routes/api/cases/delete_cases.ts index 0214017ae5c290..20591637a6c230 100644 --- a/x-pack/plugins/case/server/routes/api/cases/delete_cases.ts +++ b/x-pack/plugins/case/server/routes/api/cases/delete_cases.ts @@ -9,11 +9,12 @@ import { schema } from '@kbn/config-schema'; import { buildCaseUserActionItem } from '../../../services/user_actions/helpers'; import { RouteDeps } from '../types'; import { wrapError } from '../utils'; +import { CASES_URL } from '../../../../common/constants'; export function initDeleteCasesApi({ caseService, router, userActionService }: RouteDeps) { router.delete( { - path: '/api/cases', + path: CASES_URL, validate: { query: schema.object({ ids: schema.arrayOf(schema.string()), diff --git a/x-pack/plugins/case/server/routes/api/cases/find_cases.test.ts b/x-pack/plugins/case/server/routes/api/cases/find_cases.test.ts index 8fafb1af0eb826..7af1cee494457a 100644 --- a/x-pack/plugins/case/server/routes/api/cases/find_cases.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/find_cases.test.ts @@ -14,6 +14,7 @@ import { mockCases, } from '../__fixtures__'; import { initFindCasesApi } from './find_cases'; +import { CASES_URL } from '../../../../common/constants'; describe('GET all cases', () => { let routeHandler: RequestHandler; @@ -22,7 +23,7 @@ describe('GET all cases', () => { }); it(`gets all the cases`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: `${CASES_URL}/_find`, method: 'get', }); diff --git a/x-pack/plugins/case/server/routes/api/cases/find_cases.ts b/x-pack/plugins/case/server/routes/api/cases/find_cases.ts index b2716749e97491..40fc0301b058ac 100644 --- a/x-pack/plugins/case/server/routes/api/cases/find_cases.ts +++ b/x-pack/plugins/case/server/routes/api/cases/find_cases.ts @@ -15,6 +15,7 @@ import { CasesFindResponseRt, CasesFindRequestRt, throwErrors } from '../../../. import { transformCases, sortToSnake, wrapError, escapeHatch } from '../utils'; import { RouteDeps, TotalCommentByCase } from '../types'; import { CASE_SAVED_OBJECT } from '../../../saved_object_types'; +import { CASES_URL } from '../../../../common/constants'; const combineFilters = (filters: string[], operator: 'OR' | 'AND'): string => filters?.filter(i => i !== '').join(` ${operator} `); @@ -41,7 +42,7 @@ const buildFilter = ( export function initFindCasesApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/_find', + path: `${CASES_URL}/_find`, validate: { query: escapeHatch, }, diff --git a/x-pack/plugins/case/server/routes/api/cases/get_case.test.ts b/x-pack/plugins/case/server/routes/api/cases/get_case.test.ts index 5912df2c40aa3f..a8c12d4734b53a 100644 --- a/x-pack/plugins/case/server/routes/api/cases/get_case.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/get_case.test.ts @@ -18,6 +18,7 @@ import { } from '../__fixtures__'; import { flattenCaseSavedObject } from '../utils'; import { initGetCaseApi } from './get_case'; +import { CASE_DETAILS_URL } from '../../../../common/constants'; describe('GET case', () => { let routeHandler: RequestHandler; @@ -26,7 +27,7 @@ describe('GET case', () => { }); it(`returns the case with empty case comments when includeComments is false`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}', + path: CASE_DETAILS_URL, method: 'get', params: { case_id: 'mock-id-1', @@ -55,7 +56,7 @@ describe('GET case', () => { }); it(`returns an error when thrown from getCase`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}', + path: CASE_DETAILS_URL, method: 'get', params: { case_id: 'abcdefg', @@ -78,7 +79,7 @@ describe('GET case', () => { }); it(`returns the case with case comments when includeComments is true`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}', + path: CASE_DETAILS_URL, method: 'get', params: { case_id: 'mock-id-1', @@ -102,7 +103,7 @@ describe('GET case', () => { }); it(`returns an error when thrown from getAllCaseComments`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases/{case_id}', + path: CASE_DETAILS_URL, method: 'get', params: { case_id: 'bad-guy', diff --git a/x-pack/plugins/case/server/routes/api/cases/get_case.ts b/x-pack/plugins/case/server/routes/api/cases/get_case.ts index ac32b20541a9c9..1e836d38c285c3 100644 --- a/x-pack/plugins/case/server/routes/api/cases/get_case.ts +++ b/x-pack/plugins/case/server/routes/api/cases/get_case.ts @@ -9,11 +9,12 @@ import { schema } from '@kbn/config-schema'; import { CaseResponseRt } from '../../../../common/api'; import { RouteDeps } from '../types'; import { flattenCaseSavedObject, wrapError } from '../utils'; +import { CASE_DETAILS_URL } from '../../../../common/constants'; export function initGetCaseApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/{case_id}', + path: CASE_DETAILS_URL, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/patch_cases.ts b/x-pack/plugins/case/server/routes/api/cases/patch_cases.ts index c36ea8964dc807..57f9fc20dbf342 100644 --- a/x-pack/plugins/case/server/routes/api/cases/patch_cases.ts +++ b/x-pack/plugins/case/server/routes/api/cases/patch_cases.ts @@ -20,11 +20,12 @@ import { escapeHatch, wrapError, flattenCaseSavedObject } from '../utils'; import { RouteDeps } from '../types'; import { getCaseToUpdate } from './helpers'; import { buildCaseUserActions } from '../../../services/user_actions/helpers'; +import { CASES_URL } from '../../../../common/constants'; export function initPatchCasesApi({ caseService, router, userActionService }: RouteDeps) { router.patch( { - path: '/api/cases', + path: CASES_URL, validate: { body: escapeHatch, }, diff --git a/x-pack/plugins/case/server/routes/api/cases/post_case.test.ts b/x-pack/plugins/case/server/routes/api/cases/post_case.test.ts index 5899102224774b..0bbceb52140464 100644 --- a/x-pack/plugins/case/server/routes/api/cases/post_case.test.ts +++ b/x-pack/plugins/case/server/routes/api/cases/post_case.test.ts @@ -14,6 +14,7 @@ import { mockCases, } from '../__fixtures__'; import { initPostCaseApi } from './post_case'; +import { CASES_URL } from '../../../../common/constants'; describe('POST cases', () => { let routeHandler: RequestHandler; @@ -26,7 +27,7 @@ describe('POST cases', () => { }); it(`Posts a new case`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'post', body: { description: 'This is a brand new case of a bad meanie defacing data', @@ -49,7 +50,7 @@ describe('POST cases', () => { it(`Error if you passing status for a new case`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'post', body: { description: 'This is a brand new case of a bad meanie defacing data', @@ -70,7 +71,7 @@ describe('POST cases', () => { }); it(`Returns an error if postNewCase throws`, async () => { const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'post', body: { description: 'Throw an error', @@ -93,7 +94,7 @@ describe('POST cases', () => { routeHandler = await createRoute(initPostCaseApi, 'post', true); const request = httpServerMock.createKibanaRequest({ - path: '/api/cases', + path: CASES_URL, method: 'post', body: { description: 'This is a brand new case of a bad meanie defacing data', diff --git a/x-pack/plugins/case/server/routes/api/cases/post_case.ts b/x-pack/plugins/case/server/routes/api/cases/post_case.ts index 239b8bfdf9b29a..059a8b1affd54a 100644 --- a/x-pack/plugins/case/server/routes/api/cases/post_case.ts +++ b/x-pack/plugins/case/server/routes/api/cases/post_case.ts @@ -14,11 +14,12 @@ import { flattenCaseSavedObject, transformNewCase, wrapError, escapeHatch } from import { CasePostRequestRt, throwErrors, excess, CaseResponseRt } from '../../../../common/api'; import { buildCaseUserActionItem } from '../../../services/user_actions/helpers'; import { RouteDeps } from '../types'; +import { CASES_URL } from '../../../../common/constants'; export function initPostCaseApi({ caseService, router, userActionService }: RouteDeps) { router.post( { - path: '/api/cases', + path: CASES_URL, validate: { body: escapeHatch, }, diff --git a/x-pack/plugins/case/server/routes/api/cases/push_case.ts b/x-pack/plugins/case/server/routes/api/cases/push_case.ts index aff057adea37f5..94ebe24c3d2aef 100644 --- a/x-pack/plugins/case/server/routes/api/cases/push_case.ts +++ b/x-pack/plugins/case/server/routes/api/cases/push_case.ts @@ -15,6 +15,7 @@ import { flattenCaseSavedObject, wrapError, escapeHatch } from '../utils'; import { CaseExternalServiceRequestRt, CaseResponseRt, throwErrors } from '../../../../common/api'; import { buildCaseUserActionItem } from '../../../services/user_actions/helpers'; import { RouteDeps } from '../types'; +import { CASE_DETAILS_URL } from '../../../../common/constants'; export function initPushCaseUserActionApi({ caseConfigureService, @@ -24,7 +25,7 @@ export function initPushCaseUserActionApi({ }: RouteDeps) { router.post( { - path: '/api/cases/{case_id}/_push', + path: `${CASE_DETAILS_URL}/_push`, validate: { params: schema.object({ case_id: schema.string(), diff --git a/x-pack/plugins/case/server/routes/api/cases/reporters/get_reporters.ts b/x-pack/plugins/case/server/routes/api/cases/reporters/get_reporters.ts index 56862a96e05632..3fc96f506d1757 100644 --- a/x-pack/plugins/case/server/routes/api/cases/reporters/get_reporters.ts +++ b/x-pack/plugins/case/server/routes/api/cases/reporters/get_reporters.ts @@ -7,11 +7,12 @@ import { UsersRt } from '../../../../../common/api'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_REPORTERS_URL } from '../../../../../common/constants'; export function initGetReportersApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/reporters', + path: CASE_REPORTERS_URL, validate: {}, }, async (context, request, response) => { diff --git a/x-pack/plugins/case/server/routes/api/cases/status/get_status.ts b/x-pack/plugins/case/server/routes/api/cases/status/get_status.ts index f7431729d398c2..8f86dbc91f315d 100644 --- a/x-pack/plugins/case/server/routes/api/cases/status/get_status.ts +++ b/x-pack/plugins/case/server/routes/api/cases/status/get_status.ts @@ -9,11 +9,12 @@ import { wrapError } from '../../utils'; import { CasesStatusResponseRt } from '../../../../../common/api'; import { CASE_SAVED_OBJECT } from '../../../../saved_object_types'; +import { CASE_STATUS_URL } from '../../../../../common/constants'; export function initGetCasesStatusApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/status', + path: CASE_STATUS_URL, validate: {}, }, async (context, request, response) => { diff --git a/x-pack/plugins/case/server/routes/api/cases/tags/get_tags.ts b/x-pack/plugins/case/server/routes/api/cases/tags/get_tags.ts index 55e8fe2af128ca..1a3da659c58c4e 100644 --- a/x-pack/plugins/case/server/routes/api/cases/tags/get_tags.ts +++ b/x-pack/plugins/case/server/routes/api/cases/tags/get_tags.ts @@ -6,11 +6,12 @@ import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_TAGS_URL } from '../../../../../common/constants'; export function initGetTagsApi({ caseService, router }: RouteDeps) { router.get( { - path: '/api/cases/tags', + path: CASE_TAGS_URL, validate: {}, }, async (context, request, response) => { diff --git a/x-pack/plugins/case/server/routes/api/cases/user_actions/get_all_user_actions.ts b/x-pack/plugins/case/server/routes/api/cases/user_actions/get_all_user_actions.ts index 2d4f16e46d5616..c90979f60d23f7 100644 --- a/x-pack/plugins/case/server/routes/api/cases/user_actions/get_all_user_actions.ts +++ b/x-pack/plugins/case/server/routes/api/cases/user_actions/get_all_user_actions.ts @@ -10,11 +10,12 @@ import { CaseUserActionsResponseRt } from '../../../../../common/api'; import { CASE_SAVED_OBJECT, CASE_COMMENT_SAVED_OBJECT } from '../../../../saved_object_types'; import { RouteDeps } from '../../types'; import { wrapError } from '../../utils'; +import { CASE_USER_ACTIONS_URL } from '../../../../../common/constants'; export function initGetAllUserActionsApi({ userActionService, router }: RouteDeps) { router.get( { - path: '/api/cases/{case_id}/user_actions', + path: CASE_USER_ACTIONS_URL, validate: { params: schema.object({ case_id: schema.string(), From 6ecba2c732e79cdd90013177fc91faabfef0db26 Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Tue, 21 Apr 2020 14:22:58 +0200 Subject: [PATCH 31/39] Run local prettier script (#63959) * convert eslint scripts into TS * update settings for BWC * add script updating styles to pretter v2 * use default prettier config * run npx once, point to the correct head branch, do not add to git * throw if run script not on a clear branch * run in a batch, add logging --- scripts/prettier_on_changed.js | 21 +++++ src/dev/eslint/{index.js => index.ts} | 0 .../eslint/{lint_files.js => lint_files.ts} | 5 +- ...files_to_lint.js => pick_files_to_lint.ts} | 8 +- src/dev/run_prettier_on_changed.ts | 87 +++++++++++++++++++ 5 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 scripts/prettier_on_changed.js rename src/dev/eslint/{index.js => index.ts} (100%) rename src/dev/eslint/{lint_files.js => lint_files.ts} (90%) rename src/dev/eslint/{pick_files_to_lint.js => pick_files_to_lint.ts} (88%) create mode 100644 src/dev/run_prettier_on_changed.ts diff --git a/scripts/prettier_on_changed.js b/scripts/prettier_on_changed.js new file mode 100644 index 00000000000000..f9598110f91fd3 --- /dev/null +++ b/scripts/prettier_on_changed.js @@ -0,0 +1,21 @@ +/* + * 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. + */ + +require('../src/setup_node_env/babel_register'); +require('../src/dev/run_prettier_on_changed'); diff --git a/src/dev/eslint/index.js b/src/dev/eslint/index.ts similarity index 100% rename from src/dev/eslint/index.js rename to src/dev/eslint/index.ts diff --git a/src/dev/eslint/lint_files.js b/src/dev/eslint/lint_files.ts similarity index 90% rename from src/dev/eslint/lint_files.js rename to src/dev/eslint/lint_files.ts index a76edeb2eb865f..80c493233f39ab 100644 --- a/src/dev/eslint/lint_files.js +++ b/src/dev/eslint/lint_files.ts @@ -19,7 +19,8 @@ import { CLIEngine } from 'eslint'; -import { createFailError } from '@kbn/dev-utils'; +import { createFailError, ToolingLog } from '@kbn/dev-utils'; +import { File } from '../file'; import { REPO_ROOT } from '../constants'; /** @@ -30,7 +31,7 @@ import { REPO_ROOT } from '../constants'; * @param {Array} files * @return {undefined} */ -export function lintFiles(log, files, { fix } = {}) { +export function lintFiles(log: ToolingLog, files: File[], { fix }: { fix?: boolean } = {}) { const cli = new CLIEngine({ cache: true, cwd: REPO_ROOT, diff --git a/src/dev/eslint/pick_files_to_lint.js b/src/dev/eslint/pick_files_to_lint.ts similarity index 88% rename from src/dev/eslint/pick_files_to_lint.js rename to src/dev/eslint/pick_files_to_lint.ts index e3212c00d9e0de..b96781fc3a611f 100644 --- a/src/dev/eslint/pick_files_to_lint.js +++ b/src/dev/eslint/pick_files_to_lint.ts @@ -16,9 +16,11 @@ * specific language governing permissions and limitations * under the License. */ - import { CLIEngine } from 'eslint'; +import { ToolingLog } from '@kbn/dev-utils'; +import { File } from '../file'; + /** * Filters a list of files to only include lintable files. * @@ -26,8 +28,8 @@ import { CLIEngine } from 'eslint'; * @param {Array} files * @return {Array} */ -export function pickFilesToLint(log, files) { - const cli = new CLIEngine(); +export function pickFilesToLint(log: ToolingLog, files: File[]) { + const cli = new CLIEngine({}); return files.filter(file => { if (!file.isJs() && !file.isTypescript()) { diff --git a/src/dev/run_prettier_on_changed.ts b/src/dev/run_prettier_on_changed.ts new file mode 100644 index 00000000000000..deca4fa1be3ce5 --- /dev/null +++ b/src/dev/run_prettier_on_changed.ts @@ -0,0 +1,87 @@ +/* + * 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 execa from 'execa'; +// @ts-ignore +import SimpleGit from 'simple-git'; +import { run } from '@kbn/dev-utils'; +import dedent from 'dedent'; +import Util from 'util'; + +import pkg from '../../package.json'; +import { REPO_ROOT } from './constants'; +import { File } from './file'; +import * as Eslint from './eslint'; + +run(async function getChangedFiles({ log }) { + const simpleGit = new SimpleGit(REPO_ROOT); + + const getStatus = Util.promisify(simpleGit.status.bind(simpleGit)); + const gitStatus = await getStatus(); + + if (gitStatus.files.length > 0) { + throw new Error( + dedent(`You should run prettier formatter on a clean branch. + Found not committed changes to: + ${gitStatus.files.map((f: { path: string }) => f.path).join('\n')}`) + ); + } + + const revParse = Util.promisify(simpleGit.revparse.bind(simpleGit)); + const currentBranch = await revParse(['--abbrev-ref', 'HEAD']); + const headBranch = pkg.branch; + + const diff = Util.promisify(simpleGit.diff.bind(simpleGit)); + + const changedFileStatuses: string = await diff([ + '--name-status', + `${headBranch}...${currentBranch}`, + ]); + + const changedFiles = changedFileStatuses + .split('\n') + // Ignore blank lines + .filter(line => line.trim().length > 0) + // git diff --name-status outputs lines with two OR three parts + // separated by a tab character + .map(line => line.trim().split('\t')) + .map(([status, ...paths]) => { + // ignore deleted files + if (status === 'D') { + return undefined; + } + + // the status is always in the first column + // .. If the file is edited the line will only have two columns + // .. If the file is renamed it will have three columns + // .. In any case, the last column is the CURRENT path to the file + return new File(paths[paths.length - 1]); + }) + .filter((file): file is File => Boolean(file)); + + const pathsToLint = Eslint.pickFilesToLint(log, changedFiles).map(f => f.getAbsolutePath()); + + if (pathsToLint.length > 0) { + log.debug('[prettier] run on %j files: ', pathsToLint.length, pathsToLint); + } + + while (pathsToLint.length > 0) { + await execa('npx', ['prettier@2.0.4', '--write', ...pathsToLint.splice(0, 100)]); + } +}); From 2b9c99bd017bb655465ae14eea75a5162e0a5940 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Tue, 21 Apr 2020 15:50:38 +0300 Subject: [PATCH 32/39] Index pattern management - field list - localization functions returning empty strings (#64055) Closes: #63649 --- src/legacy/ui/public/i18n/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/legacy/ui/public/i18n/index.tsx b/src/legacy/ui/public/i18n/index.tsx index 4d0f5d3a5bd567..c918554563fcb7 100644 --- a/src/legacy/ui/public/i18n/index.tsx +++ b/src/legacy/ui/public/i18n/index.tsx @@ -44,7 +44,7 @@ export function wrapInI18nContext

(ComponentToWrap: React.ComponentType

) { } uiModules - .get('i18n') + .get('i18n', ['ngSanitize']) .provider('i18n', I18nProvider) .filter('i18n', i18nFilter) .directive('i18nId', i18nDirective); From f43d555f14e22ca0a6ed91db7ea2af855e62eb1f Mon Sep 17 00:00:00 2001 From: Josh Dover Date: Tue, 21 Apr 2020 07:39:59 -0600 Subject: [PATCH 33/39] Migrate logstash frontend to KP (#63417) --- .../public/management_service.test.ts | 3 +- .../management/public/management_service.ts | 1 - x-pack/index.js | 2 - x-pack/legacy/plugins/logstash/README.md | 3 - .../common/lib/__tests__/get_moment.js | 33 ---- .../plugins/logstash/common/lib/get_moment.js | 15 -- x-pack/legacy/plugins/logstash/index.js | 32 ---- .../public/lib/register_home_feature.ts | 35 ---- .../update_logstash_sections.js | 22 --- .../components/pipeline_edit/pipeline_edit.js | 60 ------ .../upgrade_failure/upgrade_failure.js | 49 ----- .../pipeline_edit/pipeline_edit_route.html | 5 - .../pipeline_edit/pipeline_edit_route.js | 87 --------- .../components/pipeline_list/index.js | 7 - .../components/pipeline_list/pipeline_list.js | 58 ------ .../public/sections/pipeline_list/index.js | 8 - .../pipeline_list/pipeline_list_route.html | 3 - .../pipeline_list/pipeline_list_route.js | 33 ---- .../register_management_section.js | 36 ---- .../cluster/cluster_service.factory.js | 13 -- .../logstash/public/services/cluster/index.js | 7 - .../logstash/public/services/license/index.js | 7 - .../license/license_service.factory.js | 14 -- .../license/logstash_license_service.js | 62 ------ .../public/services/monitoring/index.js | 7 - .../monitoring/monitoring_service.factory.js | 18 -- .../public/services/pipeline/index.js | 7 - .../pipeline/pipeline_service.factory.js | 14 -- .../services/pipeline/pipeline_service.js | 40 ---- .../public/services/pipelines/index.js | 7 - .../pipelines/pipelines_service.factory.js | 17 -- .../services/pipelines/pipelines_service.js | 135 ------------- .../public/services/security/index.js | 7 - .../services/security/logstash_security.js | 13 -- .../logstash/public/services/upgrade/index.js | 7 - .../upgrade/upgrade_service.factory.js | 13 -- .../services/upgrade/upgrade_service.js | 24 --- .../check_license/__tests__/check_license.js | 179 ------------------ .../server/lib/check_license/check_license.js | 86 --------- .../server/lib/check_license/index.js | 7 - .../lib/register_license_checker/index.js | 7 - .../register_license_checker.js | 21 -- x-pack/plugins/logstash/kibana.json | 10 +- .../public/application}/breadcrumbs.js | 7 +- ...confirm_delete_pipeline_modal.test.js.snap | 0 .../flex_item_setting.test.js.snap | 0 .../form_label_with_icon_tip.test.js.snap | 0 .../pipeline_editor.test.js.snap | 0 .../confirm_delete_pipeline_modal.js | 0 .../confirm_delete_pipeline_modal.test.js | 0 .../components/pipeline_editor/constants.js | 0 .../pipeline_editor/flex_item_setting.js | 0 .../pipeline_editor/flex_item_setting.test.js | 0 .../form_label_with_icon_tip.js | 0 .../form_label_with_icon_tip.test.js | 0 .../components/pipeline_editor/index.js | 0 .../pipeline_editor/pipeline_editor.js | 25 +-- .../pipeline_editor/pipeline_editor.test.js | 18 +- .../__snapshots__/add_role_alert.test.js.snap | 0 .../__snapshots__/alert_call_out.test.js.snap | 0 .../confirm_delete_modal.test.js.snap | 0 .../enable_monitoring_alert.test.js.snap | 0 .../__snapshots__/info_alerts.test.js.snap | 0 .../pipelines_table.test.js.snap | 0 .../pipeline_list/add_role_alert.js | 0 .../pipeline_list/add_role_alert.test.js | 0 .../pipeline_list/alert_call_out.js | 0 .../pipeline_list/alert_call_out.test.js | 0 .../pipeline_list/confirm_delete_modal.js | 0 .../confirm_delete_modal.test.js | 0 .../components/pipeline_list/constants.js | 0 .../pipeline_list/enable_monitoring_alert.js | 0 .../enable_monitoring_alert.test.js | 0 .../components/pipeline_list/index.js | 0 .../components/pipeline_list/info_alerts.js | 0 .../pipeline_list/info_alerts.test.js | 0 .../components/pipeline_list/pipeline_list.js | 0 .../pipeline_list/pipeline_list.test.js | 0 .../pipeline_list/pipelines_table.js | 0 .../pipeline_list/pipelines_table.test.js | 0 .../upgrade_failure.test.js.snap | 0 .../upgrade_failure_actions.test.js.snap | 0 .../upgrade_failure_title.test.js.snap | 0 .../components/upgrade_failure/constants.js | 0 .../components/upgrade_failure/index.js | 0 .../upgrade_failure/upgrade_failure.js | 0 .../upgrade_failure/upgrade_failure.test.js | 0 .../upgrade_failure_actions.js | 0 .../upgrade_failure_actions.test.js | 0 .../upgrade_failure/upgrade_failure_title.js | 0 .../upgrade_failure_title.test.js | 0 .../logstash/public/application/index.tsx | 117 ++++++++++++ .../public/application/pipeline_edit_view.tsx | 153 +++++++++++++++ x-pack/plugins/logstash/public/index.ts | 9 + .../lib/get_search_value/get_search_value.js | 0 .../public/lib/get_search_value/index.js | 0 .../logstash/public/models/cluster/cluster.js | 0 .../logstash/public/models/cluster/index.js | 0 .../logstash/public/models/pipeline/index.js | 0 .../public/models/pipeline/pipeline.js | 0 .../public/models/pipeline_list_item/index.js | 0 .../pipeline_list_item/pipeline_list_item.js | 16 +- x-pack/plugins/logstash/public/plugin.ts | 92 +++++++++ .../services/cluster/cluster_service.js | 16 +- .../public/services/cluster}/index.js | 2 +- .../plugins/logstash/public/services/index.js | 12 ++ .../public/services/license}/index.js | 2 +- .../license/logstash_license_service.js | 106 +++++++++++ .../public/services/monitoring/index.js | 7 + .../services/monitoring/monitoring_service.js | 21 +- .../public/services/pipeline}/index.js | 2 +- .../services/pipeline/pipeline_service.js | 40 ++++ .../public/services/pipelines}/index.js | 2 +- .../services/pipelines/pipelines_service.js | 128 +++++++++++++ .../public/services/upgrade}/index.js | 2 +- .../services/upgrade/upgrade_service.js | 22 +++ .../logstash/server/routes/pipeline/save.ts | 1 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../apis/logstash/pipeline/delete.ts | 1 - .../apis/logstash/pipeline/save.ts | 1 - 121 files changed, 737 insertions(+), 1283 deletions(-) delete mode 100755 x-pack/legacy/plugins/logstash/README.md delete mode 100755 x-pack/legacy/plugins/logstash/common/lib/__tests__/get_moment.js delete mode 100755 x-pack/legacy/plugins/logstash/common/lib/get_moment.js delete mode 100755 x-pack/legacy/plugins/logstash/index.js delete mode 100644 x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts delete mode 100755 x-pack/legacy/plugins/logstash/public/lib/update_management_sections/update_logstash_sections.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/pipeline_edit.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/upgrade_failure.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.html delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/pipeline_list.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.html delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.js delete mode 100755 x-pack/legacy/plugins/logstash/public/sections/pipeline_list/register_management_section.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/cluster/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/license/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/license/license_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/monitoring/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipeline/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipelines/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/security/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/security/logstash_security.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/upgrade/index.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.factory.js delete mode 100755 x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/check_license/__tests__/check_license.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/check_license/check_license.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/check_license/index.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/register_license_checker/index.js delete mode 100755 x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.js rename x-pack/{legacy/plugins/logstash/public/sections => plugins/logstash/public/application}/breadcrumbs.js (80%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/__snapshots__/confirm_delete_pipeline_modal.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/__snapshots__/flex_item_setting.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/__snapshots__/form_label_with_icon_tip.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/__snapshots__/pipeline_editor.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/confirm_delete_pipeline_modal.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/confirm_delete_pipeline_modal.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/constants.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/flex_item_setting.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/flex_item_setting.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/form_label_with_icon_tip.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/form_label_with_icon_tip.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/index.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/pipeline_editor.js (97%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_editor/pipeline_editor.test.js (96%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/add_role_alert.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/alert_call_out.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/confirm_delete_modal.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/enable_monitoring_alert.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/info_alerts.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/__snapshots__/pipelines_table.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/add_role_alert.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/add_role_alert.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/alert_call_out.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/alert_call_out.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/confirm_delete_modal.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/confirm_delete_modal.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/constants.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/enable_monitoring_alert.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/enable_monitoring_alert.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/index.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/info_alerts.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/info_alerts.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/pipeline_list.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/pipeline_list.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/pipelines_table.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/pipeline_list/pipelines_table.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/__snapshots__/upgrade_failure.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/__snapshots__/upgrade_failure_actions.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/__snapshots__/upgrade_failure_title.test.js.snap (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/constants.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/index.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure_actions.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure_actions.test.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure_title.js (100%) rename x-pack/{legacy/plugins/logstash/public => plugins/logstash/public/application}/components/upgrade_failure/upgrade_failure_title.test.js (100%) create mode 100644 x-pack/plugins/logstash/public/application/index.tsx create mode 100644 x-pack/plugins/logstash/public/application/pipeline_edit_view.tsx create mode 100644 x-pack/plugins/logstash/public/index.ts rename x-pack/{legacy => }/plugins/logstash/public/lib/get_search_value/get_search_value.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/lib/get_search_value/index.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/cluster/cluster.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/cluster/index.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/pipeline/index.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/pipeline/pipeline.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/pipeline_list_item/index.js (100%) rename x-pack/{legacy => }/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js (83%) create mode 100644 x-pack/plugins/logstash/public/plugin.ts rename x-pack/{legacy => }/plugins/logstash/public/services/cluster/cluster_service.js (51%) rename x-pack/{legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit => plugins/logstash/public/services/cluster}/index.js (82%) create mode 100644 x-pack/plugins/logstash/public/services/index.js rename x-pack/{legacy/plugins/logstash/public/lib/update_management_sections => plugins/logstash/public/services/license}/index.js (77%) create mode 100755 x-pack/plugins/logstash/public/services/license/logstash_license_service.js create mode 100755 x-pack/plugins/logstash/public/services/monitoring/index.js rename x-pack/{legacy => }/plugins/logstash/public/services/monitoring/monitoring_service.js (58%) rename x-pack/{legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure => plugins/logstash/public/services/pipeline}/index.js (81%) create mode 100755 x-pack/plugins/logstash/public/services/pipeline/pipeline_service.js rename x-pack/{legacy/plugins/logstash/common/lib => plugins/logstash/public/services/pipelines}/index.js (81%) create mode 100755 x-pack/plugins/logstash/public/services/pipelines/pipelines_service.js rename x-pack/{legacy/plugins/logstash/public/sections/pipeline_edit => plugins/logstash/public/services/upgrade}/index.js (82%) create mode 100755 x-pack/plugins/logstash/public/services/upgrade/upgrade_service.js diff --git a/src/plugins/management/public/management_service.test.ts b/src/plugins/management/public/management_service.test.ts index ceb91837921eb5..18569ef285ff3a 100644 --- a/src/plugins/management/public/management_service.test.ts +++ b/src/plugins/management/public/management_service.test.ts @@ -29,9 +29,8 @@ test('Provides default sections', () => { () => {}, coreMock.createSetup().getStartServices ); - expect(service.getAllSections().length).toEqual(3); + expect(service.getAllSections().length).toEqual(2); expect(service.getSection('kibana')).not.toBeUndefined(); - expect(service.getSection('logstash')).not.toBeUndefined(); expect(service.getSection('elasticsearch')).not.toBeUndefined(); }); diff --git a/src/plugins/management/public/management_service.ts b/src/plugins/management/public/management_service.ts index ed31a22992da85..8fc207e32e6ce7 100644 --- a/src/plugins/management/public/management_service.ts +++ b/src/plugins/management/public/management_service.ts @@ -80,7 +80,6 @@ export class ManagementService { ); register({ id: 'kibana', title: 'Kibana', order: 30, euiIconType: 'logoKibana' }); - register({ id: 'logstash', title: 'Logstash', order: 30, euiIconType: 'logoLogstash' }); register({ id: 'elasticsearch', title: 'Elasticsearch', diff --git a/x-pack/index.js b/x-pack/index.js index 7fbd992120ea68..1a78c24b1221bc 100644 --- a/x-pack/index.js +++ b/x-pack/index.js @@ -10,7 +10,6 @@ import { monitoring } from './legacy/plugins/monitoring'; import { reporting } from './legacy/plugins/reporting'; import { security } from './legacy/plugins/security'; import { dashboardMode } from './legacy/plugins/dashboard_mode'; -import { logstash } from './legacy/plugins/logstash'; import { beats } from './legacy/plugins/beats_management'; import { apm } from './legacy/plugins/apm'; import { maps } from './legacy/plugins/maps'; @@ -40,7 +39,6 @@ module.exports = function(kibana) { spaces(kibana), security(kibana), dashboardMode(kibana), - logstash(kibana), beats(kibana), apm(kibana), maps(kibana), diff --git a/x-pack/legacy/plugins/logstash/README.md b/x-pack/legacy/plugins/logstash/README.md deleted file mode 100755 index 7d181249300fa3..00000000000000 --- a/x-pack/legacy/plugins/logstash/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Logstash Plugin - -This plugin adds Logstash specific UI code to x-pack. Currently this plugin adds just the management features. diff --git a/x-pack/legacy/plugins/logstash/common/lib/__tests__/get_moment.js b/x-pack/legacy/plugins/logstash/common/lib/__tests__/get_moment.js deleted file mode 100755 index 2e63b231bec32d..00000000000000 --- a/x-pack/legacy/plugins/logstash/common/lib/__tests__/get_moment.js +++ /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 expect from '@kbn/expect'; -import { getMoment } from '../get_moment'; - -describe('get_moment', () => { - describe('getMoment', () => { - it(`returns a moment object when passed a date`, () => { - const moment = getMoment('2017-03-30T14:53:08.121Z'); - - expect(moment.constructor.name).to.be('Moment'); - }); - - it(`returns null when passed falsy`, () => { - const results = [ - getMoment(false), - getMoment(0), - getMoment(''), - getMoment(null), - getMoment(undefined), - getMoment(NaN), - ]; - - results.forEach(result => { - expect(result).to.be(null); - }); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/common/lib/get_moment.js b/x-pack/legacy/plugins/logstash/common/lib/get_moment.js deleted file mode 100755 index 7a808ec9a0336f..00000000000000 --- a/x-pack/legacy/plugins/logstash/common/lib/get_moment.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 moment from 'moment'; - -export function getMoment(date) { - if (!date) { - return null; - } - - return moment(date); -} diff --git a/x-pack/legacy/plugins/logstash/index.js b/x-pack/legacy/plugins/logstash/index.js deleted file mode 100755 index 29f01032f34131..00000000000000 --- a/x-pack/legacy/plugins/logstash/index.js +++ /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 { resolve } from 'path'; -import { registerLicenseChecker } from './server/lib/register_license_checker'; -import { PLUGIN } from '../../../plugins/logstash/common/constants'; - -export const logstash = kibana => - new kibana.Plugin({ - id: PLUGIN.ID, - publicDir: resolve(__dirname, 'public'), - require: ['kibana', 'elasticsearch', 'xpack_main'], - configPrefix: 'xpack.logstash', - config(Joi) { - return Joi.object({ - enabled: Joi.boolean().default(true), - }).default(); - }, - uiExports: { - managementSections: [ - 'plugins/logstash/sections/pipeline_list', - 'plugins/logstash/sections/pipeline_edit', - ], - home: ['plugins/logstash/lib/register_home_feature'], - }, - init: server => { - registerLicenseChecker(server); - }, - }); 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 deleted file mode 100644 index 2e1ee2afb9ce61..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/lib/register_home_feature.ts +++ /dev/null @@ -1,35 +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 { i18n } from '@kbn/i18n'; -import { npSetup } from 'ui/new_platform'; -// @ts-ignore -import { xpackInfo } from 'plugins/xpack_main/services/xpack_info'; -import { FeatureCatalogueCategory } from '../../../../../../src/plugins/home/public'; -// @ts-ignore -import { PLUGIN } from '../../../../../plugins/logstash/common/constants'; - -const { - plugins: { home }, -} = npSetup; - -const enableLinks = Boolean(xpackInfo.get(`features.${PLUGIN.ID}.enableLinks`)); - -if (enableLinks) { - home.featureCatalogue.register({ - id: 'management_logstash', - title: i18n.translate('xpack.logstash.homeFeature.logstashPipelinesTitle', { - defaultMessage: 'Logstash Pipelines', - }), - description: i18n.translate('xpack.logstash.homeFeature.logstashPipelinesDescription', { - defaultMessage: 'Create, delete, update, and clone data ingestion pipelines.', - }), - icon: 'pipelineApp', - path: '/app/kibana#/management/logstash/pipelines', - showOnHomePage: true, - category: FeatureCatalogueCategory.ADMIN, - }); -} diff --git a/x-pack/legacy/plugins/logstash/public/lib/update_management_sections/update_logstash_sections.js b/x-pack/legacy/plugins/logstash/public/lib/update_management_sections/update_logstash_sections.js deleted file mode 100755 index 8da687529c8463..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/lib/update_management_sections/update_logstash_sections.js +++ /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 { management } from 'ui/management'; - -export function updateLogstashSections(pipelineId) { - const editSection = management.getSection('logstash/pipelines/pipeline/edit'); - const newSection = management.getSection('logstash/pipelines/pipeline/new'); - - newSection.hide(); - editSection.hide(); - - if (pipelineId) { - editSection.url = `#/management/logstash/pipelines/pipeline/${pipelineId}/edit`; - editSection.show(); - } else { - newSection.show(); - } -} diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/pipeline_edit.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/pipeline_edit.js deleted file mode 100755 index 83446278fdeca8..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/pipeline_edit.js +++ /dev/null @@ -1,60 +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 { render } from 'react-dom'; -import { isEmpty } from 'lodash'; -import { uiModules } from 'ui/modules'; -import { npSetup } from 'ui/new_platform'; -import { toastNotifications } from 'ui/notify'; -import { I18nContext } from 'ui/i18n'; -import { PipelineEditor } from '../../../../components/pipeline_editor'; -import 'plugins/logstash/services/license'; -import { logstashSecurity } from 'plugins/logstash/services/security'; -import 'ace'; - -const app = uiModules.get('xpack/logstash'); - -app.directive('pipelineEdit', function($injector) { - const pipelineService = $injector.get('pipelineService'); - const licenseService = $injector.get('logstashLicenseService'); - const kbnUrl = $injector.get('kbnUrl'); - const $route = $injector.get('$route'); - - return { - restrict: 'E', - link: async (scope, el) => { - const close = () => scope.$evalAsync(kbnUrl.change('/management/logstash/pipelines', {})); - const open = id => - scope.$evalAsync(kbnUrl.change(`/management/logstash/pipelines/${id}/edit`)); - - const userResource = logstashSecurity.isSecurityEnabled() - ? await npSetup.plugins.security.authc.getCurrentUser() - : null; - - render( - - - , - el[0] - ); - }, - scope: { - pipeline: '=', - }, - }; -}); diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/upgrade_failure.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/upgrade_failure.js deleted file mode 100755 index 2ef99d3b476723..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/upgrade_failure.js +++ /dev/null @@ -1,49 +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 { render } from 'react-dom'; -import { isEmpty } from 'lodash'; -import { uiModules } from 'ui/modules'; -import { I18nContext } from 'ui/i18n'; -import { UpgradeFailure } from '../../../../components/upgrade_failure'; - -const app = uiModules.get('xpack/logstash'); - -app.directive('upgradeFailure', $injector => { - const $route = $injector.get('$route'); - const kbnUrl = $injector.get('kbnUrl'); - - return { - link: (scope, el) => { - const onRetry = () => { - $route.updateParams({ retry: true }); - $route.reload(); - }; - const onClose = () => { - scope.$evalAsync(kbnUrl.change('management/logstash/pipelines', {})); - }; - const isNewPipeline = isEmpty(scope.pipeline.id); - const isManualUpgrade = !!$route.current.params.retry; - - render( - - - , - el[0] - ); - }, - restrict: 'E', - scope: { - pipeline: '=', - }, - }; -}); diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.html b/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.html deleted file mode 100755 index e1c422d46dfdb6..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.js deleted file mode 100755 index 733f7dc3ae2e62..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/pipeline_edit_route.js +++ /dev/null @@ -1,87 +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 routes from 'ui/routes'; -import { toastNotifications } from 'ui/notify'; -import { i18n } from '@kbn/i18n'; -import template from './pipeline_edit_route.html'; -import 'plugins/logstash/services/pipeline'; -import 'plugins/logstash/services/license'; -import 'plugins/logstash/services/upgrade'; -import './components/pipeline_edit'; -import './components/upgrade_failure'; -import { updateLogstashSections } from 'plugins/logstash/lib/update_management_sections'; -import { Pipeline } from 'plugins/logstash/models/pipeline'; -import { getPipelineCreateBreadcrumbs, getPipelineEditBreadcrumbs } from '../breadcrumbs'; - -routes - .when('/management/logstash/pipelines/pipeline/:id/edit', { - k7Breadcrumbs: getPipelineEditBreadcrumbs, - }) - .when('/management/logstash/pipelines/new-pipeline', { - k7Breadcrumbs: getPipelineCreateBreadcrumbs, - }) - .defaults(/management\/logstash\/pipelines\/(new-pipeline|pipeline\/:id\/edit)/, { - template: template, - controller: class PipelineEditRouteController { - constructor($injector) { - const $route = $injector.get('$route'); - this.pipeline = $route.current.locals.pipeline; - this.isUpgraded = $route.current.locals.isUpgraded; - } - }, - controllerAs: 'pipelineEditRoute', - resolve: { - logstashTabs: $injector => { - const $route = $injector.get('$route'); - const pipelineId = $route.current.params.id; - updateLogstashSections(pipelineId); - }, - pipeline: function($injector) { - const $route = $injector.get('$route'); - const pipelineService = $injector.get('pipelineService'); - const licenseService = $injector.get('logstashLicenseService'); - const kbnUrl = $injector.get('kbnUrl'); - - const pipelineId = $route.current.params.id; - - if (!pipelineId) return new Pipeline(); - - return pipelineService - .loadPipeline(pipelineId) - .then(pipeline => (!!$route.current.params.clone ? pipeline.clone : pipeline)) - .catch(err => { - return licenseService.checkValidity().then(() => { - if (err.status !== 403) { - toastNotifications.addDanger( - i18n.translate('xpack.logstash.couldNotLoadPipelineErrorNotification', { - defaultMessage: `Couldn't load pipeline. Error: '{errStatusText}'.`, - values: { - errStatusText: err.statusText, - }, - }) - ); - } - - kbnUrl.redirect('/management/logstash/pipelines'); - return Promise.reject(); - }); - }); - }, - checkLicense: $injector => { - const licenseService = $injector.get('logstashLicenseService'); - return licenseService.checkValidity(); - }, - isUpgraded: $injector => { - const upgradeService = $injector.get('upgradeService'); - return upgradeService.executeUpgrade(); - }, - }, - }); - -routes.when('/management/logstash/pipelines/pipeline/:id', { - redirectTo: '/management/logstash/pipelines/pipeline/:id/edit', -}); diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/index.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/index.js deleted file mode 100755 index 7e8ca0e4c2c576..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/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. - */ - -import './pipeline_list'; diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/pipeline_list.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/pipeline_list.js deleted file mode 100755 index b856979aed8b6d..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/components/pipeline_list/pipeline_list.js +++ /dev/null @@ -1,58 +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 { render } from 'react-dom'; -import { uiModules } from 'ui/modules'; -import { toastNotifications } from 'ui/notify'; -import { I18nContext } from 'ui/i18n'; -import { PipelineList } from '../../../../components/pipeline_list'; -import 'plugins/logstash/services/pipelines'; -import 'plugins/logstash/services/license'; -import 'plugins/logstash/services/cluster'; -import 'plugins/logstash/services/monitoring'; - -const app = uiModules.get('xpack/logstash'); - -app.directive('pipelineList', function($injector) { - const pipelinesService = $injector.get('pipelinesService'); - const licenseService = $injector.get('logstashLicenseService'); - const clusterService = $injector.get('xpackLogstashClusterService'); - const monitoringService = $injector.get('xpackLogstashMonitoringService'); - const kbnUrl = $injector.get('kbnUrl'); - - return { - restrict: 'E', - link: (scope, el) => { - const openPipeline = id => - scope.$evalAsync(kbnUrl.change(`management/logstash/pipelines/pipeline/${id}/edit`)); - const createPipeline = () => - scope.$evalAsync(kbnUrl.change('management/logstash/pipelines/new-pipeline')); - const clonePipeline = id => - scope.$evalAsync(kbnUrl.change(`management/logstash/pipelines/pipeline/${id}/edit?clone`)); - render( - - - , - el[0] - ); - }, - scope: {}, - controllerAs: 'pipelineList', - }; -}); diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/index.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/index.js deleted file mode 100755 index f60decd1378d5c..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/index.js +++ /dev/null @@ -1,8 +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 './register_management_section'; -import './pipeline_list_route'; diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.html b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.html deleted file mode 100755 index 55b3fabd701614..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.js deleted file mode 100755 index eb593207572c20..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/pipeline_list_route.js +++ /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 routes from 'ui/routes'; -import { management } from 'ui/management'; -import template from './pipeline_list_route.html'; -import './components/pipeline_list'; -import 'plugins/logstash/services/license'; -import { getPipelineListBreadcrumbs } from '../breadcrumbs'; - -routes.when('/management/logstash/pipelines/', { - template, - k7Breadcrumbs: getPipelineListBreadcrumbs, -}); - -routes.defaults(/\/management/, { - resolve: { - logstashManagementSection: $injector => { - const licenseService = $injector.get('logstashLicenseService'); - const logstashSection = management.getSection('logstash/pipelines'); - - if (licenseService.enableLinks) { - logstashSection.show(); - logstashSection.enable(); - } else { - logstashSection.hide(); - } - }, - }, -}); diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/register_management_section.js b/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/register_management_section.js deleted file mode 100755 index e285418f5f2ae5..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_list/register_management_section.js +++ /dev/null @@ -1,36 +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 { management } from 'ui/management'; -import { i18n } from '@kbn/i18n'; - -management.getSection('logstash').register('pipelines', { - display: i18n.translate('xpack.logstash.managementSection.pipelinesTitle', { - defaultMessage: 'Pipelines', - }), - order: 10, - url: '#/management/logstash/pipelines/', -}); - -management.getSection('logstash/pipelines').register('pipeline', { - visible: false, -}); - -management.getSection('logstash/pipelines/pipeline').register('edit', { - display: i18n.translate('xpack.logstash.managementSection.editPipelineTitle', { - defaultMessage: 'Edit pipeline', - }), - order: 1, - visible: false, -}); - -management.getSection('logstash/pipelines/pipeline').register('new', { - display: i18n.translate('xpack.logstash.managementSection.createPipelineTitle', { - defaultMessage: 'Create pipeline', - }), - order: 1, - visible: false, -}); diff --git a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.factory.js deleted file mode 100755 index 0fee2804c704d4..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.factory.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 { uiModules } from 'ui/modules'; -import { ClusterService } from './cluster_service'; - -uiModules.get('xpack/logstash').factory('xpackLogstashClusterService', $injector => { - const $http = $injector.get('$http'); - return new ClusterService($http); -}); diff --git a/x-pack/legacy/plugins/logstash/public/services/cluster/index.js b/x-pack/legacy/plugins/logstash/public/services/cluster/index.js deleted file mode 100755 index ba52657a27ca8b..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/cluster/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. - */ - -import './cluster_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/license/index.js b/x-pack/legacy/plugins/logstash/public/services/license/index.js deleted file mode 100755 index 8be8fb5ccbc64f..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/license/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. - */ - -import './license_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/license/license_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/license/license_service.factory.js deleted file mode 100755 index 0e131f9b94008d..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/license/license_service.factory.js +++ /dev/null @@ -1,14 +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 { uiModules } from 'ui/modules'; -import { xpackInfo } from 'plugins/xpack_main/services/xpack_info'; -import 'ui/url'; -import { LogstashLicenseService } from './logstash_license_service'; - -uiModules.get('xpack/logstash').factory('logstashLicenseService', ($timeout, kbnUrl) => { - return new LogstashLicenseService(xpackInfo, kbnUrl, $timeout); -}); 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 deleted file mode 100755 index 69cc8614a6ae26..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/license/logstash_license_service.js +++ /dev/null @@ -1,62 +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 { toastNotifications } from 'ui/notify'; -import { MarkdownSimple } from '../../../../../../../src/plugins/kibana_react/public'; -import { PLUGIN } from '../../../../../../plugins/logstash/common/constants'; - -export class LogstashLicenseService { - constructor(xpackInfoService, kbnUrlService, $timeout) { - this.xpackInfoService = xpackInfoService; - this.kbnUrlService = kbnUrlService; - this.$timeout = $timeout; - } - - get enableLinks() { - return Boolean(this.xpackInfoService.get(`features.${PLUGIN.ID}.enableLinks`)); - } - - get isAvailable() { - return Boolean(this.xpackInfoService.get(`features.${PLUGIN.ID}.isAvailable`)); - } - - get isReadOnly() { - return Boolean(this.xpackInfoService.get(`features.${PLUGIN.ID}.isReadOnly`)); - } - - get message() { - return this.xpackInfoService.get(`features.${PLUGIN.ID}.message`); - } - - notifyAndRedirect() { - toastNotifications.addDanger({ - title: ( - - {this.xpackInfoService.get(`features.${PLUGIN.ID}.message`)} - - ), - }); - this.kbnUrlService.redirect('/management'); - } - - /** - * Checks if the license is valid or the license can perform downgraded UI tasks. - * Otherwise, notifies and redirects. - */ - checkValidity() { - return new Promise((resolve, reject) => { - this.$timeout(() => { - if (this.isAvailable) { - return resolve(); - } - - this.notifyAndRedirect(); - return reject(); - }, 10); // To allow latest XHR call to update license info - }); - } -} diff --git a/x-pack/legacy/plugins/logstash/public/services/monitoring/index.js b/x-pack/legacy/plugins/logstash/public/services/monitoring/index.js deleted file mode 100755 index 83b2105beb5ef8..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/monitoring/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. - */ - -import './monitoring_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.factory.js deleted file mode 100755 index 271c776dd6f69c..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.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 { uiModules } from 'ui/modules'; -import { MonitoringService } from './monitoring_service'; -import '../cluster'; - -uiModules.get('xpack/logstash').factory('xpackLogstashMonitoringService', $injector => { - const $http = $injector.get('$http'); - const Promise = $injector.get('Promise'); - const monitoringUiEnabled = - $injector.has('monitoringUiEnabled') && $injector.get('monitoringUiEnabled'); - const clusterService = $injector.get('xpackLogstashClusterService'); - return new MonitoringService($http, Promise, monitoringUiEnabled, clusterService); -}); diff --git a/x-pack/legacy/plugins/logstash/public/services/pipeline/index.js b/x-pack/legacy/plugins/logstash/public/services/pipeline/index.js deleted file mode 100755 index 3b0e28bd555e6f..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/pipeline/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. - */ - -import './pipeline_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.factory.js deleted file mode 100755 index cf93915425213b..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.factory.js +++ /dev/null @@ -1,14 +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 { uiModules } from 'ui/modules'; -import { PipelineService } from './pipeline_service'; - -uiModules.get('xpack/logstash').factory('pipelineService', $injector => { - const $http = $injector.get('$http'); - const pipelinesService = $injector.get('pipelinesService'); - return new PipelineService($http, pipelinesService); -}); 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 deleted file mode 100755 index b5d0dbeb852d52..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/pipeline/pipeline_service.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 chrome from 'ui/chrome'; -import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; -import { Pipeline } from 'plugins/logstash/models/pipeline'; - -export class PipelineService { - constructor($http, pipelinesService) { - this.$http = $http; - this.pipelinesService = pipelinesService; - this.basePath = chrome.addBasePath(ROUTES.API_ROOT); - } - - loadPipeline(id) { - return this.$http.get(`${this.basePath}/pipeline/${id}`).then(response => { - return Pipeline.fromUpstreamJSON(response.data); - }); - } - - savePipeline(pipelineModel) { - return this.$http - .put(`${this.basePath}/pipeline/${pipelineModel.id}`, pipelineModel.upstreamJSON) - .catch(e => { - throw e.data.message; - }); - } - - deletePipeline(id) { - return this.$http - .delete(`${this.basePath}/pipeline/${id}`) - .then(() => this.pipelinesService.addToRecentlyDeleted(id)) - .catch(e => { - throw e.data.message; - }); - } -} diff --git a/x-pack/legacy/plugins/logstash/public/services/pipelines/index.js b/x-pack/legacy/plugins/logstash/public/services/pipelines/index.js deleted file mode 100755 index e273e12d46c6d0..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/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. - */ - -import './pipelines_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.factory.js deleted file mode 100755 index 9295949e001eb3..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.factory.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 { uiModules } from 'ui/modules'; -import { PipelinesService } from './pipelines_service'; -import '../monitoring'; - -uiModules.get('xpack/logstash').factory('pipelinesService', $injector => { - const $http = $injector.get('$http'); - const $window = $injector.get('$window'); - const Promise = $injector.get('Promise'); - const monitoringService = $injector.get('xpackLogstashMonitoringService'); - return new PipelinesService($http, $window, Promise, monitoringService); -}); 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 deleted file mode 100755 index d70c8be06fde4d..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/pipelines/pipelines_service.js +++ /dev/null @@ -1,135 +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 chrome from 'ui/chrome'; -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'; - -export class PipelinesService { - constructor($http, $window, Promise, monitoringService) { - this.$http = $http; - this.$window = $window; - this.Promise = Promise; - this.monitoringService = monitoringService; - this.basePath = chrome.addBasePath(ROUTES.API_ROOT); - } - - getPipelineList() { - return this.Promise.all([ - this.getManagementPipelineList(), - this.getMonitoringPipelineList(), - ]).then(([managementPipelines, monitoringPipelines]) => { - const now = Date.now(); - - // Monitoring will report centrally-managed pipelines as well, including recently-deleted centrally-managed ones. - // If there's a recently-deleted pipeline we're keeping track of BUT monitoring doesn't report it, that means - // it's not running in Logstash any more. So we can stop tracking it as a recently-deleted pipeline. - const monitoringPipelineIds = monitoringPipelines.map(pipeline => pipeline.id); - this.getRecentlyDeleted().forEach(recentlyDeletedPipeline => { - // We don't want to stop tracking the recently-deleted pipeline until Monitoring has had some - // time to report on it. Otherwise, if we stop tracking first, *then* Monitoring reports it, we'll - // still end up showing it in the list until Monitoring stops reporting it. - if (now - recentlyDeletedPipeline.deletedOn < MONITORING.ACTIVE_PIPELINE_RANGE_S * 1000) { - return; - } - - // If Monitoring is still reporting the pipeline, don't stop tracking it yet - if (monitoringPipelineIds.includes(recentlyDeletedPipeline.id)) { - return; - } - - this.removeFromRecentlyDeleted(recentlyDeletedPipeline.id); - }); - - // Merge centrally-managed pipelines with pipelines reported by monitoring. Take care to dedupe - // while merging because monitoring will (rightly) report centrally-managed pipelines as well, - // including recently-deleted ones! - const managementPipelineIds = managementPipelines.map(pipeline => pipeline.id); - return managementPipelines.concat( - monitoringPipelines.filter( - monitoringPipeline => - !managementPipelineIds.includes(monitoringPipeline.id) && - !this.isRecentlyDeleted(monitoringPipeline.id) - ) - ); - }); - } - - getManagementPipelineList() { - return this.$http - .get(`${this.basePath}/pipelines`) - .then(response => - response.data.pipelines.map(pipeline => PipelineListItem.fromUpstreamJSON(pipeline)) - ); - } - - getMonitoringPipelineList() { - return this.monitoringService.getPipelineList(); - } - - /** - * Delete a collection of pipelines - * - * @param pipelineIds Array of pipeline IDs - * @return Promise { numSuccesses, numErrors } - */ - deletePipelines(pipelineIds) { - const body = { - pipelineIds, - }; - return this.$http.post(`${this.basePath}/pipelines/delete`, body).then(response => { - this.addToRecentlyDeleted(...pipelineIds); - return response.data.results; - }); - } - - addToRecentlyDeleted(...pipelineIds) { - const recentlyDeletedPipelines = this.getRecentlyDeleted(); - const recentlyDeletedPipelineIds = recentlyDeletedPipelines.map(pipeline => pipeline.id); - pipelineIds.forEach(pipelineId => { - if (!recentlyDeletedPipelineIds.includes(pipelineId)) { - recentlyDeletedPipelines.push({ - id: pipelineId, - deletedOn: Date.now(), - }); - } - }); - this.setRecentlyDeleted(recentlyDeletedPipelines); - } - - removeFromRecentlyDeleted(...pipelineIds) { - const recentlyDeletedPipelinesToKeep = this.getRecentlyDeleted().filter( - recentlyDeletedPipeline => !pipelineIds.includes(recentlyDeletedPipeline.id) - ); - this.setRecentlyDeleted(recentlyDeletedPipelinesToKeep); - } - - isRecentlyDeleted(pipelineId) { - return this.getRecentlyDeleted() - .map(pipeline => pipeline.id) - .includes(pipelineId); - } - - getRecentlyDeleted() { - const recentlyDeletedPipelines = this.$window.localStorage.getItem( - RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY - ); - if (!recentlyDeletedPipelines) { - return []; - } - - return JSON.parse(recentlyDeletedPipelines); - } - - setRecentlyDeleted(recentlyDeletedPipelineIds) { - this.$window.localStorage.setItem( - RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY, - JSON.stringify(recentlyDeletedPipelineIds) - ); - } -} diff --git a/x-pack/legacy/plugins/logstash/public/services/security/index.js b/x-pack/legacy/plugins/logstash/public/services/security/index.js deleted file mode 100755 index c9ff911723156f..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/security/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 { logstashSecurity } from './logstash_security'; diff --git a/x-pack/legacy/plugins/logstash/public/services/security/logstash_security.js b/x-pack/legacy/plugins/logstash/public/services/security/logstash_security.js deleted file mode 100755 index 0949038c9b6c73..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/security/logstash_security.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 { xpackInfo } from 'plugins/xpack_main/services/xpack_info'; - -export const logstashSecurity = { - isSecurityEnabled() { - return Boolean(xpackInfo.get(`features.security`)); - }, -}; diff --git a/x-pack/legacy/plugins/logstash/public/services/upgrade/index.js b/x-pack/legacy/plugins/logstash/public/services/upgrade/index.js deleted file mode 100755 index 345d0d0ff68c6d..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/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. - */ - -import './upgrade_service.factory'; diff --git a/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.factory.js b/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.factory.js deleted file mode 100755 index 925c6ae677bdf7..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.factory.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 { uiModules } from 'ui/modules'; -import { UpgradeService } from './upgrade_service'; - -uiModules.get('xpack/logstash').factory('upgradeService', $injector => { - const $http = $injector.get('$http'); - return new UpgradeService($http); -}); 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 deleted file mode 100755 index 2019bdc1bf1aaa..00000000000000 --- a/x-pack/legacy/plugins/logstash/public/services/upgrade/upgrade_service.js +++ /dev/null @@ -1,24 +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 chrome from 'ui/chrome'; -import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; - -export class UpgradeService { - constructor($http) { - this.$http = $http; - this.basePath = chrome.addBasePath(ROUTES.API_ROOT); - } - - executeUpgrade() { - return this.$http - .post(`${this.basePath}/upgrade`) - .then(response => response.data.is_upgraded) - .catch(e => { - throw e.data.message; - }); - } -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/check_license/__tests__/check_license.js b/x-pack/legacy/plugins/logstash/server/lib/check_license/__tests__/check_license.js deleted file mode 100755 index 5fcce0aaa12190..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/check_license/__tests__/check_license.js +++ /dev/null @@ -1,179 +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 { set } from 'lodash'; -import { checkLicense } from '../check_license'; - -describe('check_license', function() { - let mockLicenseInfo; - beforeEach(() => (mockLicenseInfo = {})); - - describe('license information is undefined', () => { - beforeEach(() => (mockLicenseInfo = undefined)); - - it('should set isAvailable to false', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(false); - }); - - it('should set enableLinks to false', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(false); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - - describe('license information is not available', () => { - beforeEach(() => (mockLicenseInfo.isAvailable = () => false)); - - it('should set isAvailable to false', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(false); - }); - - it('should set enableLinks to false', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(false); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - - describe('license information is available', () => { - beforeEach(() => { - mockLicenseInfo.isAvailable = () => true; - set(mockLicenseInfo, 'license.getType', () => 'basic'); - }); - - describe('& license is > basic', () => { - beforeEach(() => { - set(mockLicenseInfo, 'license.isOneOf', () => true); - mockLicenseInfo.feature = () => ({ isEnabled: () => true }); // Security feature is enabled - }); - - describe('& license is active', () => { - beforeEach(() => set(mockLicenseInfo, 'license.isActive', () => true)); - - it('should set isAvailable to true', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(true); - }); - - it('should set enableLinks to true', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(true); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should not set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.be(undefined); - }); - }); - - describe('& license is expired', () => { - beforeEach(() => set(mockLicenseInfo, 'license.isActive', () => false)); - - it('should set isAvailable to true', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(true); - }); - - it('should set enableLinks to true', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(true); - }); - - it('should set isReadOnly to true', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(true); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - }); - - describe('& license is basic', () => { - beforeEach(() => { - set(mockLicenseInfo, 'license.isOneOf', () => false); - mockLicenseInfo.feature = () => ({ isEnabled: () => true }); // Security feature is enabled - }); - - describe('& license is active', () => { - beforeEach(() => set(mockLicenseInfo, 'license.isActive', () => true)); - - it('should set isAvailable to false', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(false); - }); - - it('should set enableLinks to false', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(false); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - - describe('& license is expired', () => { - beforeEach(() => set(mockLicenseInfo, 'license.isActive', () => false)); - - it('should set isAvailable to false', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(false); - }); - - it('should set enableLinks to false', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(false); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - }); - - describe('& security is disabled', () => { - beforeEach(() => { - mockLicenseInfo.feature = () => ({ isEnabled: () => false }); // Security feature is disabled - set(mockLicenseInfo, 'license.isOneOf', () => true); - set(mockLicenseInfo, 'license.isActive', () => true); - }); - - it('should set isAvailable to false', () => { - expect(checkLicense(mockLicenseInfo).isAvailable).to.be(false); - }); - - it('should set enableLinks to false', () => { - expect(checkLicense(mockLicenseInfo).enableLinks).to.be(false); - }); - - it('should set isReadOnly to false', () => { - expect(checkLicense(mockLicenseInfo).isReadOnly).to.be(false); - }); - - it('should set a message', () => { - expect(checkLicense(mockLicenseInfo).message).to.not.be(undefined); - }); - }); - }); -}); diff --git a/x-pack/legacy/plugins/logstash/server/lib/check_license/check_license.js b/x-pack/legacy/plugins/logstash/server/lib/check_license/check_license.js deleted file mode 100755 index 31136ae1c72a5c..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/check_license/check_license.js +++ /dev/null @@ -1,86 +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 { i18n } from '@kbn/i18n'; - -export function checkLicense(xpackLicenseInfo) { - // If, for some reason, we cannot get the license information - // from Elasticsearch, assume worst case and disable the Logstash pipeline UI - if (!xpackLicenseInfo || !xpackLicenseInfo.isAvailable()) { - return { - isAvailable: false, - enableLinks: false, - isReadOnly: false, - message: i18n.translate( - 'xpack.logstash.managementSection.notPossibleToManagePipelinesMessage', - { - defaultMessage: - 'You cannot manage Logstash pipelines because license information is not available at this time.', - } - ), - }; - } - - const VALID_LICENSE_MODES = ['trial', 'standard', 'gold', 'platinum', 'enterprise']; - - const isLicenseModeValid = xpackLicenseInfo.license.isOneOf(VALID_LICENSE_MODES); - const isLicenseActive = xpackLicenseInfo.license.isActive(); - const licenseType = xpackLicenseInfo.license.getType(); - const isSecurityEnabled = xpackLicenseInfo.feature('security').isEnabled(); - - // Security is not enabled in ES - if (!isSecurityEnabled) { - const 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 { - isAvailable: false, - enableLinks: false, - isReadOnly: false, - message, - }; - } - - // License is not valid - if (!isLicenseModeValid) { - return { - isAvailable: false, - enableLinks: false, - isReadOnly: 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 is valid but not active, we go into a read-only mode. - if (!isLicenseActive) { - return { - isAvailable: true, - enableLinks: true, - isReadOnly: true, - 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 is valid and active - return { - isAvailable: true, - enableLinks: true, - isReadOnly: false, - }; -} diff --git a/x-pack/legacy/plugins/logstash/server/lib/check_license/index.js b/x-pack/legacy/plugins/logstash/server/lib/check_license/index.js deleted file mode 100755 index f2c070fd44b6e6..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/check_license/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 { checkLicense } from './check_license'; diff --git a/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/index.js b/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/index.js deleted file mode 100755 index 7b0f97c38d1292..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/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 { registerLicenseChecker } from './register_license_checker'; 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 deleted file mode 100755 index a0d06e77b410d2..00000000000000 --- a/x-pack/legacy/plugins/logstash/server/lib/register_license_checker/register_license_checker.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 { mirrorPluginStatus } from '../../../../../server/lib/mirror_plugin_status'; -import { checkLicense } from '../check_license'; -import { PLUGIN } from '../../../../../../plugins/logstash/common/constants'; - -export function registerLicenseChecker(server) { - const xpackMainPlugin = server.plugins.xpack_main; - const logstashPlugin = server.plugins.logstash; - - mirrorPluginStatus(xpackMainPlugin, logstashPlugin); - xpackMainPlugin.status.once('green', () => { - // Register a function that is called whenever the xpack info changes, - // to re-compute the license check results for this plugin - xpackMainPlugin.info.feature(PLUGIN.ID).registerLicenseCheckResultsGenerator(checkLicense); - }); -} diff --git a/x-pack/plugins/logstash/kibana.json b/x-pack/plugins/logstash/kibana.json index bcc926535d3c28..97dbf58865a882 100644 --- a/x-pack/plugins/logstash/kibana.json +++ b/x-pack/plugins/logstash/kibana.json @@ -4,9 +4,13 @@ "kibanaVersion": "kibana", "configPath": ["xpack", "logstash"], "requiredPlugins": [ - "licensing" + "licensing", + "management" + ], + "optionalPlugins": [ + "home", + "security" ], - "optionalPlugins": ["security"], "server": true, - "ui": false + "ui": true } diff --git a/x-pack/legacy/plugins/logstash/public/sections/breadcrumbs.js b/x-pack/plugins/logstash/public/application/breadcrumbs.js similarity index 80% rename from x-pack/legacy/plugins/logstash/public/sections/breadcrumbs.js rename to x-pack/plugins/logstash/public/application/breadcrumbs.js index 3121a58ff6a74f..322b9860b37854 100644 --- a/x-pack/legacy/plugins/logstash/public/sections/breadcrumbs.js +++ b/x-pack/plugins/logstash/public/application/breadcrumbs.js @@ -5,11 +5,9 @@ */ import { i18n } from '@kbn/i18n'; -import { MANAGEMENT_BREADCRUMB } from 'ui/management'; export function getPipelineListBreadcrumbs() { return [ - MANAGEMENT_BREADCRUMB, { text: i18n.translate('xpack.logstash.pipelines.listBreadcrumb', { defaultMessage: 'Pipelines', @@ -19,12 +17,11 @@ export function getPipelineListBreadcrumbs() { ]; } -export function getPipelineEditBreadcrumbs($route) { - const { pipeline } = $route.current.locals; +export function getPipelineEditBreadcrumbs(pipelineId) { return [ ...getPipelineListBreadcrumbs(), { - text: pipeline.id, + text: pipelineId, }, ]; } diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/confirm_delete_pipeline_modal.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/confirm_delete_pipeline_modal.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/confirm_delete_pipeline_modal.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/confirm_delete_pipeline_modal.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/flex_item_setting.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/flex_item_setting.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/flex_item_setting.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/flex_item_setting.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/form_label_with_icon_tip.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/form_label_with_icon_tip.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/form_label_with_icon_tip.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/form_label_with_icon_tip.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/pipeline_editor.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/pipeline_editor.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/__snapshots__/pipeline_editor.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/__snapshots__/pipeline_editor.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/confirm_delete_pipeline_modal.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/confirm_delete_pipeline_modal.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/confirm_delete_pipeline_modal.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/confirm_delete_pipeline_modal.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/confirm_delete_pipeline_modal.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/confirm_delete_pipeline_modal.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/confirm_delete_pipeline_modal.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/confirm_delete_pipeline_modal.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/constants.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/constants.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/constants.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/constants.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/flex_item_setting.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/flex_item_setting.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/flex_item_setting.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/flex_item_setting.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/flex_item_setting.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/flex_item_setting.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/flex_item_setting.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/flex_item_setting.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/form_label_with_icon_tip.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/form_label_with_icon_tip.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/form_label_with_icon_tip.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/form_label_with_icon_tip.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/form_label_with_icon_tip.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/form_label_with_icon_tip.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/form_label_with_icon_tip.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/form_label_with_icon_tip.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/index.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/index.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/index.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/pipeline_editor.js similarity index 97% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/pipeline_editor.js index 5e430ccbd8cebc..e45820d56cc03d 100644 --- a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.js +++ b/x-pack/plugins/logstash/public/application/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 '../../../../../../plugins/logstash/common/constants/tooltips'; +import { TOOLTIPS } from '../../../../common/constants/tooltips'; import { EuiButton, EuiButtonEmpty, @@ -40,7 +40,6 @@ class PipelineEditorUi extends React.Component { const { pipeline: { id, description, pipeline, settings }, - username, } = this.props; const pipelineWorkersSet = typeof settings['pipeline.workers'] === 'number'; @@ -60,7 +59,6 @@ class PipelineEditorUi extends React.Component { 'queue.max_bytes': settings['queue.max_bytes.number'] + settings['queue.max_bytes.units'], 'queue.type': settings['queue.type'], }, - username, }, pipelineIdErrors: [], pipelineIdPattern: /^[A-Za-z\_][A-Za-z0-9\-\_]*$/, @@ -236,15 +234,7 @@ class PipelineEditorUi extends React.Component { }; getPipelineHeadingText = () => { - const { - routeService: { - current: { - params: { clone, id }, - }, - }, - isNewPipeline, - intl, - } = this.props; + const { clone, id, isNewPipeline, intl } = this.props; if (!!clone && id) { return intl.formatMessage( @@ -502,6 +492,8 @@ class PipelineEditorUi extends React.Component { } PipelineEditorUi.propTypes = { + id: PropTypes.string, + clone: PropTypes.bool.isRequired, close: PropTypes.func.isRequired, isNewPipeline: PropTypes.bool.isRequired, licenseService: PropTypes.shape({ @@ -527,20 +519,11 @@ PipelineEditorUi.propTypes = { deletePipeline: PropTypes.func.isRequired, savePipeline: PropTypes.func.isRequired, }).isRequired, - routeService: PropTypes.shape({ - current: PropTypes.shape({ - params: PropTypes.shape({ - clone: PropTypes.oneOf([true, undefined]), - id: PropTypes.string, - }), - }), - }).isRequired, toastNotifications: PropTypes.shape({ addWarning: PropTypes.func.isRequired, addSuccess: PropTypes.func.isRequired, addError: PropTypes.func.isRequired, }).isRequired, - username: PropTypes.string, }; export const PipelineEditor = injectI18n(PipelineEditorUi); diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_editor/pipeline_editor.test.js similarity index 96% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_editor/pipeline_editor.test.js index 2d7ed5f257fbda..bb5961ce36120c 100644 --- a/x-pack/legacy/plugins/logstash/public/components/pipeline_editor/pipeline_editor.test.js +++ b/x-pack/plugins/logstash/public/application/components/pipeline_editor/pipeline_editor.test.js @@ -17,7 +17,6 @@ describe('PipelineEditor component', () => { let open; let pipeline; let pipelineService; - let routeService; let toastNotifications; let username; @@ -47,14 +46,6 @@ describe('PipelineEditor component', () => { deletePipeline: jest.fn(), savePipeline: jest.fn(), }; - routeService = { - current: { - params: { - clone: undefined, - id: undefined, - }, - }, - }; toastNotifications = { addWarning: jest.fn(), addSuccess: jest.fn(), @@ -62,13 +53,14 @@ describe('PipelineEditor component', () => { }; username = 'elastic'; props = { + clone: false, + id: 'pipelineId', close, isNewPipeline, licenseService, open, pipeline, pipelineService, - routeService, toastNotifications, username, }; @@ -79,10 +71,8 @@ describe('PipelineEditor component', () => { }); it('matches snapshot for clone pipeline', () => { - routeService.current.params = { - clone: true, - id: 'pipelineToClone', - }; + props.clone = true; + props.id = 'pipelineToClone'; expect(shallowWithIntl()).toMatchSnapshot(); }); diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/add_role_alert.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/add_role_alert.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/add_role_alert.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/add_role_alert.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/alert_call_out.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/alert_call_out.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/alert_call_out.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/alert_call_out.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/confirm_delete_modal.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/confirm_delete_modal.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/confirm_delete_modal.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/confirm_delete_modal.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/enable_monitoring_alert.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/enable_monitoring_alert.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/enable_monitoring_alert.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/enable_monitoring_alert.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/info_alerts.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/info_alerts.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/info_alerts.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/info_alerts.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/pipelines_table.test.js.snap b/x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/pipelines_table.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/__snapshots__/pipelines_table.test.js.snap rename to x-pack/plugins/logstash/public/application/components/pipeline_list/__snapshots__/pipelines_table.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/add_role_alert.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/add_role_alert.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/add_role_alert.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/add_role_alert.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/add_role_alert.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/add_role_alert.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/add_role_alert.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/add_role_alert.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/alert_call_out.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/alert_call_out.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/alert_call_out.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/alert_call_out.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/alert_call_out.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/alert_call_out.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/alert_call_out.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/alert_call_out.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/confirm_delete_modal.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/confirm_delete_modal.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/confirm_delete_modal.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/confirm_delete_modal.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/confirm_delete_modal.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/confirm_delete_modal.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/confirm_delete_modal.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/confirm_delete_modal.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/constants.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/constants.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/constants.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/constants.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/enable_monitoring_alert.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/enable_monitoring_alert.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/enable_monitoring_alert.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/enable_monitoring_alert.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/enable_monitoring_alert.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/enable_monitoring_alert.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/enable_monitoring_alert.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/enable_monitoring_alert.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/index.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/index.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/index.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/info_alerts.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/info_alerts.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/info_alerts.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/info_alerts.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/info_alerts.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/info_alerts.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/info_alerts.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/info_alerts.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipeline_list.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/pipeline_list.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipeline_list.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/pipeline_list.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipeline_list.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/pipeline_list.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipeline_list.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/pipeline_list.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipelines_table.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/pipelines_table.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipelines_table.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/pipelines_table.js diff --git a/x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipelines_table.test.js b/x-pack/plugins/logstash/public/application/components/pipeline_list/pipelines_table.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/pipeline_list/pipelines_table.test.js rename to x-pack/plugins/logstash/public/application/components/pipeline_list/pipelines_table.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure.test.js.snap b/x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure.test.js.snap rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure_actions.test.js.snap b/x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure_actions.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure_actions.test.js.snap rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure_actions.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure_title.test.js.snap b/x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure_title.test.js.snap similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/__snapshots__/upgrade_failure_title.test.js.snap rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/__snapshots__/upgrade_failure_title.test.js.snap diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/constants.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/constants.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/constants.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/constants.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/index.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/index.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/index.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure.test.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure.test.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_actions.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_actions.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_actions.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_actions.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_actions.test.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_actions.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_actions.test.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_actions.test.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_title.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_title.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_title.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_title.js diff --git a/x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_title.test.js b/x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_title.test.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/components/upgrade_failure/upgrade_failure_title.test.js rename to x-pack/plugins/logstash/public/application/components/upgrade_failure/upgrade_failure_title.test.js diff --git a/x-pack/plugins/logstash/public/application/index.tsx b/x-pack/plugins/logstash/public/application/index.tsx new file mode 100644 index 00000000000000..438038d6c885e0 --- /dev/null +++ b/x-pack/plugins/logstash/public/application/index.tsx @@ -0,0 +1,117 @@ +/* + * 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 ReactDOM from 'react-dom'; +import { HashRouter, Route, Switch, Redirect } from 'react-router-dom'; +import { Observable } from 'rxjs'; +import { first } from 'rxjs/operators'; + +import { CoreStart } from 'src/core/public'; +import { ManagementAppMountParams } from '../../../../../src/plugins/management/public'; +import { + ClusterService, + MonitoringService, + PipelineService, + PipelinesService, + UpgradeService, + // @ts-ignore +} from '../services'; +// @ts-ignore +import { PipelineList } from './components/pipeline_list'; +import { PipelineEditView } from './pipeline_edit_view'; +// @ts-ignore +import { Pipeline } from '../models/pipeline'; +// @ts-ignore +import * as Breadcrumbs from './breadcrumbs'; + +export const renderApp = async ( + core: CoreStart, + { basePath, element, setBreadcrumbs }: ManagementAppMountParams, + licenseService$: Observable +) => { + const logstashLicenseService = await licenseService$.pipe(first()).toPromise(); + const clusterService = new ClusterService(core.http); + const monitoringService = new MonitoringService( + core.http, + // When monitoring is migrated this should be fetched from monitoring's plugin contract + core.injectedMetadata.getInjectedVar('monitoringUiEnabled'), + clusterService + ); + const pipelinesService = new PipelinesService(core.http, monitoringService); + const pipelineService = new PipelineService(core.http, pipelinesService); + const upgradeService = new UpgradeService(core.http); + + ReactDOM.render( + + + + { + setBreadcrumbs(Breadcrumbs.getPipelineListBreadcrumbs()); + return ( + history.push(`/pipeline/${id}/edit`)} + clonePipeline={(id: string) => history.push(`/pipeline/${id}/edit?clone`)} + createPipeline={() => history.push(`/pipeline/new-pipeline`)} + pipelinesService={pipelinesService} + toastNotifications={core.notifications.toasts} + /> + ); + }} + /> + ( + + )} + /> + } + /> + ( + + )} + /> + + + , + element + ); + + return () => { + ReactDOM.unmountComponentAtNode(element); + }; +}; diff --git a/x-pack/plugins/logstash/public/application/pipeline_edit_view.tsx b/x-pack/plugins/logstash/public/application/pipeline_edit_view.tsx new file mode 100644 index 00000000000000..c1b465febcd9ba --- /dev/null +++ b/x-pack/plugins/logstash/public/application/pipeline_edit_view.tsx @@ -0,0 +1,153 @@ +/* + * 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, { useState, useLayoutEffect, useCallback } from 'react'; +import { usePromise } from 'react-use'; +import { History } from 'history'; + +import { i18n } from '@kbn/i18n'; +import { ToastsStart } from 'src/core/public'; + +// @ts-ignore +import { UpgradeFailure } from './components/upgrade_failure'; +// @ts-ignore +import { PipelineEditor } from './components/pipeline_editor'; +// @ts-ignore +import { Pipeline } from '../models/pipeline'; +import { ManagementAppMountParams } from '../../../../../src/plugins/management/public'; +// @ts-ignore +import * as Breadcrumbs from './breadcrumbs'; + +const usePipeline = ( + pipelineService: any, + logstashLicenseService: any, + toasts: ToastsStart, + shouldClone: boolean, + id?: string +) => { + const mounted = usePromise(); + const [pipeline, setPipeline] = useState(null); + + useLayoutEffect(() => { + (async () => { + if (!id) { + return setPipeline(new Pipeline()); + } + + try { + const result = await mounted(pipelineService.loadPipeline(id) as Promise); + setPipeline(shouldClone ? result.clone : result); + } catch (e) { + await logstashLicenseService.checkValidity(); + if (e.status !== 403) { + toasts.addDanger( + i18n.translate('xpack.logstash.couldNotLoadPipelineErrorNotification', { + defaultMessage: `Couldn't load pipeline. Error: '{errStatusText}'.`, + values: { + errStatusText: e.statusText, + }, + }) + ); + } + } + })(); + }, [pipelineService, id, mounted, shouldClone, logstashLicenseService, toasts]); + + return pipeline; +}; + +const useIsUpgraded = (upgradeService: any) => { + const [isUpgraded, setIsUpgraded] = useState(null); + const mounted = usePromise(); + + useLayoutEffect(() => { + mounted(upgradeService.executeUpgrade() as Promise).then(result => + setIsUpgraded(result) + ); + }, [mounted, upgradeService]); + + return isUpgraded; +}; + +interface EditProps { + pipelineService: any; + logstashLicenseService: any; + upgradeService: any; + toasts: ToastsStart; + history: History; + setBreadcrumbs: ManagementAppMountParams['setBreadcrumbs']; + + // URL params + id?: string; +} + +export const PipelineEditView: React.FC = ({ + pipelineService, + logstashLicenseService, + upgradeService, + toasts, + history, + setBreadcrumbs, + id, +}) => { + const params = new URLSearchParams(history.location.search); + const shouldRetry = params.get('retry') === 'true'; + const shouldClone = params.get('clone') === ''; + + const pipeline = usePipeline(pipelineService, logstashLicenseService, toasts, shouldClone, id); + const isUpgraded = useIsUpgraded(upgradeService); + + const onRetry = useCallback(() => { + const newParams = new URLSearchParams(history.location.search); + newParams.set('retry', 'true'); + history.replace({ search: newParams.toString() }); + }, [history]); + const close = useCallback(() => { + history.push('/'); + }, [history]); + const open = useCallback( + (newId: string) => { + history.push(`/pipeline/${newId}/edit`); + }, + [history] + ); + + if (!pipeline || isUpgraded === null) { + return null; + } + + const isNewPipeline = !pipeline.id; + setBreadcrumbs( + isNewPipeline + ? Breadcrumbs.getPipelineCreateBreadcrumbs() + : Breadcrumbs.getPipelineEditBreadcrumbs(pipeline.id) + ); + + if (!isUpgraded) { + return ( + + ); + } + + return ( + + ); +}; diff --git a/x-pack/plugins/logstash/public/index.ts b/x-pack/plugins/logstash/public/index.ts new file mode 100644 index 00000000000000..26a1ca4e8c6c43 --- /dev/null +++ b/x-pack/plugins/logstash/public/index.ts @@ -0,0 +1,9 @@ +/* + * 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 { LogstashPlugin } from './plugin'; + +export const plugin = () => new LogstashPlugin(); diff --git a/x-pack/legacy/plugins/logstash/public/lib/get_search_value/get_search_value.js b/x-pack/plugins/logstash/public/lib/get_search_value/get_search_value.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/lib/get_search_value/get_search_value.js rename to x-pack/plugins/logstash/public/lib/get_search_value/get_search_value.js diff --git a/x-pack/legacy/plugins/logstash/public/lib/get_search_value/index.js b/x-pack/plugins/logstash/public/lib/get_search_value/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/lib/get_search_value/index.js rename to x-pack/plugins/logstash/public/lib/get_search_value/index.js diff --git a/x-pack/legacy/plugins/logstash/public/models/cluster/cluster.js b/x-pack/plugins/logstash/public/models/cluster/cluster.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/models/cluster/cluster.js rename to x-pack/plugins/logstash/public/models/cluster/cluster.js diff --git a/x-pack/legacy/plugins/logstash/public/models/cluster/index.js b/x-pack/plugins/logstash/public/models/cluster/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/models/cluster/index.js rename to x-pack/plugins/logstash/public/models/cluster/index.js diff --git a/x-pack/legacy/plugins/logstash/public/models/pipeline/index.js b/x-pack/plugins/logstash/public/models/pipeline/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/models/pipeline/index.js rename to x-pack/plugins/logstash/public/models/pipeline/index.js diff --git a/x-pack/legacy/plugins/logstash/public/models/pipeline/pipeline.js b/x-pack/plugins/logstash/public/models/pipeline/pipeline.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/models/pipeline/pipeline.js rename to x-pack/plugins/logstash/public/models/pipeline/pipeline.js diff --git a/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/index.js b/x-pack/plugins/logstash/public/models/pipeline_list_item/index.js similarity index 100% rename from x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/index.js rename to x-pack/plugins/logstash/public/models/pipeline_list_item/index.js diff --git a/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js b/x-pack/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js similarity index 83% rename from x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js rename to x-pack/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js index 06d01a05bac278..3a304e467e0c0d 100755 --- a/x-pack/legacy/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js +++ b/x-pack/plugins/logstash/public/models/pipeline_list_item/pipeline_list_item.js @@ -5,10 +5,10 @@ */ import { pick, capitalize } from 'lodash'; +import moment from 'moment'; -import { getSearchValue } from 'plugins/logstash/lib/get_search_value'; -import { getMoment } from 'plugins/logstash/../common/lib/get_moment'; -import { PIPELINE } from '../../../../../../plugins/logstash/common/constants'; +import { getSearchValue } from '../../lib/get_search_value'; +import { PIPELINE } from '../../../common/constants'; /** * Represents the model for listing pipelines in the UI @@ -25,7 +25,7 @@ export class PipelineListItem { this.username = props.username; if (props.lastModified) { - this.lastModified = getMoment(props.lastModified); + this.lastModified = getMomentDate(props.lastModified); this.lastModifiedHumanized = capitalize(this.lastModified.fromNow()); } } @@ -51,3 +51,11 @@ export class PipelineListItem { return new PipelineListItem(props); } } + +function getMomentDate(date) { + if (!date) { + return null; + } + + return moment(date); +} diff --git a/x-pack/plugins/logstash/public/plugin.ts b/x-pack/plugins/logstash/public/plugin.ts new file mode 100644 index 00000000000000..91d1a39d3970cf --- /dev/null +++ b/x-pack/plugins/logstash/public/plugin.ts @@ -0,0 +1,92 @@ +/* + * 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 { Subscription } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { once } from 'lodash'; + +import { CoreSetup, CoreStart, Plugin } from 'src/core/public'; +import { + HomePublicPluginSetup, + FeatureCatalogueCategory, +} from '../../../../src/plugins/home/public'; +import { LicensingPluginSetup } from '../../licensing/public'; +import { ManagementSetup } from '../../../../src/plugins/management/public'; + +// @ts-ignore +import { LogstashLicenseService } from './services'; + +interface SetupDeps { + licensing: LicensingPluginSetup; + management: ManagementSetup; + + home?: HomePublicPluginSetup; +} + +export class LogstashPlugin implements Plugin { + private licenseSubscription?: Subscription; + + public setup(core: CoreSetup, plugins: SetupDeps) { + const logstashLicense$ = plugins.licensing.license$.pipe( + map(license => new LogstashLicenseService(license)) + ); + const section = plugins.management.sections.register({ + id: 'logstash', + title: 'Logstash', + order: 30, + euiIconType: 'logoLogstash', + }); + const managementApp = section.registerApp({ + id: 'pipelines', + title: i18n.translate('xpack.logstash.managementSection.pipelinesTitle', { + defaultMessage: 'Pipelines', + }), + order: 10, + mount: async params => { + const [coreStart] = await core.getStartServices(); + const { renderApp } = await import('./application'); + + return renderApp(coreStart, params, logstashLicense$); + }, + }); + + this.licenseSubscription = logstashLicense$.subscribe((license: any) => { + if (license.enableLinks) { + managementApp.enable(); + } else { + managementApp.disable(); + } + + if (plugins.home && license.enableLinks) { + // Ensure that we don't register the feature more than once + once(() => { + plugins.home!.featureCatalogue.register({ + id: 'management_logstash', + title: i18n.translate('xpack.logstash.homeFeature.logstashPipelinesTitle', { + defaultMessage: 'Logstash Pipelines', + }), + description: i18n.translate('xpack.logstash.homeFeature.logstashPipelinesDescription', { + defaultMessage: 'Create, delete, update, and clone data ingestion pipelines.', + }), + icon: 'pipelineApp', + path: '/app/kibana#/management/logstash/pipelines', + showOnHomePage: true, + category: FeatureCatalogueCategory.ADMIN, + }); + }); + } + }); + } + + public start(core: CoreStart) {} + + public stop() { + if (this.licenseSubscription) { + this.licenseSubscription.unsubscribe(); + } + } +} diff --git a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js b/x-pack/plugins/logstash/public/services/cluster/cluster_service.js similarity index 51% rename from x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js rename to x-pack/plugins/logstash/public/services/cluster/cluster_service.js index e89c2fe7d11bf9..20f3b0d349c803 100755 --- a/x-pack/legacy/plugins/logstash/public/services/cluster/cluster_service.js +++ b/x-pack/plugins/logstash/public/services/cluster/cluster_service.js @@ -4,22 +4,20 @@ * you may not use this file except in compliance with the Elastic License. */ -import chrome from 'ui/chrome'; -import { ROUTES } from '../../../../../../plugins/logstash/common/constants'; -import { Cluster } from 'plugins/logstash/models/cluster'; +import { ROUTES } from '../../../common/constants'; +import { Cluster } from '../../models/cluster'; export class ClusterService { - constructor($http) { - this.$http = $http; - this.basePath = chrome.addBasePath(ROUTES.API_ROOT); + constructor(http) { + this.http = http; } loadCluster() { - return this.$http.get(`${this.basePath}/cluster`).then(response => { - if (!response.data) { + return this.http.get(`${ROUTES.API_ROOT}/cluster`).then(response => { + if (!response) { return; } - return Cluster.fromUpstreamJSON(response.data.cluster); + return Cluster.fromUpstreamJSON(response.cluster); }); } diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/index.js b/x-pack/plugins/logstash/public/services/cluster/index.js similarity index 82% rename from x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/index.js rename to x-pack/plugins/logstash/public/services/cluster/index.js index 5889bbdf96a93c..4417262d9f442e 100755 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/pipeline_edit/index.js +++ b/x-pack/plugins/logstash/public/services/cluster/index.js @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -import './pipeline_edit'; +export { ClusterService } from './cluster_service'; diff --git a/x-pack/plugins/logstash/public/services/index.js b/x-pack/plugins/logstash/public/services/index.js new file mode 100644 index 00000000000000..a7e8aa5c6259f5 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/index.js @@ -0,0 +1,12 @@ +/* + * 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 { ClusterService } from './cluster'; +export { LogstashLicenseService } from './license'; +export { MonitoringService } from './monitoring'; +export { PipelineService } from './pipeline'; +export { PipelinesService } from './pipelines'; +export { UpgradeService } from './upgrade'; diff --git a/x-pack/legacy/plugins/logstash/public/lib/update_management_sections/index.js b/x-pack/plugins/logstash/public/services/license/index.js similarity index 77% rename from x-pack/legacy/plugins/logstash/public/lib/update_management_sections/index.js rename to x-pack/plugins/logstash/public/services/license/index.js index 9d53d4dd61163c..64f39b1144cee3 100755 --- a/x-pack/legacy/plugins/logstash/public/lib/update_management_sections/index.js +++ b/x-pack/plugins/logstash/public/services/license/index.js @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { updateLogstashSections } from './update_logstash_sections'; +export { LogstashLicenseService } from './logstash_license_service'; diff --git a/x-pack/plugins/logstash/public/services/license/logstash_license_service.js b/x-pack/plugins/logstash/public/services/license/logstash_license_service.js new file mode 100755 index 00000000000000..b836b75b89cc70 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/license/logstash_license_service.js @@ -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 { i18n } from '@kbn/i18n'; + +export class LogstashLicenseService { + constructor(license, navigateToApp, toasts) { + this.license = license; + this.navigateToApp = navigateToApp; + this.toasts = toasts; + } + + get enableLinks() { + return this.calculated.enableLinks; + } + + get isAvailable() { + return this.calculated.isAvailable; + } + + get isReadOnly() { + return this.calculated.isReadOnly; + } + + get message() { + return this.calculated.message; + } + + get isSecurityEnabled() { + return this.license.getFeature(`security`).isEnabled; + } + + /** + * Checks if the license is valid or the license can perform downgraded UI tasks. + * Rejects if the plugin is not available due to license. + */ + checkValidity() { + return new Promise((resolve, reject) => { + if (this.isAvailable) { + return resolve(); + } + + return reject(); + }); + } + + get calculated() { + if (!this.license) { + throw new Error(`No license available!`); + } + + if (!this.isSecurityEnabled) { + return { + isAvailable: false, + enableLinks: false, + isReadOnly: 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.', + }), + }; + } + + if (!this.license.hasAtLeast('standard')) { + return { + isAvailable: false, + enableLinks: false, + isReadOnly: 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: this.license.type }, + } + ), + }; + } + + if (!this.license.isActive) { + return { + isAvailable: true, + enableLinks: true, + isReadonly: true, + 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: this.license.type }, + } + ), + }; + } + + return { + isAvailable: true, + enableLinks: true, + isReadOnly: false, + }; + } +} diff --git a/x-pack/plugins/logstash/public/services/monitoring/index.js b/x-pack/plugins/logstash/public/services/monitoring/index.js new file mode 100755 index 00000000000000..bc0e8b6bc978a7 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/monitoring/index.js @@ -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 { MonitoringService } from './monitoring_service'; diff --git a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js b/x-pack/plugins/logstash/public/services/monitoring/monitoring_service.js similarity index 58% rename from x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js rename to x-pack/plugins/logstash/public/services/monitoring/monitoring_service.js index 6103e730c21714..d551f4fba61d2e 100755 --- a/x-pack/legacy/plugins/logstash/public/services/monitoring/monitoring_service.js +++ b/x-pack/plugins/logstash/public/services/monitoring/monitoring_service.js @@ -5,17 +5,14 @@ */ import moment from 'moment'; -import chrome from 'ui/chrome'; -import { ROUTES, MONITORING } from '../../../../../../plugins/logstash/common/constants'; -import { PipelineListItem } from 'plugins/logstash/models/pipeline_list_item'; +import { ROUTES, MONITORING } from '../../../common/constants'; +import { PipelineListItem } from '../../models/pipeline_list_item'; export class MonitoringService { - constructor($http, Promise, monitoringUiEnabled, clusterService) { - this.$http = $http; - this.Promise = Promise; + constructor(http, monitoringUiEnabled, clusterService) { + this.http = http; this.monitoringUiEnabled = monitoringUiEnabled; this.clusterService = clusterService; - this.basePath = chrome.addBasePath(ROUTES.MONITORING_API_ROOT); } isMonitoringEnabled() { @@ -30,18 +27,18 @@ export class MonitoringService { return this.clusterService .loadCluster() .then(cluster => { - const url = `${this.basePath}/v1/clusters/${cluster.uuid}/logstash/pipeline_ids`; + const url = `${ROUTES.MONITORING_API_ROOT}/v1/clusters/${cluster.uuid}/logstash/pipeline_ids`; const now = moment.utc(); - const body = { + const body = JSON.stringify({ timeRange: { max: now.toISOString(), min: now.subtract(MONITORING.ACTIVE_PIPELINE_RANGE_S, 'seconds').toISOString(), }, - }; - return this.$http.post(url, body); + }); + return this.http.post(url, { body }); }) .then(response => - response.data.map(pipeline => PipelineListItem.fromUpstreamMonitoringJSON(pipeline)) + response.map(pipeline => PipelineListItem.fromUpstreamMonitoringJSON(pipeline)) ) .catch(() => []); } diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/index.js b/x-pack/plugins/logstash/public/services/pipeline/index.js similarity index 81% rename from x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/index.js rename to x-pack/plugins/logstash/public/services/pipeline/index.js index 3a9a6b860c51f1..70d228b34860b9 100755 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/components/upgrade_failure/index.js +++ b/x-pack/plugins/logstash/public/services/pipeline/index.js @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -import './upgrade_failure'; +export { PipelineService } from './pipeline_service'; diff --git a/x-pack/plugins/logstash/public/services/pipeline/pipeline_service.js b/x-pack/plugins/logstash/public/services/pipeline/pipeline_service.js new file mode 100755 index 00000000000000..7c3e18e745d821 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/pipeline/pipeline_service.js @@ -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 { ROUTES } from '../../../common/constants'; +import { Pipeline } from '../../models/pipeline'; + +export class PipelineService { + constructor(http, pipelinesService) { + this.http = http; + this.pipelinesService = pipelinesService; + } + + loadPipeline(id) { + return this.http.get(`${ROUTES.API_ROOT}/pipeline/${id}`).then(response => { + return Pipeline.fromUpstreamJSON(response); + }); + } + + savePipeline(pipelineModel) { + return this.http + .put(`${ROUTES.API_ROOT}/pipeline/${pipelineModel.id}`, { + body: JSON.stringify(pipelineModel.upstreamJSON), + }) + .catch(e => { + throw e.message; + }); + } + + deletePipeline(id) { + return this.http + .delete(`${ROUTES.API_ROOT}/pipeline/${id}`) + .then(() => this.pipelinesService.addToRecentlyDeleted(id)) + .catch(e => { + throw e.message; + }); + } +} diff --git a/x-pack/legacy/plugins/logstash/common/lib/index.js b/x-pack/plugins/logstash/public/services/pipelines/index.js similarity index 81% rename from x-pack/legacy/plugins/logstash/common/lib/index.js rename to x-pack/plugins/logstash/public/services/pipelines/index.js index 6ed1d24a377916..a932dd4b951f4e 100755 --- a/x-pack/legacy/plugins/logstash/common/lib/index.js +++ b/x-pack/plugins/logstash/public/services/pipelines/index.js @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { getMoment } from './get_moment'; +export { PipelinesService } from './pipelines_service'; diff --git a/x-pack/plugins/logstash/public/services/pipelines/pipelines_service.js b/x-pack/plugins/logstash/public/services/pipelines/pipelines_service.js new file mode 100755 index 00000000000000..00610a23f27177 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/pipelines/pipelines_service.js @@ -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 { ROUTES, MONITORING } from '../../../common/constants'; +import { PipelineListItem } from '../../models/pipeline_list_item'; + +const RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY = 'xpack.logstash.recentlyDeletedPipelines'; + +export class PipelinesService { + constructor(http, monitoringService) { + this.http = http; + this.monitoringService = monitoringService; + } + + getPipelineList() { + return Promise.all([this.getManagementPipelineList(), this.getMonitoringPipelineList()]).then( + ([managementPipelines, monitoringPipelines]) => { + const now = Date.now(); + + // Monitoring will report centrally-managed pipelines as well, including recently-deleted centrally-managed ones. + // If there's a recently-deleted pipeline we're keeping track of BUT monitoring doesn't report it, that means + // it's not running in Logstash any more. So we can stop tracking it as a recently-deleted pipeline. + const monitoringPipelineIds = monitoringPipelines.map(pipeline => pipeline.id); + this.getRecentlyDeleted().forEach(recentlyDeletedPipeline => { + // We don't want to stop tracking the recently-deleted pipeline until Monitoring has had some + // time to report on it. Otherwise, if we stop tracking first, *then* Monitoring reports it, we'll + // still end up showing it in the list until Monitoring stops reporting it. + if (now - recentlyDeletedPipeline.deletedOn < MONITORING.ACTIVE_PIPELINE_RANGE_S * 1000) { + return; + } + + // If Monitoring is still reporting the pipeline, don't stop tracking it yet + if (monitoringPipelineIds.includes(recentlyDeletedPipeline.id)) { + return; + } + + this.removeFromRecentlyDeleted(recentlyDeletedPipeline.id); + }); + + // Merge centrally-managed pipelines with pipelines reported by monitoring. Take care to dedupe + // while merging because monitoring will (rightly) report centrally-managed pipelines as well, + // including recently-deleted ones! + const managementPipelineIds = managementPipelines.map(pipeline => pipeline.id); + return managementPipelines.concat( + monitoringPipelines.filter( + monitoringPipeline => + !managementPipelineIds.includes(monitoringPipeline.id) && + !this.isRecentlyDeleted(monitoringPipeline.id) + ) + ); + } + ); + } + + getManagementPipelineList() { + return this.http.get(`${ROUTES.API_ROOT}/pipelines`).then(response => { + return response.pipelines.map(pipeline => PipelineListItem.fromUpstreamJSON(pipeline)); + }); + } + + getMonitoringPipelineList() { + return this.monitoringService.getPipelineList(); + } + + /** + * Delete a collection of pipelines + * + * @param pipelineIds Array of pipeline IDs + * @return Promise { numSuccesses, numErrors } + */ + deletePipelines(pipelineIds) { + const body = JSON.stringify({ + pipelineIds, + }); + return this.http.post(`${ROUTES.API_ROOT}/pipelines/delete`, { body }).then(response => { + this.addToRecentlyDeleted(...pipelineIds); + return response.results; + }); + } + + addToRecentlyDeleted(...pipelineIds) { + const recentlyDeletedPipelines = this.getRecentlyDeleted(); + const recentlyDeletedPipelineIds = recentlyDeletedPipelines.map(pipeline => pipeline.id); + pipelineIds.forEach(pipelineId => { + if (!recentlyDeletedPipelineIds.includes(pipelineId)) { + recentlyDeletedPipelines.push({ + id: pipelineId, + deletedOn: Date.now(), + }); + } + }); + this.setRecentlyDeleted(recentlyDeletedPipelines); + } + + removeFromRecentlyDeleted(...pipelineIds) { + const recentlyDeletedPipelinesToKeep = this.getRecentlyDeleted().filter( + recentlyDeletedPipeline => !pipelineIds.includes(recentlyDeletedPipeline.id) + ); + this.setRecentlyDeleted(recentlyDeletedPipelinesToKeep); + } + + isRecentlyDeleted(pipelineId) { + return this.getRecentlyDeleted() + .map(pipeline => pipeline.id) + .includes(pipelineId); + } + + getRecentlyDeleted() { + const recentlyDeletedPipelines = window.localStorage.getItem( + RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY + ); + if (!recentlyDeletedPipelines) { + return []; + } + + return JSON.parse(recentlyDeletedPipelines); + } + + setRecentlyDeleted(recentlyDeletedPipelineIds) { + window.localStorage.setItem( + RECENTLY_DELETED_PIPELINE_IDS_STORAGE_KEY, + JSON.stringify(recentlyDeletedPipelineIds) + ); + } +} diff --git a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/index.js b/x-pack/plugins/logstash/public/services/upgrade/index.js similarity index 82% rename from x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/index.js rename to x-pack/plugins/logstash/public/services/upgrade/index.js index 4b699ed79cd26b..1c835b11ae4233 100755 --- a/x-pack/legacy/plugins/logstash/public/sections/pipeline_edit/index.js +++ b/x-pack/plugins/logstash/public/services/upgrade/index.js @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -import './pipeline_edit_route'; +export { UpgradeService } from './upgrade_service'; diff --git a/x-pack/plugins/logstash/public/services/upgrade/upgrade_service.js b/x-pack/plugins/logstash/public/services/upgrade/upgrade_service.js new file mode 100755 index 00000000000000..7bd101ebee6b00 --- /dev/null +++ b/x-pack/plugins/logstash/public/services/upgrade/upgrade_service.js @@ -0,0 +1,22 @@ +/* + * 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 { ROUTES } from '../../../common/constants'; + +export class UpgradeService { + constructor(http) { + this.http = http; + } + + executeUpgrade() { + return this.http + .post(`${ROUTES.API_ROOT}/upgrade`) + .then(response => response.is_upgraded) + .catch(e => { + throw e.message; + }); + } +} diff --git a/x-pack/plugins/logstash/server/routes/pipeline/save.ts b/x-pack/plugins/logstash/server/routes/pipeline/save.ts index 556c281944a856..e484d0e221b6d1 100644 --- a/x-pack/plugins/logstash/server/routes/pipeline/save.ts +++ b/x-pack/plugins/logstash/server/routes/pipeline/save.ts @@ -25,7 +25,6 @@ export function registerPipelineSaveRoute(router: IRouter, security?: SecurityPl id: schema.string(), description: schema.string(), pipeline: schema.string(), - username: schema.string(), settings: schema.maybe(schema.object({}, { unknowns: 'allow' })), }), }, diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 209a3f626272fa..8a606e230dc36f 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -8787,8 +8787,6 @@ "xpack.logstash.idFormatErrorMessage": "パイプライン ID は文字またはアンダーラインで始まる必要があり、文字、アンダーライン、ハイフン、数字のみ使用できます", "xpack.logstash.insufficientUserPermissionsDescription": "Logstash パイプラインの管理に必要なユーザーパーミッションがありません", "xpack.logstash.kibanaManagementPipelinesTitle": "Kibana の管理で作成されたパイプラインだけがここに表示されます", - "xpack.logstash.managementSection.createPipelineTitle": "パイプラインの作成", - "xpack.logstash.managementSection.editPipelineTitle": "パイプラインの編集", "xpack.logstash.managementSection.enableSecurityDescription": "Logstash パイプライン管理機能を使用するには、セキュリティを有効にする必要があります。elasticsearch.yml で xpack.security.enabled: true に設定してください。", "xpack.logstash.managementSection.licenseDoesNotSupportDescription": "ご使用の {licenseType} ライセンスは Logstash パイプライン管理をサポートしていません。ライセンスをアップグレードしてください。", "xpack.logstash.managementSection.notPossibleToManagePipelinesMessage": "現在ライセンス情報が利用できないため Logstash パイプラインを使用できません。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 5d8d733f2b5b68..faee95b8172b72 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -8790,8 +8790,6 @@ "xpack.logstash.idFormatErrorMessage": "管道 ID 必须以字母或下划线开头,并只能包含字母、下划线、短划线和数字", "xpack.logstash.insufficientUserPermissionsDescription": "管理 Logstash 管道的用户权限不足", "xpack.logstash.kibanaManagementPipelinesTitle": "仅在 Kibana“管理”中创建的管道显示在此处", - "xpack.logstash.managementSection.createPipelineTitle": "创建管道", - "xpack.logstash.managementSection.editPipelineTitle": "编辑管道", "xpack.logstash.managementSection.enableSecurityDescription": "必须启用 Security,才能使用 Logstash 管道管理功能。请在 elasticsearch.yml 中设置 xpack.security.enabled: true。", "xpack.logstash.managementSection.licenseDoesNotSupportDescription": "您的{licenseType}许可不支持 Logstash 管道管理功能。请升级您的许可。", "xpack.logstash.managementSection.notPossibleToManagePipelinesMessage": "您不能管理 Logstash 管道,因为许可信息当前不可用。", diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts b/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts index cdbf5a3e6a1fea..2463dbe4500b5f 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts +++ b/x-pack/test/api_integration/apis/logstash/pipeline/delete.ts @@ -20,7 +20,6 @@ export default function({ getService }: FtrProviderContext) { .send({ id: 'fast_generator', description: 'foobar baz', - username: 'seger', pipeline: 'input { generator {} }\n\n output { stdout {} }', }) .expect(204); diff --git a/x-pack/test/api_integration/apis/logstash/pipeline/save.ts b/x-pack/test/api_integration/apis/logstash/pipeline/save.ts index 2ca9fbe7d68e00..ca0cfb19b9454d 100644 --- a/x-pack/test/api_integration/apis/logstash/pipeline/save.ts +++ b/x-pack/test/api_integration/apis/logstash/pipeline/save.ts @@ -28,7 +28,6 @@ export default function({ getService }: FtrProviderContext) { .send({ id: 'fast_generator', description: 'foobar baz', - username: 'seger', pipeline: 'input { generator {} }\n\n output { stdout {} }', }) .expect(204); From dbb7923e9bde6f8822df5093215dffce0a5d272f Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Tue, 21 Apr 2020 10:42:43 -0400 Subject: [PATCH 34/39] [SIEM][Detections Engine] - minor updates to monitoring table with unit tests (#64020) ### Summary Minor updates to the All Rules monitoring table. Includes front end and backend changes: - Displays dashes in the monitoring table when no values are present - Displays `lastLookBackDate` only if the rule indexes events into the signals index, otherwise `lastLookBackDate` is set to null --- .../rules/use_rule_status.test.tsx | 172 +++++++++--------- .../detection_engine/rules/all/columns.tsx | 6 +- .../signals/__mocks__/es_results.ts | 6 +- .../signals/build_bulk_body.test.ts | 8 +- .../signals/build_signal.test.ts | 6 +- .../signals/search_after_bulk_create.test.ts | 24 ++- .../signals/search_after_bulk_create.ts | 12 +- .../signals/single_bulk_create.test.ts | 6 +- 8 files changed, 127 insertions(+), 113 deletions(-) diff --git a/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/use_rule_status.test.tsx b/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/use_rule_status.test.tsx index 0a30329baf68d1..f74c2bad1019e8 100644 --- a/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/use_rule_status.test.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/use_rule_status.test.tsx @@ -72,104 +72,108 @@ describe('useRuleStatus', () => { cleanup(); }); - test('init', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => - useRuleStatus('myOwnRuleID') - ); - await waitForNextUpdate(); - expect(result.current).toEqual([true, null, null]); - }); - }); - - test('fetch rule status', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => - useRuleStatus('myOwnRuleID') - ); - await waitForNextUpdate(); - await waitForNextUpdate(); - expect(result.current).toEqual([ - false, - { - current_status: { - alert_id: 'alertId', - last_failure_at: null, - last_failure_message: null, - last_success_at: 'mm/dd/yyyyTHH:MM:sssz', - last_success_message: 'it is a success', - status: 'succeeded', - status_date: 'mm/dd/yyyyTHH:MM:sssz', - gap: null, - bulk_create_time_durations: ['2235.01'], - search_after_time_durations: ['616.97'], - last_look_back_date: '2020-03-19T00:32:07.996Z', - }, - failures: [], - }, - result.current[2], - ]); - }); - }); - - test('re-fetch rule status', async () => { - const spyOngetRuleStatusById = jest.spyOn(api, 'getRuleStatusById'); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => - useRuleStatus('myOwnRuleID') - ); - await waitForNextUpdate(); - await waitForNextUpdate(); - if (result.current[2]) { - result.current[2]('myOwnRuleID'); - } - await waitForNextUpdate(); - expect(spyOngetRuleStatusById).toHaveBeenCalledTimes(2); - }); - }); - - test('init rules statuses', async () => { - const payload = [testRule]; - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => - useRulesStatuses(payload) - ); - await waitForNextUpdate(); - expect(result.current).toEqual({ loading: false, rulesStatuses: [] }); + describe('useRuleStatus', () => { + test('init', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useRuleStatus('myOwnRuleID') + ); + await waitForNextUpdate(); + expect(result.current).toEqual([true, null, null]); + }); }); - }); - test('fetch rules statuses', async () => { - const payload = [testRule]; - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => - useRulesStatuses(payload) - ); - await waitForNextUpdate(); - await waitForNextUpdate(); - expect(result.current).toEqual({ - loading: false, - rulesStatuses: [ + test('fetch rule status', async () => { + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useRuleStatus('myOwnRuleID') + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual([ + false, { current_status: { alert_id: 'alertId', - bulk_create_time_durations: ['2235.01'], - gap: null, last_failure_at: null, last_failure_message: null, - last_look_back_date: '2020-03-19T00:32:07.996Z', last_success_at: 'mm/dd/yyyyTHH:MM:sssz', last_success_message: 'it is a success', - search_after_time_durations: ['616.97'], status: 'succeeded', status_date: 'mm/dd/yyyyTHH:MM:sssz', + gap: null, + bulk_create_time_durations: ['2235.01'], + search_after_time_durations: ['616.97'], + last_look_back_date: '2020-03-19T00:32:07.996Z', }, failures: [], - id: '12345678987654321', - activate: true, - name: 'Test rule', }, - ], + result.current[2], + ]); + }); + }); + + test('re-fetch rule status', async () => { + const spyOngetRuleStatusById = jest.spyOn(api, 'getRuleStatusById'); + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useRuleStatus('myOwnRuleID') + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + if (result.current[2]) { + result.current[2]('myOwnRuleID'); + } + await waitForNextUpdate(); + expect(spyOngetRuleStatusById).toHaveBeenCalledTimes(2); + }); + }); + }); + + describe('useRulesStatuses', () => { + test('init rules statuses', async () => { + const payload = [testRule]; + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useRulesStatuses(payload) + ); + await waitForNextUpdate(); + expect(result.current).toEqual({ loading: false, rulesStatuses: [] }); + }); + }); + + test('fetch rules statuses', async () => { + const payload = [testRule]; + await act(async () => { + const { result, waitForNextUpdate } = renderHook(() => + useRulesStatuses(payload) + ); + await waitForNextUpdate(); + await waitForNextUpdate(); + expect(result.current).toEqual({ + loading: false, + rulesStatuses: [ + { + current_status: { + alert_id: 'alertId', + bulk_create_time_durations: ['2235.01'], + gap: null, + last_failure_at: null, + last_failure_message: null, + last_look_back_date: '2020-03-19T00:32:07.996Z', + last_success_at: 'mm/dd/yyyyTHH:MM:sssz', + last_success_message: 'it is a success', + search_after_time_durations: ['616.97'], + status: 'succeeded', + status_date: 'mm/dd/yyyyTHH:MM:sssz', + }, + failures: [], + id: '12345678987654321', + activate: true, + name: 'Test rule', + }, + ], + }); }); }); }); diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/columns.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/columns.tsx index 8bea504f842065..97c89f91c12bdf 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/columns.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/all/columns.tsx @@ -243,7 +243,7 @@ export const getMonitoringColumns = (): RulesStatusesColumns[] => { {value != null && value.length > 0 ? Math.max(...value?.map(item => Number.parseFloat(item))) - : null} + : getEmptyTagValue()} ), truncateText: true, @@ -256,7 +256,7 @@ export const getMonitoringColumns = (): RulesStatusesColumns[] => { {value != null && value.length > 0 ? Math.max(...value?.map(item => Number.parseFloat(item))) - : null} + : getEmptyTagValue()} ), truncateText: true, @@ -267,7 +267,7 @@ export const getMonitoringColumns = (): RulesStatusesColumns[] => { name: i18n.COLUMN_GAP, render: (value: RuleStatus['current_status']['gap']) => ( - {value} + {value ?? getEmptyTagValue()} ), truncateText: true, diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts index 8a5da8e8597216..731fffcac1bb0e 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts @@ -86,7 +86,7 @@ export const sampleDocNoSortId = (someUuid: string = sampleIdGuid): SignalSource _id: someUuid, _source: { someKey: 'someValue', - '@timestamp': 'someTimeStamp', + '@timestamp': '2020-04-20T21:27:45+0000', }, }); @@ -97,7 +97,7 @@ export const sampleDocNoSortIdNoVersion = (someUuid: string = sampleIdGuid): Sig _id: someUuid, _source: { someKey: 'someValue', - '@timestamp': 'someTimeStamp', + '@timestamp': '2020-04-20T21:27:45+0000', }, }); @@ -109,7 +109,7 @@ export const sampleDocWithSortId = (someUuid: string = sampleIdGuid): SignalSour _id: someUuid, _source: { someKey: 'someValue', - '@timestamp': 'someTimeStamp', + '@timestamp': '2020-04-20T21:27:45+0000', }, sort: ['1234567891111'], }); diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts index bbd01cfaafc624..df9d282b71e5e1 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts @@ -59,7 +59,7 @@ describe('buildBulkBody', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', status: 'open', rule: { actions: [], @@ -185,7 +185,7 @@ describe('buildBulkBody', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', status: 'open', rule: { actions: [], @@ -309,7 +309,7 @@ describe('buildBulkBody', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', status: 'open', rule: { actions: [], @@ -426,7 +426,7 @@ describe('buildBulkBody', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', status: 'open', rule: { actions: [], diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/build_signal.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/build_signal.test.ts index 0a50c33fbbfe4d..f3f4ab60e4db6c 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/build_signal.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/build_signal.test.ts @@ -41,7 +41,7 @@ describe('buildSignal', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', status: 'open', rule: { created_by: 'elastic', @@ -101,7 +101,7 @@ describe('buildSignal', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', original_event: { action: 'socket_opened', dataset: 'socket', @@ -173,7 +173,7 @@ describe('buildSignal', () => { depth: 1, }, ], - original_time: 'someTimeStamp', + original_time: '2020-04-20T21:27:45+0000', original_event: { action: 'socket_opened', dataset: 'socket', diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts index cec011ae8c4455..2cb23b05f6a9b6 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts @@ -30,7 +30,7 @@ describe('searchAfterAndBulkCreate', () => { test('if successful with empty search results', async () => { const sampleParams = sampleRuleAlertParams(); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: sampleEmptyDocSearchResults(), ruleParams: sampleParams, services: mockService, @@ -55,6 +55,7 @@ describe('searchAfterAndBulkCreate', () => { expect(mockService.callCluster).toHaveBeenCalledTimes(0); expect(success).toEqual(true); expect(createdSignalsCount).toEqual(0); + expect(lastLookBackDate).toBeNull(); }); test('if successful iteration of while loop with maxDocs', async () => { @@ -105,7 +106,7 @@ describe('searchAfterAndBulkCreate', () => { }, ], }); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: repeatedSearchResultsWithSortId(3, 1, someGuids.slice(6, 9)), ruleParams: sampleParams, services: mockService, @@ -130,13 +131,14 @@ describe('searchAfterAndBulkCreate', () => { expect(mockService.callCluster).toHaveBeenCalledTimes(5); expect(success).toEqual(true); expect(createdSignalsCount).toEqual(3); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if unsuccessful first bulk create', async () => { const someGuids = Array.from({ length: 4 }).map(x => uuid.v4()); const sampleParams = sampleRuleAlertParams(10); mockService.callCluster.mockResolvedValue(sampleBulkCreateDuplicateResult); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: repeatedSearchResultsWithSortId(4, 1, someGuids), ruleParams: sampleParams, services: mockService, @@ -161,6 +163,7 @@ describe('searchAfterAndBulkCreate', () => { expect(mockLogger.error).toHaveBeenCalled(); expect(success).toEqual(false); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if unsuccessful iteration of searchAfterAndBulkCreate due to empty sort ids', async () => { @@ -179,7 +182,7 @@ describe('searchAfterAndBulkCreate', () => { }, ], }); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: sampleDocSearchResultsNoSortId(), ruleParams: sampleParams, services: mockService, @@ -204,6 +207,7 @@ describe('searchAfterAndBulkCreate', () => { expect(mockLogger.error).toHaveBeenCalled(); expect(success).toEqual(false); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if unsuccessful iteration of searchAfterAndBulkCreate due to empty sort ids and 0 total hits', async () => { @@ -222,7 +226,7 @@ describe('searchAfterAndBulkCreate', () => { }, ], }); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: sampleDocSearchResultsNoSortIdNoHits(), ruleParams: sampleParams, services: mockService, @@ -246,6 +250,7 @@ describe('searchAfterAndBulkCreate', () => { }); expect(success).toEqual(true); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if successful iteration of while loop with maxDocs and search after returns results with no sort ids', async () => { @@ -267,7 +272,7 @@ describe('searchAfterAndBulkCreate', () => { ], }) .mockResolvedValueOnce(sampleDocSearchResultsNoSortId()); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: repeatedSearchResultsWithSortId(4, 1, someGuids), ruleParams: sampleParams, services: mockService, @@ -291,6 +296,7 @@ describe('searchAfterAndBulkCreate', () => { }); expect(success).toEqual(true); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if successful iteration of while loop with maxDocs and search after returns empty results with no sort ids', async () => { @@ -312,7 +318,7 @@ describe('searchAfterAndBulkCreate', () => { ], }) .mockResolvedValueOnce(sampleEmptyDocSearchResults()); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: repeatedSearchResultsWithSortId(4, 1, someGuids), ruleParams: sampleParams, services: mockService, @@ -336,6 +342,7 @@ describe('searchAfterAndBulkCreate', () => { }); expect(success).toEqual(true); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); test('if returns false when singleSearchAfter throws an exception', async () => { @@ -359,7 +366,7 @@ describe('searchAfterAndBulkCreate', () => { .mockImplementation(() => { throw Error('Fake Error'); }); - const { success, createdSignalsCount } = await searchAfterAndBulkCreate({ + const { success, createdSignalsCount, lastLookBackDate } = await searchAfterAndBulkCreate({ someResult: repeatedSearchResultsWithSortId(4, 1, someGuids), ruleParams: sampleParams, services: mockService, @@ -383,5 +390,6 @@ describe('searchAfterAndBulkCreate', () => { }); expect(success).toEqual(false); expect(createdSignalsCount).toEqual(1); + expect(lastLookBackDate).toEqual(new Date('2020-04-20T21:27:45+0000')); }); }); diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts index e287e33295c896..acf3e9bfb055c9 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts @@ -98,13 +98,15 @@ export const searchAfterAndBulkCreate = async ({ tags, throttle, }); - toReturn.lastLookBackDate = - someResult.hits.hits.length > 0 - ? new Date(someResult.hits.hits[someResult.hits.hits.length - 1]?._source['@timestamp']) - : null; - if (createdItemsCount) { + + if (createdItemsCount > 0) { toReturn.createdSignalsCount = createdItemsCount; + toReturn.lastLookBackDate = + someResult.hits.hits.length > 0 + ? new Date(someResult.hits.hits[someResult.hits.hits.length - 1]?._source['@timestamp']) + : null; } + if (bulkCreateDuration) { toReturn.bulkCreateTimes.push(bulkCreateDuration); } diff --git a/x-pack/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts b/x-pack/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts index 51cc0f449b17a2..6f3cc6e708fce1 100644 --- a/x-pack/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts +++ b/x-pack/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts @@ -300,7 +300,7 @@ describe('singleBulkCreate', () => { _id: 'e1e08ddc-5e37-49ff-a258-5393aa44435a', _source: { someKey: 'someValue', - '@timestamp': 'someTimeStamp', + '@timestamp': '2020-04-20T21:27:45+0000', signal: { parent: { rule: '04128c15-0d1b-4716-a4c5-46997ac7f3bd', @@ -334,7 +334,7 @@ describe('singleBulkCreate', () => { test('filter duplicate rules will return back search responses if they do not have a signal and will NOT filter the source out', () => { const ancestors = sampleDocWithAncestors(); - ancestors.hits.hits[0]._source = { '@timestamp': 'some timestamp' }; + ancestors.hits.hits[0]._source = { '@timestamp': '2020-04-20T21:27:45+0000' }; const filtered = filterDuplicateRules('04128c15-0d1b-4716-a4c5-46997ac7f3bd', ancestors); expect(filtered).toEqual([ { @@ -343,7 +343,7 @@ describe('singleBulkCreate', () => { _score: 100, _version: 1, _id: 'e1e08ddc-5e37-49ff-a258-5393aa44435a', - _source: { '@timestamp': 'some timestamp' }, + _source: { '@timestamp': '2020-04-20T21:27:45+0000' }, }, ]); }); From b7f2a010c85e57b49495ca91a1c39c9f035425e5 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Tue, 21 Apr 2020 11:26:53 -0400 Subject: [PATCH 35/39] [DOCS] Add documentation for clone feature (#64019) * Added documentation for the clone feature Co-authored-by: Kaarina Tungseth --- docs/images/clone_panel.gif | Bin 0 -> 817490 bytes docs/user/dashboard.asciidoc | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 docs/images/clone_panel.gif diff --git a/docs/images/clone_panel.gif b/docs/images/clone_panel.gif new file mode 100644 index 0000000000000000000000000000000000000000..e521e438d051a986820977b75c75606199972ba4 GIT binary patch literal 817490 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

T0P$RjSBFhCSMN2yp4WCX}ow6QigWYlP9e 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:G15=@s5Dv*SXqCs4yAc=EBCd!| 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

5SovVt#Qh=SLu+a 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

oBfY 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 J^IMmP{|OzDFkJuu literal 579529 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ℑ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

-H5+u}=6*8(Wro@Jb& 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"I=ldwnBe=577vEX4LF_Xw*mg z_aiSqbMW&HfC+iF^H~C6uTfT~+~}@9$#_>*Ua}pjSvLu~mb*emEW)>`R%etWFGaAJ zysea4bv-gt;~e%abd@eiZ9tA|>od6D?m>KyNNwvtj_U;-w__VReBe%sOL@aN-mr%B zNdT=&QgZdAG9FoRuWK4Uwa83{bgjQrq9xsO53=+2h-j{@wCYA8saTeODU)?j@gU_v zADl2kFDxX?*7zifDsA&y9#!6ZR-oLix0~5(SvX?#F00-8T9QNK$2-OMQ%x2e`Vj0l zoO{9}Fx1fh$rm-VV9r-Ewt>>gqFkD)er)4bvEL6zveTF9FcNT2T9*es!$m8bSy<`ik~GBZ{k21 zBd5DD7LTTWfWPTc2Pt50aLW(``l>P}9q9jNTMQwL!GSFKWhQMdy+mTnLUXO3V%Tzz9rg6Q<@O-kiNvV5byi}rP)Nxh9aJ4KL#UC1GIs4qapE! z{G+u<;jw^{L{r6-05nH_o#g{SpYhq;PvM=+33V1ce=I)&a6OF-`fvZB&nN0dht1xC zKlu#??Pj0$(ERtmT%wzHHj1#`k_%6#0z!7QPh2n%r@Tv2fLa+iIcGm8_7ypR|2l+@ zrbi%0E`4<8!CafbYZwq`$C9aaz$&28s@S9tWS=X7s6=J-Tp-arlbf{(muLVjUq6r{ zpWbv&HHSLZ&n141$$B2W^PiN`=BRa#aVD0Il9kg30GexNnYm_cf}Kob-oEFu^sgeq z|Eb@8azkDsW!y0( znKI<_0vP>)-%nU}0_1=4C0g&|zVV4jH*d@xPNOG{Wn{&*zOh#5St2d#;Q%<`^_u`Y z3UB-n>1)wDcjRR0-!wxOPbp`JhP7lK_@yD3>sKkw?=Yvjk&R$u`X?Wr{mZ(j{bzog zhtDPUQedD0baLtUjGX`_y2ouF&uGpFSNo@kc}k^fFYF18O0Ikw3c>ZNf?p7cGjM8? zUe};fFXTM^T4M`RU4(o#ATBu9A=lE*{L>KTgm6?BBy zpT`&daIM`WcFT*|pQ#M=Y#yrlHD*Yy5Roip>&2hTZKKMc7ym@G^8L#*8HwarSDU@k zQHvE#IcJT{NDFK;R^i&8dFDiDa8Lvvn|CF+D=Hr`v6IZc0)8 z&u>N%FSw%QJy|`}^>m5m-^{xy{z*!tZVq8TH;AAF>~1*qeh2&Awzlu}`oN?-`bEQY zn~;Gj*ekoOtU$=-F0*TLhx)OxnOfEnUIRG8VT1Az(B>te zYQ8b;JQC zuHSeI(XmHezR+-1-4_wF>!C0aC~tx7#_6(koFwc`#e-iE4iQ}fRffZDS-elN8GKaOO3=h*K@82O&*QqYSb)2{ zr~+5yaag$$=}YLuePM6*#Ag5q%vn;mkPVe7RYn5r{A^3{IPt*u+6#6CI((~6sEyYF zQ3LTidFk2_GO)HIp8;-@`ndNU24=rHtgDXqhlH@+918?LhxELMsQn=#_t5bmvN#bp zgZ_cD{ZCltE5%v}#(FD}fkhP;*vsJ@`W9s{mD`cl5nu-9RMez%ht2Q(2Pm^>!x1Z( zvgj@j{+nbGGWM{`mkqNGcO5ztsq(|94-Mb0T9pB(&dW*3X z3{HWE=0C!}m;vkjtCLD2YEq?|iu50q?fi>MHLX4gAL%m$_7Nko0g;9sQgqAD!kk^O z0O!`)#IA&E%<^9Ou>rCpHAImIr z6S?~XT@DtatIiG|4F@Xx=ut;l8G#cRTH;DwX*Y2|TS-G&KM`+%QJ=lC5l%+^0;+sA ze88@2&Lk@|?GILH4utxYxeKr{SgOZhGhs+86VFCQd!_ez;Ggta)j)EOuG<$B2ID?D z8Um0Qb_e`*4vmqTWmo|C(2^KL(I8#Z zNq%giO5mzANyO`38!&mk^fPZGu?1#>4zj;a>g)@n7ho2z{V|L6k&w=iBP}Nd!*A>) z8p-kynA=_=gMK;Jf!Y&jNtA+x_Pzi5Su9~sE+;8BbbN~p94OZ(V0YBOpE?t{a#!ll z5D0B&eV6`+?QI0xbEe`#?FjDhE&4u@@*5RgbZuI1s0}RxkTM%rY0!!KQmHPG>+!CP z9d@dY2P+aR0ye&fGwYLxy;Q3@r4?r(b!{F+#!()!9~E`KpX+c#*;8AQ1#cDt}-46OJmSw;M(UYdP7X07dRo8UG;rJ#Ov; zFT4#Dql?3qBV#F@_K-5uCQL-wS`vOc8lBv)n!*1qC7JuV!d-;D1jxVNTFL>%-Nft+ zI}L$KPXcU=AA=)^n~~I2@K=YSO0xXtA}}3(s@@&$AOkEd0+T_h9Klwb5E)2}@nMcC z@)yyVWF5@=Z}tKikJw*+mO41|Qy*+46E*Jk$*lQ%xXB@spMd$yi0iuRa~tH{;Pa1p zIKPs7AO8mJ>BP0DgX3S+B(as#N+3Yjr+RUe=A72*FKYWKk&9t7Uu)JTO1&rTY>oK= z7)E3l6~E0?N5_8eI!}v1hp#YOG>BTk5UgS-%l3a!o7Az64zN~SpFKANq1dMW_g&y0@#66z< zK-8@OhwwYQ8l4Y}aR&0eGG@$J8zsg>L$y}A&VBiXQukFwjcpak!p-El@3CX=2IS4^ z3`5Nxcl`zz?_19nx-5NfH_-Fa9_IP!2EON^s&vzk~dwxHVAgOU7}&ubL9Cum>-OX8%KP{ zQC89wW8ev_9|n%SJawY~i<)dwp2U3^`9yNrrGk8+emgg5qxo#uo0i}j2A%&<@^z_erx)xP7C}t&&YKL$KiQ)A@Q!sUm3MJ>)sVx3mbnU z%{JGZS_7d`)|91rm$Tme)@$~3OG9i-J8KBArL_tP60jKp+z&YL+1~@;Y7RQODJYhJ zlLu90rVg!ah3$*KK5}gci%@;r04mmR#55)T03wz=4r6_-WK!eqm7eG_Qf5TK=XJm$ zqC)VPhMw~4gC)St{&CsAAN}_<{o5q|A9qfq5$}?E2T`{_!MT~)^O(`mq1*aMI3qMF z*ypFykDbdtTs-)g-tlne^h;H1w&i7}iV!>xbn4{sS6nGo5ITtXF^S2O)Jp%HQ2r|u z=UQ6VPq*X>`FszT$38oMdiLznTkn+@-o|w3?yt#qe)ILJ)%r6x>g~{9IyKEU#hZeH z-$%Ib4Hl2nqtQ$_wyr{o+(U1uQ$T^`_XXwZmHNOS_e(vA%@_(ScyldFJIwz8s zHA8+6*$%nl?h!9_*TV3e!v{4vgYxEnHH|HSGYzi#l(rj*0u)5l@I;|AV`V<{x?B-Q zlQr}H7FR5wh)qgIDtrqr42cVR)SE;LF63dD0-CxvvsiQho zAkScv`%mu3z6t3eLnz@MNL8$|e#r6#s#IhH1U=?;5WubuViGSxJcw(q0`?~SBZ`MX zoRhlZ^Z`N>^o>dQO7a)}zpgU%k}K@4*y19pqFkZRpqD0Y!82JjfReJt7uk3zX%F%bJTQT^V88-#6thf#6Qli_1hCp;_d8&r>8kKudEy z8@#ga;@C@niY~i0MEh*XH*G8%8Fxt3DT(HiiVjoGsq8wIJ;qE(S5-5+ab2-PHOHe7 zee$zwsooUnV98g-4Y_W1q6)e2!$lpE{CHIINwop=WVC*T&aGnQRMv`!uDTdtETgu5 zOTJ2ziGhDZdZze37P`k9of?$zVv#GOgVMCl$Dg8&l)aUmEKCimwYFG>@~*xF`KGv)sA~@G41ag z&s<-;>`7)yxz)mk-><$rziQq29h(-fd+zo^{rSs}u~2q46_sVcqC;sWIU6&8n{*%6 zKzSM+oUIH+`k!IX>B+|-Euvi-djTp{+rFsn>M(`u1Ow|hO19+Sp4fLXQi~yB%OmDQ z0o3rq?@0d;7UlvEMMDuyfI-oG{ntuSvbO4u=zc1mXpRt%-|sd6>zvq49fI`M1C`E& zI*wCC!E-3e40G^vg2_zk;IoLyWSXwr;QkFVaJZ}+^`uVhK~)+_K+QY!1X5UXS^T3( zF>;z>`qt0#Ss1jdSY zYb74A=2Eg^?+UgaQsWe+j}AsksgP?1y@&-|-50g5d2oRUPl}VXAvrD=hdVkAtO9CWl!>h%n&N5i%-`p4@6doNS< zq~nAGzXFjnicZ3R{Jdo=(vm?OlqtUlBLM~=5}3ev)s><^NT$)QT4Yqdc)SRV?1rgy zL`Aklz|g+_Q{O8#crptGzj@mQ>HmlYx}2m|*Pw&nApKib;B))HmJD=1LB!&b#Uq}W zTblsy^?iyQ5~%EY{4SJpRW_;igrz?+sLlf!cg+eAy-)l@^qveV?(SO4Wdp>4qhK@& z$Wld07;Il%*B*CWsIYSI;8M2puTmv(u)I$j^c_vk(-o0_R#>US(_mPq5aBj9EN#D^ z%!Rk^&$iPM8gXqOvKO6L61EB|tVQs`e9|oPVd5P!{FqYCRGN}osv#$*&oGRD!LQ)c zl~Z3M=2lScq7G*ft6<;`-Ap3Yx3rw7f;o*tgt|lt(s_>#g*+37ZnVb+R&;^uWQ{eo zxZ6o}uP%ZJKZ?827xa%%x=$cuU(~*+1^60#qVA(kY$NZ1 zlIjvJeiXZbz*gE#8QK7I$WvM%{kd3_!#_;f+(>BDO|nX6FNex!?y`;4Zi(tXkC@#D zHR)`59qbuF`J6wtCPguJ0fZ>;1;LuFIWZayQ%Z(v;ZE@rq%#Q}rXZ!plaiR^Dd?Cf z#&fvI3g+R_zGQ{h*)Sby&+*YauyKEr!OR|7_H~%6ayL@*f;=A?>_v}B@C_=BtRMc` z*-X?$YKnrm#2XLzCIz?JQd7AEDsb+T6<~n~c%Z<@>ZL?GfXeuzUXi zJCGx*RS?|X*hMr#sQ}Op)kFq*nIC}k_(i}o;71gpvuGMf&GDea;5ck5m^fqWPqE!~ zs{2XA>GJ^6c$onP z+BE6aR10A@jf->5GqC5Wc=QIUg1Laamp7q<8z4g~w@SXK9saCtk%lKzKUe?&93AWd zL_WTkm?>CKBCHCy@|nMZYF+Fwa~}G^{rv$LTWvKRck%6eMO1Nze?vHAIavDn3rK%H z*6r{ce0AJ>a2>;S__pxvhz^t`=53uuykN(06^*~l9uW-A027`|%$anLjv~c#_R{87 zu54qSat_$Rkpl`!gDzo5sy_}l5Qqu${bpTps{5Pd55bsT;&+g-so1qW%!%bkkwGmK zc4urQ8Fr@zZ1!6+@Ng~*maM=ApfddcKSv!bX18z^uF{&T2CC?62tvSLHaywcNuID_ zCL7=hK!HFVtMIV7r`k6OX{A6^f@db zp3i?>Oef4wp#vQ>e9FK+gi8paOL)@q9JObk6v3l(w2Am3?;{?{4g&(^!)y0=?7|j< zq#qUkX1SZ6&fi*>f0yj~TQd5e|H!|x-}|2*)&KV=eUU|I&u-`)pM_m9YL#_|tZXI| zCFLU*(kkDf^#-7r10dIK1H^tx2*_=*Mh**-1S{pRn;5noIPm7K2CF zPr7@(hI&?t>OrN+T=RiSkm3L_))%Ym$Ek&cC9W#I;B=w3}{<_DPiA zvcNGm>3s+P;d~78(h%U*ll(I{7ajW!yXSCo@{yJ{aQ(>#3_jHp6Qei5cixhLD?X%J z8|JJ09;qqil90iEfXU;VR61GfsH#{8WN_~C2_SPVf=KXYfG-)3XD&s@%%Wq+^0hG3 zA~y8JWzbuN6P+I>yU$w=)$}72?6e5q9==`jH*zS}-^ihwZ*yeBJmoC9B06%iI}A~D zmBJADleCAX9zB_ttd7D{(Mir8ChkO4?*m_dtsRgt;9paJ3HLQoJunF8%6}@d1ScOC z9>EHMfjJ|k7U*C;(TXbkumet)CL`qI;E#Wy-&$b~=jM&aiap@t=Xb^t_kDkv?48u9 z&O%==feRA2XHmr+m19ON^$$T;0ZdWyL2^Bh*h{wJD6N>#qT5wAvl)TL{iC_kHsWo> zB!N+*cByq&*?*)J+2lHP_V%tiRR$V~4)P~;veMrF0^jolRi%jJFdQBiTkQk@%4mL& zWJ0|QDZd5B$lw}D5O{wO4HkfCFxdNlhz5)Pmz~{(bIZx8yr8HSYo+7J?H3y zcpnRL<78_TJN{mlPwek4uTzYT229$(Ihq=T6FnlJQliRF!r8AVuvq5s5vi`F4(daM z{KWDTeIIRNE4l|!ZVy1lBE(>15CnZ#2wMVLFNttXA9kliZ0ts#SOyW>pgIcpS&hle zqT`RuLKi|8yQM3z5tudzbNfe*8xbP78Vc8^_W44`B9tzW~9qgjK_Xa`#z+B+zb7_$#CLYCv8IA9DMn)Dp-#P zg)V}n#5h<54;cTSFMUVMAS=db0I0BZI#Tu5ICIKmmto4p2_>+dbcgp2!Pb~QhI1_z zvBKaM{rG+29btjr8$~ad7y_9B++o*|L`pV`E^(*iqL+!~PqWGDD&1}$owu8Kp7oZ2 z>r7paSTTG}XYZPIW%R)Q{h8Z#(5~&Qu}ulK7K|Tp??3{DktRXO!opC)AuR=WGs_-` zP_2lUjYKmwn>$2O?hNYgCS4k$9;HVixpgmiLi-nqvoX3}9xsPkDrNEf80 z2tUo1UT~A0jHX;x8HtgI4oYm9j@u1shnEZUa?bMyPjd@1_2&d^ztd&AN9oykV_Cw5 zk9;d?q>+yAc!76j_?hQ764(RRz4u;kclDMFnuTPWpeSO_hQKc7WfS^zLX&tS()+*I zd+)HO@^@Pt$ATRd5CtVFQWSw1r6?t_Ap!#t5Ks`JgGz}Zqksemi471CGlIYfLX;{c zL}^h7iS$7PBmp8pNK@&M2!t&ub3b!_|D5kV=XrkTpL_0k?xX)1Htdw0cdvK7>s<>G zg4m4T4Y`N|g;wp9z(#9kQw(Ao6wu7uYVO@ur{qMFLI1u`;s=a%cxeAJ-VW z$5}y}aFeaMJNxi%qUV<^3j>11Jck;xKZ9&vm*sdZ?+x2)DrJRejZ^uqQp-HDCB-?@ z*YL`~EYjlTk;%PzLn(FKMQ?Ubr@R~6$fIG}Nr+&-Fu)sZoTbM|yroyc?U4V3xPgf_ zOWq5G)P0(U%uAao9l?)q?M{d9oxGXdE30?DkIiesqcN=Q$r;xHs!KGYV5BorC ze}9|sHk-JA)9|jiU6YdAJnAD~4$6S4DZV;DavD$Q)Rr z&~#FVPzhO+v@sqMsW*yU2deaGTere-uMrwc6O4m3%MD; zUCf}C;9$bg^osK}izy2f^aU|CuBWB5jJg*2`-rZ%C_@Yt`}EBOd^m8Ry36w0*OB2B z-wXHuQ4B*{qaA%DwF6(-{0x0M6_@GSkD**iYU)_f@^36g1RrKU(C>IZ^S!Xnjb@?X#bDHDScyF`=dB_L zNu50rU(kxtUf!$BX%G-Hgb;Y&hwq2bZ-H}ZAV$!W3{xj;4k2uY(t?Y}mA|m@_Ts9R zFdV97O?hw@W+oq7bfKsW6Nc5l-S8%L#5YQ#=b%RVT$u|iH90k1wB6sv$7!-4Ix3bs zcewM3pFs^8Wj5I}Px?$sBnFX(y!{kU0fujM1HM}){er-?4&MKZ(5o>NopRd*0;4O$uq0lkH&aR(OiTOg>!*J$mTzy+KD%l*nJ$MNjA7S}n-Wl`LsI&HM za^dl$r$&eU-u>cU)}^n1#JDIw=DeS&SH+T@kKU8PZmIXphZ7w`emTQbI;QH=Qshwu zjTwy8QudQ+*v89{1w2uFmrs6cwhXu;U6(k4+G>|N+w1|=3l>|6o5u(TIOex0JTzff z6_gn(!2Apa*wcEm<{F6~eaLcyt>YUhm$j^%vWlH9fSioJ{9tsTM!(br6(j2yHX0hK z2tMLu*{dHo$Y{V4q3~)4glr?R(Fwi_H~AL!5}N?D&WG-LnSFur>fub#o+}wal=svf*D5A7 z?p}Cj>T94-CuS}z9&#>ZekYqgJ;m7j7Ad~X)^Ur?!vSu6SNrfQ zOVR4%bIgR$1rRcajEIO7JgHHuvV0zvXS;|j{yzPi57z8D+Hs#jD&ZT~YZARcBmNoA z{_;`2N6Z8URw0m@)I(8C7HYL%6Br0ZX}B3=G(wVXlkb$cKH=l$k#YVj`Us|-GCL@& zIV@OrbH>#H3(`8g1zCu_Pj|S45q1Tf-JY* zqn&K0ixwOi{)s+IcI&D7T9I9baL-=jLClx3aY94kIKd2P7lV+Hp?3>8iLnkEl5kp3 zH9gH`%#Yq8(8XRCkG7yT(+$O-!tgeQ!x9lyT5`Q__>CYyW8X;x9AU_g-t3=()`#KXqftik#ixv z7p$$cJ?*Lk)UJ-32EF@+?|tz2N>8jQ`>U55$Js_!+@R}QKWAf6lT&9GT1^ubjV4Ya z#O|;mwF?T+Z-K8iX~YP+LcwpBBs7@~g*7wR*dD6D`A-VkA6me+KxVFrH`T~{{s*D+ zg^-5}Lt;2&8z|`cNx!FgIIuk?esWyJmN?;6WVWe%hpXiCyn4RRPZ`bp@bu(PFr1)taBG5-j>;r zRsy%h$a@DE8$%=zT4d7G%G-oLDlteCz!LtDTT1SIfDAolUS%c7GF-)1wu|@+qin@& zbVC2-$M z#okjKV9`X>BACj-TA}<2!Zt=1PlG?TZh;!7+zotHG=)7| zA!lbv>u6KYMjxbb*c!;%c`Za$D8Q>~z!v#jZdB9%JRZQd1lNYX2$$nLm+NO-Ih55U zw5jiD7shSEETkTh&RK4Qypw&dv8)GVQ)z9Me`ozS5J2iHT$F263^fvLK;L;+2{g=P z9Yl}9DhZ6UJt0vQM#^_l)RH62 z5(rvsvL~y$YIn% z#=L<(!u6dwh(8Z-g>AwaiJYiLyviITinONBzZh1&N38*FH#vvSLBtCD5phC71+cC= z4;(&y4t$${Z3dZbnRi}q8OQCD2;-4mxDkLtl}kM zh5R`5CWiV?9--V!_~JP$6s`kqFU4rap1W=z0-;~fLUbo-=NL1vf!tQWI#&HFb^yE5M#RbCblXNZ_c2Pysjht-!iMO=h9&^*3Wek=F%1 ziT-;Stc4V8<9G$6dO{MKFEJG4rc10GKSUV!#B-?+@HQB=`>ImBRd3MTM8;{!0h^>u z=62V$b9Wk8T(68rX~`@{tI(V%o+a1DIXIH-V&%<=U@d)`_-8l>8U54RkV)0A;jn*t zXYC5`C{Gb@${AAIle>k{HlJqsoX|_y^nVz3eUm! z$}J?OZ^}2X% zTZK)N53GszkW0EnP=R`cw0Jp61aicfNKOrJBV^bHUy;^4V(?l#dS@ZV&i53Qu&Mg4 zJ63IIb^p7k?oUe!1p9w^@n+`Bx-R>I{&Y5DdW_m1R%kGl9qDnsH`v&|0b851C0bqx zD?|jsAR|iq^e@63ZCN9taV)hd~6_um1z z2uNJBRv&V+FLiw|N?m?lxDT9v8qoq*W8u$7h=vcnjpjVOgjxxH7;3H|R?OZHozncx z&tQptHn%Xo>Z#{xr{9y)?zltl^?0u7<(yBL75&gqxsgFja!7a)7uQ^t}uaDtK#TnV8w!VABZS&XybUv7lgV!6O3%CGg$QBC1YI zy)9qPr-D*(%FhJvCd?jRa6z3-L$dSzP-h#u)C)HT$t1%`LRV4CBf^hemOVnZ$kIj zza=UAtIMfPFDS(5EjQ~LD1i-1@BTZvT#K8c-oXkIC!fRMwx@xQV!9y@??iq}^WRhl zb%_^&!xx}F$&jAZ>Xih0dxoIfStJkP%x{aZLGADfd4)@J9r%j6(;=M11UAC=zV6j= zm88s21`OF)^NOKi%oL*u1I6pj3cTTWZ4-sxzhUqF{muXTL8=>#mtsTvj>^P<<)*JwlJ+^rr;8q zv8+#i%{&F+DT&V!^t^qo8S|f zFps>SyRp|~0jrJ+Xx7~#F-xju>OdSvaYU;!rvL|JK-ycAEzIfi&d|Y)pPZ7s57(wG2t zB|q$90$eUWjXy39jIZgqUqx<(>$9$@H~M(JvB-|MT;AgI^%1t*;%TxT*Mu{8+52*I zcMd${Rnf>(Ddwi{Q0%pwYFYa}A5*XK7^3q$N>4ZpYXLMRaVkQ>llqGPsjOTzl;V{+ ziQCf*+iGhpM6JRlG&0u`c3gmrr6jRxQw|bvfE1+~+F$d7d>^Jz4wp30;%&Y8UgAa4 ztnJb8eW3j8%4~U7`|9gti037@wzcG{>%qkaPj|fWO~usqv)LK4y|Xi2U$#`AUsdkEV| z1xKK?@OBd9ZTxn@=^DQP*>dmLLnmvX>k*L^BSGHQ)cYngbYxyg79lxObKZMuUn%QO zDtge#e}Q9s#>H}JGBS^S^-ILNH(%c6lz-3k9Y&q4M`696FEz*xDmjb1orJyk-yl7S z4&S>4HrOeOY{Vemj_l(wV9>0e*evp3LLLVX$D0Ifg4(w=c|SWaq<26 z*x%k>XpMY6>2p?kP*LL4O<&k|qwUaxK7nyrL4N_w#k{_#o)X@We?5IBE4a+hGFKMD zq_!-XorgNa3C+2N35}qJl!$r9BsneI2)gd(0sM6V@PMA{Df_c6ZH4tpY4NJEz1$~R zyNgd|JXkC`*ZT5t-Kw}X77^PmDoQM?d7ZBLb=(PM@h#;@G-rCBfH`N^^jE?+@R0)ip02isV7M&2C>67eBP!>pZI(by*!?|wT@6Cx<`M-7JbN9+Z_L1{SXxy* z^yd4KBUFMvCc3t|j@Dqyg0Qn;-{yP^sWJW>XIDnB-zNN31%-Ld>?5`bB|bBIFVp`Q zrlQ<7SZ1f}WUN<|Ap(1na^bzo9T2LO>u{SMVAg_KgJTQ{yGZfVwrT>i9X@zNNo2D~ z7=wiz=3NY1MvTOay1FeVh-KVni_OJOyXt-8<<5I$YjTgF8M-FSR< z>2(1+goCW}9jc>Y;ClUxJ%k}nAYoS`oSiu-DZB>6E3(qmvs4ilg@1jBc5Y~9Knqp-r7+X#UXyIQBq*h`{w?)=ew zr|h`E9*z9N`fep-WD8bY#n8>!+7yHK?%AC>Uz2-%7H4Bjla)UqP7yEjxY*;0GKS^_ z{7JU$c93+PwU}TVDWb-qw!pVT-|PR2QrgpfRin5Ei9d0MLRb-mX%ShY=A+Nd1SCE_i zOm3Ds+a!hC^o0}GLy>LpLm%)S5^PJZhS;F+l5kclh_MQ!d^)hP7!$qM^nt6GgZgWC z^d^Tr*y$`gTx0Nsl6KQ8343zLZ-lIVqh=msmRNQ^IP&WVr;??JumncjCKw@!tK$Z3 z7f13{TM)_qy5jcRjFotQ$!vS94Y&uW$@Rq~(B7zQ#FU-F`&F}Sn5;9ydOwA9SOb_$- za%{+sbOee73Y`Yh{p4WAdgq~^93#=n)6c3Q)V+6+MgLu*o7ktu2vzYCMBdM za+OwlPvQVsRk@PTuRT&Io*=FUuevR3B>%{le>p-pkCIUQ9%`apsNY!zHHS6US{?ciiioBVrEIH0zKvFCWhaUQN4+bcrUI zh5oH#9u{pT*QC1keW{YfE>7i0c=n1MzM{B>I%wQVuJ#-$6SGiYmL`lVZgU2?IR*u` zyVa7BEhgBv+Qlg%R&|$0n-4L8(D)2B`O7#F5{io zc$7cqSkFLr$6)=`EZUa{c=boP1nHb2&mz`P3CdZ4+!eYaQRUAzBR|THO7M&|V1iQC zicqBz^l|VWM@XH|(;W=v+CO~t0!$4C=#j#|EI^BOpP@0Z;I|gF9v9{WGJ@AaIlpn{ zCtpvbZ!;^q(c$E2g6quco$Co6)MK(WAX z0|Smfdkq+|-X1mLnfQwgCN1sMhiTJvkNhreC)-zP>7h}UeeQRC8s?K4s_VI3Ox)M% z!dUmum2=U-wbJR)!k%+L4V}&BB`8-b@-0YQG~c@wImi*hrZ@n^Beu(t;wsO6YS$HL7| z8iw0TI+~vt>Ntk5-8q8(^EMSzcxeOM#dyep=!~t%L9F_+paw!L?7;v*WR@JxOGH&^ zwVDlb&WVS~@evJsMqBGfZ`l(0$ej?jbzqS_o;k7>$`rS^`0I-^UX_gpA~V#sLf1n@ zOz}L;`f~lkx(%+Zr3(|sf2Nt7?y{kn7G#Z#PlonTYQ5-BePfCk!Mv}`&e?i6wfx<` z?$7?)|Ne(;ns9!|=>F%~1^$rH{gBc9kkS2+(fyFo{gBc9KO&=RmxU5~h}F~nlrsaeQuGC>OPj+aWIb&UjzzKlgD>xQ-$ zy`Rnv9otR2gE-RsS9-%f54Wu$dL=g72SF}sakK;}8bymt&rmWatKWGP zsSC;|2n;}Sb(+YvYAs|gLKxWS%j9~9Xj3s@zIPPb&7Y08CZ?D(Z}FDn)kNn)7h-=C z%32tD)qVI_5n>a>X-j@K0XLPLWN5PyRn^#y!F8wN1mnB6%+~m93V*C;dit!V!Do(b z7R^4-@mhMtVhBfdyM=Mh%`Bgww7LFC4wBKXDhmYk+F@cak*jy1mMu3E^n4r<{RN#D z&o;t9Ul1INQ5xed6{UzPW?LYvJvhWgh+KiI7Zg2SWNL+rC?@~~PP&b^6T&nhwbSf~ zFv}F`#}I9kFH;;%*M`F;e#nRJkL?CMUS#)L7zT|OWVtg)UJYN2ItESsQh~e=K3>Md zP#2%l?#L}n}bArv{JguZqVw4Y!TS_Urb#pxqr$bx(2;*Lmpq zOkSm0OctJkh(i}P4Dp;%GqTjcOJP7mnF+lTAmSOjArEn+sE8~uKF#DmVQwJ)MqQ0R ziDqhyG0e$A#9g>4u1ttZvPDwt1%L8if52}R4PiG82YJsy*p^Bt-|^Kz&FOGin0|WB z7uHhCg*U~kfSbbp3Txl=whnYm^}>MVLc`s`n(*AGN&6NWhL|EYab|Ge4PMpklxCRB zL>>e(ki3*Eq8eDg#SW6BA+?HROLg|h|DmS6g-yB*7 z6f&IlXs<%S5LgtuOun1DUgG_hI=DX;jm+v6`LWHr0-M=DgIVzzy&YS#&TLzAX>3yP zmqh(vG_`7qQY(x4zNR4;(?TLF9WBZA9CY~WvKI>j$@Vvw$+Q8}ftC4-W~FWK?2C z8I?kMpX2-%ZUkOFs!O&d#0phCI@Kkv5*202jBxeRAjxM$H8O!=YB<#>(P>m}gUD7b ziaj715VoCuBrk{}FiRX!AE0{!Zw;J73kH2%G`-wyU{B4fs#x6(_O&kFp2SG^Gt#7j zs2x#4Zk4N5WU}KwVV8cUf6)w0OKfh`^D;QIy+uo0Mfy}M7_O}FeQc9f36H%cnYxubW>sh=}M z%FSgtrdP8f(nIyzHL*ddGV}2^PD9q6-kSbva>d%>s``e{!_(;RRMQa$5>&5TBa)#m zKk=O6W&-*Z+C>g zjACDbBe_XT69v@!*2PKTGRnH9Tz$H8&xQ%>qMYJ-ABuC9rVqLH-r2LBZ+7HSw$tiZ z9IyV0`xh#!k}8u4n8AtuYF8PS^L$=e4+6S=?`5LZxQB#+&7HIN7MUxUA>_gQM&@cc z`jQai+#2oBf=ckWfb0dxq%752SiD|vQIIw>!PZ%z1_p6WEj7t4ouv~#@K?`^vQ0*w zY%P0pps?%g-Qv|Xrns{=Tzu0@%!ikXQdvVhzl3++3+Ag+{X;l&1B=R;k;tE`Q6D3P z@!4Xma?J_x1a=Fw#U((xSwe1NZkBu2Kb%8ZV-u&qDEJWG5i%=1!QZZP)Hi!5o2-uO zaqYXN)v}cVOPqI(8LZH+Wt=-u0jnWd?jBT1O&s3MC39ke>a2!Fm_OgBKNdXmn)f-2 zjcprVpdDa9P`>yOpWMFAWlysR*$6}?f2(L+!y_WXVxA4+UBzl~_?X~4|B>dM4PQnc zVTC!yp2;q6>S;-bO#`b=7v^f5F1%`g=5?EU%J(ZqJc3uh;+p8Yf;;EoIFq*Etz=fT z2Me%kaj3T=J9_CbK6S$we3KZ&K*?ean@6<7j7P;|y1E~#>rW1%i^i5r)3NB{;Eb&u z_wIDR#L&+5R)Z8(3AX=@-pz$L~swm)d(+1Db@|bRCzI`$KC~wljzB*2#OM;6Oe_gK&k##-^p7X;~>b|cjBD658 zt)_ng3c4iX7ABU0;umG$9c6}iX9WppVA;~&nUd}XLC(4+qK;uTS)|o68~|v|&Edq2 z6KtryRqwc%@kB7I#vSV_!l6&}O8q9Xx(j2j|DMckdK#eZ}YC1!)o&-eSqti4YX(!>YEF?%VQI`@27#o$%K54kJw^^j7 zZFsQru})2T4@!B4w;dp8;;kgi)(yt3+BeBSKa#K+7tl1acVIz*Zf0!lmj|q>7sV80 zt()ASJutHNMw#ROhgn(ae%hHP&$8*MAv4~r?%vAp&%O|*xz#soX1HGUz9zEHzRwG0 zkYUfXMWpzU^ob%1=nPj}1&To?W_B%MfVdKWjmvy^fbPXLpvf+dAppVOsj$l- z$R+=r(y^^en8gJ7hEgc-Y(K`<{=h(>-`(cFsy>xTKa3W;v%aPny1KDAQrE14;QHE?auz=lf>j~&&7pr7`y{dPfC>hu4q6>i$Hsk)qzyM-&{; zHAOzCl-pZV2bopON`yey`cN_wAw$U=WT&HugS@MMt2mZNaVkF#DA~CRlTNJfr}`Mq zIGO-w7WX{=J|x)!;|klAYXxBCAWiE2651`abK*%iE1ra7H9_oa8%0D~gNyX^a~94{ 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

(CYt}FIpy!~_`iBxXgUBe<^noc8L02Q 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�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. -You need the following permissions to use the Data Visualizer with file upload: +You need the following permissions to use the {data-viz} with file upload: * cluster privileges: `monitor`, `manage_ingest_pipelines` * index privileges: `read`, `manage`, `index` For more information, see {ref}/security-privileges.html[Security privileges] -and {ref}/built-in-roles.html[Built-in roles]. +and {ml-docs}/setup.html[Set up {ml-features}]. -- From 840808c9422c31b1a36ca001804f02da6fa87799 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Tue, 21 Apr 2020 09:43:17 -0700 Subject: [PATCH 37/39] Include datasource UUID in agent config yaml, adjust overflow height of yaml view (#64027) --- .../datasource_to_agent_datasource.test.ts | 36 +++++++++++++++---- .../datasource_to_agent_datasource.ts | 3 +- .../common/types/models/agent_config.ts | 6 ++-- .../details_page/components/yaml/index.tsx | 4 ++- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.test.ts b/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.test.ts index 3496ea782ee997..17509571f19853 100644 --- a/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.test.ts +++ b/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.test.ts @@ -3,11 +3,11 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { NewDatasource, DatasourceInput } from '../types'; +import { Datasource, NewDatasource, DatasourceInput } from '../types'; import { storedDatasourceToAgentDatasource } from './datasource_to_agent_datasource'; describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { - const mockDatasource: NewDatasource = { + const mockNewDatasource: NewDatasource = { name: 'mock-datasource', description: '', config_id: '', @@ -17,6 +17,12 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { inputs: [], }; + const mockDatasource: Datasource = { + ...mockNewDatasource, + id: 'some-uuid', + revision: 1, + }; + const mockInput: DatasourceInput = { type: 'test-logs', enabled: true, @@ -70,7 +76,8 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { it('returns agent datasource config for datasource with no inputs', () => { expect(storedDatasourceToAgentDatasource(mockDatasource)).toEqual({ - id: 'mock-datasource', + id: 'some-uuid', + name: 'mock-datasource', namespace: 'default', enabled: true, use_output: 'default', @@ -87,7 +94,8 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { }, }) ).toEqual({ - id: 'mock-datasource', + id: 'some-uuid', + name: 'mock-datasource', namespace: 'default', enabled: true, use_output: 'default', @@ -99,9 +107,21 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { }); }); + it('uses name for id when id is not provided in case of new datasource', () => { + expect(storedDatasourceToAgentDatasource(mockNewDatasource)).toEqual({ + id: 'mock-datasource', + name: 'mock-datasource', + namespace: 'default', + enabled: true, + use_output: 'default', + inputs: [], + }); + }); + it('returns agent datasource config with flattened input and package stream', () => { expect(storedDatasourceToAgentDatasource({ ...mockDatasource, inputs: [mockInput] })).toEqual({ - id: 'mock-datasource', + id: 'some-uuid', + name: 'mock-datasource', namespace: 'default', enabled: true, use_output: 'default', @@ -140,7 +160,8 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { ], }) ).toEqual({ - id: 'mock-datasource', + id: 'some-uuid', + name: 'mock-datasource', namespace: 'default', enabled: true, use_output: 'default', @@ -169,7 +190,8 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { inputs: [{ ...mockInput, enabled: false }], }) ).toEqual({ - id: 'mock-datasource', + id: 'some-uuid', + name: 'mock-datasource', namespace: 'default', enabled: true, use_output: 'default', diff --git a/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.ts b/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.ts index b509878b7f9452..9e09d3fa3153a0 100644 --- a/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.ts +++ b/x-pack/plugins/ingest_manager/common/services/datasource_to_agent_datasource.ts @@ -12,7 +12,8 @@ export const storedDatasourceToAgentDatasource = ( const { name, namespace, enabled, package: pkg, inputs } = datasource; const fullDatasource: FullAgentConfigDatasource = { - id: name, + id: 'id' in datasource ? datasource.id : name, + name, namespace, enabled, use_output: DEFAULT_OUTPUT.name, // TODO: hardcoded to default output for now diff --git a/x-pack/plugins/ingest_manager/common/types/models/agent_config.ts b/x-pack/plugins/ingest_manager/common/types/models/agent_config.ts index 002c3784446a8e..2372caee512af6 100644 --- a/x-pack/plugins/ingest_manager/common/types/models/agent_config.ts +++ b/x-pack/plugins/ingest_manager/common/types/models/agent_config.ts @@ -34,8 +34,10 @@ export interface AgentConfig extends NewAgentConfig, SavedObjectAttributes { revision: number; } -export type FullAgentConfigDatasource = Pick & { - id: string; +export type FullAgentConfigDatasource = Pick< + Datasource, + 'id' | 'name' | 'namespace' | 'enabled' +> & { package?: Pick; use_output: string; inputs: Array< diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/details_page/components/yaml/index.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/details_page/components/yaml/index.tsx index 56b109a9bc062f..ad27c590d5eaae 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/details_page/components/yaml/index.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/details_page/components/yaml/index.tsx @@ -27,7 +27,9 @@ import { Loading } from '../../../../../components'; const CONFIG_KEYS_ORDER = [ 'id', + 'name', 'revision', + 'type', 'outputs', 'datasources', 'enabled', @@ -52,7 +54,7 @@ export const ConfigYamlView = memo<{ config: AgentConfig }>(({ config }) => { return ( - + {dump(fullConfigRequest.data.item, { sortKeys: (keyA: string, keyB: string) => { const indexA = CONFIG_KEYS_ORDER.indexOf(keyA); From 0c14424321256103abd267975a2ba13b9f727d26 Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Tue, 21 Apr 2020 10:55:42 -0600 Subject: [PATCH 38/39] [SIEM] [Cases] Tags suggestions (#63878) --- .../pages/case/components/__mock__/form.ts | 6 +++ .../case/components/create/index.test.tsx | 45 ++++++++++++++++- .../pages/case/components/create/index.tsx | 49 ++++++++++++++++++- .../case/components/tag_list/index.test.tsx | 44 ++++++++++++++++- .../pages/case/components/tag_list/index.tsx | 45 +++++++++++++++-- .../user_action_tree/index.test.tsx | 6 +-- .../plugins/siem/public/shared_imports.ts | 2 + 7 files changed, 184 insertions(+), 13 deletions(-) diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/form.ts b/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/form.ts index 9d2ac29bc47d7d..cc01edcfaab112 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/form.ts +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/__mock__/form.ts @@ -3,6 +3,10 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ +import { useForm } from '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks'; +jest.mock( + '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form' +); export const mockFormHook = { isSubmitted: false, isSubmitting: false, @@ -35,3 +39,5 @@ export const getFormMock = (sampleData: any) => ({ }), getFormData: () => sampleData, }); + +export const useFormMock = useForm as jest.Mock; diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.test.tsx index d480744fc932a7..0897be6310fa2e 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.test.tsx @@ -14,6 +14,8 @@ import { Router, routeData, mockHistory, mockLocation } from '../__mock__/router import { useInsertTimeline } from '../../../../components/timeline/insert_timeline_popover/use_insert_timeline'; import { usePostCase } from '../../../../containers/case/use_post_case'; +import { useGetTags } from '../../../../containers/case/use_get_tags'; + jest.mock('../../../../components/timeline/insert_timeline_popover/use_insert_timeline'); jest.mock('../../../../containers/case/use_post_case'); import { useForm } from '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks'; @@ -22,6 +24,14 @@ import { SiemPageName } from '../../../home/types'; jest.mock( '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form' ); +jest.mock('../../../../containers/case/use_get_tags'); +jest.mock( + '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/components/form_data_provider', + () => ({ + FormDataProvider: ({ children }: { children: ({ tags }: { tags: string[] }) => void }) => + children({ tags: ['rad', 'dude'] }), + }) +); export const useFormMock = useForm as jest.Mock; @@ -40,9 +50,11 @@ const defaultInsertTimeline = { handleCursorChange, handleOnTimelineChange, }; + +const sampleTags = ['coke', 'pepsi']; const sampleData = { description: 'what a great description', - tags: ['coke', 'pepsi'], + tags: sampleTags, title: 'what a cool title', }; const defaultPostCase = { @@ -52,14 +64,28 @@ const defaultPostCase = { postCase, }; describe('Create case', () => { + // Suppress warnings about "noSuggestions" prop + /* eslint-disable no-console */ + const originalError = console.error; + beforeAll(() => { + console.error = jest.fn(); + }); + afterAll(() => { + console.error = originalError; + }); + /* eslint-enable no-console */ + const fetchTags = jest.fn(); const formHookMock = getFormMock(sampleData); - beforeEach(() => { jest.resetAllMocks(); useInsertTimelineMock.mockImplementation(() => defaultInsertTimeline); usePostCaseMock.mockImplementation(() => defaultPostCase); useFormMock.mockImplementation(() => ({ form: formHookMock })); jest.spyOn(routeData, 'useLocation').mockReturnValue(mockLocation); + (useGetTags as jest.Mock).mockImplementation(() => ({ + tags: sampleTags, + fetchTags, + })); }); it('should post case on submit click', async () => { @@ -118,4 +144,19 @@ describe('Create case', () => { ); expect(wrapper.find(`[data-test-subj="create-case-loading-spinner"]`).exists()).toBeTruthy(); }); + it('Tag options render with new tags added', () => { + const wrapper = mount( + + + + + + ); + expect( + wrapper + .find(`[data-test-subj="caseTags"] [data-test-subj="input"]`) + .first() + .prop('options') + ).toEqual([{ label: 'coke' }, { label: 'pepsi' }, { label: 'rad' }, { label: 'dude' }]); + }); }); diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.tsx index 53b792bb9b5ebb..0f819f961b3963 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/create/index.tsx @@ -3,7 +3,7 @@ * 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, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { EuiButton, EuiButtonEmpty, @@ -15,8 +15,16 @@ import { import styled, { css } from 'styled-components'; import { Redirect } from 'react-router-dom'; +import { isEqual } from 'lodash/fp'; import { CasePostRequest } from '../../../../../../../../plugins/case/common/api'; -import { Field, Form, getUseField, useForm, UseField } from '../../../../shared_imports'; +import { + Field, + Form, + getUseField, + useForm, + UseField, + FormDataProvider, +} from '../../../../shared_imports'; import { usePostCase } from '../../../../containers/case/use_post_case'; import { schema } from './schema'; import { InsertTimelinePopover } from '../../../../components/timeline/insert_timeline_popover'; @@ -24,6 +32,7 @@ import { useInsertTimeline } from '../../../../components/timeline/insert_timeli import * as i18n from '../../translations'; import { SiemPageName } from '../../../home/types'; import { MarkdownEditorForm } from '../../../../components/markdown_editor/form'; +import { useGetTags } from '../../../../containers/case/use_get_tags'; export const CommonUseField = getUseField({ component: Field }); @@ -59,6 +68,21 @@ export const Create = React.memo(() => { options: { stripEmptyFields: false }, schema, }); + const { tags: tagOptions } = useGetTags(); + const [options, setOptions] = useState( + tagOptions.map(label => ({ + label, + })) + ); + useEffect( + () => + setOptions( + tagOptions.map(label => ({ + label, + })) + ), + [tagOptions] + ); const { handleCursorChange, handleOnTimelineChange } = useInsertTimeline( form, 'description' @@ -108,6 +132,8 @@ export const Create = React.memo(() => { fullWidth: true, placeholder: '', disabled: isLoading, + options, + noSuggestions: false, }, }} /> @@ -131,6 +157,25 @@ export const Create = React.memo(() => { }} /> + + {({ tags: anotherTags }) => { + const current: string[] = options.map(opt => opt.label); + const newOptions = anotherTags.reduce((acc: string[], item: string) => { + if (!acc.includes(item)) { + return [...acc, item]; + } + return acc; + }, current); + if (!isEqual(current, newOptions)) { + setOptions( + newOptions.map((label: string) => ({ + label, + })) + ); + } + return null; + }} + ({ + FormDataProvider: ({ children }: { children: ({ tags }: { tags: string[] }) => void }) => + children({ tags: ['rad', 'dude'] }), + }) +); const onSubmit = jest.fn(); const defaultProps = { disabled: false, @@ -26,11 +35,27 @@ const defaultProps = { }; describe('TagList ', () => { + // Suppress warnings about "noSuggestions" prop + /* eslint-disable no-console */ + const originalError = console.error; + beforeAll(() => { + console.error = jest.fn(); + }); + afterAll(() => { + console.error = originalError; + }); + /* eslint-enable no-console */ const sampleTags = ['coke', 'pepsi']; + const fetchTags = jest.fn(); const formHookMock = getFormMock({ tags: sampleTags }); beforeEach(() => { jest.resetAllMocks(); (useForm as jest.Mock).mockImplementation(() => ({ form: formHookMock })); + + (useGetTags as jest.Mock).mockImplementation(() => ({ + tags: sampleTags, + fetchTags, + })); }); it('Renders no tags, and then edit', () => { const wrapper = mount( @@ -80,6 +105,23 @@ describe('TagList ', () => { expect(onSubmit).toBeCalledWith(sampleTags); }); }); + it('Tag options render with new tags added', () => { + const wrapper = mount( + + + + ); + wrapper + .find(`[data-test-subj="tag-list-edit-button"]`) + .last() + .simulate('click'); + expect( + wrapper + .find(`[data-test-subj="caseTags"] [data-test-subj="input"]`) + .first() + .prop('options') + ).toEqual([{ label: 'coke' }, { label: 'pepsi' }, { label: 'rad' }, { label: 'dude' }]); + }); it('Cancels on cancel', async () => { const props = { ...defaultProps, diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/tag_list/index.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/tag_list/index.tsx index 9bac000b93235d..c96ae09706426c 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/tag_list/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/tag_list/index.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { EuiText, EuiHorizontalRule, @@ -17,10 +17,12 @@ import { EuiLoadingSpinner, } from '@elastic/eui'; import styled, { css } from 'styled-components'; +import { isEqual } from 'lodash/fp'; import * as i18n from './translations'; -import { Form, useForm } from '../../../../shared_imports'; +import { Form, FormDataProvider, useForm } from '../../../../shared_imports'; import { schema } from './schema'; import { CommonUseField } from '../create'; +import { useGetTags } from '../../../../containers/case/use_get_tags'; interface TagListProps { disabled?: boolean; @@ -54,6 +56,22 @@ export const TagList = React.memo( setIsEditTags(false); } }, [form, onSubmit]); + const { tags: tagOptions } = useGetTags(); + const [options, setOptions] = useState( + tagOptions.map(label => ({ + label, + })) + ); + + useEffect( + () => + setOptions( + tagOptions.map(label => ({ + label, + })) + ), + [tagOptions] + ); return ( @@ -75,7 +93,7 @@ export const TagList = React.memo( )} - + {tags.length === 0 && !isEditTags &&

{i18n.NO_TAGS}

} {tags.length > 0 && !isEditTags && @@ -98,9 +116,30 @@ export const TagList = React.memo( euiFieldProps: { fullWidth: true, placeholder: '', + options, + noSuggestions: false, }, }} /> + + {({ tags: anotherTags }) => { + const current: string[] = options.map(opt => opt.label); + const newOptions = anotherTags.reduce((acc: string[], item: string) => { + if (!acc.includes(item)) { + return [...acc, item]; + } + return acc; + }, current); + if (!isEqual(current, newOptions)) { + setOptions( + newOptions.map((label: string) => ({ + label, + })) + ); + } + return null; + }} + 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 1c71260422d4b1..ff402e8ea1c8b4 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 @@ -8,17 +8,13 @@ import React from 'react'; import { mount } from 'enzyme'; import { Router, routeData, mockHistory, mockLocation } from '../__mock__/router'; -import { getFormMock } from '../__mock__/form'; +import { getFormMock, useFormMock } from '../__mock__/form'; import { useUpdateComment } from '../../../../containers/case/use_update_comment'; import { basicCase, getUserAction } from '../../../../containers/case/mock'; import { UserActionTree } from './'; import { TestProviders } from '../../../../mock'; -import { useFormMock } from '../create/index.test'; import { wait } from '../../../../lib/helpers'; import { act } from 'react-dom/test-utils'; -jest.mock( - '../../../../../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib/hooks/use_form' -); const fetchUserActions = jest.fn(); const onUpdateField = jest.fn(); diff --git a/x-pack/legacy/plugins/siem/public/shared_imports.ts b/x-pack/legacy/plugins/siem/public/shared_imports.ts index c83433ef129c97..0c0ac637a42293 100644 --- a/x-pack/legacy/plugins/siem/public/shared_imports.ts +++ b/x-pack/legacy/plugins/siem/public/shared_imports.ts @@ -8,6 +8,7 @@ export { getUseField, getFieldValidityAndErrorMessage, FieldHook, + FieldValidateResponse, FIELD_TYPES, Form, FormData, @@ -17,6 +18,7 @@ export { UseField, useForm, ValidationFunc, + VALIDATION_TYPES, } from '../../../../../src/plugins/es_ui_shared/static/forms/hook_form_lib'; export { Field, From b7aab690f4007fa66e120a2d2dde3f6215c21a17 Mon Sep 17 00:00:00 2001 From: Ben Skelker <54019610+benskelker@users.noreply.github.com> Date: Tue, 21 Apr 2020 20:14:25 +0300 Subject: [PATCH 39/39] [Docs]7.7 SIEM doc updates (#63951) * SIEM section doc updates * corrections * more corrections --- docs/management/advanced-options.asciidoc | 2 ++ docs/siem/images/cases-ui.png | Bin 0 -> 312096 bytes docs/siem/siem-ui.asciidoc | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 docs/siem/images/cases-ui.png diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index f62a4d28dfc0df..7081590931a992 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -217,6 +217,8 @@ might increase the search time. This setting is off by default. Users must opt-i [horizontal] `siem:defaultAnomalyScore`:: The threshold above which Machine Learning job anomalies are displayed in the SIEM app. `siem:defaultIndex`:: A comma-delimited list of Elasticsearch indices from which the SIEM app collects events. +`siem:ipReputationLinks`:: A JSON array containing links for verifying the reputation of an IP address. The links are displayed on +{siem-guide}/siem-ui-overview.html#network-ui[IP detail] pages. `siem:enableNewsFeed`:: Enables the security news feed on the SIEM *Overview* page. `siem:newsFeedUrl`:: The URL from which the security news feed content is diff --git a/docs/siem/images/cases-ui.png b/docs/siem/images/cases-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..b513efb6647407801733be975c6c1c8d0fc2a420 GIT binary patch literal 312096 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%0ATctif&rE_w5iAW-AteqWx_9mA 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

u<^4h}^zlq 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

8% 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≪DP1Xk9B0 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⁣O0d;kW>w4TUJnm3u; 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 R+Rwn{_chV?ig(2Ee*!Vq^;7@= literal 0 HcmV?d00001 diff --git a/docs/siem/siem-ui.asciidoc b/docs/siem/siem-ui.asciidoc index 85253daaf29330..985138756622d2 100644 --- a/docs/siem/siem-ui.asciidoc +++ b/docs/siem/siem-ui.asciidoc @@ -35,7 +35,7 @@ image::siem/images/network-ui.png[] [float] [[detections-ui]] -=== Detections (Beta) +=== Detections (beta) The Detections feature automatically searches for threats and creates signals when they are detected. Signal detection rules define the conditions @@ -50,6 +50,22 @@ or the Detections API. [role="screenshot"] image::siem/images/detections-ui.png[] +[float] +[[cases-ui]] +=== Cases (beta) + +Cases are used to open and track security issues directly in SIEM. +Cases list the original reporter and all users who contribute to a case +(`participants`). Case comments support Markdown syntax, and allow linking to +saved Timelines. Additionally, you can send cases to external systems from +within SIEM (currently ServiceNow). + +For information about opening, updating, and closing cases, see +{siem-guide}/cases-overview.html[Cases] in the SIEM Guide. + +[role="screenshot"] +image::siem/images/cases-ui.png[] + [float] [[timelines-ui]] === Timeline

CZT$XzGOaws8V^6|Y%zIQQ9xFT{ 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

+fYMKRSlKw?BEKjmNqJXp)K+?4I7k*%CDl`~? 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 Ty^ Date: Tue, 21 Apr 2020 09:35:19 -0700 Subject: [PATCH 36/39] [DOCS] Add file size setting for Data Visualizer (#64006) --- docs/settings/ml-settings.asciidoc | 9 ++++++- .../ml/images/ml-data-visualizer-sample.jpg | Bin 579529 -> 355490 bytes docs/user/ml/index.asciidoc | 22 +++++++++--------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docs/settings/ml-settings.asciidoc b/docs/settings/ml-settings.asciidoc index 6528568e868900..b71e1c672756ac 100644 --- a/docs/settings/ml-settings.asciidoc +++ b/docs/settings/ml-settings.asciidoc @@ -8,7 +8,6 @@ You do not need to configure any settings to use {kib} {ml-features}. They are enabled by default. -[float] [[general-ml-settings-kb]] ==== General {ml} settings @@ -19,3 +18,11 @@ If set to `false` in `kibana.yml`, the {ml} icon is hidden in this {kib} instance. If `xpack.ml.enabled` is set to `true` in `elasticsearch.yml`, however, you can still use the {ml} APIs. To disable {ml} entirely, see the {ref}/ml-settings.html[{es} {ml} settings]. + +[[data-visualizer-settings]] +==== {data-viz} settings + +`xpack.ml.file_data_visualizer.max_file_size`:: +Sets the file size limit when importing data in the {data-viz}. The default +value is `100MB`. The highest supported value for this setting is `1GB`. + diff --git a/docs/user/ml/images/ml-data-visualizer-sample.jpg b/docs/user/ml/images/ml-data-visualizer-sample.jpg index 6c2e018932717f478b9f92dc412d1904d52d6893..ce2bb660d7da1a3cea161afcb07e6223d77e038f 100644 GIT binary patch literal 355490 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∾l4lWCBm1k&WWD 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