From 2c4cc12b988ccbb8f8e2baf030331d27ad18a6d7 Mon Sep 17 00:00:00 2001 From: Corey Robertson Date: Tue, 7 Apr 2020 11:55:06 -0400 Subject: [PATCH 01/52] Removes Pitch Presentation Template from Canvas (#62688) * Removes Pitch Presentation Template from Canvas * Fix test * Keep translation to not fail i18n --- .../canvas_plugin_src/templates/index.ts | 4 ++-- .../canvas/i18n/templates/template_strings.ts | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/templates/index.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/templates/index.ts index eba0b47f7dc13b..88d2b904e6cb3f 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/templates/index.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/templates/index.ts @@ -7,7 +7,7 @@ import { applyTemplateStrings } from '../../i18n/templates'; import darkTemplate from './theme_dark.json'; import lightTemplate from './theme_light.json'; -import pitchTemplate from './pitch_presentation.json'; +// import pitchTemplate from './pitch_presentation.json'; import statusTemplate from './status_report.json'; import summaryTemplate from './summary_report.json'; @@ -15,7 +15,7 @@ import summaryTemplate from './summary_report.json'; export const templateSpecs = applyTemplateStrings([ darkTemplate, lightTemplate, - pitchTemplate, + // pitchTemplate, statusTemplate, summaryTemplate, ]); diff --git a/x-pack/legacy/plugins/canvas/i18n/templates/template_strings.ts b/x-pack/legacy/plugins/canvas/i18n/templates/template_strings.ts index 5ab6a908641dea..d8e4d51706be96 100644 --- a/x-pack/legacy/plugins/canvas/i18n/templates/template_strings.ts +++ b/x-pack/legacy/plugins/canvas/i18n/templates/template_strings.ts @@ -37,14 +37,6 @@ export const getTemplateStrings = (): TemplateStringDict => ({ defaultMessage: 'Light color themed presentation deck', }), }, - Pitch: { - name: i18n.translate('xpack.canvas.templates.pitchName', { - defaultMessage: 'Pitch', - }), - help: i18n.translate('xpack.canvas.templates.pitchHelp', { - defaultMessage: 'Branded presentation with large photos', - }), - }, Status: { name: i18n.translate('xpack.canvas.templates.statusName', { defaultMessage: 'Status', @@ -62,3 +54,14 @@ export const getTemplateStrings = (): TemplateStringDict => ({ }), }, }); + +export const getUnusedTemplateStrings = (): TemplateStringDict => ({ + Pitch: { + name: i18n.translate('xpack.canvas.templates.pitchName', { + defaultMessage: 'Pitch', + }), + help: i18n.translate('xpack.canvas.templates.pitchHelp', { + defaultMessage: 'Branded presentation with large photos', + }), + }, +}); From 406d7550be4c5b0ae6127bdc3f05398ca59ba1a4 Mon Sep 17 00:00:00 2001 From: Alison Goryachev Date: Tue, 7 Apr 2020 12:36:13 -0400 Subject: [PATCH 02/52] [Remote Clusters] Update callout and move server_name field (#62352) --- .../remote_cluster_form.test.js.snap | 210 +++++++++--------- .../remote_cluster_form.js | 84 ++++--- 2 files changed, 159 insertions(+), 135 deletions(-) diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/__snapshots__/remote_cluster_form.test.js.snap b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/__snapshots__/remote_cluster_form.test.js.snap index 4c109c557fdb0d..1e6c2c4d289aab 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/__snapshots__/remote_cluster_form.test.js.snap +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/__snapshots__/remote_cluster_form.test.js.snap @@ -350,7 +350,7 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u description={ @@ -367,7 +367,7 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u data-test-subj="remoteClusterFormConnectionModeToggle" label={ @@ -443,11 +443,11 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u className="euiTextColor euiTextColor--subdued" > - Use seed nodes by default, or switch to a single proxy address. + Use seed nodes by default, or switch to proxy mode. @@ -534,11 +534,11 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u onClick={[Function]} > - Use a single proxy address + Use proxy mode @@ -687,23 +687,37 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u + + , + } + } /> } + isInvalid={false} label={ } @@ -711,28 +725,31 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u >
@@ -740,20 +757,19 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u
-
- + - +
- + + + , + } + } > - The number of socket connections to open per remote cluster. + A string sent in the server_name field of the TLS Server Name Indication extension if TLS is enabled. + + +
@@ -801,37 +845,23 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u
- - , - } - } + defaultMessage="The number of socket connections to open per remote cluster." + id="xpack.remoteClusters.remoteClusterForm.fieldSocketConnectionsHelpText" + values={Object {}} /> } - isInvalid={false} label={ } @@ -839,31 +869,28 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u >
@@ -871,19 +898,20 @@ exports[`RemoteClusterForm proxy mode renders correct connection settings when u
-
- + - +
- + - - , - } - } + defaultMessage="The number of socket connections to open per remote cluster." + id="xpack.remoteClusters.remoteClusterForm.fieldSocketConnectionsHelpText" + values={Object {}} > - A string sent in the server_name field of the TLS Server Name Indication extension if TLS is enabled. - - - + The number of socket connections to open per remote cluster.
@@ -1447,7 +1447,7 @@ Array [
- Use seed nodes by default, or switch to a single proxy address. + Use seed nodes by default, or switch to proxy mode.
- Use a single proxy address + Use proxy mode
diff --git a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/remote_cluster_form.js b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/remote_cluster_form.js index c98bd73bf83a0a..a392cc96077845 100644 --- a/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/remote_cluster_form.js +++ b/x-pack/plugins/remote_clusters/public/application/sections/components/remote_cluster_form/remote_cluster_form.js @@ -405,30 +405,6 @@ export class RemoteClusterForm extends Component { /> - - } - helpText={ - - } - fullWidth - > - - this.onFieldsChange({ proxySocketConnections: Number(e.target.value) || null }) - } - fullWidth - /> - + + + } + helpText={ + + } + fullWidth + > + + this.onFieldsChange({ proxySocketConnections: Number(e.target.value) || null }) + } + fullWidth + /> + ); } @@ -498,14 +499,14 @@ export class RemoteClusterForm extends Component { <> } checked={mode === PROXY_MODE} @@ -519,15 +520,38 @@ export class RemoteClusterForm extends Component { <> } - iconType="pin" - size="s" - /> + > + + + + ), + searchString: ( + + + + ), + }} + /> + ) : null} From d70718426fa8a0a7f2bde2cb0e251a9f9d86c01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Tue, 7 Apr 2020 17:39:52 +0100 Subject: [PATCH 03/52] [APM] Change custom link from EuiListGroupItem to EuiLink (#62742) --- .../CustomLink/CustomLinkSection.tsx | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/CustomLink/CustomLinkSection.tsx b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/CustomLink/CustomLinkSection.tsx index 52befe37ffdae9..bd00bcf600ffeb 100644 --- a/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/CustomLink/CustomLinkSection.tsx +++ b/x-pack/legacy/plugins/apm/public/components/shared/TransactionActionMenu/CustomLink/CustomLinkSection.tsx @@ -3,14 +3,26 @@ * 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 { EuiLink, EuiText } from '@elastic/eui'; import Mustache from 'mustache'; +import React from 'react'; +import styled from 'styled-components'; import { CustomLink } from '../../../../../../../../plugins/apm/common/custom_link/custom_link_types'; import { Transaction } from '../../../../../../../../plugins/apm/typings/es_schemas/ui/transaction'; -import { - SectionLinks, - SectionLink -} from '../../../../../../../../plugins/observability/public'; +import { px, truncate, units } from '../../../../style/variables'; + +const LinkContainer = styled.li` + margin-top: ${px(units.half)}; + &:first-of-type { + margin-top: 0; + } +`; + +const TruncateText = styled(EuiText)` + font-weight: 500; + line-height: ${px(units.unit)}; + ${truncate(px(units.unit * 25))} +`; export const CustomLinkSection = ({ customLinks, @@ -19,7 +31,7 @@ export const CustomLinkSection = ({ customLinks: CustomLink[]; transaction: Transaction; }) => ( - +
    {customLinks.map(link => { let href = link.url; try { @@ -28,13 +40,12 @@ export const CustomLinkSection = ({ // ignores any error that happens } return ( - + + + {link.label} + + ); })} - +
); From 8ffc08f2f7bf1a017d4d875e9de869ecd2339d0d Mon Sep 17 00:00:00 2001 From: Chris Roberson Date: Tue, 7 Apr 2020 13:44:34 -0400 Subject: [PATCH 04/52] [REVERT THE REVERT] [Monitoring] Cluster state watch to Kibana alerting (#62793) * Revert "Revert "[Monitoring] Cluster state watch to Kibana alerting (#61685)"" This reverts commit f1bd3bdacb263b2754c04000070fe0f79ab5ed72. * Fix i18n error * Fix test --- .../plugins/monitoring/common/constants.ts | 8 +- .../public/components/alerts/alerts.js | 44 +- .../public/components/alerts/status.test.tsx | 8 +- .../public/components/alerts/status.tsx | 2 +- .../cluster/overview/alerts_panel.js | 81 ++- .../monitoring/public/views/alerts/index.js | 30 +- x-pack/plugins/monitoring/common/constants.ts | 8 +- .../server/alerts/cluster_state.test.ts | 186 ++++++ .../monitoring/server/alerts/cluster_state.ts | 134 ++++ .../plugins/monitoring/server/alerts/enums.ts | 16 + .../server/alerts/license_expiration.test.ts | 572 +++++------------- .../server/alerts/license_expiration.ts | 127 ++-- .../monitoring/server/alerts/types.d.ts | 62 +- .../lib/alerts/cluster_state.lib.test.ts | 70 +++ .../server/lib/alerts/cluster_state.lib.ts | 88 +++ .../lib/alerts/fetch_cluster_state.test.ts | 39 ++ .../server/lib/alerts/fetch_cluster_state.ts | 53 ++ .../server/lib/alerts/fetch_clusters.test.ts | 46 +- .../server/lib/alerts/fetch_clusters.ts | 41 +- .../server/lib/alerts/fetch_licenses.test.ts | 67 +- .../server/lib/alerts/fetch_licenses.ts | 16 +- .../server/lib/alerts/fetch_status.test.ts | 122 ++++ .../server/lib/alerts/fetch_status.ts | 100 ++- .../lib/alerts/get_prepared_alert.test.ts | 163 +++++ .../server/lib/alerts/get_prepared_alert.ts | 87 +++ .../lib/alerts/license_expiration.lib.test.ts | 23 +- .../lib/alerts/license_expiration.lib.ts | 52 +- .../lib/cluster/get_clusters_from_request.js | 12 +- x-pack/plugins/monitoring/server/plugin.ts | 12 + .../server/routes/api/v1/alerts/alerts.js | 53 +- 30 files changed, 1565 insertions(+), 757 deletions(-) create mode 100644 x-pack/plugins/monitoring/server/alerts/cluster_state.test.ts create mode 100644 x-pack/plugins/monitoring/server/alerts/cluster_state.ts create mode 100644 x-pack/plugins/monitoring/server/alerts/enums.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.test.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.test.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.test.ts create mode 100644 x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.ts diff --git a/x-pack/legacy/plugins/monitoring/common/constants.ts b/x-pack/legacy/plugins/monitoring/common/constants.ts index 9a4030f3eb2147..3a4c7b71dcd03d 100644 --- a/x-pack/legacy/plugins/monitoring/common/constants.ts +++ b/x-pack/legacy/plugins/monitoring/common/constants.ts @@ -239,11 +239,15 @@ export const ALERT_TYPE_PREFIX = 'monitoring_'; * This is the alert type id for the license expiration alert */ export const ALERT_TYPE_LICENSE_EXPIRATION = `${ALERT_TYPE_PREFIX}alert_type_license_expiration`; +/** + * This is the alert type id for the cluster state alert + */ +export const ALERT_TYPE_CLUSTER_STATE = `${ALERT_TYPE_PREFIX}alert_type_cluster_state`; /** * A listing of all alert types */ -export const ALERT_TYPES = [ALERT_TYPE_LICENSE_EXPIRATION]; +export const ALERT_TYPES = [ALERT_TYPE_LICENSE_EXPIRATION, ALERT_TYPE_CLUSTER_STATE]; /** * Matches the id for the built-in in email action type @@ -254,7 +258,7 @@ export const ALERT_ACTION_TYPE_EMAIL = '.email'; /** * The number of alerts that have been migrated */ -export const NUMBER_OF_MIGRATED_ALERTS = 1; +export const NUMBER_OF_MIGRATED_ALERTS = 2; /** * The advanced settings config name for the email address diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/alerts.js b/x-pack/legacy/plugins/monitoring/public/components/alerts/alerts.js index 11fcef73a4b976..95c1af5549198f 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/alerts.js +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/alerts.js @@ -6,10 +6,15 @@ import React from 'react'; import chrome from '../../np_imports/ui/chrome'; -import { capitalize } from 'lodash'; +import { capitalize, get } from 'lodash'; import { formatDateTimeLocal } from '../../../common/formatting'; import { formatTimestampToDuration } from '../../../common'; -import { CALCULATE_DURATION_SINCE, EUI_SORT_DESCENDING } from '../../../common/constants'; +import { + CALCULATE_DURATION_SINCE, + EUI_SORT_DESCENDING, + ALERT_TYPE_LICENSE_EXPIRATION, + ALERT_TYPE_CLUSTER_STATE, +} from '../../../common/constants'; import { mapSeverity } from './map_severity'; import { FormattedAlert } from 'plugins/monitoring/components/alerts/formatted_alert'; import { EuiMonitoringTable } from 'plugins/monitoring/components/table'; @@ -21,6 +26,8 @@ const linkToCategories = { 'elasticsearch/indices': 'Elasticsearch Indices', 'kibana/instances': 'Kibana Instances', 'logstash/instances': 'Logstash Nodes', + [ALERT_TYPE_LICENSE_EXPIRATION]: 'License expiration', + [ALERT_TYPE_CLUSTER_STATE]: 'Cluster state', }; const getColumns = (kbnUrl, scope, timezone) => [ { @@ -94,19 +101,22 @@ const getColumns = (kbnUrl, scope, timezone) => [ }), field: 'message', sortable: true, - render: (message, alert) => ( - { - scope.$evalAsync(() => { - kbnUrl.changePath(target); - }); - }} - /> - ), + render: (_message, alert) => { + const message = get(alert, 'message.text', get(alert, 'message', '')); + return ( + { + scope.$evalAsync(() => { + kbnUrl.changePath(target); + }); + }} + /> + ); + }, }, { name: i18n.translate('xpack.monitoring.alerts.categoryColumnTitle', { @@ -148,8 +158,8 @@ const getColumns = (kbnUrl, scope, timezone) => [ export const Alerts = ({ alerts, angular, sorting, pagination, onTableChange }) => { const alertsFlattened = alerts.map(alert => ({ ...alert, - status: alert.metadata.severity, - category: alert.metadata.link, + status: get(alert, 'metadata.severity', get(alert, 'severity', 0)), + category: get(alert, 'metadata.link', get(alert, 'type', null)), })); const injector = chrome.dangerouslyGetActiveInjector(); diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/status.test.tsx b/x-pack/legacy/plugins/monitoring/public/components/alerts/status.test.tsx index 258a5b68db372e..d3cf4b463a2cc5 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/status.test.tsx +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/status.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { kfetch } from 'ui/kfetch'; import { AlertsStatus, AlertsStatusProps } from './status'; -import { ALERT_TYPE_PREFIX } from '../../../common/constants'; +import { ALERT_TYPES } from '../../../common/constants'; import { getSetupModeState } from '../../lib/setup_mode'; import { mockUseEffects } from '../../jest.helpers'; @@ -63,11 +63,7 @@ describe('Status', () => { it('should render a success message if all alerts have been migrated and in setup mode', async () => { (kfetch as jest.Mock).mockReturnValue({ - data: [ - { - alertTypeId: ALERT_TYPE_PREFIX, - }, - ], + data: ALERT_TYPES.map(type => ({ alertTypeId: type })), }); (getSetupModeState as jest.Mock).mockReturnValue({ diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/status.tsx b/x-pack/legacy/plugins/monitoring/public/components/alerts/status.tsx index 072a98b1234521..5f5329bf7fff83 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/status.tsx +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/status.tsx @@ -142,7 +142,7 @@ export const AlertsStatus: React.FC = (props: AlertsStatusPro ); } - const allMigrated = kibanaAlerts.length === NUMBER_OF_MIGRATED_ALERTS; + const allMigrated = kibanaAlerts.length >= NUMBER_OF_MIGRATED_ALERTS; if (allMigrated) { if (setupModeEnabled) { return ( diff --git a/x-pack/legacy/plugins/monitoring/public/components/cluster/overview/alerts_panel.js b/x-pack/legacy/plugins/monitoring/public/components/cluster/overview/alerts_panel.js index 8455fb8cf3088c..d87ff98e79be00 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/cluster/overview/alerts_panel.js +++ b/x-pack/legacy/plugins/monitoring/public/components/cluster/overview/alerts_panel.js @@ -6,14 +6,12 @@ import React, { Fragment } from 'react'; import moment from 'moment-timezone'; -import chrome from '../../../np_imports/ui/chrome'; import { FormattedAlert } from 'plugins/monitoring/components/alerts/formatted_alert'; import { mapSeverity } from 'plugins/monitoring/components/alerts/map_severity'; import { formatTimestampToDuration } from '../../../../common/format_timestamp_to_duration'; import { CALCULATE_DURATION_SINCE, KIBANA_ALERTING_ENABLED, - ALERT_TYPE_LICENSE_EXPIRATION, CALCULATE_DURATION_UNTIL, } from '../../../../common/constants'; import { formatDateTimeLocal } from '../../../../common/formatting'; @@ -31,6 +29,37 @@ import { EuiLink, } from '@elastic/eui'; +function replaceTokens(alert) { + if (!alert.message.tokens) { + return alert.message.text; + } + + let text = alert.message.text; + + for (const token of alert.message.tokens) { + if (token.type === 'time') { + text = text.replace( + token.startToken, + token.isRelative + ? formatTimestampToDuration(alert.expirationTime, CALCULATE_DURATION_UNTIL) + : moment.tz(alert.expirationTime, moment.tz.guess()).format('LLL z') + ); + } else if (token.type === 'link') { + const linkPart = new RegExp(`${token.startToken}(.+?)${token.endToken}`).exec(text); + // TODO: we assume this is at the end, which works for now but will not always work + const nonLinkText = text.replace(linkPart[0], ''); + text = ( + + {nonLinkText} + {linkPart[1]} + + ); + } + } + + return text; +} + export function AlertsPanel({ alerts, changeUrl }) { const goToAlerts = () => changeUrl('/alerts'); @@ -58,9 +87,6 @@ export function AlertsPanel({ alerts, changeUrl }) { severityIcon.iconType = 'check'; } - const injector = chrome.dangerouslyGetActiveInjector(); - const timezone = injector.get('config').get('dateFormat:tz'); - return ( @@ -96,14 +122,7 @@ export function AlertsPanel({ alerts, changeUrl }) { const alertsList = KIBANA_ALERTING_ENABLED ? alerts.map((alert, idx) => { const callOutProps = mapSeverity(alert.severity); - let message = alert.message - // scan message prefix and replace relative times - // \w: Matches any alphanumeric character from the basic Latin alphabet, including the underscore. Equivalent to [A-Za-z0-9_]. - .replace( - '#relative', - formatTimestampToDuration(alert.expirationTime, CALCULATE_DURATION_UNTIL) - ) - .replace('#absolute', moment.tz(alert.expirationTime, moment.tz.guess()).format('LLL z')); + const message = replaceTokens(alert); if (!alert.isFiring) { callOutProps.title = i18n.translate( @@ -118,22 +137,30 @@ export function AlertsPanel({ alerts, changeUrl }) { ); callOutProps.color = 'success'; callOutProps.iconType = 'check'; - } else { - if (alert.type === ALERT_TYPE_LICENSE_EXPIRATION) { - message = ( - - {message} -   - Please update your license - - ); - } } return ( - -

{message}

-
+ + +

{message}

+ +

+ +

+
+
+ +
); }) : alerts.map((item, index) => ( diff --git a/x-pack/legacy/plugins/monitoring/public/views/alerts/index.js b/x-pack/legacy/plugins/monitoring/public/views/alerts/index.js index 7c065a78a8af98..62cc985887e9f5 100644 --- a/x-pack/legacy/plugins/monitoring/public/views/alerts/index.js +++ b/x-pack/legacy/plugins/monitoring/public/views/alerts/index.js @@ -18,25 +18,37 @@ import { Alerts } from '../../components/alerts'; import { MonitoringViewBaseEuiTableController } from '../base_eui_table_controller'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiPage, EuiPageBody, EuiPageContent, EuiSpacer, EuiLink } from '@elastic/eui'; -import { CODE_PATH_ALERTS } from '../../../common/constants'; +import { CODE_PATH_ALERTS, KIBANA_ALERTING_ENABLED } from '../../../common/constants'; function getPageData($injector) { const globalState = $injector.get('globalState'); const $http = $injector.get('$http'); const Private = $injector.get('Private'); - const url = `../api/monitoring/v1/clusters/${globalState.cluster_uuid}/legacy_alerts`; + const url = KIBANA_ALERTING_ENABLED + ? `../api/monitoring/v1/alert_status` + : `../api/monitoring/v1/clusters/${globalState.cluster_uuid}/legacy_alerts`; const timeBounds = timefilter.getBounds(); + const data = { + timeRange: { + min: timeBounds.min.toISOString(), + max: timeBounds.max.toISOString(), + }, + }; + + if (!KIBANA_ALERTING_ENABLED) { + data.ccs = globalState.ccs; + } return $http - .post(url, { - ccs: globalState.ccs, - timeRange: { - min: timeBounds.min.toISOString(), - max: timeBounds.max.toISOString(), - }, + .post(url, data) + .then(response => { + const result = get(response, 'data', []); + if (KIBANA_ALERTING_ENABLED) { + return result.alerts; + } + return result; }) - .then(response => get(response, 'data', [])) .catch(err => { const ajaxErrorHandlers = Private(ajaxErrorHandlersProvider); return ajaxErrorHandlers(err); diff --git a/x-pack/plugins/monitoring/common/constants.ts b/x-pack/plugins/monitoring/common/constants.ts index 9a4030f3eb2147..3a4c7b71dcd03d 100644 --- a/x-pack/plugins/monitoring/common/constants.ts +++ b/x-pack/plugins/monitoring/common/constants.ts @@ -239,11 +239,15 @@ export const ALERT_TYPE_PREFIX = 'monitoring_'; * This is the alert type id for the license expiration alert */ export const ALERT_TYPE_LICENSE_EXPIRATION = `${ALERT_TYPE_PREFIX}alert_type_license_expiration`; +/** + * This is the alert type id for the cluster state alert + */ +export const ALERT_TYPE_CLUSTER_STATE = `${ALERT_TYPE_PREFIX}alert_type_cluster_state`; /** * A listing of all alert types */ -export const ALERT_TYPES = [ALERT_TYPE_LICENSE_EXPIRATION]; +export const ALERT_TYPES = [ALERT_TYPE_LICENSE_EXPIRATION, ALERT_TYPE_CLUSTER_STATE]; /** * Matches the id for the built-in in email action type @@ -254,7 +258,7 @@ export const ALERT_ACTION_TYPE_EMAIL = '.email'; /** * The number of alerts that have been migrated */ -export const NUMBER_OF_MIGRATED_ALERTS = 1; +export const NUMBER_OF_MIGRATED_ALERTS = 2; /** * The advanced settings config name for the email address diff --git a/x-pack/plugins/monitoring/server/alerts/cluster_state.test.ts b/x-pack/plugins/monitoring/server/alerts/cluster_state.test.ts new file mode 100644 index 00000000000000..6a9ca884373471 --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/cluster_state.test.ts @@ -0,0 +1,186 @@ +/* + * 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 { Logger } from 'src/core/server'; +import { savedObjectsClientMock } from 'src/core/server/mocks'; +import { getClusterState } from './cluster_state'; +import { AlertServices } from '../../../alerting/server'; +import { ALERT_TYPE_CLUSTER_STATE } from '../../common/constants'; +import { AlertCommonParams, AlertCommonState, AlertClusterStatePerClusterState } from './types'; +import { getPreparedAlert } from '../lib/alerts/get_prepared_alert'; +import { executeActions } from '../lib/alerts/cluster_state.lib'; +import { AlertClusterStateState } from './enums'; + +jest.mock('../lib/alerts/cluster_state.lib', () => ({ + executeActions: jest.fn(), + getUiMessage: jest.fn(), +})); + +jest.mock('../lib/alerts/get_prepared_alert', () => ({ + getPreparedAlert: jest.fn(() => { + return { + emailAddress: 'foo@foo.com', + }; + }), +})); + +interface MockServices { + callCluster: jest.Mock; + alertInstanceFactory: jest.Mock; + savedObjectsClient: jest.Mock; +} + +describe('getClusterState', () => { + const services: MockServices | AlertServices = { + callCluster: jest.fn(), + alertInstanceFactory: jest.fn(), + savedObjectsClient: savedObjectsClientMock.create(), + }; + + const params: AlertCommonParams = { + dateFormat: 'YYYY', + timezone: 'UTC', + }; + + const emailAddress = 'foo@foo.com'; + const clusterUuid = 'kdksdfj434'; + const clusterName = 'monitoring_test'; + const cluster = { clusterUuid, clusterName }; + + async function setupAlert( + previousState: AlertClusterStateState, + newState: AlertClusterStateState + ): Promise { + const logger: Logger = { + warn: jest.fn(), + log: jest.fn(), + debug: jest.fn(), + trace: jest.fn(), + error: jest.fn(), + fatal: jest.fn(), + info: jest.fn(), + get: jest.fn(), + }; + const getLogger = (): Logger => logger; + const ccrEnabled = false; + (getPreparedAlert as jest.Mock).mockImplementation(() => ({ + emailAddress, + data: [ + { + state: newState, + clusterUuid, + }, + ], + clusters: [cluster], + })); + + const alert = getClusterState(null as any, null as any, getLogger, ccrEnabled); + const state: AlertCommonState = { + [clusterUuid]: { + state: previousState, + ui: { + isFiring: false, + severity: 0, + message: null, + resolvedMS: 0, + lastCheckedMS: 0, + triggeredMS: 0, + }, + } as AlertClusterStatePerClusterState, + }; + + return (await alert.executor({ services, params, state } as any)) as AlertCommonState; + } + + afterEach(() => { + (executeActions as jest.Mock).mockClear(); + }); + + it('should configure the alert properly', () => { + const alert = getClusterState(null as any, null as any, jest.fn(), false); + expect(alert.id).toBe(ALERT_TYPE_CLUSTER_STATE); + expect(alert.actionGroups).toEqual([{ id: 'default', name: 'Default' }]); + }); + + it('should alert if green -> yellow', async () => { + const result = await setupAlert(AlertClusterStateState.Green, AlertClusterStateState.Yellow); + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + AlertClusterStateState.Yellow, + emailAddress + ); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Yellow); + expect(clusterResult.ui.isFiring).toBe(true); + expect(clusterResult.ui.resolvedMS).toBe(0); + }); + + it('should alert if yellow -> green', async () => { + const result = await setupAlert(AlertClusterStateState.Yellow, AlertClusterStateState.Green); + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + AlertClusterStateState.Green, + emailAddress, + true + ); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Green); + expect(clusterResult.ui.resolvedMS).toBeGreaterThan(0); + }); + + it('should alert if green -> red', async () => { + const result = await setupAlert(AlertClusterStateState.Green, AlertClusterStateState.Red); + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + AlertClusterStateState.Red, + emailAddress + ); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Red); + expect(clusterResult.ui.isFiring).toBe(true); + expect(clusterResult.ui.resolvedMS).toBe(0); + }); + + it('should alert if red -> green', async () => { + const result = await setupAlert(AlertClusterStateState.Red, AlertClusterStateState.Green); + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + AlertClusterStateState.Green, + emailAddress, + true + ); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Green); + expect(clusterResult.ui.resolvedMS).toBeGreaterThan(0); + }); + + it('should not alert if red -> yellow', async () => { + const result = await setupAlert(AlertClusterStateState.Red, AlertClusterStateState.Yellow); + expect(executeActions).not.toHaveBeenCalled(); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Red); + expect(clusterResult.ui.resolvedMS).toBe(0); + }); + + it('should not alert if yellow -> red', async () => { + const result = await setupAlert(AlertClusterStateState.Yellow, AlertClusterStateState.Red); + expect(executeActions).not.toHaveBeenCalled(); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Yellow); + expect(clusterResult.ui.resolvedMS).toBe(0); + }); + + it('should not alert if green -> green', async () => { + const result = await setupAlert(AlertClusterStateState.Green, AlertClusterStateState.Green); + expect(executeActions).not.toHaveBeenCalled(); + const clusterResult = result[clusterUuid] as AlertClusterStatePerClusterState; + expect(clusterResult.state).toBe(AlertClusterStateState.Green); + expect(clusterResult.ui.resolvedMS).toBe(0); + }); +}); diff --git a/x-pack/plugins/monitoring/server/alerts/cluster_state.ts b/x-pack/plugins/monitoring/server/alerts/cluster_state.ts new file mode 100644 index 00000000000000..9a5805b8af7ced --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/cluster_state.ts @@ -0,0 +1,134 @@ +/* + * 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-timezone'; +import { i18n } from '@kbn/i18n'; +import { Logger, ICustomClusterClient, UiSettingsServiceStart } from 'src/core/server'; +import { ALERT_TYPE_CLUSTER_STATE } from '../../common/constants'; +import { AlertType } from '../../../alerting/server'; +import { executeActions, getUiMessage } from '../lib/alerts/cluster_state.lib'; +import { + AlertCommonExecutorOptions, + AlertCommonState, + AlertClusterStatePerClusterState, + AlertCommonCluster, +} from './types'; +import { AlertClusterStateState } from './enums'; +import { getPreparedAlert } from '../lib/alerts/get_prepared_alert'; +import { fetchClusterState } from '../lib/alerts/fetch_cluster_state'; + +export const getClusterState = ( + getUiSettingsService: () => Promise, + monitoringCluster: ICustomClusterClient, + getLogger: (...scopes: string[]) => Logger, + ccsEnabled: boolean +): AlertType => { + const logger = getLogger(ALERT_TYPE_CLUSTER_STATE); + return { + id: ALERT_TYPE_CLUSTER_STATE, + name: 'Monitoring Alert - Cluster Status', + actionGroups: [ + { + id: 'default', + name: i18n.translate('xpack.monitoring.alerts.clusterState.actionGroups.default', { + defaultMessage: 'Default', + }), + }, + ], + defaultActionGroupId: 'default', + async executor({ + services, + params, + state, + }: AlertCommonExecutorOptions): Promise { + logger.debug( + `Firing alert with params: ${JSON.stringify(params)} and state: ${JSON.stringify(state)}` + ); + + const preparedAlert = await getPreparedAlert( + ALERT_TYPE_CLUSTER_STATE, + getUiSettingsService, + monitoringCluster, + logger, + ccsEnabled, + services, + fetchClusterState + ); + + if (!preparedAlert) { + return state; + } + + const { emailAddress, data: states, clusters } = preparedAlert; + + const result: AlertCommonState = { ...state }; + const defaultAlertState: AlertClusterStatePerClusterState = { + state: AlertClusterStateState.Green, + ui: { + isFiring: false, + message: null, + severity: 0, + resolvedMS: 0, + triggeredMS: 0, + lastCheckedMS: 0, + }, + }; + + for (const clusterState of states) { + const alertState: AlertClusterStatePerClusterState = + (state[clusterState.clusterUuid] as AlertClusterStatePerClusterState) || + defaultAlertState; + const cluster = clusters.find( + (c: AlertCommonCluster) => c.clusterUuid === clusterState.clusterUuid + ); + if (!cluster) { + logger.warn(`Unable to find cluster for clusterUuid='${clusterState.clusterUuid}'`); + continue; + } + const isNonGreen = clusterState.state !== AlertClusterStateState.Green; + const severity = clusterState.state === AlertClusterStateState.Red ? 2100 : 1100; + + const ui = alertState.ui; + let triggered = ui.triggeredMS; + let resolved = ui.resolvedMS; + let message = ui.message || {}; + let lastState = alertState.state; + const instance = services.alertInstanceFactory(ALERT_TYPE_CLUSTER_STATE); + + if (isNonGreen) { + if (lastState === AlertClusterStateState.Green) { + logger.debug(`Cluster state changed from green to ${clusterState.state}`); + executeActions(instance, cluster, clusterState.state, emailAddress); + lastState = clusterState.state; + triggered = moment().valueOf(); + } + message = getUiMessage(clusterState.state); + resolved = 0; + } else if (!isNonGreen && lastState !== AlertClusterStateState.Green) { + logger.debug(`Cluster state changed from ${lastState} to green`); + executeActions(instance, cluster, clusterState.state, emailAddress, true); + lastState = clusterState.state; + message = getUiMessage(clusterState.state, true); + resolved = moment().valueOf(); + } + + result[clusterState.clusterUuid] = { + state: lastState, + ui: { + message, + isFiring: isNonGreen, + severity, + resolvedMS: resolved, + triggeredMS: triggered, + lastCheckedMS: moment().valueOf(), + }, + } as AlertClusterStatePerClusterState; + } + + return result; + }, + }; +}; diff --git a/x-pack/plugins/monitoring/server/alerts/enums.ts b/x-pack/plugins/monitoring/server/alerts/enums.ts new file mode 100644 index 00000000000000..ccff588743af1b --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/enums.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export enum AlertClusterStateState { + Green = 'green', + Red = 'red', + Yellow = 'yellow', +} + +export enum AlertCommonPerClusterMessageTokenType { + Time = 'time', + Link = 'link', +} diff --git a/x-pack/plugins/monitoring/server/alerts/license_expiration.test.ts b/x-pack/plugins/monitoring/server/alerts/license_expiration.test.ts index 0773af6e7f070d..92047e300bc1ff 100644 --- a/x-pack/plugins/monitoring/server/alerts/license_expiration.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/license_expiration.test.ts @@ -6,42 +6,31 @@ import moment from 'moment-timezone'; import { getLicenseExpiration } from './license_expiration'; -import { - ALERT_TYPE_LICENSE_EXPIRATION, - MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS, -} from '../../common/constants'; +import { ALERT_TYPE_LICENSE_EXPIRATION } from '../../common/constants'; import { Logger } from 'src/core/server'; -import { AlertServices, AlertInstance } from '../../../alerting/server'; +import { AlertServices } from '../../../alerting/server'; import { savedObjectsClientMock } from 'src/core/server/mocks'; import { - AlertState, - AlertClusterState, - AlertParams, - LicenseExpirationAlertExecutorOptions, + AlertCommonParams, + AlertCommonState, + AlertLicensePerClusterState, + AlertLicense, } from './types'; -import { SavedObject, SavedObjectAttributes } from 'src/core/server'; -import { SavedObjectsClientContract } from 'src/core/server'; - -function fillLicense(license: any, clusterUuid?: string) { - return { - hits: { - hits: [ - { - _source: { - license, - cluster_uuid: clusterUuid, - }, - }, - ], - }, - }; -} - -const clusterUuid = 'a4545jhjb'; -const params: AlertParams = { - dateFormat: 'YYYY', - timezone: 'UTC', -}; +import { executeActions } from '../lib/alerts/license_expiration.lib'; +import { PreparedAlert, getPreparedAlert } from '../lib/alerts/get_prepared_alert'; + +jest.mock('../lib/alerts/license_expiration.lib', () => ({ + executeActions: jest.fn(), + getUiMessage: jest.fn(), +})); + +jest.mock('../lib/alerts/get_prepared_alert', () => ({ + getPreparedAlert: jest.fn(() => { + return { + emailAddress: 'foo@foo.com', + }; + }), +})); interface MockServices { callCluster: jest.Mock; @@ -49,428 +38,169 @@ interface MockServices { savedObjectsClient: jest.Mock; } -const alertExecutorOptions: LicenseExpirationAlertExecutorOptions = { - alertId: '', - startedAt: new Date(), - services: { - callCluster: (path: string, opts: any) => new Promise(resolve => resolve()), - alertInstanceFactory: (id: string) => new AlertInstance(), - savedObjectsClient: {} as jest.Mocked, - }, - params: {}, - state: {}, - spaceId: '', - name: '', - tags: [], - previousStartedAt: null, - createdBy: null, - updatedBy: null, -}; - describe('getLicenseExpiration', () => { - const emailAddress = 'foo@foo.com'; - const getUiSettingsService: any = () => ({ - asScopedToClient: (): any => ({ - get: () => new Promise(resolve => resolve(emailAddress)), - }), - }); - const monitoringCluster: any = null; - const logger: Logger = { - warn: jest.fn(), - log: jest.fn(), - debug: jest.fn(), - trace: jest.fn(), - error: jest.fn(), - fatal: jest.fn(), - info: jest.fn(), - get: jest.fn(), + const services: MockServices | AlertServices = { + callCluster: jest.fn(), + alertInstanceFactory: jest.fn(), + savedObjectsClient: savedObjectsClientMock.create(), }; - const getLogger = (): Logger => logger; - const ccrEnabled = false; - afterEach(() => { - (logger.warn as jest.Mock).mockClear(); - }); - - it('should have the right id and actionGroups', () => { - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); - expect(alert.id).toBe(ALERT_TYPE_LICENSE_EXPIRATION); - expect(alert.actionGroups).toEqual([{ id: 'default', name: 'Default' }]); - }); + const params: AlertCommonParams = { + dateFormat: 'YYYY', + timezone: 'UTC', + }; - it('should return the state if no license is provided', async () => { - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); + const emailAddress = 'foo@foo.com'; + const clusterUuid = 'kdksdfj434'; + const clusterName = 'monitoring_test'; + const dateFormat = 'YYYY-MM-DD'; + const cluster = { clusterUuid, clusterName }; + const defaultUiState = { + isFiring: false, + severity: 0, + message: null, + resolvedMS: 0, + lastCheckedMS: 0, + triggeredMS: 0, + }; - const services: MockServices | AlertServices = { - callCluster: jest.fn(), - alertInstanceFactory: jest.fn(), - savedObjectsClient: savedObjectsClientMock.create(), + async function setupAlert( + license: AlertLicense | null, + expiredCheckDateMS: number, + preparedAlertResponse: PreparedAlert | null | undefined = undefined + ): Promise { + const logger: Logger = { + warn: jest.fn(), + log: jest.fn(), + debug: jest.fn(), + trace: jest.fn(), + error: jest.fn(), + fatal: jest.fn(), + info: jest.fn(), + get: jest.fn(), }; - const state = { foo: 1 }; - - const result = await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - }); - - expect(result).toEqual(state); - }); + const getLogger = (): Logger => logger; + const ccrEnabled = false; + (getPreparedAlert as jest.Mock).mockImplementation(() => { + if (preparedAlertResponse !== undefined) { + return preparedAlertResponse; + } - it('should log a warning if no email is provided', async () => { - const customGetUiSettingsService: any = () => ({ - asScopedToClient: () => ({ - get: () => null, - }), + return { + emailAddress, + data: [license], + clusters: [cluster], + dateFormat, + }; }); - const alert = getLicenseExpiration( - customGetUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); - const services = { - callCluster: jest.fn( - (method: string, { filterPath }): Promise => { - return new Promise(resolve => { - if (filterPath.includes('hits.hits._source.license.*')) { - resolve( - fillLicense({ - status: 'good', - type: 'basic', - expiry_date_in_millis: moment() - .add(7, 'days') - .valueOf(), - }) - ); - } - resolve({}); - }); - } - ), - alertInstanceFactory: jest.fn(), - savedObjectsClient: savedObjectsClientMock.create(), + const alert = getLicenseExpiration(null as any, null as any, getLogger, ccrEnabled); + const state: AlertCommonState = { + [clusterUuid]: { + expiredCheckDateMS, + ui: { ...defaultUiState }, + } as AlertLicensePerClusterState, }; - const state = {}; + return (await alert.executor({ services, params, state } as any)) as AlertCommonState; + } - await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - }); - - expect((logger.warn as jest.Mock).mock.calls.length).toBe(1); - expect(logger.warn).toHaveBeenCalledWith( - `Unable to send email for ${ALERT_TYPE_LICENSE_EXPIRATION} because there is no email configured.` - ); + afterEach(() => { + (executeActions as jest.Mock).mockClear(); + (getPreparedAlert as jest.Mock).mockClear(); }); - it('should fire actions if going to expire', async () => { - const scheduleActions = jest.fn(); - const alertInstanceFactory = jest.fn( - (id: string): AlertInstance => { - const instance = new AlertInstance(); - instance.scheduleActions = scheduleActions; - return instance; - } - ); + it('should have the right id and actionGroups', () => { + const alert = getLicenseExpiration(null as any, null as any, jest.fn(), false); + expect(alert.id).toBe(ALERT_TYPE_LICENSE_EXPIRATION); + expect(alert.actionGroups).toEqual([{ id: 'default', name: 'Default' }]); + }); - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); + it('should return the state if no license is provided', async () => { + const result = await setupAlert(null, 0, null); + expect(result[clusterUuid].ui).toEqual(defaultUiState); + }); - const savedObjectsClient = savedObjectsClientMock.create(); - savedObjectsClient.get.mockReturnValue( - new Promise(resolve => { - const savedObject: SavedObject = { - id: '', - type: '', - references: [], - attributes: { - [MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS]: emailAddress, - }, - }; - resolve(savedObject); - }) - ); - const services = { - callCluster: jest.fn( - (method: string, { filterPath }): Promise => { - return new Promise(resolve => { - if (filterPath.includes('hits.hits._source.license.*')) { - resolve( - fillLicense( - { - status: 'active', - type: 'gold', - expiry_date_in_millis: moment() - .add(7, 'days') - .valueOf(), - }, - clusterUuid - ) - ); - } - resolve({}); - }); - } - ), - alertInstanceFactory, - savedObjectsClient, + it('should fire actions if going to expire', async () => { + const expiryDateMS = moment() + .add(7, 'days') + .valueOf(); + const license = { + status: 'active', + type: 'gold', + expiryDateMS, + clusterUuid, }; - - const state = {}; - - const result: AlertState = (await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - })) as AlertState; - - const newState: AlertClusterState = result[clusterUuid] as AlertClusterState; - + const result = await setupAlert(license, 0); + const newState = result[clusterUuid] as AlertLicensePerClusterState; expect(newState.expiredCheckDateMS > 0).toBe(true); - expect(scheduleActions.mock.calls.length).toBe(1); - expect(scheduleActions.mock.calls[0][1].subject).toBe( - 'NEW X-Pack Monitoring: License Expiration' + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + moment.utc(expiryDateMS), + dateFormat, + emailAddress ); - expect(scheduleActions.mock.calls[0][1].to).toBe(emailAddress); }); it('should fire actions if the user fixed their license', async () => { - const scheduleActions = jest.fn(); - const alertInstanceFactory = jest.fn( - (id: string): AlertInstance => { - const instance = new AlertInstance(); - instance.scheduleActions = scheduleActions; - return instance; - } - ); - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); - - const savedObjectsClient = savedObjectsClientMock.create(); - savedObjectsClient.get.mockReturnValue( - new Promise(resolve => { - const savedObject: SavedObject = { - id: '', - type: '', - references: [], - attributes: { - [MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS]: emailAddress, - }, - }; - resolve(savedObject); - }) - ); - const services = { - callCluster: jest.fn( - (method: string, { filterPath }): Promise => { - return new Promise(resolve => { - if (filterPath.includes('hits.hits._source.license.*')) { - resolve( - fillLicense( - { - status: 'active', - type: 'gold', - expiry_date_in_millis: moment() - .add(120, 'days') - .valueOf(), - }, - clusterUuid - ) - ); - } - resolve({}); - }); - } - ), - alertInstanceFactory, - savedObjectsClient, - }; - - const state: AlertState = { - [clusterUuid]: { - expiredCheckDateMS: moment() - .subtract(1, 'day') - .valueOf(), - ui: { isFiring: true, severity: 0, message: null, resolvedMS: 0, expirationTime: 0 }, - }, + const expiryDateMS = moment() + .add(365, 'days') + .valueOf(); + const license = { + status: 'active', + type: 'gold', + expiryDateMS, + clusterUuid, }; - - const result: AlertState = (await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - })) as AlertState; - - const newState: AlertClusterState = result[clusterUuid] as AlertClusterState; + const result = await setupAlert(license, 100); + const newState = result[clusterUuid] as AlertLicensePerClusterState; expect(newState.expiredCheckDateMS).toBe(0); - expect(scheduleActions.mock.calls.length).toBe(1); - expect(scheduleActions.mock.calls[0][1].subject).toBe( - 'RESOLVED X-Pack Monitoring: License Expiration' + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + moment.utc(expiryDateMS), + dateFormat, + emailAddress, + true ); - expect(scheduleActions.mock.calls[0][1].to).toBe(emailAddress); }); it('should not fire actions for trial license that expire in more than 14 days', async () => { - const scheduleActions = jest.fn(); - const alertInstanceFactory = jest.fn( - (id: string): AlertInstance => { - const instance = new AlertInstance(); - instance.scheduleActions = scheduleActions; - return instance; - } - ); - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); - - const savedObjectsClient = savedObjectsClientMock.create(); - savedObjectsClient.get.mockReturnValue( - new Promise(resolve => { - const savedObject: SavedObject = { - id: '', - type: '', - references: [], - attributes: { - [MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS]: emailAddress, - }, - }; - resolve(savedObject); - }) - ); - const services = { - callCluster: jest.fn( - (method: string, { filterPath }): Promise => { - return new Promise(resolve => { - if (filterPath.includes('hits.hits._source.license.*')) { - resolve( - fillLicense( - { - status: 'active', - type: 'trial', - expiry_date_in_millis: moment() - .add(15, 'days') - .valueOf(), - }, - clusterUuid - ) - ); - } - resolve({}); - }); - } - ), - alertInstanceFactory, - savedObjectsClient, + const expiryDateMS = moment() + .add(20, 'days') + .valueOf(); + const license = { + status: 'active', + type: 'trial', + expiryDateMS, + clusterUuid, }; - - const state = {}; - const result: AlertState = (await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - })) as AlertState; - - const newState: AlertClusterState = result[clusterUuid] as AlertClusterState; - expect(newState.expiredCheckDateMS).toBe(undefined); - expect(scheduleActions).not.toHaveBeenCalled(); + const result = await setupAlert(license, 0); + const newState = result[clusterUuid] as AlertLicensePerClusterState; + expect(newState.expiredCheckDateMS).toBe(0); + expect(executeActions).not.toHaveBeenCalled(); }); it('should fire actions for trial license that in 14 days or less', async () => { - const scheduleActions = jest.fn(); - const alertInstanceFactory = jest.fn( - (id: string): AlertInstance => { - const instance = new AlertInstance(); - instance.scheduleActions = scheduleActions; - return instance; - } - ); - const alert = getLicenseExpiration( - getUiSettingsService, - monitoringCluster, - getLogger, - ccrEnabled - ); - - const savedObjectsClient = savedObjectsClientMock.create(); - savedObjectsClient.get.mockReturnValue( - new Promise(resolve => { - const savedObject: SavedObject = { - id: '', - type: '', - references: [], - attributes: { - [MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS]: emailAddress, - }, - }; - resolve(savedObject); - }) - ); - const services = { - callCluster: jest.fn( - (method: string, { filterPath }): Promise => { - return new Promise(resolve => { - if (filterPath.includes('hits.hits._source.license.*')) { - resolve( - fillLicense( - { - status: 'active', - type: 'trial', - expiry_date_in_millis: moment() - .add(13, 'days') - .valueOf(), - }, - clusterUuid - ) - ); - } - resolve({}); - }); - } - ), - alertInstanceFactory, - savedObjectsClient, + const expiryDateMS = moment() + .add(7, 'days') + .valueOf(); + const license = { + status: 'active', + type: 'trial', + expiryDateMS, + clusterUuid, }; - - const state = {}; - const result: AlertState = (await alert.executor({ - ...alertExecutorOptions, - services, - params, - state, - })) as AlertState; - - const newState: AlertClusterState = result[clusterUuid] as AlertClusterState; + const result = await setupAlert(license, 0); + const newState = result[clusterUuid] as AlertLicensePerClusterState; expect(newState.expiredCheckDateMS > 0).toBe(true); - expect(scheduleActions.mock.calls.length).toBe(1); + expect(executeActions).toHaveBeenCalledWith( + undefined, + cluster, + moment.utc(expiryDateMS), + dateFormat, + emailAddress + ); }); }); diff --git a/x-pack/plugins/monitoring/server/alerts/license_expiration.ts b/x-pack/plugins/monitoring/server/alerts/license_expiration.ts index 93397ff3641ae1..2e5356150086b4 100644 --- a/x-pack/plugins/monitoring/server/alerts/license_expiration.ts +++ b/x-pack/plugins/monitoring/server/alerts/license_expiration.ts @@ -5,24 +5,20 @@ */ import moment from 'moment-timezone'; -import { get } from 'lodash'; import { Logger, ICustomClusterClient, UiSettingsServiceStart } from 'src/core/server'; import { i18n } from '@kbn/i18n'; -import { ALERT_TYPE_LICENSE_EXPIRATION, INDEX_PATTERN_ELASTICSEARCH } from '../../common/constants'; +import { ALERT_TYPE_LICENSE_EXPIRATION } from '../../common/constants'; import { AlertType } from '../../../../plugins/alerting/server'; import { fetchLicenses } from '../lib/alerts/fetch_licenses'; -import { fetchDefaultEmailAddress } from '../lib/alerts/fetch_default_email_address'; -import { fetchClusters } from '../lib/alerts/fetch_clusters'; -import { fetchAvailableCcs } from '../lib/alerts/fetch_available_ccs'; import { - AlertLicense, - AlertState, - AlertClusterState, - AlertClusterUiState, - LicenseExpirationAlertExecutorOptions, + AlertCommonState, + AlertLicensePerClusterState, + AlertCommonExecutorOptions, + AlertCommonCluster, + AlertLicensePerClusterUiState, } from './types'; -import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; import { executeActions, getUiMessage } from '../lib/alerts/license_expiration.lib'; +import { getPreparedAlert } from '../lib/alerts/get_prepared_alert'; const EXPIRES_DAYS = [60, 30, 14, 7]; @@ -32,14 +28,6 @@ export const getLicenseExpiration = ( getLogger: (...scopes: string[]) => Logger, ccsEnabled: boolean ): AlertType => { - async function getCallCluster(services: any): Promise { - if (!monitoringCluster) { - return services.callCluster; - } - - return monitoringCluster.callAsInternalUser; - } - const logger = getLogger(ALERT_TYPE_LICENSE_EXPIRATION); return { id: ALERT_TYPE_LICENSE_EXPIRATION, @@ -53,54 +41,50 @@ export const getLicenseExpiration = ( }, ], defaultActionGroupId: 'default', - async executor({ - services, - params, - state, - }: LicenseExpirationAlertExecutorOptions): Promise { + async executor({ services, params, state }: AlertCommonExecutorOptions): Promise { logger.debug( `Firing alert with params: ${JSON.stringify(params)} and state: ${JSON.stringify(state)}` ); - const callCluster = await getCallCluster(services); - - // Support CCS use cases by querying to find available remote clusters - // and then adding those to the index pattern we are searching against - let esIndexPattern = INDEX_PATTERN_ELASTICSEARCH; - if (ccsEnabled) { - const availableCcs = await fetchAvailableCcs(callCluster); - if (availableCcs.length > 0) { - esIndexPattern = getCcsIndexPattern(esIndexPattern, availableCcs); - } - } - - const clusters = await fetchClusters(callCluster, esIndexPattern); + const preparedAlert = await getPreparedAlert( + ALERT_TYPE_LICENSE_EXPIRATION, + getUiSettingsService, + monitoringCluster, + logger, + ccsEnabled, + services, + fetchLicenses + ); - // Fetch licensing information from cluster_stats documents - const licenses: AlertLicense[] = await fetchLicenses(callCluster, clusters, esIndexPattern); - if (licenses.length === 0) { - logger.warn(`No license found for ${ALERT_TYPE_LICENSE_EXPIRATION}.`); + if (!preparedAlert) { return state; } - const uiSettings = (await getUiSettingsService()).asScopedToClient( - services.savedObjectsClient - ); - const dateFormat: string = await uiSettings.get('dateFormat'); - const timezone: string = await uiSettings.get('dateFormat:tz'); - const emailAddress = await fetchDefaultEmailAddress(uiSettings); - if (!emailAddress) { - // TODO: we can do more here - logger.warn( - `Unable to send email for ${ALERT_TYPE_LICENSE_EXPIRATION} because there is no email configured.` - ); - return; - } + const { emailAddress, data: licenses, clusters, dateFormat } = preparedAlert; - const result: AlertState = { ...state }; + const result: AlertCommonState = { ...state }; + const defaultAlertState: AlertLicensePerClusterState = { + expiredCheckDateMS: 0, + ui: { + isFiring: false, + message: null, + severity: 0, + resolvedMS: 0, + lastCheckedMS: 0, + triggeredMS: 0, + }, + }; for (const license of licenses) { - const licenseState: AlertClusterState = state[license.clusterUuid] || {}; + const alertState: AlertLicensePerClusterState = + (state[license.clusterUuid] as AlertLicensePerClusterState) || defaultAlertState; + const cluster = clusters.find( + (c: AlertCommonCluster) => c.clusterUuid === license.clusterUuid + ); + if (!cluster) { + logger.warn(`Unable to find cluster for clusterUuid='${license.clusterUuid}'`); + continue; + } const $expiry = moment.utc(license.expiryDateMS); let isExpired = false; let severity = 0; @@ -123,31 +107,26 @@ export const getLicenseExpiration = ( } } - const ui: AlertClusterUiState = get(licenseState, 'ui', { - isFiring: false, - message: null, - severity: 0, - resolvedMS: 0, - expirationTime: 0, - }); + const ui = alertState.ui; + let triggered = ui.triggeredMS; let resolved = ui.resolvedMS; let message = ui.message; - let expiredCheckDate = licenseState.expiredCheckDateMS; + let expiredCheckDate = alertState.expiredCheckDateMS; const instance = services.alertInstanceFactory(ALERT_TYPE_LICENSE_EXPIRATION); if (isExpired) { - if (!licenseState.expiredCheckDateMS) { + if (!alertState.expiredCheckDateMS) { logger.debug(`License will expire soon, sending email`); - executeActions(instance, license, $expiry, dateFormat, emailAddress); - expiredCheckDate = moment().valueOf(); + executeActions(instance, cluster, $expiry, dateFormat, emailAddress); + expiredCheckDate = triggered = moment().valueOf(); } - message = getUiMessage(license, timezone); + message = getUiMessage(); resolved = 0; - } else if (!isExpired && licenseState.expiredCheckDateMS) { + } else if (!isExpired && alertState.expiredCheckDateMS) { logger.debug(`License expiration has been resolved, sending email`); - executeActions(instance, license, $expiry, dateFormat, emailAddress, true); + executeActions(instance, cluster, $expiry, dateFormat, emailAddress, true); expiredCheckDate = 0; - message = getUiMessage(license, timezone, true); + message = getUiMessage(true); resolved = moment().valueOf(); } @@ -159,8 +138,10 @@ export const getLicenseExpiration = ( isFiring: expiredCheckDate > 0, severity, resolvedMS: resolved, - }, - }; + triggeredMS: triggered, + lastCheckedMS: moment().valueOf(), + } as AlertLicensePerClusterUiState, + } as AlertLicensePerClusterState; } return result; diff --git a/x-pack/plugins/monitoring/server/alerts/types.d.ts b/x-pack/plugins/monitoring/server/alerts/types.d.ts index ff47d6f2ad4dca..b689d008b51a78 100644 --- a/x-pack/plugins/monitoring/server/alerts/types.d.ts +++ b/x-pack/plugins/monitoring/server/alerts/types.d.ts @@ -5,41 +5,79 @@ */ import { Moment } from 'moment'; import { AlertExecutorOptions } from '../../../alerting/server'; +import { AlertClusterStateState, AlertCommonPerClusterMessageTokenType } from './enums'; export interface AlertLicense { status: string; type: string; expiryDateMS: number; clusterUuid: string; - clusterName: string; } -export interface AlertState { - [clusterUuid: string]: AlertClusterState; +export interface AlertClusterState { + state: AlertClusterStateState; + clusterUuid: string; +} + +export interface AlertCommonState { + [clusterUuid: string]: AlertCommonPerClusterState; } -export interface AlertClusterState { - expiredCheckDateMS: number | Moment; - ui: AlertClusterUiState; +export interface AlertCommonPerClusterState { + ui: AlertCommonPerClusterUiState; } -export interface AlertClusterUiState { +export interface AlertClusterStatePerClusterState extends AlertCommonPerClusterState { + state: AlertClusterStateState; +} + +export interface AlertLicensePerClusterState extends AlertCommonPerClusterState { + expiredCheckDateMS: number; +} + +export interface AlertCommonPerClusterUiState { isFiring: boolean; severity: number; - message: string | null; + message: AlertCommonPerClusterMessage | null; resolvedMS: number; + lastCheckedMS: number; + triggeredMS: number; +} + +export interface AlertCommonPerClusterMessage { + text: string; // Do this. #link this is a link #link + tokens?: AlertCommonPerClusterMessageToken[]; +} + +export interface AlertCommonPerClusterMessageToken { + startToken: string; + endToken?: string; + type: AlertCommonPerClusterMessageTokenType; +} + +export interface AlertCommonPerClusterMessageLinkToken extends AlertCommonPerClusterMessageToken { + url?: string; +} + +export interface AlertCommonPerClusterMessageTimeToken extends AlertCommonPerClusterMessageToken { + isRelative: boolean; + isAbsolute: boolean; +} + +export interface AlertLicensePerClusterUiState extends AlertCommonPerClusterUiState { expirationTime: number; } -export interface AlertCluster { +export interface AlertCommonCluster { clusterUuid: string; + clusterName: string; } -export interface LicenseExpirationAlertExecutorOptions extends AlertExecutorOptions { - state: AlertState; +export interface AlertCommonExecutorOptions extends AlertExecutorOptions { + state: AlertCommonState; } -export interface AlertParams { +export interface AlertCommonParams { dateFormat: string; timezone: string; } diff --git a/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.test.ts new file mode 100644 index 00000000000000..81e375734cc507 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.test.ts @@ -0,0 +1,70 @@ +/* + * 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 { executeActions, getUiMessage } from './cluster_state.lib'; +import { AlertClusterStateState } from '../../alerts/enums'; +import { AlertCommonPerClusterMessageLinkToken } from '../../alerts/types'; + +describe('clusterState lib', () => { + describe('executeActions', () => { + const clusterName = 'clusterA'; + const instance: any = { scheduleActions: jest.fn() }; + const license: any = { clusterName }; + const status = AlertClusterStateState.Green; + const emailAddress = 'test@test.com'; + + beforeEach(() => { + instance.scheduleActions.mockClear(); + }); + + it('should schedule actions when firing', () => { + executeActions(instance, license, status, emailAddress, false); + expect(instance.scheduleActions).toHaveBeenCalledWith('default', { + subject: 'NEW X-Pack Monitoring: Cluster Status', + message: `Allocate missing replica shards for cluster '${clusterName}'`, + to: emailAddress, + }); + }); + + it('should have a different message for red state', () => { + executeActions(instance, license, AlertClusterStateState.Red, emailAddress, false); + expect(instance.scheduleActions).toHaveBeenCalledWith('default', { + subject: 'NEW X-Pack Monitoring: Cluster Status', + message: `Allocate missing primary and replica shards for cluster '${clusterName}'`, + to: emailAddress, + }); + }); + + it('should schedule actions when resolved', () => { + executeActions(instance, license, status, emailAddress, true); + expect(instance.scheduleActions).toHaveBeenCalledWith('default', { + subject: 'RESOLVED X-Pack Monitoring: Cluster Status', + message: `This cluster alert has been resolved: Allocate missing replica shards for cluster '${clusterName}'`, + to: emailAddress, + }); + }); + }); + + describe('getUiMessage', () => { + it('should return a message when firing', () => { + const message = getUiMessage(AlertClusterStateState.Red, false); + expect(message.text).toBe( + `Elasticsearch cluster status is red. #start_linkAllocate missing primary and replica shards#end_link` + ); + expect(message.tokens && message.tokens.length).toBe(1); + expect(message.tokens && message.tokens[0].startToken).toBe('#start_link'); + expect(message.tokens && message.tokens[0].endToken).toBe('#end_link'); + expect( + message.tokens && (message.tokens[0] as AlertCommonPerClusterMessageLinkToken).url + ).toBe('elasticsearch/indices'); + }); + + it('should return a message when resolved', () => { + const message = getUiMessage(AlertClusterStateState.Green, true); + expect(message.text).toBe(`Elasticsearch cluster status is green.`); + expect(message.tokens).not.toBeDefined(); + }); + }); +}); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.ts b/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.ts new file mode 100644 index 00000000000000..ae66d603507ca6 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/cluster_state.lib.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { i18n } from '@kbn/i18n'; +import { AlertInstance } from '../../../../alerting/server'; +import { + AlertCommonCluster, + AlertCommonPerClusterMessage, + AlertCommonPerClusterMessageLinkToken, +} from '../../alerts/types'; +import { AlertClusterStateState, AlertCommonPerClusterMessageTokenType } from '../../alerts/enums'; + +const RESOLVED_SUBJECT = i18n.translate('xpack.monitoring.alerts.clusterStatus.resolvedSubject', { + defaultMessage: 'RESOLVED X-Pack Monitoring: Cluster Status', +}); + +const NEW_SUBJECT = i18n.translate('xpack.monitoring.alerts.clusterStatus.newSubject', { + defaultMessage: 'NEW X-Pack Monitoring: Cluster Status', +}); + +const RED_STATUS_MESSAGE = i18n.translate('xpack.monitoring.alerts.clusterStatus.redMessage', { + defaultMessage: 'Allocate missing primary and replica shards', +}); + +const YELLOW_STATUS_MESSAGE = i18n.translate( + 'xpack.monitoring.alerts.clusterStatus.yellowMessage', + { + defaultMessage: 'Allocate missing replica shards', + } +); + +export function executeActions( + instance: AlertInstance, + cluster: AlertCommonCluster, + status: AlertClusterStateState, + emailAddress: string, + resolved: boolean = false +) { + const message = + status === AlertClusterStateState.Red ? RED_STATUS_MESSAGE : YELLOW_STATUS_MESSAGE; + if (resolved) { + instance.scheduleActions('default', { + subject: RESOLVED_SUBJECT, + message: `This cluster alert has been resolved: ${message} for cluster '${cluster.clusterName}'`, + to: emailAddress, + }); + } else { + instance.scheduleActions('default', { + subject: NEW_SUBJECT, + message: `${message} for cluster '${cluster.clusterName}'`, + to: emailAddress, + }); + } +} + +export function getUiMessage( + status: AlertClusterStateState, + resolved: boolean = false +): AlertCommonPerClusterMessage { + if (resolved) { + return { + text: i18n.translate('xpack.monitoring.alerts.clusterStatus.ui.resolvedMessage', { + defaultMessage: `Elasticsearch cluster status is green.`, + }), + }; + } + const message = + status === AlertClusterStateState.Red ? RED_STATUS_MESSAGE : YELLOW_STATUS_MESSAGE; + return { + text: i18n.translate('xpack.monitoring.alerts.clusterStatus.ui.firingMessage', { + defaultMessage: `Elasticsearch cluster status is {status}. #start_link{message}#end_link`, + values: { + status, + message, + }, + }), + tokens: [ + { + startToken: '#start_link', + endToken: '#end_link', + type: AlertCommonPerClusterMessageTokenType.Link, + url: 'elasticsearch/indices', + } as AlertCommonPerClusterMessageLinkToken, + ], + }; +} diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.test.ts new file mode 100644 index 00000000000000..642ae3c39a0275 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fetchClusterState } from './fetch_cluster_state'; + +describe('fetchClusterState', () => { + it('should return the cluster state', async () => { + const status = 'green'; + const clusterUuid = 'sdfdsaj34434'; + const callCluster = jest.fn(() => ({ + hits: { + hits: [ + { + _source: { + cluster_state: { + status, + }, + cluster_uuid: clusterUuid, + }, + }, + ], + }, + })); + + const clusters = [{ clusterUuid, clusterName: 'foo' }]; + const index = '.monitoring-es-*'; + + const state = await fetchClusterState(callCluster, clusters, index); + expect(state).toEqual([ + { + state: status, + clusterUuid, + }, + ]); + }); +}); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.ts new file mode 100644 index 00000000000000..66ea30d5f2e96a --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_cluster_state.ts @@ -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 { get } from 'lodash'; +import { AlertCommonCluster, AlertClusterState } from '../../alerts/types'; + +export async function fetchClusterState( + callCluster: any, + clusters: AlertCommonCluster[], + index: string +): Promise { + const params = { + index, + filterPath: ['hits.hits._source.cluster_state.status', 'hits.hits._source.cluster_uuid'], + body: { + size: 1, + sort: [{ timestamp: { order: 'desc' } }], + query: { + bool: { + filter: [ + { + terms: { + cluster_uuid: clusters.map(cluster => cluster.clusterUuid), + }, + }, + { + term: { + type: 'cluster_stats', + }, + }, + { + range: { + timestamp: { + gte: 'now-2m', + }, + }, + }, + ], + }, + }, + }, + }; + + const response = await callCluster('search', params); + return get(response, 'hits.hits', []).map((hit: any) => { + return { + state: get(hit, '_source.cluster_state.status'), + clusterUuid: get(hit, '_source.cluster_uuid'), + }; + }); +} diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.test.ts index 78eb9773df15fb..7a9b61f37707ba 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.test.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.test.ts @@ -6,21 +6,51 @@ import { fetchClusters } from './fetch_clusters'; describe('fetchClusters', () => { + const clusterUuid = '1sdfds734'; + const clusterName = 'monitoring'; + it('return a list of clusters', async () => { const callCluster = jest.fn().mockImplementation(() => ({ - aggregations: { - clusters: { - buckets: [ - { - key: 'clusterA', + hits: { + hits: [ + { + _source: { + cluster_uuid: clusterUuid, + cluster_name: clusterName, + }, + }, + ], + }, + })); + const index = '.monitoring-es-*'; + const result = await fetchClusters(callCluster, index); + expect(result).toEqual([{ clusterUuid, clusterName }]); + }); + + it('return the metadata name if available', async () => { + const metadataName = 'custom-monitoring'; + const callCluster = jest.fn().mockImplementation(() => ({ + hits: { + hits: [ + { + _source: { + cluster_uuid: clusterUuid, + cluster_name: clusterName, + cluster_settings: { + cluster: { + metadata: { + display_name: metadataName, + }, + }, + }, }, - ], - }, + }, + ], }, })); const index = '.monitoring-es-*'; const result = await fetchClusters(callCluster, index); - expect(result).toEqual([{ clusterUuid: 'clusterA' }]); + expect(result).toEqual([{ clusterUuid, clusterName: metadataName }]); }); it('should limit the time period in the query', async () => { diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.ts index 8ef7339618a2c0..d1513ac16fb158 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_clusters.ts @@ -4,18 +4,21 @@ * you may not use this file except in compliance with the Elastic License. */ import { get } from 'lodash'; -import { AlertCluster } from '../../alerts/types'; +import { AlertCommonCluster } from '../../alerts/types'; -interface AggregationResult { - key: string; -} - -export async function fetchClusters(callCluster: any, index: string): Promise { +export async function fetchClusters( + callCluster: any, + index: string +): Promise { const params = { index, - filterPath: 'aggregations.clusters.buckets', + filterPath: [ + 'hits.hits._source.cluster_settings.cluster.metadata.display_name', + 'hits.hits._source.cluster_uuid', + 'hits.hits._source.cluster_name', + ], body: { - size: 0, + size: 1000, query: { bool: { filter: [ @@ -34,19 +37,21 @@ export async function fetchClusters(callCluster: any, index: string): Promise ({ - clusterUuid: bucket.key, - })); + return get(response, 'hits.hits', []).map((hit: any) => { + const clusterName: string = + get(hit, '_source.cluster_settings.cluster.metadata.display_name') || + get(hit, '_source.cluster_name') || + get(hit, '_source.cluster_uuid'); + return { + clusterUuid: get(hit, '_source.cluster_uuid'), + clusterName, + }; + }); } diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.test.ts index dd6c074e68b1f9..9dcb4ffb82a5fc 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.test.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.test.ts @@ -6,28 +6,28 @@ import { fetchLicenses } from './fetch_licenses'; describe('fetchLicenses', () => { + const clusterName = 'MyCluster'; + const clusterUuid = 'clusterA'; + const license = { + status: 'active', + expiry_date_in_millis: 1579532493876, + type: 'basic', + }; + it('return a list of licenses', async () => { - const clusterName = 'MyCluster'; - const clusterUuid = 'clusterA'; - const license = { - status: 'active', - expiry_date_in_millis: 1579532493876, - type: 'basic', - }; const callCluster = jest.fn().mockImplementation(() => ({ hits: { hits: [ { _source: { license, - cluster_name: clusterName, cluster_uuid: clusterUuid, }, }, ], }, })); - const clusters = [{ clusterUuid }]; + const clusters = [{ clusterUuid, clusterName }]; const index = '.monitoring-es-*'; const result = await fetchLicenses(callCluster, clusters, index); expect(result).toEqual([ @@ -36,15 +36,13 @@ describe('fetchLicenses', () => { type: license.type, expiryDateMS: license.expiry_date_in_millis, clusterUuid, - clusterName, }, ]); }); it('should only search for the clusters provided', async () => { - const clusterUuid = 'clusterA'; const callCluster = jest.fn(); - const clusters = [{ clusterUuid }]; + const clusters = [{ clusterUuid, clusterName }]; const index = '.monitoring-es-*'; await fetchLicenses(callCluster, clusters, index); const params = callCluster.mock.calls[0][1]; @@ -52,54 +50,11 @@ describe('fetchLicenses', () => { }); it('should limit the time period in the query', async () => { - const clusterUuid = 'clusterA'; const callCluster = jest.fn(); - const clusters = [{ clusterUuid }]; + const clusters = [{ clusterUuid, clusterName }]; const index = '.monitoring-es-*'; await fetchLicenses(callCluster, clusters, index); const params = callCluster.mock.calls[0][1]; expect(params.body.query.bool.filter[2].range.timestamp.gte).toBe('now-2m'); }); - - it('should give priority to the metadata name', async () => { - const clusterName = 'MyCluster'; - const clusterUuid = 'clusterA'; - const license = { - status: 'active', - expiry_date_in_millis: 1579532493876, - type: 'basic', - }; - const callCluster = jest.fn().mockImplementation(() => ({ - hits: { - hits: [ - { - _source: { - license, - cluster_name: 'fakeName', - cluster_uuid: clusterUuid, - cluster_settings: { - cluster: { - metadata: { - display_name: clusterName, - }, - }, - }, - }, - }, - ], - }, - })); - const clusters = [{ clusterUuid }]; - const index = '.monitoring-es-*'; - const result = await fetchLicenses(callCluster, clusters, index); - expect(result).toEqual([ - { - status: license.status, - type: license.type, - expiryDateMS: license.expiry_date_in_millis, - clusterUuid, - clusterName, - }, - ]); - }); }); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.ts index 31a68e8aa9c3ee..5b05c907e796e8 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_licenses.ts @@ -4,21 +4,16 @@ * you may not use this file except in compliance with the Elastic License. */ import { get } from 'lodash'; -import { AlertLicense, AlertCluster } from '../../alerts/types'; +import { AlertLicense, AlertCommonCluster } from '../../alerts/types'; export async function fetchLicenses( callCluster: any, - clusters: AlertCluster[], + clusters: AlertCommonCluster[], index: string ): Promise { const params = { index, - filterPath: [ - 'hits.hits._source.license.*', - 'hits.hits._source.cluster_settings.cluster.metadata.display_name', - 'hits.hits._source.cluster_uuid', - 'hits.hits._source.cluster_name', - ], + filterPath: ['hits.hits._source.license.*', 'hits.hits._source.cluster_uuid'], body: { size: 1, sort: [{ timestamp: { order: 'desc' } }], @@ -50,17 +45,12 @@ export async function fetchLicenses( const response = await callCluster('search', params); return get(response, 'hits.hits', []).map((hit: any) => { - const clusterName: string = - get(hit, '_source.cluster_settings.cluster.metadata.display_name') || - get(hit, '_source.cluster_name') || - get(hit, '_source.cluster_uuid'); const rawLicense: any = get(hit, '_source.license', {}); const license: AlertLicense = { status: rawLicense.status, type: rawLicense.type, expiryDateMS: rawLicense.expiry_date_in_millis, clusterUuid: get(hit, '_source.cluster_uuid'), - clusterName, }; return license; }); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts new file mode 100644 index 00000000000000..a3bcb61afacd61 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fetchStatus } from './fetch_status'; +import { AlertCommonPerClusterState } from '../../alerts/types'; + +describe('fetchStatus', () => { + const alertType = 'monitoringTest'; + const log = { warn: jest.fn() }; + const start = 0; + const end = 0; + const id = 1; + const defaultUiState = { + isFiring: false, + severity: 0, + message: null, + resolvedMS: 0, + lastCheckedMS: 0, + triggeredMS: 0, + }; + const alertsClient = { + find: jest.fn(() => ({ + total: 1, + data: [ + { + id, + }, + ], + })), + getAlertState: jest.fn(() => ({ + alertTypeState: { + state: { + ui: defaultUiState, + } as AlertCommonPerClusterState, + }, + })), + }; + + afterEach(() => { + (alertsClient.find as jest.Mock).mockClear(); + (alertsClient.getAlertState as jest.Mock).mockClear(); + }); + + it('should fetch from the alerts client', async () => { + const status = await fetchStatus(alertsClient as any, [alertType], start, end, log as any); + expect(status).toEqual([]); + }); + + it('should return alerts that are firing', async () => { + alertsClient.getAlertState = jest.fn(() => ({ + alertTypeState: { + state: { + ui: { + ...defaultUiState, + isFiring: true, + }, + } as AlertCommonPerClusterState, + }, + })); + + const status = await fetchStatus(alertsClient as any, [alertType], start, end, log as any); + expect(status.length).toBe(1); + expect(status[0].type).toBe(alertType); + expect(status[0].isFiring).toBe(true); + }); + + it('should return alerts that have been resolved in the time period', async () => { + alertsClient.getAlertState = jest.fn(() => ({ + alertTypeState: { + state: { + ui: { + ...defaultUiState, + resolvedMS: 1500, + }, + } as AlertCommonPerClusterState, + }, + })); + + const customStart = 1000; + const customEnd = 2000; + + const status = await fetchStatus( + alertsClient as any, + [alertType], + customStart, + customEnd, + log as any + ); + expect(status.length).toBe(1); + expect(status[0].type).toBe(alertType); + expect(status[0].isFiring).toBe(false); + }); + + it('should pass in the right filter to the alerts client', async () => { + await fetchStatus(alertsClient as any, [alertType], start, end, log as any); + expect((alertsClient.find as jest.Mock).mock.calls[0][0].options.filter).toBe( + `alert.attributes.alertTypeId:${alertType}` + ); + }); + + it('should return nothing if no alert state is found', async () => { + alertsClient.getAlertState = jest.fn(() => ({ + alertTypeState: null, + })) as any; + + const status = await fetchStatus(alertsClient as any, [alertType], start, end, log as any); + expect(status).toEqual([]); + }); + + it('should return nothing if no alerts are found', async () => { + alertsClient.find = jest.fn(() => ({ + total: 0, + data: [], + })) as any; + + const status = await fetchStatus(alertsClient as any, [alertType], start, end, log as any); + expect(status).toEqual([]); + }); +}); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.ts index 9f7c1d5a994d27..bf6ee965d3b2fb 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.ts @@ -4,81 +4,53 @@ * you may not use this file except in compliance with the Elastic License. */ import moment from 'moment'; -import { get } from 'lodash'; -import { AlertClusterState } from '../../alerts/types'; -import { ALERT_TYPES, LOGGING_TAG } from '../../../common/constants'; +import { Logger } from '../../../../../../src/core/server'; +import { AlertCommonPerClusterState } from '../../alerts/types'; +import { AlertsClient } from '../../../../alerting/server'; export async function fetchStatus( - callCluster: any, + alertsClient: AlertsClient, + alertTypes: string[], start: number, end: number, - clusterUuid: string, - server: any + log: Logger ): Promise { - // TODO: this shouldn't query task manager directly but rather - // use an api exposed by the alerting/actions plugin - // See https://github.com/elastic/kibana/issues/48442 const statuses = await Promise.all( - ALERT_TYPES.map( + alertTypes.map( type => new Promise(async (resolve, reject) => { - try { - const params = { - index: '.kibana_task_manager', - filterPath: ['hits.hits._source.task.state'], - body: { - size: 1, - sort: [{ updated_at: { order: 'desc' } }], - query: { - bool: { - filter: [ - { - term: { - 'task.taskType': `alerting:${type}`, - }, - }, - ], - }, - }, - }, - }; - - const response = await callCluster('search', params); - const state = get(response, 'hits.hits[0]._source.task.state', '{}'); - const clusterState: AlertClusterState = get( - JSON.parse(state), - `alertTypeState.${clusterUuid}`, - { - expiredCheckDateMS: 0, - ui: { - isFiring: false, - message: null, - severity: 0, - resolvedMS: 0, - expirationTime: 0, - }, - } - ); - const isInBetween = moment(clusterState.ui.resolvedMS).isBetween(start, end); - if (clusterState.ui.isFiring || isInBetween) { - return resolve({ - type, - ...clusterState.ui, - }); - } + // We need to get the id from the alertTypeId + const alerts = await alertsClient.find({ + options: { + filter: `alert.attributes.alertTypeId:${type}`, + }, + }); + if (alerts.total === 0) { return resolve(false); - } catch (err) { - const reason = get(err, 'body.error.type'); - if (reason === 'index_not_found_exception') { - server.log( - ['error', LOGGING_TAG], - `Unable to fetch alerts. Alerts depends on task manager, which has not been started yet.` - ); - } else { - server.log(['error', LOGGING_TAG], err.message); - } + } + + if (alerts.total !== 1) { + log.warn(`Found more than one alert for type ${type} which is unexpected.`); + } + + const id = alerts.data[0].id; + + // Now that we have the id, we can get the state + const states = await alertsClient.getAlertState({ id }); + if (!states || !states.alertTypeState) { + log.warn(`No alert states found for type ${type} which is unexpected.`); return resolve(false); } + + const state = Object.values(states.alertTypeState)[0] as AlertCommonPerClusterState; + const isInBetween = moment(state.ui.resolvedMS).isBetween(start, end); + if (state.ui.isFiring || isInBetween) { + return resolve({ + type, + ...state.ui, + }); + } + return resolve(false); }) ) ); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.test.ts new file mode 100644 index 00000000000000..1840a2026a7534 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.test.ts @@ -0,0 +1,163 @@ +/* + * 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 { getPreparedAlert } from './get_prepared_alert'; +import { fetchClusters } from './fetch_clusters'; +import { fetchDefaultEmailAddress } from './fetch_default_email_address'; + +jest.mock('./fetch_clusters', () => ({ + fetchClusters: jest.fn(), +})); + +jest.mock('./fetch_default_email_address', () => ({ + fetchDefaultEmailAddress: jest.fn(), +})); + +describe('getPreparedAlert', () => { + const uiSettings = { get: jest.fn() }; + const alertType = 'test'; + const getUiSettingsService = async () => ({ + asScopedToClient: () => uiSettings, + }); + const monitoringCluster = null; + const logger = { warn: jest.fn() }; + const ccsEnabled = false; + const services = { + callCluster: jest.fn(), + savedObjectsClient: null, + }; + const emailAddress = 'foo@foo.com'; + const data = [{ foo: 1 }]; + const dataFetcher = () => data; + const clusterName = 'MonitoringCluster'; + const clusterUuid = 'sdf34sdf'; + const clusters = [{ clusterName, clusterUuid }]; + + afterEach(() => { + (uiSettings.get as jest.Mock).mockClear(); + (services.callCluster as jest.Mock).mockClear(); + (fetchClusters as jest.Mock).mockClear(); + (fetchDefaultEmailAddress as jest.Mock).mockClear(); + }); + + beforeEach(() => { + (fetchClusters as jest.Mock).mockImplementation(() => clusters); + (fetchDefaultEmailAddress as jest.Mock).mockImplementation(() => emailAddress); + }); + + it('should return fields as expected', async () => { + (uiSettings.get as jest.Mock).mockImplementation(() => { + return emailAddress; + }); + + const alert = await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + ccsEnabled, + services as any, + dataFetcher as any + ); + + expect(alert && alert.emailAddress).toBe(emailAddress); + expect(alert && alert.data).toBe(data); + }); + + it('should add ccs if specified', async () => { + const ccsClusterName = 'remoteCluster'; + (services.callCluster as jest.Mock).mockImplementation(() => { + return { + [ccsClusterName]: { + connected: true, + }, + }; + }); + + await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + true, + services as any, + dataFetcher as any + ); + + expect((fetchClusters as jest.Mock).mock.calls[0][1].includes(ccsClusterName)).toBe(true); + }); + + it('should ignore ccs if no remote clusters are available', async () => { + const ccsClusterName = 'remoteCluster'; + (services.callCluster as jest.Mock).mockImplementation(() => { + return { + [ccsClusterName]: { + connected: false, + }, + }; + }); + + await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + true, + services as any, + dataFetcher as any + ); + + expect((fetchClusters as jest.Mock).mock.calls[0][1].includes(ccsClusterName)).toBe(false); + }); + + it('should pass in the clusters into the data fetcher', async () => { + const customDataFetcher = jest.fn(() => data); + + await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + true, + services as any, + customDataFetcher as any + ); + + expect((customDataFetcher as jest.Mock).mock.calls[0][1]).toBe(clusters); + }); + + it('should return nothing if the data fetcher returns nothing', async () => { + const customDataFetcher = jest.fn(() => []); + + const result = await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + true, + services as any, + customDataFetcher as any + ); + + expect(result).toBe(null); + }); + + it('should return nothing if there is no email address', async () => { + (fetchDefaultEmailAddress as jest.Mock).mockImplementation(() => null); + + const result = await getPreparedAlert( + alertType, + getUiSettingsService as any, + monitoringCluster as any, + logger as any, + true, + services as any, + dataFetcher as any + ); + + expect(result).toBe(null); + }); +}); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.ts b/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.ts new file mode 100644 index 00000000000000..83a9e26e4c5890 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/get_prepared_alert.ts @@ -0,0 +1,87 @@ +/* + * 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 { Logger, ICustomClusterClient, UiSettingsServiceStart } from 'kibana/server'; +import { CallCluster } from 'src/legacy/core_plugins/elasticsearch'; +import { AlertServices } from '../../../../alerting/server'; +import { AlertCommonCluster } from '../../alerts/types'; +import { INDEX_PATTERN_ELASTICSEARCH } from '../../../common/constants'; +import { fetchAvailableCcs } from './fetch_available_ccs'; +import { getCcsIndexPattern } from './get_ccs_index_pattern'; +import { fetchClusters } from './fetch_clusters'; +import { fetchDefaultEmailAddress } from './fetch_default_email_address'; + +export interface PreparedAlert { + emailAddress: string; + clusters: AlertCommonCluster[]; + data: any[]; + timezone: string; + dateFormat: string; +} + +async function getCallCluster( + monitoringCluster: ICustomClusterClient, + services: Pick +): Promise { + if (!monitoringCluster) { + return services.callCluster; + } + + return monitoringCluster.callAsInternalUser; +} + +export async function getPreparedAlert( + alertType: string, + getUiSettingsService: () => Promise, + monitoringCluster: ICustomClusterClient, + logger: Logger, + ccsEnabled: boolean, + services: Pick, + dataFetcher: ( + callCluster: CallCluster, + clusters: AlertCommonCluster[], + esIndexPattern: string + ) => Promise +): Promise { + const callCluster = await getCallCluster(monitoringCluster, services); + + // Support CCS use cases by querying to find available remote clusters + // and then adding those to the index pattern we are searching against + let esIndexPattern = INDEX_PATTERN_ELASTICSEARCH; + if (ccsEnabled) { + const availableCcs = await fetchAvailableCcs(callCluster); + if (availableCcs.length > 0) { + esIndexPattern = getCcsIndexPattern(esIndexPattern, availableCcs); + } + } + + const clusters = await fetchClusters(callCluster, esIndexPattern); + + // Fetch the specific data + const data = await dataFetcher(callCluster, clusters, esIndexPattern); + if (data.length === 0) { + logger.warn(`No data found for ${alertType}.`); + return null; + } + + const uiSettings = (await getUiSettingsService()).asScopedToClient(services.savedObjectsClient); + const dateFormat: string = await uiSettings.get('dateFormat'); + const timezone: string = await uiSettings.get('dateFormat:tz'); + const emailAddress = await fetchDefaultEmailAddress(uiSettings); + if (!emailAddress) { + // TODO: we can do more here + logger.warn(`Unable to send email for ${alertType} because there is no email configured.`); + return null; + } + + return { + emailAddress, + data, + clusters, + dateFormat, + timezone, + }; +} diff --git a/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.test.ts index 1a2eb1e44be843..b99208bdde2c86 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.test.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.test.ts @@ -39,17 +39,26 @@ describe('licenseExpiration lib', () => { }); describe('getUiMessage', () => { - const timezone = 'Europe/London'; - const license: any = { expiryDateMS: moment.tz('2020-01-20 08:00:00', timezone).utc() }; - it('should return a message when firing', () => { - const message = getUiMessage(license, timezone, false); - expect(message).toBe(`This cluster's license is going to expire in #relative at #absolute.`); + const message = getUiMessage(false); + expect(message.text).toBe( + `This cluster's license is going to expire in #relative at #absolute. #start_linkPlease update your license.#end_link` + ); + // LOL How do I avoid this in TS???? + if (!message.tokens) { + return expect(false).toBe(true); + } + expect(message.tokens.length).toBe(3); + expect(message.tokens[0].startToken).toBe('#relative'); + expect(message.tokens[1].startToken).toBe('#absolute'); + expect(message.tokens[2].startToken).toBe('#start_link'); + expect(message.tokens[2].endToken).toBe('#end_link'); }); it('should return a message when resolved', () => { - const message = getUiMessage(license, timezone, true); - expect(message).toBe(`This cluster's license is active.`); + const message = getUiMessage(true); + expect(message.text).toBe(`This cluster's license is active.`); + expect(message.tokens).not.toBeDefined(); }); }); }); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.ts b/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.ts index 41b68d69bbd25f..cfe9f02b9bd6ae 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/license_expiration.lib.ts @@ -6,7 +6,13 @@ import { Moment } from 'moment-timezone'; import { i18n } from '@kbn/i18n'; import { AlertInstance } from '../../../../alerting/server'; -import { AlertLicense } from '../../alerts/types'; +import { + AlertCommonPerClusterMessageLinkToken, + AlertCommonPerClusterMessageTimeToken, + AlertCommonCluster, + AlertCommonPerClusterMessage, +} from '../../alerts/types'; +import { AlertCommonPerClusterMessageTokenType } from '../../alerts/enums'; const RESOLVED_SUBJECT = i18n.translate( 'xpack.monitoring.alerts.licenseExpiration.resolvedSubject', @@ -21,7 +27,7 @@ const NEW_SUBJECT = i18n.translate('xpack.monitoring.alerts.licenseExpiration.ne export function executeActions( instance: AlertInstance, - license: AlertLicense, + cluster: AlertCommonCluster, $expiry: Moment, dateFormat: string, emailAddress: string, @@ -31,14 +37,14 @@ export function executeActions( instance.scheduleActions('default', { subject: RESOLVED_SUBJECT, message: `This cluster alert has been resolved: Cluster '${ - license.clusterName + cluster.clusterName }' license was going to expire on ${$expiry.format(dateFormat)}.`, to: emailAddress, }); } else { instance.scheduleActions('default', { subject: NEW_SUBJECT, - message: `Cluster '${license.clusterName}' license is going to expire on ${$expiry.format( + message: `Cluster '${cluster.clusterName}' license is going to expire on ${$expiry.format( dateFormat )}. Please update your license.`, to: emailAddress, @@ -46,13 +52,37 @@ export function executeActions( } } -export function getUiMessage(license: AlertLicense, timezone: string, resolved: boolean = false) { +export function getUiMessage(resolved: boolean = false): AlertCommonPerClusterMessage { if (resolved) { - return i18n.translate('xpack.monitoring.alerts.licenseExpiration.ui.resolvedMessage', { - defaultMessage: `This cluster's license is active.`, - }); + return { + text: i18n.translate('xpack.monitoring.alerts.licenseExpiration.ui.resolvedMessage', { + defaultMessage: `This cluster's license is active.`, + }), + }; } - return i18n.translate('xpack.monitoring.alerts.licenseExpiration.ui.firingMessage', { - defaultMessage: `This cluster's license is going to expire in #relative at #absolute.`, - }); + return { + text: i18n.translate('xpack.monitoring.alerts.licenseExpiration.ui.firingMessage', { + defaultMessage: `This cluster's license is going to expire in #relative at #absolute. #start_linkPlease update your license.#end_link`, + }), + tokens: [ + { + startToken: '#relative', + type: AlertCommonPerClusterMessageTokenType.Time, + isRelative: true, + isAbsolute: false, + } as AlertCommonPerClusterMessageTimeToken, + { + startToken: '#absolute', + type: AlertCommonPerClusterMessageTokenType.Time, + isAbsolute: true, + isRelative: false, + } as AlertCommonPerClusterMessageTimeToken, + { + startToken: '#start_link', + endToken: '#end_link', + type: AlertCommonPerClusterMessageTokenType.Link, + url: 'license', + } as AlertCommonPerClusterMessageLinkToken, + ], + }; } diff --git a/x-pack/plugins/monitoring/server/lib/cluster/get_clusters_from_request.js b/x-pack/plugins/monitoring/server/lib/cluster/get_clusters_from_request.js index c5091c36c3bbeb..1bddede52207b2 100644 --- a/x-pack/plugins/monitoring/server/lib/cluster/get_clusters_from_request.js +++ b/x-pack/plugins/monitoring/server/lib/cluster/get_clusters_from_request.js @@ -29,6 +29,7 @@ import { CODE_PATH_BEATS, CODE_PATH_APM, KIBANA_ALERTING_ENABLED, + ALERT_TYPES, } from '../../../common/constants'; import { getApmsForClusters } from '../apm/get_apms_for_clusters'; import { i18n } from '@kbn/i18n'; @@ -102,15 +103,8 @@ export async function getClustersFromRequest( if (isInCodePath(codePaths, [CODE_PATH_ALERTS])) { if (KIBANA_ALERTING_ENABLED) { - const { callWithRequest } = req.server.plugins.elasticsearch.getCluster('monitoring'); - const callCluster = (...args) => callWithRequest(req, ...args); - cluster.alerts = await fetchStatus( - callCluster, - start, - end, - cluster.cluster_uuid, - req.server - ); + const alertsClient = req.getAlertsClient ? req.getAlertsClient() : null; + cluster.alerts = await fetchStatus(alertsClient, ALERT_TYPES, start, end, req.logger); } else { cluster.alerts = await alertsClusterSearch( req, diff --git a/x-pack/plugins/monitoring/server/plugin.ts b/x-pack/plugins/monitoring/server/plugin.ts index 24d8bcaa4397cf..784226dca66fee 100644 --- a/x-pack/plugins/monitoring/server/plugin.ts +++ b/x-pack/plugins/monitoring/server/plugin.ts @@ -47,6 +47,7 @@ import { PluginSetupContract as AlertingPluginSetupContract, } from '../../alerting/server'; import { getLicenseExpiration } from './alerts/license_expiration'; +import { getClusterState } from './alerts/cluster_state'; import { InfraPluginSetup } from '../../infra/server'; export interface LegacyAPI { @@ -154,6 +155,17 @@ export class Plugin { config.ui.ccs.enabled ) ); + plugins.alerting.registerType( + getClusterState( + async () => { + const coreStart = (await core.getStartServices())[0]; + return coreStart.uiSettings; + }, + cluster, + this.getLogger, + config.ui.ccs.enabled + ) + ); } // Initialize telemetry diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/alerts/alerts.js b/x-pack/plugins/monitoring/server/routes/api/v1/alerts/alerts.js index 56922bd8e87e21..d5a43d32f600a9 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/alerts/alerts.js +++ b/x-pack/plugins/monitoring/server/routes/api/v1/alerts/alerts.js @@ -8,8 +8,12 @@ import { schema } from '@kbn/config-schema'; import { isFunction } from 'lodash'; import { ALERT_TYPE_LICENSE_EXPIRATION, + ALERT_TYPE_CLUSTER_STATE, MONITORING_CONFIG_ALERTING_EMAIL_ADDRESS, + ALERT_TYPES, } from '../../../../../common/constants'; +import { handleError } from '../../../../lib/errors'; +import { fetchStatus } from '../../../../lib/alerts/fetch_status'; async function createAlerts(req, alertsClient, { selectedEmailActionId }) { const createdAlerts = []; @@ -17,7 +21,21 @@ async function createAlerts(req, alertsClient, { selectedEmailActionId }) { // Create alerts const ALERT_TYPES = { [ALERT_TYPE_LICENSE_EXPIRATION]: { - schedule: { interval: '10s' }, + schedule: { interval: '1m' }, + actions: [ + { + group: 'default', + id: selectedEmailActionId, + params: { + subject: '{{context.subject}}', + message: `{{context.message}}`, + to: ['{{context.to}}'], + }, + }, + ], + }, + [ALERT_TYPE_CLUSTER_STATE]: { + schedule: { interval: '1m' }, actions: [ { group: 'default', @@ -86,4 +104,37 @@ export function createKibanaAlertsRoute(server) { return { alerts, emailResponse }; }, }); + + server.route({ + method: 'POST', + path: '/api/monitoring/v1/alert_status', + config: { + validate: { + payload: schema.object({ + timeRange: schema.object({ + min: schema.string(), + max: schema.string(), + }), + }), + }, + }, + async handler(req, headers) { + const alertsClient = isFunction(req.getAlertsClient) ? req.getAlertsClient() : null; + if (!alertsClient) { + return headers.response().code(404); + } + + const start = req.payload.timeRange.min; + const end = req.payload.timeRange.max; + let alerts; + + try { + alerts = await fetchStatus(alertsClient, ALERT_TYPES, start, end, req.logger); + } catch (err) { + throw handleError(err, req); + } + + return { alerts }; + }, + }); } From 879dadff31f7b44f61334ce952b00f450764e41c Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Tue, 7 Apr 2020 12:55:42 -0500 Subject: [PATCH 05/52] [Metrics Alerts] Dynamically fetch index pattern (#62708) * Fetch index pattern dynamically from alert executor * Fix fetching of non-default pattern --- .../alerting/metrics/expression.tsx | 79 +++++++++---------- .../alerting/metrics/validation.tsx | 5 +- .../metric_threshold_executor.test.ts | 22 +++++- .../metric_threshold_executor.ts | 41 ++++++++-- .../register_metric_threshold_alert_type.ts | 2 +- .../alerting/metric_threshold/test_mocks.ts | 19 +++++ .../lib/alerting/metric_threshold/types.ts | 2 +- .../infra/server/lib/sources/sources.ts | 2 +- 8 files changed, 117 insertions(+), 55 deletions(-) diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx index cd3ba43c3607c7..0903787dd05c41 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx @@ -17,6 +17,11 @@ import { import { IFieldType } from 'src/plugins/data/public'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; +import { + MetricExpressionParams, + Comparator, + // eslint-disable-next-line @kbn/eslint/no-restricted-paths +} from '../../../../server/lib/alerting/metric_threshold/types'; import { euiStyled } from '../../../../../observability/public'; import { WhenExpression, @@ -36,16 +41,6 @@ import { MetricsExplorerSeries } from '../../../../common/http_api/metrics_explo import { useSource } from '../../../containers/source'; import { MetricsExplorerGroupBy } from '../../metrics_explorer/group_by'; -export interface MetricExpression { - aggType?: string; - metric?: string; - comparator?: Comparator; - threshold?: number[]; - timeSize?: number; - timeUnit?: TimeUnit; - indexPattern?: string; -} - interface AlertContextMeta { currentOptions?: Partial; series?: MetricsExplorerSeries; @@ -57,14 +52,35 @@ interface Props { criteria: MetricExpression[]; groupBy?: string; filterQuery?: string; + sourceId?: string; }; alertsContext: AlertsContextValue; setAlertParams(key: string, value: any): void; setAlertProperty(key: string, value: any): void; } -type Comparator = '>' | '>=' | 'between' | '<' | '<='; type TimeUnit = 's' | 'm' | 'h' | 'd'; +type MetricExpression = Omit & { + metric?: string; +}; + +enum AGGREGATION_TYPES { + COUNT = 'count', + AVERAGE = 'avg', + SUM = 'sum', + MIN = 'min', + MAX = 'max', + RATE = 'rate', + CARDINALITY = 'cardinality', +} + +const defaultExpression = { + aggType: AGGREGATION_TYPES.AVERAGE, + comparator: Comparator.GT, + threshold: [], + timeSize: 1, + timeUnit: 'm', +} as MetricExpression; export const Expressions: React.FC = props => { const { setAlertParams, alertParams, errors, alertsContext } = props; @@ -87,18 +103,6 @@ export const Expressions: React.FC = props => { } }, [alertsContext.metadata]); - const defaultExpression = useMemo( - () => ({ - aggType: AGGREGATION_TYPES.AVERAGE, - comparator: '>', - threshold: [], - timeSize: 1, - timeUnit: 'm', - indexPattern: source?.configuration.metricAlias, - }), - [source] - ); - const updateParams = useCallback( (id, e: MetricExpression) => { const exp = alertParams.criteria ? alertParams.criteria.slice() : []; @@ -112,7 +116,7 @@ export const Expressions: React.FC = props => { const exp = alertParams.criteria.slice(); exp.push(defaultExpression); setAlertParams('criteria', exp); - }, [setAlertParams, alertParams.criteria, defaultExpression]); + }, [setAlertParams, alertParams.criteria]); const removeExpression = useCallback( (id: number) => { @@ -179,11 +183,10 @@ export const Expressions: React.FC = props => { 'criteria', md.currentOptions.metrics.map(metric => ({ metric: metric.field, - comparator: '>', + comparator: Comparator.GT, threshold: [], timeSize, timeUnit, - indexPattern: source?.configuration.metricAlias, aggType: metric.aggregation, })) ); @@ -201,6 +204,7 @@ export const Expressions: React.FC = props => { setAlertParams('groupBy', md.currentOptions.groupBy); } + setAlertParams('sourceId', source?.id); } }, [alertsContext.metadata, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps @@ -325,17 +329,22 @@ const StyledExpression = euiStyled.div` export const ExpressionRow: React.FC = props => { const { setAlertParams, expression, errors, expressionId, remove, fields, canDelete } = props; - const { aggType = AGGREGATION_TYPES.MAX, metric, comparator = '>', threshold = [] } = expression; + const { + aggType = AGGREGATION_TYPES.MAX, + metric, + comparator = Comparator.GT, + threshold = [], + } = expression; const updateAggType = useCallback( (at: string) => { - setAlertParams(expressionId, { ...expression, aggType: at }); + setAlertParams(expressionId, { ...expression, aggType: at as MetricExpression['aggType'] }); }, [expressionId, expression, setAlertParams] ); const updateMetric = useCallback( - (m?: string) => { + (m?: MetricExpression['metric']) => { setAlertParams(expressionId, { ...expression, metric: m }); }, [expressionId, expression, setAlertParams] @@ -384,7 +393,7 @@ export const ExpressionRow: React.FC = props => { )} '} + thresholdComparator={comparator || Comparator.GT} threshold={threshold} onChangeSelectedThresholdComparator={updateComparator} onChangeSelectedThreshold={updateThreshold} @@ -411,16 +420,6 @@ export const ExpressionRow: React.FC = props => { ); }; -enum AGGREGATION_TYPES { - COUNT = 'count', - AVERAGE = 'avg', - SUM = 'sum', - MIN = 'min', - MAX = 'max', - RATE = 'rate', - CARDINALITY = 'cardinality', -} - export const aggregationType: { [key: string]: any } = { avg: { text: i18n.translate('xpack.infra.metrics.alertFlyout.aggregationText.avg', { diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx index 0f5b07f8c0e134..55365c3d4c2ba1 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx @@ -6,15 +6,14 @@ import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths - -import { MetricExpression } from './expression'; +import { MetricExpressionParams } from '../../../../server/lib/alerting/metric_threshold/types'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { ValidationResult } from '../../../../../triggers_actions_ui/public/types'; export function validateMetricThreshold({ criteria, }: { - criteria: MetricExpression[]; + criteria: MetricExpressionParams[]; }): ValidationResult { const validationResult = { errors: {} }; const errors: { diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 09f17023495428..38cd0cec145f90 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -16,7 +16,8 @@ const executor = createMetricThresholdExecutor('test') as (opts: { const alertInstances = new Map(); const services = { - callCluster(_: string, { body }: any) { + callCluster(_: string, { body, index }: any) { + if (index === 'alternatebeat-*') return mocks.changedSourceIdResponse; const metric = body.query.bool.filter[1]?.exists.field; if (body.aggs.groupings) { if (body.aggs.groupings.composite.after) { @@ -55,6 +56,13 @@ const services = { }, }; }, + savedObjectsClient: { + get(_: string, sourceId: string) { + if (sourceId === 'alternate') + return { id: 'alternate', attributes: { metricAlias: 'alternatebeat-*' } }; + return { id: 'default', attributes: { metricAlias: 'metricbeat-*' } }; + }, + }, }; const baseCriterion = { @@ -62,15 +70,15 @@ const baseCriterion = { metric: 'test.metric.1', timeSize: 1, timeUnit: 'm', - indexPattern: 'metricbeat-*', }; describe('The metric threshold alert type', () => { describe('querying the entire infrastructure', () => { const instanceID = 'test-*'; - const execute = (comparator: Comparator, threshold: number[]) => + const execute = (comparator: Comparator, threshold: number[], sourceId: string = 'default') => executor({ services, params: { + sourceId, criteria: [ { ...baseCriterion, @@ -134,6 +142,14 @@ describe('The metric threshold alert type', () => { expect(mostRecentAction.action.thresholdOf.condition0).toStrictEqual([0.75]); expect(mostRecentAction.action.metricOf.condition0).toBe('test.metric.1'); }); + test('fetches the index pattern dynamically', async () => { + await execute(Comparator.LT, [17], 'alternate'); + expect(alertInstances.get(instanceID).mostRecentAction.id).toBe(FIRED_ACTIONS.id); + expect(alertInstances.get(instanceID).state.alertState).toBe(AlertStates.ALERT); + await execute(Comparator.LT, [1.5], 'alternate'); + expect(alertInstances.get(instanceID).mostRecentAction).toBe(undefined); + expect(alertInstances.get(instanceID).state.alertState).toBe(AlertStates.OK); + }); }); describe('querying with a groupBy parameter', () => { diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 60bba61b75ef14..c5ea65f7a4d1ad 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -5,6 +5,8 @@ */ import { mapValues } from 'lodash'; import { i18n } from '@kbn/i18n'; +import { convertSavedObjectToSavedSourceConfiguration } from '../../sources/sources'; +import { infraSourceConfigurationSavedObjectType } from '../../sources/saved_object_mappings'; import { InfraDatabaseSearchResponse } from '../../adapters/framework/adapter_types'; import { createAfterKeyHandler } from '../../../utils/create_afterkey_handler'; import { getAllCompositeData } from '../../../utils/get_all_composite_data'; @@ -15,6 +17,7 @@ import { getIntervalInSeconds } from '../../../utils/get_interval_in_seconds'; import { getDateHistogramOffset } from '../../snapshot/query_helpers'; const TOTAL_BUCKETS = 5; +const DEFAULT_INDEX_PATTERN = 'metricbeat-*'; interface Aggregation { aggregatedIntervals: { @@ -165,18 +168,42 @@ export const getElasticsearchMetricQuery = ( }; }; +const getIndexPattern: ( + services: AlertServices, + sourceId?: string +) => Promise = async function({ savedObjectsClient }, sourceId = 'default') { + try { + const sourceConfiguration = await savedObjectsClient.get( + infraSourceConfigurationSavedObjectType, + sourceId + ); + const { metricAlias } = convertSavedObjectToSavedSourceConfiguration( + sourceConfiguration + ).configuration; + return metricAlias || DEFAULT_INDEX_PATTERN; + } catch (e) { + if (e.output.statusCode === 404) { + return DEFAULT_INDEX_PATTERN; + } else { + throw e; + } + } +}; + const getMetric: ( services: AlertServices, params: MetricExpressionParams, + index: string, groupBy: string | undefined, filterQuery: string | undefined ) => Promise> = async function( - { callCluster }, + { savedObjectsClient, callCluster }, params, + index, groupBy, filterQuery ) { - const { indexPattern, aggType } = params; + const { aggType } = params; const searchBody = getElasticsearchMetricQuery(params, groupBy, filterQuery); try { @@ -189,7 +216,7 @@ const getMetric: ( response => response.aggregations?.groupings?.after_key ); const compositeBuckets = (await getAllCompositeData( - body => callCluster('search', { body, index: indexPattern }), + body => callCluster('search', { body, index }), searchBody, bucketSelector, afterKeyHandler @@ -204,7 +231,7 @@ const getMetric: ( } const result = await callCluster('search', { body: searchBody, - index: indexPattern, + index, }); return { '*': getCurrentValueFromAggregations(result.aggregations, aggType) }; } catch (e) { @@ -236,16 +263,18 @@ const mapToConditionsLookup = ( export const createMetricThresholdExecutor = (alertUUID: string) => async function({ services, params }: AlertExecutorOptions) { - const { criteria, groupBy, filterQuery } = params as { + const { criteria, groupBy, filterQuery, sourceId } = params as { criteria: MetricExpressionParams[]; groupBy: string | undefined; filterQuery: string | undefined; + sourceId?: string; }; const alertResults = await Promise.all( criteria.map(criterion => (async () => { - const currentValues = await getMetric(services, criterion, groupBy, filterQuery); + const index = await getIndexPattern(services, sourceId); + const currentValues = await getMetric(services, criterion, index, groupBy, filterQuery); const { threshold, comparator } = criterion; const comparisonFunction = comparatorMap[comparator]; return mapValues(currentValues, value => ({ diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_alert_type.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_alert_type.ts index 2ab3a3322661d1..8808219cabaa70 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_alert_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_alert_type.ts @@ -29,7 +29,6 @@ export async function registerMetricThresholdAlertType(alertingPlugin: PluginSet ]), timeUnit: schema.string(), timeSize: schema.number(), - indexPattern: schema.string(), }; const nonCountCriterion = schema.object({ @@ -89,6 +88,7 @@ export async function registerMetricThresholdAlertType(alertingPlugin: PluginSet criteria: schema.arrayOf(schema.oneOf([countCriterion, nonCountCriterion])), groupBy: schema.maybe(schema.string()), filterQuery: schema.maybe(schema.string()), + sourceId: schema.string(), }), }, defaultActionGroupId: FIRED_ACTIONS.id, diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/test_mocks.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/test_mocks.ts index e87ffcfb2b912d..66e0a363c89833 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/test_mocks.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/test_mocks.ts @@ -26,6 +26,17 @@ const bucketsB = [ }, ]; +const bucketsC = [ + { + doc_count: 2, + aggregatedValue: { value: 0.5 }, + }, + { + doc_count: 3, + aggregatedValue: { value: 16.0 }, + }, +]; + export const basicMetricResponse = { aggregations: { aggregatedIntervals: { @@ -108,3 +119,11 @@ export const compositeEndResponse = { aggregations: {}, hits: { total: { value: 0 } }, }; + +export const changedSourceIdResponse = { + aggregations: { + aggregatedIntervals: { + buckets: bucketsC, + }, + }, +}; diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/types.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/types.ts index 557a071ec91752..abed691f109c00 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/types.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/types.ts @@ -28,7 +28,7 @@ export type TimeUnit = 's' | 'm' | 'h' | 'd'; interface BaseMetricExpressionParams { timeSize: number; timeUnit: TimeUnit; - indexPattern: string; + sourceId?: string; threshold: number[]; comparator: Comparator; } diff --git a/x-pack/plugins/infra/server/lib/sources/sources.ts b/x-pack/plugins/infra/server/lib/sources/sources.ts index 5b9207a88e6e47..c7ff6c96382043 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.ts @@ -231,7 +231,7 @@ const mergeSourceConfiguration = ( first ); -const convertSavedObjectToSavedSourceConfiguration = (savedObject: unknown) => +export const convertSavedObjectToSavedSourceConfiguration = (savedObject: unknown) => pipe( SourceConfigurationSavedObjectRuntimeType.decode(savedObject), map(savedSourceConfiguration => ({ From a8f84f87afa90c635d4acbf6dfa2aaa562cb219c Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Tue, 7 Apr 2020 10:56:48 -0700 Subject: [PATCH 06/52] Improve UX for index document code editor to have similar UX as webhook (#62724) * Improve UX for index document code editor to have similar UX as webhook's * Fixed jest tests * Fixed codestyle issue --- .../builtin_action_types/es_index.test.tsx | 9 +- .../builtin_action_types/es_index.tsx | 87 +++++++++++++++---- .../components/builtin_action_types/types.ts | 2 +- .../public/application/lib/use_x_json_mode.ts | 25 ++++++ 4 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/use_x_json_mode.ts diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.test.tsx index 6ce954f61bcdbc..d83396f2008298 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.test.tsx @@ -134,7 +134,7 @@ describe('IndexParamsFields renders', () => { ActionParamsProps >; const actionParams = { - documents: ['test'], + documents: [{ test: 123 }], }; const wrapper = mountWithIntl( { .find('[data-test-subj="actionIndexDoc"]') .first() .prop('value') - ).toBe('"test"'); + ).toBe(`{ + "test": 123 +}`); + expect( + wrapper.find('[data-test-subj="indexDocumentAddVariableButton"]').length > 0 + ).toBeTruthy(); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.tsx index d631882e1f581c..56d9f40e40021d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index.tsx @@ -14,6 +14,10 @@ import { EuiSelect, EuiTitle, EuiIconTip, + EuiPopover, + EuiButtonIcon, + EuiContextMenuPanel, + EuiContextMenuItem, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; @@ -31,6 +35,7 @@ import { getIndexOptions, getIndexPatterns, } from '../../../common/index_controls'; +import { useXJsonMode } from '../../lib/use_x_json_mode'; export function getActionType(): ActionTypeModel { return { @@ -271,9 +276,29 @@ const IndexParamsFields: React.FunctionComponent { const { documents } = actionParams; - + const { xJsonMode, convertToJson, setXJson, xJson } = useXJsonMode( + documents && documents.length > 0 ? documents[0] : null + ); + const [isVariablesPopoverOpen, setIsVariablesPopoverOpen] = useState(false); + const messageVariablesItems = messageVariables?.map((variable: string, i: number) => ( + { + const value = (xJson ?? '').concat(` {{${variable}}}`); + setXJson(value); + // Keep the documents in sync with the editor content + onDocumentsChange(convertToJson(value)); + setIsVariablesPopoverOpen(false); + }} + > + {`{{${variable}}}`} + + )); function onDocumentsChange(updatedDocuments: string) { try { const documentsJSON = JSON.parse(updatedDocuments); @@ -291,27 +316,55 @@ const IndexParamsFields: React.FunctionComponent setIsVariablesPopoverOpen(true)} + iconType="indexOpen" + title={i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.indexAction.addVariableTitle', + { + defaultMessage: 'Add variable', + } + )} + aria-label={i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.indexAction.addVariablePopoverButton', + { + defaultMessage: 'Add variable', + } + )} + /> + } + isOpen={isVariablesPopoverOpen} + closePopover={() => setIsVariablesPopoverOpen(false)} + panelPaddingSize="none" + anchorPosition="downLeft" + > + + + } > 0 ? documents[0] : {}, null, 2)} - onChange={onDocumentsChange} - width="100%" - height="auto" - minLines={6} - maxLines={30} - isReadOnly={false} - setOptions={{ - showLineNumbers: true, - tabSize: 2, - }} - editorProps={{ - $blockScrolling: Infinity, + aria-label={i18n.translate( + 'xpack.triggersActionsUI.components.builtinActionTypes.indexAction.jsonDocAriaLabel', + { + defaultMessage: 'Code editor', + } + )} + value={xJson} + onChange={(xjson: string) => { + setXJson(xjson); + // Keep the documents in sync with the editor content + onDocumentsChange(convertToJson(xjson)); }} - showGutter={true} />
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/types.ts index fd35db43042759..84d8b6e8caeded 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/types.ts @@ -39,7 +39,7 @@ export interface PagerDutyActionParams { } export interface IndexActionParams { - documents: string[]; + documents: Array>; } export enum ServerLogLevelOptions { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/use_x_json_mode.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/use_x_json_mode.ts new file mode 100644 index 00000000000000..b677924724ffe8 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/use_x_json_mode.ts @@ -0,0 +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. + */ +import { useState } from 'react'; +import { XJsonMode } from '../../../../../../src/plugins/es_ui_shared/console_lang/ace/modes/x_json'; +import { + collapseLiteralStrings, + expandLiteralStrings, +} from '../../../../../../src/plugins/es_ui_shared/console_lang/lib'; +// @ts-ignore +export const xJsonMode = new XJsonMode(); +export const useXJsonMode = (json: Record | null) => { + const [xJson, setXJson] = useState( + json === null ? '' : expandLiteralStrings(JSON.stringify(json, null, 2)) + ); + + return { + xJson, + setXJson, + xJsonMode, + convertToJson: collapseLiteralStrings, + }; +}; From 20dc67df71ebe90ddb501da9be1fc6d36be68ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Tue, 7 Apr 2020 19:18:35 +0100 Subject: [PATCH 07/52] [APM] Agent span_frames_min_duration configuration input cannot handle 0 or -1 (#62777) * changing duration min value for span_frames_min_duration * adding min property to number field --- .../SettingsPage/SettingFormRow.tsx | 1 + .../agent_configuration/amount_and_unit.ts | 3 +- .../runtime_types/duration_rt.test.ts | 44 ++++++++++++++++--- .../runtime_types/duration_rt.ts | 44 ++++++++++--------- .../__snapshots__/index.test.ts.snap | 1 + .../setting_definitions/general_settings.ts | 5 ++- .../setting_definitions/types.d.ts | 1 + 7 files changed, 71 insertions(+), 28 deletions(-) diff --git a/x-pack/legacy/plugins/apm/public/components/app/Settings/AgentConfigurations/AgentConfigurationCreateEdit/SettingsPage/SettingFormRow.tsx b/x-pack/legacy/plugins/apm/public/components/app/Settings/AgentConfigurations/AgentConfigurationCreateEdit/SettingsPage/SettingFormRow.tsx index b1959e4d68aa43..30c772bf5f634a 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/Settings/AgentConfigurations/AgentConfigurationCreateEdit/SettingsPage/SettingFormRow.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/Settings/AgentConfigurations/AgentConfigurationCreateEdit/SettingsPage/SettingFormRow.tsx @@ -90,6 +90,7 @@ function FormRow({ onChange( setting.key, diff --git a/x-pack/plugins/apm/common/agent_configuration/amount_and_unit.ts b/x-pack/plugins/apm/common/agent_configuration/amount_and_unit.ts index 447e529c9c199a..d6520ae1505398 100644 --- a/x-pack/plugins/apm/common/agent_configuration/amount_and_unit.ts +++ b/x-pack/plugins/apm/common/agent_configuration/amount_and_unit.ts @@ -10,7 +10,8 @@ interface AmountAndUnit { } export function amountAndUnitToObject(value: string): AmountAndUnit { - const [, amount = '', unit = ''] = value.match(/(\d+)?(\w+)?/) || []; + // matches any postive and negative number and its unit. + const [, amount = '', unit = ''] = value.match(/(^-?\d+)?(\w+)?/) || []; return { amount, unit }; } diff --git a/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.test.ts b/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.test.ts index a83ee9262cad67..98d0cb5f028c33 100644 --- a/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.test.ts +++ b/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.test.ts @@ -10,24 +10,56 @@ * you may not use this file except in compliance with the Elastic License. */ -import { durationRt } from './duration_rt'; +import { durationRt, getDurationRt } from './duration_rt'; import { isRight } from 'fp-ts/lib/Either'; describe('durationRt', () => { describe('it should not accept', () => { - [undefined, null, '', 0, 'foo', true, false, '100', 's', 'm', '0h'].map( + [ + undefined, + null, + '', + 0, + 'foo', + true, + false, + '100', + 's', + 'm', + '0ms', + '-1ms' + ].map(input => { + it(`${JSON.stringify(input)}`, () => { + expect(isRight(durationRt.decode(input))).toBe(false); + }); + }); + }); + + describe('it should accept', () => { + ['1000ms', '2s', '3m', '1s'].map(input => { + it(`${JSON.stringify(input)}`, () => { + expect(isRight(durationRt.decode(input))).toBe(true); + }); + }); + }); +}); + +describe('getDurationRt', () => { + const customDurationRt = getDurationRt({ min: -1 }); + describe('it should not accept', () => { + [undefined, null, '', 0, 'foo', true, false, '100', 's', 'm', '-2ms'].map( input => { it(`${JSON.stringify(input)}`, () => { - expect(isRight(durationRt.decode(input))).toBe(false); + expect(isRight(customDurationRt.decode(input))).toBe(false); }); } ); }); - describe('It should accept', () => { - ['1000ms', '2s', '3m'].map(input => { + describe('it should accept', () => { + ['1000ms', '2s', '3m', '1s', '-1s', '0ms'].map(input => { it(`${JSON.stringify(input)}`, () => { - expect(isRight(durationRt.decode(input))).toBe(true); + expect(isRight(customDurationRt.decode(input))).toBe(true); }); }); }); diff --git a/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.ts b/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.ts index 383fd69be9a78e..b691276854fb0a 100644 --- a/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.ts +++ b/x-pack/plugins/apm/common/agent_configuration/runtime_types/duration_rt.ts @@ -10,24 +10,28 @@ import { amountAndUnitToObject } from '../amount_and_unit'; export const DURATION_UNITS = ['ms', 's', 'm']; -export const durationRt = new t.Type( - 'durationRt', - t.string.is, - (input, context) => { - return either.chain(t.string.validate(input, context), inputAsString => { - const { amount, unit } = amountAndUnitToObject(inputAsString); - const amountAsInt = parseInt(amount, 10); - const isValidUnit = DURATION_UNITS.includes(unit); - const isValid = amountAsInt > 0 && isValidUnit; +export function getDurationRt({ min }: { min: number }) { + return new t.Type( + 'durationRt', + t.string.is, + (input, context) => { + return either.chain(t.string.validate(input, context), inputAsString => { + const { amount, unit } = amountAndUnitToObject(inputAsString); + const amountAsInt = parseInt(amount, 10); + const isValidUnit = DURATION_UNITS.includes(unit); + const isValid = amountAsInt >= min && isValidUnit; - return isValid - ? t.success(inputAsString) - : t.failure( - input, - context, - `Must have numeric amount and a valid unit (${DURATION_UNITS})` - ); - }); - }, - t.identity -); + return isValid + ? t.success(inputAsString) + : t.failure( + input, + context, + `Must have numeric amount and a valid unit (${DURATION_UNITS})` + ); + }); + }, + t.identity + ); +} + +export const durationRt = getDurationRt({ min: 1 }); diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap index 4b74b07fc8e27d..bc435179762a28 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap @@ -118,6 +118,7 @@ Array [ }, Object { "key": "span_frames_min_duration", + "min": -1, "type": "duration", "units": Array [ "ms", diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts index 152db37a1bff32..f1d11c5c70c2be 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts @@ -8,6 +8,7 @@ import { i18n } from '@kbn/i18n'; import { getIntegerRt } from '../runtime_types/integer_rt'; import { captureBodyRt } from '../runtime_types/capture_body_rt'; import { RawSettingDefinition } from './types'; +import { getDurationRt } from '../runtime_types/duration_rt'; /* * Settings added here will show up in the UI and will be validated on the client and server @@ -143,6 +144,7 @@ export const generalSettings: RawSettingDefinition[] = [ { key: 'span_frames_min_duration', type: 'duration', + validation: getDurationRt({ min: -1 }), defaultValue: '5ms', label: i18n.translate('xpack.apm.agentConfig.spanFramesMinDuration.label', { defaultMessage: 'Span frames minimum duration' @@ -154,7 +156,8 @@ export const generalSettings: RawSettingDefinition[] = [ 'In its default settings, the APM agent will collect a stack trace with every recorded span.\nWhile this is very helpful to find the exact place in your code that causes the span, collecting this stack trace does have some overhead. \nWhen setting this option to a negative value, like `-1ms`, stack traces will be collected for all spans. Setting it to a positive value, e.g. `5ms`, will limit stack trace collection to spans with durations equal to or longer than the given value, e.g. 5 milliseconds.\n\nTo disable stack trace collection for spans completely, set the value to `0ms`.' } ), - excludeAgents: ['js-base', 'rum-js', 'nodejs'] + excludeAgents: ['js-base', 'rum-js', 'nodejs'], + min: -1 }, // STACK_TRACE_LIMIT diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/types.d.ts b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/types.d.ts index 6b584fc7e20486..282ced346dda05 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/types.d.ts +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/types.d.ts @@ -91,6 +91,7 @@ interface BytesSetting extends BaseSetting { interface DurationSetting extends BaseSetting { type: 'duration'; units?: string[]; + min?: number; } export type RawSettingDefinition = From 5e1708f8844b4388894f1d1c7a20402f5c7cf47b Mon Sep 17 00:00:00 2001 From: Brandon Morelli Date: Tue, 7 Apr 2020 11:27:02 -0700 Subject: [PATCH 08/52] [APM] docs: add service map information (#62671) --- docs/apm/images/service-maps-java.png | Bin 0 -> 537050 bytes docs/apm/images/service-maps.png | Bin 0 -> 494889 bytes docs/apm/service-maps.asciidoc | 48 ++++++++++++++++++++++++++ docs/apm/using-the-apm-ui.asciidoc | 2 ++ 4 files changed, 50 insertions(+) create mode 100644 docs/apm/images/service-maps-java.png create mode 100644 docs/apm/images/service-maps.png create mode 100644 docs/apm/service-maps.asciidoc diff --git a/docs/apm/images/service-maps-java.png b/docs/apm/images/service-maps-java.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a42f4c76e12f57f19ebf85628b4eff89168430 GIT binary patch literal 537050 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 - } - body={ -

- -

- } - actions={ - - - - } - /> - - - + + + + + + + + } + body={ +

+ +

+ } + actions={ + + + + } + /> +
+
+
+
); }; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc.ts index 459dcfb30d17b9..092e3c79b1007c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { getAngularModule, wrapInI18nContext, getServices } from '../../kibana_services'; +import { getAngularModule, getServices } from '../../kibana_services'; // @ts-ignore import { getRootBreadcrumbs } from '../helpers/breadcrumbs'; import html from './doc.html'; @@ -30,7 +30,7 @@ const { timefilter } = getServices(); const app = getAngularModule(); app.directive('discoverDoc', function(reactDirective: any) { return reactDirective( - wrapInI18nContext(Doc), + Doc, [ ['id', { watchDepth: 'value' }], ['index', { watchDepth: 'value' }], diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/index.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/index.ts index f21f3b17c69558..7e155a6b82ca08 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/index.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/index.ts @@ -16,14 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -import { wrapInI18nContext } from '../../../../../kibana_services'; import { ToolBarPagerText } from './tool_bar_pager_text'; import { ToolBarPagerButtons } from './tool_bar_pager_buttons'; export function createToolBarPagerTextDirective(reactDirective: any) { - return reactDirective(wrapInI18nContext(ToolBarPagerText)); + return reactDirective(ToolBarPagerText); } export function createToolBarPagerButtonsDirective(reactDirective: any) { - return reactDirective(wrapInI18nContext(ToolBarPagerButtons)); + return reactDirective(ToolBarPagerButtons); } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/tool_bar_pager_text.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/tool_bar_pager_text.tsx index 608dadd36b4b9a..84338d817c86b5 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/tool_bar_pager_text.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/pager/tool_bar_pager_text.tsx @@ -17,7 +17,7 @@ * under the License. */ import React from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; interface Props { startItem: number; @@ -27,12 +27,14 @@ interface Props { export function ToolBarPagerText({ startItem, endItem, totalItems }: Props) { return ( -
- -
+ +
+ +
+
); } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header.ts index 84d865fd22a9a3..5e7ad6a1d1ea0b 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/doc_table/components/table_header.ts @@ -17,13 +17,13 @@ * under the License. */ import { TableHeader } from './table_header/table_header'; -import { wrapInI18nContext, getServices } from '../../../../kibana_services'; +import { getServices } from '../../../../kibana_services'; export function createTableHeaderDirective(reactDirective: any) { const { uiSettings: config } = getServices(); return reactDirective( - wrapInI18nContext(TableHeader), + TableHeader, [ ['columns', { watchDepth: 'collection' }], ['hideTimeColumn', { watchDepth: 'value' }], diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/doc/doc.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/doc/doc.tsx index 28a17dbdb67b7f..f3ceaef57d7008 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/doc/doc.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/doc/doc.tsx @@ -17,7 +17,7 @@ * under the License. */ import React from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import { EuiCallOut, EuiLink, EuiLoadingSpinner, EuiPageContent } from '@elastic/eui'; import { IndexPatternsContract } from 'src/plugins/data/public'; import { ElasticRequestState, useEsDocSearch } from './use_es_doc_search'; @@ -65,83 +65,85 @@ export function Doc(props: DocProps) { const [reqState, hit, indexPattern] = useEsDocSearch(props); return ( - - {reqState === ElasticRequestState.NotFoundIndexPattern && ( - - } - /> - )} - {reqState === ElasticRequestState.NotFound && ( - - } - > - + + {reqState === ElasticRequestState.NotFoundIndexPattern && ( + + } /> - - )} - - {reqState === ElasticRequestState.Error && ( - + } + > - } - > - {' '} - + )} + + {reqState === ElasticRequestState.Error && ( + + } > - - - )} + id="kbn.doc.somethingWentWrongDescription" + defaultMessage="{indexName} is missing." + values={{ indexName: props.index }} + />{' '} + + + + + )} - {reqState === ElasticRequestState.Loading && ( - - {' '} - - - )} + {reqState === ElasticRequestState.Loading && ( + + {' '} + + + )} - {reqState === ElasticRequestState.Found && hit !== null && indexPattern && ( -
- -
- )} -
+ {reqState === ElasticRequestState.Found && hit !== null && indexPattern && ( +
+ +
+ )} + + ); } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/fetch_error/fetch_error.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/fetch_error/fetch_error.tsx index 1aad7e953b8de0..f8fc966dec3519 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/fetch_error/fetch_error.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/fetch_error/fetch_error.tsx @@ -17,9 +17,9 @@ * under the License. */ import React, { Fragment } from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import { EuiFlexGroup, EuiFlexItem, EuiCallOut, EuiCodeBlock, EuiSpacer } from '@elastic/eui'; -import { getAngularModule, wrapInI18nContext, getServices } from '../../../kibana_services'; +import { getAngularModule, getServices } from '../../../kibana_services'; interface Props { fetchError: { @@ -72,26 +72,28 @@ const DiscoverFetchError = ({ fetchError }: Props) => { } return ( - - + + + - - - - {body} + + + + {body} - {fetchError.error} - - - + {fetchError.error} + + + - - + + + ); }; export function createFetchErrorDirective(reactDirective: any) { - return reactDirective(wrapInI18nContext(DiscoverFetchError)); + return reactDirective(DiscoverFetchError); } getAngularModule().directive('discoverFetchError', createFetchErrorDirective); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.tsx index 5984df9c76e61f..0adda0e484843a 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar.tsx @@ -20,7 +20,7 @@ import React, { useCallback, useEffect, useState, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonIcon, EuiTitle } from '@elastic/eui'; import { sortBy } from 'lodash'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import { DiscoverField } from './discover_field'; import { DiscoverIndexPattern } from './discover_index_pattern'; import { DiscoverFieldSearch } from './discover_field_search'; @@ -162,165 +162,175 @@ export function DiscoverSidebar({ } return ( -
- o.attributes.title)} - /> -
-
- - -
-
- {fields.length > 0 && ( - <> - -

- -

-
-
    - {selectedFields.map((field: IndexPatternField, idx: number) => { - return ( -
  • - -
  • - ); - })} -
-
- + +
+ o.attributes.title)} + /> +
+
+ + +
+
+ {fields.length > 0 && ( + <> +

-
- setShowFields(!showFields)} - aria-label={ - showFields - ? i18n.translate( - 'kbn.discover.fieldChooser.filter.indexAndFieldsSectionHideAriaLabel', - { - defaultMessage: 'Hide fields', - } - ) - : i18n.translate( - 'kbn.discover.fieldChooser.filter.indexAndFieldsSectionShowAriaLabel', - { - defaultMessage: 'Show fields', - } - ) - } - /> +
    + {selectedFields.map((field: IndexPatternField, idx: number) => { + return ( +
  • + +
  • + ); + })} +
+
+ +

+ +

+
+
+ setShowFields(!showFields)} + aria-label={ + showFields + ? i18n.translate( + 'kbn.discover.fieldChooser.filter.indexAndFieldsSectionHideAriaLabel', + { + defaultMessage: 'Hide fields', + } + ) + : i18n.translate( + 'kbn.discover.fieldChooser.filter.indexAndFieldsSectionShowAriaLabel', + { + defaultMessage: 'Show fields', + } + ) + } + /> +
+ + )} + {popularFields.length > 0 && ( +
+ + + +
    + {popularFields.map((field: IndexPatternField, idx: number) => { + return ( +
  • + +
  • + ); + })} +
- - )} - {popularFields.length > 0 && ( -
- - - -
    - {popularFields.map((field: IndexPatternField, idx: number) => { - return ( -
  • - -
  • - ); - })} -
-
- )} + )} -
    - {unpopularFields.map((field: IndexPatternField, idx: number) => { - return ( -
  • - -
  • - ); - })} -
-
-
+
    + {unpopularFields.map((field: IndexPatternField, idx: number) => { + return ( +
  • + +
  • + ); + })} +
+
+
+ ); } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar_directive.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar_directive.ts index 9dcb459f83613d..624ec0f7578947 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar_directive.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/components/sidebar/discover_sidebar_directive.ts @@ -16,11 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -import { wrapInI18nContext } from '../../../kibana_services'; import { DiscoverSidebar } from './discover_sidebar'; export function createDiscoverSidebarDirective(reactDirective: any) { - return reactDirective(wrapInI18nContext(DiscoverSidebar), [ + return reactDirective(DiscoverSidebar, [ ['columns', { watchDepth: 'reference' }], ['fieldCounts', { watchDepth: 'reference' }], ['hits', { watchDepth: 'reference' }], From cc9c4113b2b889044ea216b3c8734244ec058420 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 8 Apr 2020 07:15:31 -0400 Subject: [PATCH 17/52] Document sub-feature privileges (#62335) * documenting sub-feature privileges * Apply suggestions from code review Co-Authored-By: gchaps <33642766+gchaps@users.noreply.github.com> * address PR feedback Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com> --- ...pment-plugin-feature-registration.asciidoc | 82 +++++++++++++++++- .../authorization/kibana-privileges.asciidoc | 7 +- .../images/assign_feature_privilege.png | Bin 507672 -> 651165 bytes 3 files changed, 87 insertions(+), 2 deletions(-) diff --git a/docs/developer/plugin/development-plugin-feature-registration.asciidoc b/docs/developer/plugin/development-plugin-feature-registration.asciidoc index ca61e5309ce85c..4702204196bf21 100644 --- a/docs/developer/plugin/development-plugin-feature-registration.asciidoc +++ b/docs/developer/plugin/development-plugin-feature-registration.asciidoc @@ -45,10 +45,15 @@ Registering a feature consists of the following fields. For more information, co |An array of applications this feature enables. Typically, all of your plugin's apps (from `uiExports`) will be included here. |`privileges` (required) -|{repo}blob/{branch}/x-pack/plugins/features/server/feature.ts[`FeatureWithAllOrReadPrivileges`]. +|{repo}blob/{branch}/x-pack/plugins/features/common/feature.ts[`FeatureConfig`]. |See <> and <> |The set of privileges this feature requires to function. +|`subFeatures` (optional) +|{repo}blob/{branch}/x-pack/plugins/features/common/feature.ts[`FeatureConfig`]. +|See <> +|The set of subfeatures that enables finer access control than the `all` and `read` feature privileges. These options are only available in the Gold subscription level and higher. + |`icon` |`string` |"discoverApp" @@ -192,3 +197,78 @@ server.route({ } }); ----------- + +[[example-3-discover]] +==== Example 3: Discover + +Discover takes advantage of subfeature privileges to allow fine-grained access control. In this example, +a single "Create Short URLs" subfeature privilege is defined, which allows users to grant access to this feature without having to grant the `all` privilege to Discover. In other words, you can grant `read` access to Discover, and also grant the ability to create short URLs. + +["source","javascript"] +----------- +init(server) { + const xpackMainPlugin = server.plugins.xpack_main; + xpackMainPlugin.registerFeature({ + { + id: 'discover', + name: i18n.translate('xpack.features.discoverFeatureName', { + defaultMessage: 'Discover', + }), + order: 100, + icon: 'discoverApp', + navLinkId: 'kibana:discover', + app: ['kibana'], + catalogue: ['discover'], + privileges: { + all: { + app: ['kibana'], + catalogue: ['discover'], + savedObject: { + all: ['search', 'query'], + read: ['index-pattern'], + }, + ui: ['show', 'save', 'saveQuery'], + }, + read: { + app: ['kibana'], + catalogue: ['discover'], + savedObject: { + all: [], + read: ['index-pattern', 'search', 'query'], + }, + ui: ['show'], + }, + }, + subFeatures: [ + { + name: i18n.translate('xpack.features.ossFeatures.discoverShortUrlSubFeatureName', { + defaultMessage: 'Short URLs', + }), + privilegeGroups: [ + { + groupType: 'independent', + privileges: [ + { + id: 'url_create', + name: i18n.translate( + 'xpack.features.ossFeatures.discoverCreateShortUrlPrivilegeName', + { + defaultMessage: 'Create Short URLs', + } + ), + includeIn: 'all', + savedObject: { + all: ['url'], + read: [], + }, + ui: ['createShortUrl'], + }, + ], + }, + ], + }, + ], + } + }); +} +----------- diff --git a/docs/user/security/authorization/kibana-privileges.asciidoc b/docs/user/security/authorization/kibana-privileges.asciidoc index 6a0b7cefab018b..21fcb9bdccb878 100644 --- a/docs/user/security/authorization/kibana-privileges.asciidoc +++ b/docs/user/security/authorization/kibana-privileges.asciidoc @@ -43,6 +43,10 @@ Assigning a feature privilege grants access to a specific feature. `all`:: Grants full read-write access. `read`:: Grants read-only access. +===== Sub-feature privileges +Some features allow for finer access control than the `all` and `read` privileges. +This additional level of control is available in the Gold subscription level and higher. + ===== Assigning feature privileges From the role management screen: @@ -62,7 +66,8 @@ PUT /api/security/role/my_kibana_role { "base": [], "feature": { - "dashboard": ["all"] + "visualize": ["all"], + "dashboard": ["read", "url_create"] }, "spaces": ["marketing"] } diff --git a/docs/user/security/images/assign_feature_privilege.png b/docs/user/security/images/assign_feature_privilege.png index e7d000d4554ad3e80b4eecc46bd5cfc2c67c1d54..26fbbf20b39ad665a3ab5d2dc7ab3f65c8922ae4 100644 GIT binary patch literal 651165 zcmafa1yq#Z);H1&se}qcOG`-&jUWu5AT@M{bV!GQfFnu_(n`aSL$`D(DV@WR(%qos zH{N@{`@U=a)t9vY-MHia7xW57PJ1m>8#nS*?ITM zZ8ha4?pu==E=DS6npRTCCgumOp4hKYyvokp> zu(yF`h`JYYmt}JB=mv6(Eh|co@qp^Pdr(R`;Xwe#K2x(+0v^UN&1P}ls#3hS#24I0 z9~r)AuncG|F|nxXEV;(3$O7@cr(%4tl}LL?j(UrUzcc3+NYqwS5g_;u~_D*L&` zRNG_n9;WYcLLJSsy=lOLFM{tH9&8NrlWoaeK7Oc%l#9@i4}15dTGFmJ(am%agWO!_ z7Vm>Q=9=$19*7RBQ~UeA1w|0@8#3AifufQ#4vg62LObn2g_f~P=I1ZpMs!U4m^iRR zd{(~D4BLKE^Y$h|v3qAN(12Z8QF|>y{phRGFqysFw>axAFv5{9S@t$t{k%f%JIz&R ztnyN|J9I^>U92y<+rJB*Rv7vOHciP!f21jHqx8vogHJrDD)l_R<@T3ISpxC$bTB(T z&A3Up%)L8^5?XsoLm5@V;1qCGMStUVfml{?6Kp zLw}38{6OX&3d>G3>0A8xP4`t4b@NtzC+xfOV~!B^#}uLTlGUkIlDN8Yl2^@gn}(x! z=e_qo{^XZhYfvRzkURuGbzrO^6%S8s9k2*3$8BwgnMF>qY`?ohT9n0xfQ->|tHwVU zUcP-p5taA8U^{!JdZK#tq|%q?xo*ZQY0Lr34Z%+!&A2Y}4w04*U*q>fNzCf%>gzBw zE@Am5n$8~)dsyv_`zj(g7#P>!i}Q05|514!EYoyJjIjx4v5S>`BZ+&j-I9L*^qTcU zxp=WTkqTJ^>)3+islilP^6Pi1fW-=4StsiR$4tJoj$o4v$$PC;e5^0t*O|`U z!wYZIC?|UMw!dAu>`@VQVMo%!%_~a#uKKbl&~595hch@O3-}VZ*OoN*^?sN)V$Q=R zm-6-tf5K@nBs#+?@yob{t(P1 zt9&>5KK%XGyN35&?;XE%eWAPa-tw6%>(5woMF|bMf{#@RRk7|7?$EKv=Q0ya1|Md- z&6c$)-bh3lD$G5WQf`(FP}t2`*Kpuyj=LB3`cY&>Tm^LGN!_!JjAMOo{e#gaf~AK z-1PFECT7{^^$o9V42%?yN#^@$)`FulMGScrcy*l1=SZ54dr-U@|uEC{R$)bObah!MTRJ;gN)c^IM*VuZ_$JNx$hEi+Lp5g`#5an!vU0sdUt z*uHOOJXX6_bEW~*mcs8O6+t$`8TF5KaGOM^9Vjdx2y*gIJG#%V$MW}q#y}|Vx|bmb z{^T=XdMqP)v|>+K^Hl0_X^2i~zR?>#^4?nz&&@B0wN2S@AMMXgeCGG2dw-NYt?OD>8iU@q*>(jRI?BNDRhOkkE+j@ z%dhZBp^tV$@vebpaZ|BCk&d2-ffq`5Dx&6-nWnv4SAzMLBUgoyh2O+!Q)-h@#Vlq6 zZo}HC!l~hf?1lb?ABlUYOehD*ILRdNJ!}q!glz#0Qq|Z<*`hUbMy;&JkfVCrjRSR# z_-5}0$$CC)GKv`4@HiyCO4LsbmHQ+Ie>*@k&3C-Qmuyzhkw7XgzFk-tY7g6@nr!Ge z35}wba`qnGpL9}ndR41jYrpG$#&?F?jod9&07a3(bfv#1;B{D3bzw%mh~iB%PJ1*c zHmJ%=Qz}@>S(-eDJ6Apz-Zc1=>{YP;iwofC&-Ja1u+c3mLx*D+b;&v3>Oq9v>KN?1uzun8m}JVy_-e3F%V3V)!B1 zl_(JFCV@>zK*~X2OE6BVLR5_JPxgW`;l4J_1nur^DalK3Y(}O>=00CkO715P7B6~6 z9a0OqjTI>BTfVZCUxu^ivFmA#+PEL*4|9R%!)qcFo``&Teb4Dz@5hVs({fF7(nvnYO-sks~yPm%Q~xpACm+S-EHY7_}f zY-(nC(tTlQNDf6}KvyDR?rpiDzB!x)_wNEkod6T*_QaxnzP~)mUTt9ON^A7A`&N)J z8l5+oN+9lb`0!%8-0gaeB>hY>a6kAA`Zhf6?iR0)q1b+C7d@W7guy1SpOKTpiLIj@ z4bt;ic_E%$N3JBTuCvMW!1ws1hUUG9(=0Hs@+x6r;s_;LYcku@GV13wAlcp&b5VcR zNB2=G|2lE0#k1D0hTiAi;rQrB#^$aRpCHqq zi#nQvOw7XBk;lx^+1!f9 z+tCI6GzNx*w;1}Xqm{cEgSVrDlbe{gB-6j15JP|eb(xom;a`uq+eyeUEFP*ofv-2Yi923;V#L<^o!7c|NhOV zmACExP;zqn&$7@9TmKmdi1 zJ`bSnljmCKPt0G3gMon+gMMTG_b2*0j`Hcqo(eGrh75+%lgC=#x3*{TQY>wab`NUZ zKJKQaSPKt+Z*tXsv+w5wYG!pJ+FpYv(a|q7IgO{`=5mhIKfSP|k*SuK=JubbFkQi4r<1X^ z&f8*esdD9^7LfldHQi=RH^Sqp)t}!2oPIuL?$;Kf?(ohTsk)d8yy})Fzyuf9C8Xf| zk>4O~d@_(7^wHX%8Tv)u#y*IwRS)*u)zhtzUU0;X&fy{je+^ww{I%1TZd<6K!86o^Y0tHd<`a=Qx z)O)TLz+OMtbb0F1XFO|##W;aJxB-9MMus6OOf8UIcwcwy|8ZvV zGDksa+WqWe&yS9hL~XKfk3NQP{OHMVS1-`=%yC7=bGsiep$LFqK@a~-t*jl#z2)%@ zKCpP7u;=(Ma*GxdeXgNbWqBS)b^)sW&`9MR4T+!L+c4FJHXBCfS(_>VILCY#0gRu0 zzRTc3VNw3)W09fxC6yuJ-J1W$5>sV>&9<`~))Ja-ZgxC2*$4%@9{wv=a41Bgf|eFQ zBcBO3Z^HyrJ*&Th&0c>*YhSzcA=Y0`NxS6rE}{FB|1C~n@r-@>r30tM;pi zpO4R^yda^mP2tn_K4z( zOhgOT!@6LIX#G~2e?S5@Oae>#&)B6qjJeo+D+o^MfB%!j@74G}qS9&(_;M@dt3(g5 zGtI|XT{nMt$Sh(%znMz1BE82#+|Z|fyEflM$VID$6MQ--3-+2-fx;CAw&ni3a25c1 z;qP@KMVbFB8NU?v3B&zP+a7{skkXPUONZ>w5SFN@M6OW1T=wCI4wjUW6mlB)J>M0y z33`5hh=wI|QW%;c);;%-dr_I~>cKGiKV!G{XAJb(18#ki`up0y<9{(r`FcM<6)v1M z`l?-lid{J`^3`W{gtw)1o={CrWYP0XwL?f$t}>2J)ynJ{87OJ=>oUWi2`6OA6ll4o zrl!JLhaWY9o)P>-M9E}KZE-3VlXFs4+)vNll8lBF;Xlj2cVt2N0xoT?#1Nv); z?eceRE4maQ;j(9!W$K|Ukz=JD*E&3jkg4v8-sbM;c7tkCKZ)8s@!UU!S2iX=xzse~$UA~Smx zrZ*FdO_btcVF(wkLp1q0IVc=ID*d-}{)=MKt00#_w1w(zNsz$$^GTs~CkThEn{fSM zYuOPUQ=suitJ>)Up)Rd}K|TPCqr*-yo8}*SwTR{=;%~eJ#CIaxG7* z3mta71)H!|^%KsrH-B({7+%X<;JZ($gs_)ab`Nq;g7lZ&`UPKw&Pr||>pMM;JqE|( zul_8azfQ>U;lH_iHdsha)l0)ZJLzj#KRH88M8kRI-q<`d7-fN~Y8aJPsJ%@ILJNJ0 zq&6nn=Jw#h!k`rpkl1pbJQUto*dhF9@zzd|`Ml?1j0^J>j`}>%)*SEgbyXDQmJ>sh zp5$)*R9@#;1iC7^AVE4Qvg+aGSszs5Br=9tJ8!686=e$jD{xnmbJFL=20MI0VrwjDETt+CMU@yx&q9#iTy|uI>48E3cy=q)aI(8Kti`+12eWHH^>cYa0TMWJ*v#D2 z+Beuo@E7a8a7ke^%w3_kq`elef-_D6*)c%sxGCn?Mek_OgPzCTXt&sw<05^R07u%p@*F-3}|nhE+*o!?I9fRyv&V+%8%b;47|%U{WCML9iC+km&Ny zXk#i*xIQNX4)vG+#I5z6F8tyZ>z-8oXSR=K$0dsalTBvcZ;f}V#UaRU9?zY~T&u%Z zCxD_xq5}7-XC(xqf1VfZ7wfy*JE-~&&)CJt6_neprlXpug-4tMpXHiVQJ)lQi;NUx zwMOsG{$Pl4REIJLisu;~_Q?}cbGT%4g1^f4?1(EaD7p&%SuUoP78>z^9wevrY5j$$ zjr#r{h66~IG_0jOctD@114Wt=lY5n;&D4pP2UJqxuZ|ZXs~Y)~URm^-$j~!0_>7OW z?2}<4P8x1L3i{ZMyX^{_rBdf6)lWmY^vV>s0@CTbWWlHFxqVb1*OyRc99S+Z;cn}q z#r4?#z1eRr2p#D`o9jECO$L*oNxdeOimXz@*x0B-nhjenm#RBSE$S;k2u!>Et2yk? z$Win#$i>Y;bU-Z0VCh0s=xA_<&T;JdNmP{5aWRiJf*_Mhv^3$by@Q~E zhHDnMj#*4Pt_>+p^)mkre)*h(K(7S$qNxI2+c=H0tDO=Fxs{@-nJFohsA?!Zz@dF;Y4PIDJDhjj^{&Lqu(BlR`r5eF4`NuSK+|I z^wA!X(gFD&J-wjQ+e7|u2L=XCi(SSlUru?DobWbqd3shXtO*WHR_41k*dJ>N23Vh; z4risgGvd~^Mo+U8-eq$c>Y#+1q4(v z6wL`lDi709f;cI14SVK}Bwc=d#%tW{#EwFU#Ktf25+k3z%A%{CmUetw%i zr8lEXT;NyzmGnT*8m8B;owU=FInOUPvtueu_x&WIc1lrQBVNJ zBkf2dYjjK37l!61+RJ+>3qbx=bdrc(b-k`W{D0i$p#w-X^kkhAco^)vuv8@qyP!WEcjfCQbu^qe!k_LxZ7?4jV(C z*6XdRXS_tCvcHMaK32CL5&k1i50}{C1r`;vcIEF9he8Tz^uR6Z zR~^!h?}S7BhrL-Y9u?RU=e9<3-z{!eugmBC$oaXTCrkWQ1OQAIOaEsLtBRIEVZ+2O z{0s*Zgihn_`z|)CIQL~2*l#?BIBza1D=BYb52#RGp1n9d^F)bQ@*GJ|tsSg<7fbEB zo1O>z=f`f>%4cQ^1w@+?&^>98!g4eX6@G_Hmje9WlLA!!!#ax;mvj9>+whb z7VMio02Bk{^PGmI3LBYT?Z*C(eu`eg;CgDcrr*9DOgL=D&1%`-oX zsv-$}Qey^<=yiwY8xIa%iU?WJ%a)Nct?Qp0AAf#)wL?wkiiL&MBd4qInIuC`ylBdzTv|MZ}|hB~3p|9gi68Q*M}+9ej%*g?XF^jGG$ z$4Kc#S6SKezVD)HonIQI_T#M`2VI4P!aBQ3^@SEDN)2dAD__f0VtzI6p$u1dQF%;z zqen$H90%J;alIZDs(yLkH;5G$K$+nPn%BFfEe2!KLQ?pdvDINBOZ zK0sv$4zw#zo0Rds;k-)##9^cRv-fJlb}O(YlNJ*!nG7~uTj(v|97eSE$zsD)=RCoh zr9X`exA{L0OEEYx2K&?=Nw`$`o|G9lruEm5v#Hh{2#~+@!UXf<5LQy$qos9&TP$7Y zb0>?`&&{Rj!T8+H3JS8gkhB}dg~}qyrbct!J+10Gtc_YVYMPs?jl^Yk;~CHcDq;7r zk{~#G!|FZ3FgiCjSbBFuL>)?N#pdF)xWtdKqo~eWzcJE+s!Ysf;e+&J9i2o}_14H& z@%zlbGaO_1mh<#Q8)Xk@5d0b2ml|8+PC}K>_QEE1m2uq z_-cq$+FJ`8C6IwOD>9Z&9S!VAhW5IC{J8Jc8?05cj!F_@cCz%&&)qW=sj^?NVJsaj z(1h;}Wp;3UXDp1U^*wpFRes~NE(eH>jotl>6Qg_@nV-qw;NHV>SNuxF@O@(GEI zt|lHY{mfE0&FA$E6VAl~YeG46%6OBRTqp!8|D3pM4ZFL4hVMS#My2mM$$|}|?%{YP zID=fn756jr0x#K#&f4P|O-@51-x?%bwByy`ZDXBEB+nnt+9i)NxUYEoweGYB5(&YYkcCC= zhfRK=NXa{jQ!nDPhF#(gGY@&m8uc)w<7T=Sz>~^$YVrlXM&$ z+}SwDXN{rnDLA6Nr{E_LWr`2f4onY(5|2VfZJPmlDyp{EEDcEH;`zlz%4&%nd!FNb zToc`i#Dt(XaoQ)))8-2FDE!yph4{I{<0;baCGQukuV6fj{D80x!82F$VMd7uZT(go}ZM3Fb!x#w0$ou z?Oe6+OTy%F(#Y0R#`}=z=<1o{`t?Yz#+<0Qy|33uEh4pNk%>{ zSw938&T}->&{Dman2!t!x^<(w=fw#uB~?wKlimqTcW)$KGr21k;O#xN`hf%-6{%-( zf#Nd@v_8H!UGHJvk%jvFQm%h5(-Uzswed1A^`yGI$usiA3$lhdI}@dg!}(np&6{x+ zlA!ang}$&3D*Cp|ySduvs${x^XwYe509>(C`XiV!>-sZ2HMj7w#5#04-TBW6qp)?I*W>nAJK;Ir!(y_ty@5m zNo^-ySVhC>w&a4yPtzzIKGjs}KF@=#bFvnMfE5<^v}pR#mbaud^zPwqe6Q2e+mqep z0(E+^^@@ydr^U%0x(E)C%ldwFJ+7Ej2o#f|rl%%52onInu}lueGpKbqWGs>kg*_25 z5l9`g?puxY=)eM$vVV!0T(0-*e@FVs@{GRfh{NS}T8OcZkIIFJ!T3EKZCP=beZ|Xq zLR3tYy*6n>bo5U=3AViL)k>pQDL-NlPi<#ywn3rf6(lwcMkl@~Cr%xRnoucND|H0C zPoXZ>o*1sN)Lgd+X{xC#{?t1B%!2Dp?rX!jy~to?Uln$SkCV%v$Bnm);xi14(~(XF z`CHjHY)hx8y{h>T_6RWviRBvSK~g`KHISI_Dv5p$e2Ay{N7fH7jU^7E+!~86&qBkT zmh_GJ#HYMXAd;6oj)Q6b>aV-#Ar4D3-zE!?@ zII;&lZ;evnk?1^n=4D@2H_cB6uTUaAsPTSdV^GxuH(OBjM_gUnQ1KyvCIrBr2B1;( zAKiGcZGSJ5#qPPAoOX50)W1}Prk|K1@nA6nTNiI>4bY!4{3#jq?UL9;XKTtUss6Jcef| zDhOIg`?a4CuGt-b{xG?*jjU|eR|lnI$|AZ2HILjBwQx5pd+jm->W^Hq?eDdN&7MJ) z>KB4(10Vs2ggD{{(B_^l2OGr;EtL(M)CJ>1UGA+EvD#@vOmIICUOri3v?Odm`I!12 z<{X{AFP8D1ukjqzaC$#yp)$bmO+ez@zj~J1p~UmlLQCiBqO{7v2@ZE;8DDcc|)Njjuce7i2 zxnL6t>7A;*$soPQE?8l4K}Ap3BeuCZ*L5 z*@`2wVCWgXnaww}pT7m@WM?2x;(WGoX%^BEkO%eAF+Q}g|?^QhwgXUC4F~T3Ks>@ z?o;6h+s5rFvDy-)dw!#=gcmH=PHE-)$d`nf1sf;X^9EO5YW*#{J5y@JPcO8B9GV>& zOJlD~fMp2DOrwCGC7>@%IIDhr=R{@t#iwjst(qxWMRi+ z%9*jXqAMxR<=7&i$0w*=$2{eg>b%d|>>@=#11C}OBa5r+jWhM}`1Vk~w+|WW;Tla! zZ%0pq2v0;ED96W+YgfOA^B(t!NnP#?zqROsT?7W?U8&{UppCzd$B4x7d2;?`EyUkb z7pE-~GCsfK0*v}++NJd;&xcomo<6!y_EuQd?yTOUyK0_xA{N#Wzu-p{3f*ENzB52B zsgOzuQUcWMpD<3GpXpz*W}UFha~Ru}BQND;)0{7a*h z4Q~+TZP1|^oZDcwbu*K)bRHcn5O3*gK0_CjkFu&zpseDri9y2 z5uY7180bC4d7xWeRNa^Cflb4&d zsQ@77_(47$6auJ}heRAc8{?%>R>s|=#(~95KHy!*DL)a1Pp0Y%uX~OKvs(|Up8F#a z&!+PyBN1#H9@#DAj1QMcKQ2X~Jxey#l&Z3C>eA#*X~uPi;BmU;pIuhAu|kuMc~Pg^$h)C1Ef%{j*bb7X=r{5DT9XX^w}+(f zEVJ{(;Fe`w&i#86raC7WH?Oz~$BU64)IB7}1ntm8U?L&?&?e^>ZP^1hyNu{CT@RyY zt|Lv`iWy~+!c!O1bcU|vVZ)fX0{&c+8FIqpVsfeSnf0xmKuBAn7Avi1)S~>S>irfu zUs?{94{hyGgT(B|=?0K^RpW1qG@cI{a`C0C1;K-%^d$QDvfMN>`!qXXd^}r8t;cAl z09``967D~2fW3;iobJ!?QS6G97N~?7vzVY{-^T?rSX?w)snU9%*zb?@z;aAqx8Jox zgG-Hl%k%^{jb?nvWoK`crF@bDOY&5!Q!e5Tq=qF5B9uf-Mb%gHvarTAOQW3CHg2Z5 zlXE>nw>qvdH@PVjGXWvU@#T*GqnVhys_HGWZN>)L+{)agcP7knVZTzHA||INo?Q^% z%O|S`%-ArkV{31AN9_ulIYbzxtjnTc&sJ$hG$ze zk1MS~9RZ)Wt9#R!v1cjNM)!Xr8LgSIFG?1_y67|IV(i;;@mR z&wdrMF~Y*+AmucZApXecNs6SICco#6PZx77p_Sfvguj6vpNC{ns{|~WN7tIEQLBkb z76BrGGS?-W6W%Gkxn*n)gHj5WYU50VM0#sOCa8|Phc@Y+p-s(?{BqidtNedP2P;dt zSngR&;KIVj-8kZgI;xZ@xg}jbbf6gZN3Y;yZ`#Q+S+Gb# zw2Q4mAojzNtw>xLg_Qb&Y}>mYw^&ukJ6X+)+|gj6Otb~%EMPy5os5CJLFW=3Z+(FH z%zk(5Pm{i1Qg6Ce^W(?1><9x5XgYAej7#sw6P5AAO`*u!h<+kHXo<(x#22HG$4&d) zTA2$Zv|)(4u|mE$BKhLlavccbHOHImq3EPwyGHK$CD>b|L@M!LhHg^SJ$Squf*DDBnqk+~%J7uH`K$(bJ)!3>rJK zRtX`oRY6!1<{L)E7@{oObj)`E_=eEEbDImMHr$Dr)RTeD^ z_SvaH?Y@&{&y?!u=3Xa2}ERKoOZ{mEiD09`MmGe*%fjKfYWlMMJ*nroqroFmX`X~M;+bObT zY;(qW_No1zx*k!11LNb~Q8jFmF=&Gbyi1~Tde>r1dYT3k9FW}Ej|+1!$VB(znIq9v zt0r7O(jV(DF~J8XR)6f;MCVc@mZsOvc?(-MXho*1)kfuSC;4mSJ&$VGGWp@xoZqe@ zGB>ns)>koKK?00CCarh8yOSS8lbYn-#a4KWz(Xw_-j5X`q!iZoNGeGbI~^& z`ya@c2;7eOG%m#8vRruZ#!eEzRb*g5+zgcTok=ZzLoWN3es(_@UEO}O_~XYLaRL5C zt`@<1))P!H7M4Fc;v}`mny$AV|rhN$cv^O#Fy-_ zXTMYHAhH-eo;!@av1w6rmC8-v)Ol_alANds{gc=Kh7dp4XA=osF_*Yq`kiptdxeL{ zi+b8r&$3mgn^C{L>-1uS_sll|pD@9rEQE9$eZED#R|m1f7sXnjuwlJFb}i_lLwewb zKw+Xuz^CM=>+EkLk8#e=8ukW1Cp-IY0krZ}eb8W_tv8;PnrNt-YHMYirRx$ps5-S1 zIXy8yzEVR}gh zStzEFfehyuEtq(y8mCi#5Arhg1;xyFaP6;hXSXUW4Wf`?4M_p zN0y~G5CrEa%!O3UZyEdbdwOh;oU~Vwfkr+qdND@48sHp4ODR)P{SHd_0w8>VYjCd` zAOwf!UFAm7Ox6YALXgKhaCDaY&_5PZvWfO(EZ7D`M-LSWbrXu(v#%|vB1UeOGHEV- z9Gf6t^{p1+KWos4vP3n4tn~_%C=TbTZ$$_|xSo9#e^EY!_Lc(K#+`X~4*R^mj?a?N zifwl&oOEt%Y<%*9!W+2r3+PEv#sbSrQswPj zqf3BA?Zf<-;M+pdf2_M`SG|_1^_wL$ev~(at~^)SPv-2d(#(skaVkBH%)h{~>wDxf zh8o}DL3frX;=GG-9FbCdWoj-V;y`hJqE8v=7$R5D`edpWNQdHavEaabZEqasYjR%XTYj(~N8GBFI`Xoe364Q~rH5U`dIH}SsN*D3Qc_$I!r3*w2tWZ- zjD8ckx`(c8d|%Grt9)_dGCFQ^oJ7d@DA46QxGmTKkhh*$AM4ec4z8dnU04;_n(I*iA?)h>2L1Wce%TP@WmCE|M|Ml*(-z@6EKK?Ix14}NXr z{EC_=7hTmru*7DQ>L#%L#Xqx^89Uf^SVB*KQpjzyNro;1uUrFaeeY*~G5r|?=Q9L7 zKjr6t&8>|EUhMyxAL!vwycOPa35S){BJwDuDk9NskM7TqfsgM5!K?V}|LGI`r+mG` z%$GQ%E)I>1(Q!rMz_j#MM#6br5pl5&UpFdHft?76b*C;Om3SD1m_DpH6%#B^sFYGp zYL!T+?vbEc2oP{x#3`|mf;__q{!DbNPg2)%WW%;TE)LGzj27F%HEC*%4kpMP371u% z5h)qG%J6-ZQvM+b{xj`nXc6vY$LZ_uI9oAXfKW7kiYr|a1Sjhpe%XVN@mU%})qD(s z$5J_g{Ldq#PjXeLrnbUmNl#W|Y9%GWP_kp-k^Z4a7N-~@H`bv?289mx{mYo@0(tuC z2_$VF-@h{2t85*XtwBSs@9g>sI)Jxik<;&)jNrsB&`@jgoW^{@#&s)eoQgr;agn@w z`Cbp1X~p-+?(Po;mA=_?LvGV0U&@R{tOuSjwl!{vCI{W!65FZl^;$|eB;ls%B|ybS z;gQlEF7}pj>v`lOThV>@Gb@EPwh{fwB6ZdF@YlNc+;Y3H@JRF*1P}p2rlpao;+|jP zquR>>3OjR6B1HonE^$R!f|fzGw5ZyzOTYc0!jLWlpjmKtw7!Y)JXXr$BRufi-iZ5@ zBC~bZ@P|d)c8d@LY-sMF=T^#vX1$JqW;x;QisItkV}@rDs>(z%?};owGF#I+DI2{nE5C( zIO;+sM3}vbjFXO7uNvkN58#^4Ggl}b2=Y1SU7|r-2@OFt?JeN=%oO^CV=vE!B)1ZMmkQ{F)xxz z%%ut${M_FSUy5Zd+v*e5HmiFrl+5oACA{KlwL(gBLD7P)dQ;t+YaCAT8D&YCEgPFB z`|8w`QDUveY1ZMWNV{73RNQ6#9T(C~9cA8DJEy!~Y`nlOS`(0{6;xm>PYu!EtN@7l z`mno~WfXb29Nw&l2JU+x| zWG_45tiUCX(wz1mCENk3Bs9wmNeeh>*w7-Q3 zz=k14didl#3UQbp#RnXR8}hou0pZ3u@s{jzYkJ+S!>zRsZeWEVo!sK$~+ z_HD>bI#;cyPN~J@7ieYSERg^uzMpaFW^GC$m6fQ$nY1{(V_MM)#+lqN78KW}oZH^S z%$7k4?-GeSndJzOtIH=lc)wsor!P6B?2Ez%6?4L((#L>-&r~UQbbO~V#f+r11iH*z zN$pu(vbPE*pW7sJyTlRM)7Gjf=ikZx@Cm_Sg?b;GH-q-v=Vu%tGc}IIr%KJum1e@w zK32}jLSq~j99LL6Xr*hy-fazr4k9YrKh-!_@@WZY3kV5WQKrCtTF^ibDhAn{{rO8Z zYs{mGM4V<8Zs<91UXHPH&$xYGRuZwxOtS2I>z#y7?AOn@4eom9-@fplGmnS0|E!XG z44*yQet+?Ri-=`SLeMfklyj2Bole@Va|hKRU3A{HZOF#TI+G?jUN(+%ciTNgo0|i9 z?6or>zE?4SwY~={SrR5RI%DOOu$z|@9+b_0VDsWUP@!YKb=mvjZ(OXk*w=HTM&~b_ z=T@qgXD-pkkQG5=yT87W^wKr0<@~{*QEC!2a?C{TYZs&jB8F~-r0+17AAvkk>TmIK z>_R63|C06w4PsM6VbekmagAU4SkZZ&ez985r`6|AJ}wWtS*b5fJ`nGtD^3zOi_zw$nTx2r3^ zOvh30jb{k+T!u2aW0j#{q3-#=nufT3xEoY|QYzHSY3+!UWJSs1!l=GqB95~F3e;SJ z(6Hk$!dsd9hnk5F=#CTiAGZ;NwnmV5=iCf=7{Q28_HOu5zU@Ouw$fX2Dsh)=wXw&A zA1Kn`!FUJ-%92>bG5eF-Nt}`e&us{AgOqVA1$Xy{I48~G-L#Q=UNzq}LC$cnQL$U> zu)TdoX`cF|=*};B3yKZO+}?|7JedYe8eixb3@Pu{`;?Gr=YPoNlm$Fs36YM(1S89Z za%Bz0LJ=$+5Ax<)h7=y|G`{Fp)IB)@pi3*BHt|g_F8r?Sjm_>i<#v=lsW8`;kclM> z_fMtxh_q;e|hpH4And+IR@VpD9 zH47fsh*4?zhK}GjMP67fWaRMowx`O+J>FtRouqI$z}qO&K)%PH=|v1S zteV#*Gh(&-SGuDuJefz+nNH+1XKii)As8dXgN?1xBt!J)u>zp{^iFEUH$GL4tRWnQ zQm);Ya&`cLVk1q10`B|1y@c=9Md?bkiVm>Ge`d;jvn!N|b3hB+h&Q?!q1seY>~+nw zEVQs#_M3x2&o1aWrE*ChkD9adnFDEhd0=G_^Q@%~PQm^((zHdcM_FK+w?)m2bMK39 zq+?A6xD-brrWhTCUM1Z(xY85Q6%7Zcn8l4#{DkRM2{pQU=flZwpCkqUt@KZVHwB+?}nR4_4Yx({Ke|sYbxG zZ%STZfj0}?>`9O{|Btfw4r_AFx`)pJD=4Tmm8K$HL8aHIh#*y@DJ?1>orGRO$N@zZ zq>FSA=^!Az6FO2O(u5E~4>goPLI_E|$1^kUyz?Gse)Iju6&rgG#mo@blfkqhgz+!nou6a~dO|>#O!;&`Qg?ie8* zbft8TLMW_;Du&l;+wF=*`P+zf$|Yr5%4-J)IQQjXezh6CN{ ztU8gK67Z8$r;OTl6R*p(0^T`tK>uOpB;_{cEnD89Zp(rKyY!>q)Z#4$Q{SpuAiw=Y z@}PcG&Us)ks;~$NES%IVJu1UqyIj30$P^FEP8@i6L5`Otj1zmRgMw6Ry6zq+yc_Ex zbu^Nl#lT)2*b*?1-90xb=YZN+C>TmEG@LB$l~2aD+}^;JhXDU|mFLbvzHvbE8%D*# z?CdbD3YVi&5@x@B&MO)=J(aw%Ewu-cg=V|4pSr*s-X`G}B#k)_vPHq##2(n1Lm*Lx zZ%Ryuw=iWi zw6f4+=o-){>pOyR8O>SWYjVZF{9Hx<;RT?`Jnt#Q8lDgb%#m+9F41oq<^Vk9V5q8B z*7%&69fE%BzzLDJ+W_6)I!oXm;9DAlJl-rig$bnaZa4QyG;~ary{^VEDs`kn;=uIj-T4>6#}8ANa`+28z$I^rkq` zh9=TStpcYyd`DGQtOI~8h=Otx5H!1NPZG#Y@e%9aR?6wOKq28Bcw}V(u>VzKw9$n6 zB#x%E9Bs(Zm=WPhkNCIe%|$5s6z@twmB$Yei+aJ+JbT_=4cgw8=a$Za(kqlW067s= zF29o-SN1VQvd}%-Q9~Qpi5q|(9R%ptsf*0b4K_&g!mg}b$Lp4yBM!Fa{e;lp!tNTO zt7S_VJ~`?MVop`1WLpw_?%er31oT0Bc)$`ap3SGE^r=O!s5E}C6x6nps=b%`fO5aD z920`C_&DNT?&29it#R+gU^O?lO2hqU6YkG1Yz*td5W3f2<>Zd1I;S|e8$DIOQ>Vu~ zzYKU|j9=Zf&~{6+$;4$Lc;m-?tR4$PnmsU_gTj3!gA)8RhW2GivbLk$>|*bmg6#(Q z5_rrJl-<%k8a@4fsp#JJ_@tGvVpQ?(b#9pst9JzI#GA#CkW~J~3^TTNj;z<22ks15!y( z9(ge|>@ji7OAwk(DrcsJx9OQQ@4jWySaE9q)waN&Bpy)wi9kK6%m|dJ?DvZL!=1h< z-Obv}0?8q;15ua4z$7Cepymbg1%Ej++N!3ZqK7nAnXGhZCm*kRmtIC= z^cZB&sQ1EPP0epQUeMiZOlKNjX>2}J_WQ*X>OA=h+W%co8MG6ZY@Va-n4+sl|JrD0 zxKVKPP(EH4IJxt4fhz-n1Fzq7Kb#Sn7>{yk0+#VpwaHl`P#em+ioc6#NR~rGnY`s7 zGY`j9PuVan;7Fvq1VhTdm71G0-UhT8z4sk!uz_~wp^>{h30I*b4sut$U9tFMuaC)u z))wrv1Qt0PeKXCvei!{BC@YYe@4Br3@EBD8d<>Q= zb>D@u@K+UH5=8p#tv;*qw~?O+S>$A1?jpRmjFKq2IGS=YzS>tTwIt}b@q*u38h-T! zKSbO<(Rq#fYG+=xfGk*lwMJN0Zd*ekVQ4c-hVa=xM?JR1$tHP-yabelTG`5fGC;J@BL&{ld_)d zc%@2Z=tBE_^XmGbQMCfoI9Dg0$}dB8kJvA2ZdiPbH^yLG2`%4E6s|y}+dHp9r5V4G ztIRKVv~vnQ+7hV*vN?0vZaoWgMSl5EN5>Nc!H{BH?Lw&@D5KXj*>h zaa2f0eM2p$HuPk&qTqOesF30>lG=%DWw&cHt2&0i4C6ZCV$afV)ZI&1Xk<%KLmi76 zomM?z^rRTLMHdIz_=aIwThUm%&5TgF;VM2-&A=$ok{fIGoY6Fn+&y}Ka5@2XEHanL zu;eMnCctFl?f%MS|AE1HkL3-m5&(7&X2Z_OC;z^Dh%Qb^2LO(Tp|Ewqip74nm!6{VRCVfUa`*@*9yO zHW+cn5pLmBVPzrxGcMs`Tr1)9w(}EZ93nes1t?cUy{HzA{3ym^fEZ_BBpQj?(bME%jowuoVgqL0Jq;dx-8+)^`ajQizA@!4-x zLjw-fwUx_oTm4;yA?iC{?N8c25`M7z zr1)i?JHs?@daOXsMBda_Cz9V~?Ty&^Cm~rk?khr#CLpjp4?u4G$mleX6(2nL@Ne7X zla?Qoz8KuF@BS8p7xXmC%=mCLl4Ys_<&aNcCfc`itQU&>pCA+>Oetwe=2rHg{^KE1l(MbpWjM4s- zOL$aKBMQ%`Io1uS(OZRRkcVP}vK&CS0S}c|M%NN73Ld)u+|kYr!!P`Bz|#L;GNGqA zKpziKomwlsj@+FxC!!W^RyO&IqfE3c*CyzNCp;>#iYT+ zqig;R7#;R@0*mxIWPn-^&(od&%>6$Ih974#c%0-8$(wY|6u|I5E^jet)w;F;lESYO z?`^qE%twbr$Ua%N7c~Ro`gei$^4jV-xrh&Q3UY8gOkFvhdu79mn{(x$vKP66)Ap@C7B0FkjETa7veX)=~Z|JK<>t z{M`5E?{)vU`}~`G!Ghd=nRCP4`_FuCK^HbxbQ3Ilg6|hXrCs792T3hMz{)?y6iL*_ zD`Cm$O1{g{N&)*{0A`F_+gR~3uXgrESG!boU&pT&mAbPAej6DjvSGYoNc-=V=F|41x8{HAjuTt;Rp*M zl(!AZA<3oqrka2j_(~sm+hpMI{6(`xK1$zs?OG`;y2uOc`r>SNBEt&|e}!@}F`r$h$T!&{Vg&aF3-iTVSnw=63`6$LBgADPXaxcpN_ zkj8J4%CFfRRGO||kS|OX0It^TRm2XkK9-r8G1fCK!6n*|XZn!aZvbPIdKyfctPm zt1W%4Z{2*VA8r$Ua@IAP8Vrlaw&YOj8jC`cxAkk#it-Jy))i^)MN~T_(67d_|0uV& zjV$d}cpM?w*=owN6_XOlyQ#T65xl3*XXM=qoObYx1s=;1WOyj^Q_OYKrG!GL&1iTV znVRJ#{$%kAJSuI>OEVv8BndV8LV1{#hq7lXNn_Li9nMBgm8x#{xCSWum(Wh4=DXp6 zOH8EgC`88!w}iuqR0u;2ZNm-|ZgmKg(WiKo!s96sc3|@gxTtKucO>9tHYet$_gAR= zTTth@Zz{no4Nty(Zy9>7k`ynEe{{s^QGDbF(Xr>IvP}9g(Zlw-|1iS&Ehy>er{DVf zshp*u!HO#;QhAdSZXbo=HuF`hwL^bw``aEi4%>HpE1kCXG~wk1QZUbs^+eRjO;w}p zk48qbn$NP`AIP1}%FAkI;)!S1`To(2l_PT9fFqL0aD!jIo`Q!>Nm>zVr@jomKD~w+ z&LA53tO#;7qyc?iU~|9=5Qn*9X;fDfUIouhKe$c`kvx=K8Ld37vg}C8WNjSZBaz0} ztr;0Mu0eMe9{6mE2UahM(kL~^*=iTG*?;wbsDP1Bcnr9ZRfn?@Ms~F$Vv&zjgf5Ph3U}#W>tZyD>UkCVS;Gq~|0pQSz5)9jG^ZN>#h`L} z_N96=M1dDjQ>o;ZA2=Rk;+cTwKA)(5BA89M43)llbCz%Ci$?v+N-REAHpuymmboPqA>4g3ZK5&ARZJglIs=)=Nb!{Elu7fRe`?0tfw5Oaq3>j<(5 zy&-32T04-WP9r%esBBL3$FvN&*Sq)s%7gD|=8=48<-=IrNVS=q2l?u&ujyA>Z(aMv z^7-E%2!Z|0%Nqn9yTH)Uk9uD3ll?}$lMH7>R9vO=u^-NZ%FgSH_@#cRSToSzy+AcI z(u5yACJNxe3S)eSvY-#VGHIuIL@lzLFaF?z&uCuGCR~N?Hj@zFns)TT#diEP+Mkn$ za3G39jrYc+uelU66OSc5m}}gVdN59_`I&kht1EsF^5zoZ)W&!8umKubuabra8Sp~| z^Whgb%^CaZ^4(t*kjH}zwDceh+a>78T+zLmoX(k~;n|Gep8+!NU-2*C--2wfoH_pN zgR`n?tf2>Sq|v?pm2N?xOjfqs2r=URHd>tVwcD_U5QAE^+H8hRQ6$(M6V74oSe^y-E?*tI@)$v)lO6=|D9{Zt)YBzLW!o zRmGpzI-P$7bYF08kRfp;$PtmU#*<@a>itPPk+bw>+J*^G! zz4Cl)G5a;r;8G9W5X=jSV&dV@>NE<;DjQ}~3~{Py83Mtn8JOX8+BN!ATNEpNhLiM0 zLs|Lr;L5fFs%eng&V_uh=uN`ZNTQh}3*MFo|He?q0Py%HKi>THLSFiE_o%02X1nXP zhqL*eT+uDs;jL16?I6ZBv44Ml`|e%hPIsVIioH$kcss8!ir;C9O_^_gJ5S(rqNr!> zZ@m4TExh2_h~&Goe504mSTt5{nhl=jF%}b0w^ncO4iZ4H4cUdeGyZfn;^@mET!HRp zvLZ&B4mnES{UHY8x^jNk2SFm?{l=Sa$lyWnJ#l<_pM%gpl|3~$8atb$u3|7Sb2&S1Iwn~^FhMI@SW#jW zq+;Y)Tn(14#iq;a1BghKCk1YFyziv3nS6PBX!N!8g_=+%jl#$5icUPdIC?<_??o{l z(Lb`O&22Fo!y?0gha5-bU_#4K5tyJz!jl>$Tk1oV7h3Vw{M3hys^cL;Lk1-5CLB95 zy9q}P;1dG3Zx*-z;$)n{IYVSzBFYD%!S|@;H^oB?iq#HiWY9dc!unntf1Kbj5K6oBVNf zCl`1DC~Jkf%z!<#l3nR$)3!nspUUd}`}fyLj&XEu_YBIRPQXUn+X~f#E;O(w@(NSo zpPHEX1?PxF6ZMg3MS8v0+94JYcaRHUmUw>{%uZ%WCoPH}G}}yS+HA1yj-nv#*x2k+ zX&+u8!N97TCs1BqTzvh@u?5pT66@#QnCtg^E==w?NFV{PQ(K49lQiu$)WomS%-^zS zzVH{%n$Op41pfKeP$@{d-IOq7_JRJPF)5f!8Ee_> zWIBz{trpGS-b2v1NVBZ;2+H>aE$5EyEK* zjZ6vnC{|YVV*3tj{iF){fj%?}aah_fp6c!&Fa=+?&Vb5I?+#u-iDL6qHbn6>Q(CIw z^7EVMN6kXJW+P-ZN);IP35GrmAr_IQD$q@&52OYX;$xu5W*f5v6iiu7fI}BBn{}N{ z2QsCsYIR%|^Z-&=0#e!vNf>OHQsX0j1rFtA!=ferW>lb&Bih-NM$SOartehR<+4zI zf@g5U$bIu9hsYip0Vu0Fq)y4eo~Dh`>Dj>DEPmn8k|$$Mhm&^711bRePW3sV@p~C- zz*akc$)_2;Li%h4OuWKjG(!4X;F??pFS3i!7DpjX8$;eqZ7`W&-20AC!KTem`z(1G zZQ&+R{<*N;QqV+b$dTwonq+fhL7IrBFrmr3#dwWbEi zvj42T;adM??TtQ#s`S>Xn*C$M!qJDa5;9QGETz*}4UyJrY`SHCUP&pn?QRbzzunnS z3+^MrXXVR(m&rZI*D|mV#6a|qM>-E2+(-8gn~ZAS$+1_nn9Vm5sk>V?!(^x~=dD=S z;sKQ2SDEO!ZCyxnE6|2J9=WlK|vaYd%^TlZ-Q9M*p0-t=So zJYovnG?8A!XE*FQ=+nHWf_H(?*Pdh$R*zdPx(0NkIb~A6yf1wVEKVX0yG!exGN|TK zx7N%8wl}lRV2i*Me-hpYdyYR2i0~hT3RA0iCYTD|4Y@w;Hw^CX?zf#K(PwNqttdtT z`N7w)bUaeY_-J2s(o*6&D5E9j(2AT_O5~`FwH~beeC8W$+AFSM6TT^BI6g&{!yHPG z4&)Bi@y-6+UZ-7s`@s8JPK1*@qEowefP!PyY(&YXCS^%(zu$k3vk};;N~9cL0rZHMV4*J;Qal}L>tOBD{}L7 zXlPtYvXv@~__<+yCqr)!Nu11U03qOki{&qt&L2y0npuW?4jbcd-d%i_sG!nJ^D6a5 z)e|qcEoLSiGw|I*S?x_K&`*;g^o_i!P*rHSd6nZgDhY;_^QwO##>1=RJ*6@~iG|Yl zz#vUtr4$Y-FKk>1;;H2A3|aj`-;dg?1(QdYtHwuuS4ca-yZG_TU;SMtO>W13Qc_al z{r?lT+p@QZ4+=)^!yb7QVm9&;r&3q3Gba~F;rGKx#>ey``Cl7l)PilTD^)#azDDkH zM0!4!g|aj8k;~RQhHXPyl8d26fGu-KburYF!s}BTs&Y8Qv9WxoH6Eab8vwKyuY#AE z?6e62rE_QWVJyxlCyq|8?XK6BX#QGkj-2LIaPPnX8*O^OpM}?g&=T0HKKM=?zZbWh z^H;o9F=Ee&zL37%kJWTx7FWc@rSBKH;s(?7`hK#|pWsBe2IFdtQ1sMR3B*ffc!NkD zByE>IbAuZT^<0f#fg?^&tU+gxtVs1!mQQi%@=CM#W(pq|zOn|UCrr^c5!eR1&tIg6 z6*xZB2aMag_I{?dC((8r%3UV^d@wro3$g$M7+{wW1l7A2e`m5tuTX@3;GeL@3THN zYZCRYww+kxfl6<}zvMsE#PeYN+f%0E5H5kOIqQdye?jX$RQ#D^c>l{B^S8sAouwi} zc(6$v?sF|v5W+ne*<_30+$=qn?h{$7|NQXbrNVkiKO6RYV)_Zj>wri<011tD8TM}n zOxvP%XLrjtO(PEydP{83TAk(M?97~iylrOrUB)QT42wy`^n#75QbLt?&&u#CA`gO0 z>$tJovNaCFx$2163209dZC8J)=ySb+{Xq*=o4!TbVBFI81g!s`c^u}S83+aK$l)a+ zzUBj=8+&(P#`J=5y;S)XzWtA(BRqKzTYhF?d_pN%klD%$$5%2ll+kohB@>jXEm8La zzQ>PLwtfnDe*~t%P%x~i6cIuvLh5jIqQ}(IK#CL5p}nS=3eoFcGS(yG5rIXsGDSXv zAo4uOT_3hu+5iA@Tsi@K{oVF!5F(BO6swfUQYS(bnEYvY{%$pZnr#?0CUAR+8lc{$ z-5lg*U~k(~sj3(4%B=K|?pm}fQiTuC#YejVK&;Vb**TWeoJM6j91VAeot_x?DJsSy zl-j44?iys0oEbIzW`!g6-sOQtEfE+(z_QT0v;d=8{00J^MH$I+)paHIAz*95Q;c|o z?ErD%^`Fg+pM|bRH}DD0_~`>7KV4vTKt4Vo4S5)4wMsjTfM|I^*yX=tN5G9sZg>sQ zf!k_g5-pdV=_u)FgKOdXhtm&L*E3nSOOM0Ru1&#)nQoyF#His?s?A+Aa8K3AiLz?f0JZb-3xf*ht5*L2o}sMiZ`4v!myprrMhKw>|a(g z!kDT&q8z$$UMxJxV_ffmkOiE~Z^x*@Hlu2+wR2)wc?<9{vcOKnPuu?It+aTf*?c&o zhJP=XiYHB3({XH-iH=M$jcaLg^+kM8`Uo+^s^_(K?7S0827SHQ>*dLwW)Q8%1#ikn z??~SI)=gh($Kw#RJ3S@a?y_e-@fKPTGFhi@S*yp~(3G9Y+^7jWm_LnKO%k{H6y2hu zTRH(K(B_Q3-0N1}6V>;I_z}20SW!xO0ifMhQe8&f9AbelZYp2v29sOBQbmTot9O)d zM?2>DG>LCqLc#GH;5Z_kkWq8PT2@&qWmRFbX_1Qm zSujTkLrz2|I;46F#pa~Ny-e?x(ktF+_mRG%aC z0mfyBCYZQV(WrW^rhU?*2CF?g#9TTh6|3_n@BhDO*k0~;z}^1h&pP|$zfD~-BEzc> z01tv5sl27QVL>}X*E9L}#2((}rH7TR8FDv$fvF)#Mh@}Vs8yt?$={}KUEr>3y@3BN z?AncNdPuG+6K6q)!mE}TY~FO?3mZD{_N|$Go1m;VzjN}j1K{Z`Z=ZH^Y)NNwE^A5A z!GJX%Ra5T9jfWM8X71GxZ6n)x1bnvQXDh?yfE`Om(icm}i{J-)rk$CH!(Pxxz?PL< zoR5|7lfu%%=z!6-Q|)SM1sf42fECOVpEEy^pFgVbX~8Chx>Nx?WolkssOYz?-yR>ADMIS|rl@^$xLP3W^BPHX_OQ@-zu=o-BVzGz?X&oC-LOB?x3)TR_#38&2 ztkGcSQb>gA-rJ~p8jZHF^tvxkKf^nU+}S;9luj9gmvyiPV&o>%rzJe0ch`9JjZ zUNNkE(GeGZbb9Gk#aMq%wf2=O?2&~>yb6m7a*}Tv!it1XJmcRean+4V;}c)aaq&aT z3<6et&c^_!V}7IZJ8XXreb|{*eWkq>nc{xhgeZEUWsW|wq9%_6oOVXdDYi|+(Z zJ~pzW@7jQ&wh8dXt)`gX5!y`MtS9s0%c7cuyqu-P{WxsWcRRpd5Cj@5>)~q%|F9zy zW0zBCSm-~R`Q5(4zTzZ7nR)@`4W{Ikc4vY87E$#m+D6{o-V4s9TV2jeKb&Xm=`==w z*{jIQEZSL8PLW=ZBZaDplQ^hU#H3VuJQF>?cgTk}Z(dSVBremjyqr(jBsD`E&9ktb zM&13rcnl|>|5p1g^Q=*T-Zg$1mZL8^=^ESjr7xRfX>tILQxUAHvx?6}9;~HIfg4w@ zyMaSeo44xB=YcOlT*s{O`R=KuF(fmEP}|!1S4)}|d4ru^@ErWYEni&s_9p18yyLd9 zz}ENYTm36rs6V~{2CM&ubhVsg%5J|^oUBO;oip_4S&6Oa(USqs)5?4gQ)R`!Q$@@LZ2trN5aO~?EydjfR;Ok~dy zIoC2|G!zk`zt1=+17&xRCn1^-WPC7t$hg8WHli&*N1Jbl03Wc(0F1Bu@UH$Uk`|w| z)DAudLLiXg`B#x_Y;5=-R{wk@?{(iF3+V^%g&S%b$r0QB)4_#dr&w8W8_90w)#d#m zToyCUWcq{>Ys=Td!l(=zm>q00#4`DhYZ8}qABKHm7Y%;%$;g3IQPc3unQZu_kD4)& zZ;XCl;mtl-t35HTWM1*$g%DO{a{x}jr^v-6+1wJPG&t|LDv(kMfsj~BcU%TxGQ5lu zNn3H-*_A>ab8@5{deFrR8MMAkcoIQdPyKLdJ}(Piz7tumcPeG+nj}x$6h8mVIM=KP zsL_Im<~^bA+{9K!R@JM>{lyD|9~=zn=0>(6b{;n0QcK^;w+^ZJU@te|%RR349fWqi z@#7=otam&NRm7&IeW^LY;t#JsDZf`uUVXpiT{pL*z4)fxawyFD>9Nj*$N4jwA>p_* z#IrM6NAE%!iLuf~+44?f&J#UGXPM=SFS2uVC?EWoU!shQK9eHjKzy-)GJY&c+!H#h zj*K^_2bh2GOPvvk(fqn(?m8c^dAK3S6=u@qXs@)9kOzCN*#JuL6%+G4T#_S2qah8W zuHyTJSS9X*cT6n7mycZf?e`P6e`7fF$8Z1hqy3#D>tx2@tXm-VBa*hq_)Z?DpE&dS ze}CeCefZBGgI-*n3A62u*EG{*JBeF3ck}J3w6wwIZ(1efcMrOX>{9q9C$?x%keE^L zXR^}95BpaUoFq+E{VINwym3R61-h$$jo*w}MCAv4cJT!8)Yd2M~E#Wx^&-H??m0VY&RY!|h7j^4bdx!bQZl#xd?m0OCu6(U;BbIZ0L2Uh&eN zXQ2%o6BotXU>j9(3(@V7(C<-fnHV?nAl3TX}f@Z$SSRqp2fj zcots_Ull)Lm3+jhRc{u2L+sS$zlQ&x!PUKc>6))Y>~DLDRk7*sGUE)1<)c^|*;oF9 z(+o>eLP@vNqjn!k8e}B7y@)y(A}^c082ph8vU0hCbqH*YIm=m4%oJJK7PA`P7A)Yk zM3&`P%oydG3g&7uqia00T@^aM}fAprvkezcZM|hLlbt0`Um7~_nikI zE)FvL_fJ=T#}IbH=^ucJ8hg3Q*o)N>hjLsE(QE9Y;Yx=ayOb}!j%xw1RxPMFC#>~` zts>wM>yzWNId{)Y@1y^*p+qx-l`2#44KU+@`tTMf+!X}c_Eo?+*Q^?-HEF<$GTfVl zJ~ei|yKudO9!Km^ZAOrk$HCL>o-f*u`PUhIky5!Vu>Y9!$6P8 zgFeLg6iEH$^SD*^IP1&7Sx1>UdlyPK7GA+{#p5<#qgw|p%3dNd@X}PjvAWjk>orq% zX?qJ-5T19hv4*z4SRFrv?HM=^MY;Ml~Q+It_j@NO7!A^j8UU#|1d zc%HfZ5%>G#86Nc(>Af?p+JyYk9vo3_Ec?rL7|NT;ZKKP3k2l9SKLJ)6w?n1HJ~=K zn%^6Hlw!1i-qwZIq1A|oQ1-y|;as>F3c2-3nXryj$4*&+hncv!4wsZC=rGCyTU%Qz zLVoQ%Qs6#K$&WNrlaGS0xzzYf=OgxvO}}P_+KACda9Q8>R)+1qmg<3|!nIRH?i5Kl z>vaB{dc1l=fbD7<7rnZdj`T3t0^voZ(-~2(lcA?eagr-9M39H^a3O=XyaWC4Le)-|Qr}&RN zM|S@x^h+*uEl-KlfA;_gYR3e`rVgbVsFCogWlkd zsWQcJ@TzwT*5h8UmG-RFM0d{XD^K)nu2&46DQ+J5W@2nCNLWH8)Op}~QWZQFD^RKl zbltRMLFsbZ{JoRHX#vTH^D#QcAEZ$GRjKYfZ@snSEc6xj5_U+T{3ipzZsZ*Ij@i(o z^RK->wWadKTSg5_Bq zC$F+7)c{jP@AdQji>vR=pq`s>)~}`dAn_BXg{8RK-Uk(SfkMERYi(G;T{8hgGQpR>0YP4kfTX4cH#;8{> z5l2p_{pxf7$lte+`@)k~@oFo8 z!|J=Hz4ux<&Zbqj?-16R&+zzBhAE!#aVS82E~j#Ru3Xl%0PVy&YTCW|89d#D95b6Fmm*Da2r8P=X3N|;qX zp7y7>Bq@3&pXJbvV+9?S8eSKLCg-sUYsv3NxAW@h8heSRnn>rC6kN(FyKbgyyYS}h z&ViGp>{xLPQUT01AS(Yo1$h_-`sy`~JrCtk_Kj{Nj5$5Z#BRD*VvuDC0Yoyc)$ykB zXRYh<^~8Gag)s3_7WW}N!^Y{6O&Hxz?HCJBzNO#FqUpkxK;+KB!Gk&~Ze#qVo0?K7 zlJ=S>VEODIae3VPN=$T2max36qJ0=ebyWlOUK`=#X7U-pkfBsS(M!=D(IiZe*T4yB z-jjEPAS7c$1*cDEoiE=GbANv7ulcj3OYJu5)Gp5TL}c$_|Jla(7ksbs917e%fA?Qe z*8jf6za8n-Y2iY>R{$s$<@Ac4#6+LMRV`P1Bx?mbZ^M}P`;$u(=x2{*Y;;vJGVkO& z9n}cbS?gGMN+TRGdC?n|^ob*~vOK0R%vlqaFzFN`a75#BZ_Y~dvm+W@mhJ@syF=Yi zSW1!jDEFD)v3<$oZ}V%jjf@dSm6>y=(W^z3k1Q>(`%L=*QJzst|MnH{v@9d0^$?_l zuT1GrmlB5h;WiL4D#RZu=jGIeFII>?&)4UW3Q*k3iminVj^FcOj?9H0B(0a>rdhhX zX=ES6v=`iVgDghuH9(cFQrkS(&tmP9MLTcwFJAn4&j3&qql7;+FM$fC(MeMJz1a`g zR5HvuwTt{FavR^9TbuJ>m&b{7o#D3V4R3qr{9qyir$p%;ki(pDGB-37NU#jdnR4#~ zKOfJEJCLC?ZQ^mppU{Dn9wSf~!!Lt!U+uS61K_Re|NU)Z7y9ZDmVGOjXARRM2&=Pi zjhROsd)xFP*blb;tq^eq=B@)94ILSYa!Pv~6LTR2q|O|vbK^Sar{Jr5+96qA+wD6Z z7CBEH;Lr=PSgQ|@UU~9Zo?1EwQ6sD!}8bb z=LWdI?7#)bhZ1v${6sDv)a>3}3Q*4MU0Y*rO~SC7ifv8Sf!>uCzO8;``<2PjCLHCu z;<`=5Rc1f&D^JXuJ^)cUd@I~%9i?)XWypq_m*KBd{o}a@iVlE~>vm}#foGg{7D{^s zSV8CCaZkQw`$HX!bCW$CVTx^r6Q{Ll0c*N`1L=ra^}3Z@^BohVFvaEZ($dtQU>HEu zQ4%*_|C3+*^W?jH_(Ns$XPVP^HR%0M`K)U4@!vM;?#> zc*-osu;FLBvk)xPe>Gg*^HrJ(b1mYYoqZjb3FwKZUN0?T(=P6!ZFz0}g9_ zW!-5alFhs2QvAI6U+gJ8aklF}Zr*ZVII(H{z2ogI->pk1&#})F<->ywO6X6Yj#y3s zn89|oO+5&+foL*ruEX)Q)`}_)C0?9&%1wSyfIiW_m|RqP?JasKK)3Qp>kt@%1l;85 zZGYr6)BeVFnk{eS@lw;PsqagbN((9ml`ZvDSB`W`U_XuoXGskzYv7x4s=_uvew?gw z5(W@RmUDTJkk#jIe#E0lrOO1k+EHo#W_o0thT1X7ro%9vz*iKw_(7ElWIBL6$)co$ zuc7std@nE*wku(0EQYd^;L?MnLo)Niws87;4Su+V>i!neP3Vco0epv)V0lFaM(j7U zX82V+E7cjM>q5xcIL69bXK!yk68fgl)&e?yKKDNo65A`^lr;<;Zt5-bRqVV;y!SdY z&2{{s%+yC_Tx1@DwtMYA&_4;M=}2G!NMvs}nUHt!mMg$O@TEEpyGJ$B4T6HRJaYu} zy==tz0O-P+*J=tsMuC%V<8<-BEZ3`!gjcEvxZf#AF08Y08I;;iVV3xSobrY}bz8rw z(RUQ-R@7my&R+cP+<2t?;f;wkbL{&8*%bB@;dASrB@bJNXvg`kZ8j2IXO;><780Sn z{?Hq)VS3U_90_1Cf5`PZfH{5=JQ4Zfnxz=pnIeNbi}68OmJtWQp)YG%0*5Jwi#6VDQPztDXaf8wZwyAQ^ueF@jev{n!_U||2bW0pFI zGzCMZ26jzEV)JM63k$WnbhpH>KWXOz``+)0;r*o8T|<$NN9y2j97q^@QS9 zZaAQKJ4q|7Mo^nn*tF*~Ah}k&i&$^idZqaye6Wrq@(fST<%HdH#qQEC`tAJ|b8zL) z?{x}NHb^ey;fQg&2@a*q`0#Y!9dK)P1xis(4`7k4z6ZM(%KKbl$E?xhPKP{Sj(b4Y zz$I_BX)skmyScefj;A4Ct-GvrD(%aICh8;RNW3&db45fns`})7 zcONqf>vO0(?XT2uZY18+LMW6z^X)^ln8N?*+WZ-cAR&Q|cE=91 zO~uAcN3-?M>s(Xu(d54&{bV5mQ)bK4?7FT~i}+74^0y!`ky!s&BAI-3kYViGGr`3TsWMlW5kwc?MAV>l*egmw-u=KZ~8)YS5FC|_*BF%L2a zB6_U^IkfFPdldK9p|NF(#c7c5bSi4_}zOo;waZQ5t++*XEn6edt|QI}^B! ze7`6sCSmXrmk!sG z&Ujr7(4%|ANjs2TgGrzP@VbPdUJ&*NT&`|y@ZI^ZlN|2XjV!$W&ba#A$U~ufGH32azEG)E{dNq)iw~aH0!~(dZF9r5@c<(-z z7q}C&yFM|TR0MhG*cub&Y81fcD%rI4`5m{Mtn%npDzDF^?h8~B+rH{k`eyIxaWLDv z@Qu$;D(+XK12r^8a#ZJzXbg=5ulC?dakAb(P#Un{xK+eIya4)i5%ryJgo7f<-mftN zsS3w_)erp$h$Aabc;tS}W2|&P`{SXdHB0#SZgu~%T?|{cdyX2p!aqa=ZATGL4_VMiUXOF>z27EpG%h$@+ zCpd34V5Y0aF_%m&{Jd_|0e$7K*7QTzjq0>z?maJB8#Yl(t(zU}@bzG%SKX}jt1QPv zz|PR|++M9*v+i{4q-m~R+6&!<)CyE|Muu;|4T)T~;w#xOfVpcYT#qZRnV5EiV`NNw z?i}Zx>F1F0rBhiKM#ra5RIeZI@!GBxBhS6#lC-*pcCAsnF&4>GWb}0Ok-0~c(0dK- zvpfzGV(f;ki7r_3V6!_xSI)N`e7JhbZzd>o9cYoyJOY9&R7og-eSLR9>gCk#nijG- zx!#f-3hI>^x7vK=NA5)Q{V20et-E`C91D#*r0s}T^aGbO!*@;~r@R_-{k-J8r z$NnF;aq>pc?cav4krLtO=NICdoDnV-trN#SWd!@=XYxPx*xq@7i+LbC?6D)G)INX7 zTP0Y)nB_@SpbqE>npArKS@!+(ix0#vlFL@Vk4AW|GeyRx&*YD#!i|%_wRtW8T5WVP z-`^caZ@woCBEQwen?vdz5Ha1wdUNO5<@1Y+<9WR&jX5PO*w^LvXI?HO7gb;z`GxGZ^N%lg zn#%`lgwyfiY=X;&t)V;;rO54E?o)*t@tw4&$~@b^r$(5EFo26tDaY?i-WKJ9;huhX$){MFKE>=6w}^IkR2 zF14MkYRQu(XEqJYYRnjc{Xs%wdvZ@jh_hp)mwA<67Gv=#RrLE zuwlFY==@k>9!>?^n1!(rfM#QYJo!EhVY6`kTEnGPUbvzi>9DYRmdy zP?rbL-R_Ff;L6lzYw*BA}Hv*|krZgb}>YquB-7nkiiO%=jS zOdf%Od06gexmo(m8~z@^U#_svN@-&xZgCe(Z)0I@o(3BE?sz{gn~CnX=SDP(v>dz& zph~1vsl^VqNM?PGkqi}BPNb-Gx6HniWHy8 z(G_1?Z`f2V$MH45f}`)k7b={79*+^=cpOk66j89xE122YB98JKmgJ&ECB2_voK5LXR#a_~rwk0hbOsdj4;ueAC=9d@KdtiN4F>}`y zrWl@=$}g1$NMRKNBqolhe7-Fto6ROtY^e)qVj`0xt+G7MMNDX

d0!vkfZsAcqo2DY6BJ?AR(5Q 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

Hk7@ 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 E0CRj)@&Et; literal 507672 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

%i{%dnVwf(}40 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

O7+eIK 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

EiIiA&MailnCjO( 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%0A4V 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

;Oysp%Wq47RZM%+5e$tBa6WBz6nds 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 Date: Wed, 8 Apr 2020 15:14:07 +0200 Subject: [PATCH 18/52] skips 'Sorts by activated rules' (#62924) --- .../siem/cypress/integration/signal_detection_rules.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts b/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts index 1559285d508ed2..2d2db9e70255b2 100644 --- a/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts +++ b/x-pack/legacy/plugins/siem/cypress/integration/signal_detection_rules.spec.ts @@ -32,7 +32,7 @@ describe('Signal detection rules', () => { esArchiverUnload('prebuilt_rules_loaded'); }); - it('Sorts by activated rules', () => { + it.skip('Sorts by activated rules', () => { loginAndWaitForPageWithoutDateRange(DETECTIONS); goToManageSignalDetectionRules(); waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded(); From 4d7cc6dfb787b10dd3c32b8f90b95bd948920076 Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Wed, 8 Apr 2020 14:32:13 +0100 Subject: [PATCH 19/52] Removing unused import (#62917) Co-authored-by: Elastic Machine --- .../embeddable/public/lib/embeddables/error_embeddable.test.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx index 816001ba42ff1d..715827a72c61b9 100644 --- a/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx +++ b/src/plugins/embeddable/public/lib/embeddables/error_embeddable.test.tsx @@ -20,8 +20,6 @@ import React from 'react'; import { ErrorEmbeddable } from './error_embeddable'; import { EmbeddableRoot } from './embeddable_root'; import { mount } from 'enzyme'; -// @ts-ignore -import { findTestSubject } from '@elastic/eui/lib/test'; test('ErrorEmbeddable renders an embeddable', async () => { const embeddable = new ErrorEmbeddable('some error occurred', { id: '123', title: 'Error' }); From 6b52ce7341e52bdb1cce4b1fb90181c03fc74f5e Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 8 Apr 2020 15:09:56 +0100 Subject: [PATCH 20/52] [ML] Adding configurable file size to file data visualizer (#62752) * [ML] Adding configurable file size to file data visualizer * updating translated strings --- .../ml/common/constants/file_datavisualizer.ts | 2 ++ x-pack/plugins/ml/common/types/ml_config.ts | 16 ++++++++++++++++ x-pack/plugins/ml/public/application/app.tsx | 7 ++++++- .../datavisualizer/datavisualizer_selector.tsx | 6 +++++- .../components/about_panel/welcome_content.tsx | 6 +++++- .../file_datavisualizer_view.js | 13 +++++++------ .../file_error_callouts.tsx | 7 +++---- .../file_based/components/utils/index.ts | 2 ++ .../file_based/components/utils/utils.ts | 15 +++++++++++++++ .../public/application/util/dependency_cache.ts | 11 +++++++++++ x-pack/plugins/ml/public/index.ts | 4 ++-- x-pack/plugins/ml/public/plugin.ts | 13 ++++++++++++- x-pack/plugins/ml/server/config.ts | 15 +++++++++++++++ x-pack/plugins/ml/server/index.ts | 2 ++ .../plugins/translations/translations/ja-JP.json | 2 -- .../plugins/translations/translations/zh-CN.json | 2 -- 16 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 x-pack/plugins/ml/common/types/ml_config.ts create mode 100644 x-pack/plugins/ml/server/config.ts diff --git a/x-pack/plugins/ml/common/constants/file_datavisualizer.ts b/x-pack/plugins/ml/common/constants/file_datavisualizer.ts index d72e4d63cc47e8..81d51bfa258160 100644 --- a/x-pack/plugins/ml/common/constants/file_datavisualizer.ts +++ b/x-pack/plugins/ml/common/constants/file_datavisualizer.ts @@ -5,6 +5,8 @@ */ export const MAX_BYTES = 104857600; +export const ABSOLUTE_MAX_BYTES = MAX_BYTES * 5; +export const FILE_SIZE_DISPLAY_FORMAT = '0,0.[0] b'; // Value to use in the Elasticsearch index mapping meta data to identify the // index as having been created by the ML File Data Visualizer. diff --git a/x-pack/plugins/ml/common/types/ml_config.ts b/x-pack/plugins/ml/common/types/ml_config.ts new file mode 100644 index 00000000000000..8fd9fd22bad8af --- /dev/null +++ b/x-pack/plugins/ml/common/types/ml_config.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; +import { MAX_BYTES } from '../constants/file_datavisualizer'; + +export const configSchema = schema.object({ + file_data_visualizer: schema.object({ + max_file_size_bytes: schema.number({ defaultValue: MAX_BYTES }), + }), +}); + +export type MlConfigType = TypeOf; diff --git a/x-pack/plugins/ml/public/application/app.tsx b/x-pack/plugins/ml/public/application/app.tsx index e9796fcbb0fe44..f1facd18b9da5b 100644 --- a/x-pack/plugins/ml/public/application/app.tsx +++ b/x-pack/plugins/ml/public/application/app.tsx @@ -15,10 +15,14 @@ import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/p import { setDependencyCache, clearCache } from './util/dependency_cache'; import { setLicenseCache } from './license'; import { MlSetupDependencies, MlStartDependencies } from '../plugin'; +import { MlConfigType } from '../../common/types/ml_config'; import { MlRouter } from './routing'; -type MlDependencies = MlSetupDependencies & MlStartDependencies; +type MlDependencies = MlSetupDependencies & + MlStartDependencies & { + mlConfig: MlConfigType; + }; interface AppProps { coreStart: CoreStart; @@ -74,6 +78,7 @@ export const renderApp = ( http: coreStart.http, security: deps.security, urlGenerators: deps.share.urlGenerators, + mlConfig: deps.mlConfig, }); const mlLicense = setLicenseCache(deps.licensing); diff --git a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx index a8bb5a0a8fe102..2d6505f5ce1f75 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/datavisualizer_selector.tsx @@ -26,6 +26,7 @@ import { isFullLicense } from '../license'; import { useTimefilter, useMlKibana } from '../contexts/kibana'; import { NavigationMenu } from '../components/navigation_menu'; +import { getMaxBytesFormatted } from './file_based/components/utils'; function startTrialDescription() { return ( @@ -59,6 +60,8 @@ export const DatavisualizerSelector: FC = () => { licenseManagement.enabled === true && isFullLicense() === false; + const maxFileSize = getMaxBytesFormatted(); + return ( @@ -102,7 +105,8 @@ export const DatavisualizerSelector: FC = () => { description={ } betaBadgeLabel={i18n.translate( diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/about_panel/welcome_content.tsx b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/about_panel/welcome_content.tsx index c56ab021e2f2f6..49b2396aeca13e 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/about_panel/welcome_content.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/about_panel/welcome_content.tsx @@ -19,6 +19,7 @@ import { } from '@elastic/eui'; import { ExperimentalBadge } from '../experimental_badge'; +import { getMaxBytesFormatted } from '../utils'; export const WelcomeContent: FC = () => { const toolTipContent = i18n.translate( @@ -28,6 +29,8 @@ export const WelcomeContent: FC = () => { } ); + const maxFileSize = getMaxBytesFormatted(); + return ( @@ -117,7 +120,8 @@ export const WelcomeContent: FC = () => {

diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js index 02f14a9e4553e5..d1b615a878b2b5 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_datavisualizer_view.js @@ -19,14 +19,15 @@ import { FileCouldNotBeRead, FileTooLarge } from './file_error_callouts'; import { EditFlyout } from '../edit_flyout'; import { ExplanationFlyout } from '../explanation_flyout'; import { ImportView } from '../import_view'; -import { MAX_BYTES } from '../../../../../../common/constants/file_datavisualizer'; import { + getMaxBytes, readFile, createUrlOverrides, processResults, reduceData, hasImportPermission, } from '../utils'; + import { MODE } from './constants'; const UPLOAD_SIZE_MB = 5; @@ -57,6 +58,7 @@ export class FileDataVisualizerView extends Component { this.overrides = {}; this.previousOverrides = {}; this.originalSettings = {}; + this.maxFileUploadBytes = getMaxBytes(); } async componentDidMount() { @@ -93,7 +95,7 @@ export class FileDataVisualizerView extends Component { }; async loadFile(file) { - if (file.size <= MAX_BYTES) { + if (file.size <= this.maxFileUploadBytes) { try { const fileContents = await readFile(file); const data = fileContents.data; @@ -105,7 +107,6 @@ export class FileDataVisualizerView extends Component { await this.loadSettings(data); } catch (error) { - console.error(error); this.setState({ loaded: false, loading: false, @@ -181,8 +182,6 @@ export class FileDataVisualizerView extends Component { fileCouldNotBeRead: isRetry, }); } catch (error) { - console.error(error); - this.setState({ results: undefined, explanation: undefined, @@ -287,7 +286,9 @@ export class FileDataVisualizerView extends Component { {loading && } - {fileTooLarge && } + {fileTooLarge && ( + + )} {fileCouldNotBeRead && loading === false && ( diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_error_callouts.tsx b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_error_callouts.tsx index 3dbc20f16012b5..7333c96a0d8ead 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_error_callouts.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/file_datavisualizer_view/file_error_callouts.tsx @@ -11,8 +11,7 @@ import { EuiCallOut, EuiSpacer } from '@elastic/eui'; import numeral from '@elastic/numeral'; import { ErrorResponse } from '../../../../../../common/types/errors'; - -const FILE_SIZE_DISPLAY_FORMAT = '0,0.[0] b'; +import { FILE_SIZE_DISPLAY_FORMAT } from '../../../../../../common/constants/file_datavisualizer'; interface FileTooLargeProps { fileSize: number; @@ -81,7 +80,7 @@ interface FileCouldNotBeReadProps { } export const FileCouldNotBeRead: FC = ({ error, loaded }) => { - const message = error.body.message; + const message = error?.body?.message || ''; return ( = ({ error, loaded }; export const Explanation: FC<{ error: ErrorResponse }> = ({ error }) => { - if (!error.body.attributes?.body?.error?.suppressed?.length) { + if (!error?.body?.attributes?.body?.error?.suppressed?.length) { return null; } const reason: string = error.body.attributes.body.error.suppressed[0].reason; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts index 6f670359586b7c..0f0036a7c46164 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/index.ts @@ -10,4 +10,6 @@ export { processResults, readFile, reduceData, + getMaxBytes, + getMaxBytesFormatted, } from './utils'; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts index 5048065ae60fa8..0d2016b71ed837 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/utils/utils.ts @@ -5,8 +5,14 @@ */ import { isEqual } from 'lodash'; +import numeral from '@elastic/numeral'; import { ml } from '../../../../services/ml_api_service'; import { AnalysisResult, InputOverrides } from '../../../../../../common/types/file_datavisualizer'; +import { + ABSOLUTE_MAX_BYTES, + FILE_SIZE_DISPLAY_FORMAT, +} from '../../../../../../common/constants/file_datavisualizer'; +import { getMlConfig } from '../../../../util/dependency_cache'; const DEFAULT_LINES_TO_SAMPLE = 1000; @@ -54,6 +60,15 @@ export function reduceData(data: string, mb: number) { return data.length >= size ? data.slice(0, size) : data; } +export function getMaxBytes() { + const maxBytes = getMlConfig().file_data_visualizer.max_file_size_bytes; + return maxBytes < ABSOLUTE_MAX_BYTES ? maxBytes : ABSOLUTE_MAX_BYTES; +} + +export function getMaxBytesFormatted() { + return numeral(getMaxBytes()).format(FILE_SIZE_DISPLAY_FORMAT); +} + export function createUrlOverrides(overrides: InputOverrides, originalSettings: InputOverrides) { const formattedOverrides: InputOverrides = {}; for (const o in overrideDefaults) { diff --git a/x-pack/plugins/ml/public/application/util/dependency_cache.ts b/x-pack/plugins/ml/public/application/util/dependency_cache.ts index d5605d3bca65f5..934a0a5e9ae3af 100644 --- a/x-pack/plugins/ml/public/application/util/dependency_cache.ts +++ b/x-pack/plugins/ml/public/application/util/dependency_cache.ts @@ -23,6 +23,7 @@ import { } from 'kibana/public'; import { SharePluginStart } from 'src/plugins/share/public'; import { SecurityPluginSetup } from '../../../../security/public'; +import { MlConfigType } from '../../../common/types/ml_config'; export interface DependencyCache { timefilter: DataPublicPluginSetup['query']['timefilter'] | null; @@ -42,6 +43,7 @@ export interface DependencyCache { security: SecurityPluginSetup | null; i18n: I18nStart | null; urlGenerators: SharePluginStart['urlGenerators'] | null; + mlConfig: MlConfigType | null; } const cache: DependencyCache = { @@ -62,6 +64,7 @@ const cache: DependencyCache = { security: null, i18n: null, urlGenerators: null, + mlConfig: null, }; export function setDependencyCache(deps: Partial) { @@ -82,6 +85,7 @@ export function setDependencyCache(deps: Partial) { cache.security = deps.security || null; cache.i18n = deps.i18n || null; cache.urlGenerators = deps.urlGenerators || null; + cache.mlConfig = deps.mlConfig || null; } export function getTimefilter() { @@ -202,6 +206,13 @@ export function getGetUrlGenerator() { return cache.urlGenerators.getUrlGenerator; } +export function getMlConfig() { + if (cache.mlConfig === null) { + throw new Error("mlConfig hasn't been initialized"); + } + return cache.mlConfig; +} + export function clearCache() { console.log('clearing dependency cache'); // eslint-disable-line no-console Object.keys(cache).forEach(k => { diff --git a/x-pack/plugins/ml/public/index.ts b/x-pack/plugins/ml/public/index.ts index 8070f94a1264dd..4697496270edf2 100755 --- a/x-pack/plugins/ml/public/index.ts +++ b/x-pack/plugins/ml/public/index.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { PluginInitializer } from 'kibana/public'; +import { PluginInitializer, PluginInitializerContext } from 'kibana/public'; import './index.scss'; import { MlPlugin, @@ -19,6 +19,6 @@ export const plugin: PluginInitializer< MlPluginStart, MlSetupDependencies, MlStartDependencies -> = () => new MlPlugin(); +> = (context: PluginInitializerContext) => new MlPlugin(context); export { MlPluginSetup, MlPluginStart }; diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 2472c343d05104..b51be4d2486839 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -5,7 +5,13 @@ */ import { i18n } from '@kbn/i18n'; -import { Plugin, CoreStart, CoreSetup, AppMountParameters } from 'kibana/public'; +import { + Plugin, + CoreStart, + CoreSetup, + AppMountParameters, + PluginInitializerContext, +} from 'kibana/public'; import { ManagementSetup } from 'src/plugins/management/public'; import { SharePluginStart } from 'src/plugins/share/public'; import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; @@ -19,6 +25,7 @@ import { LicenseManagementUIPluginSetup } from '../../license_management/public' import { setDependencyCache } from './application/util/dependency_cache'; import { PLUGIN_ID, PLUGIN_ICON } from '../common/constants/app'; import { registerFeature } from './register_feature'; +import { MlConfigType } from '../common/types/ml_config'; export interface MlStartDependencies { data: DataPublicPluginStart; @@ -34,7 +41,10 @@ export interface MlSetupDependencies { } export class MlPlugin implements Plugin { + constructor(private readonly initializerContext: PluginInitializerContext) {} + setup(core: CoreSetup, pluginsSetup: MlSetupDependencies) { + const mlConfig = this.initializerContext.config.get(); core.application.register({ id: PLUGIN_ID, title: i18n.translate('xpack.ml.plugin.title', { @@ -57,6 +67,7 @@ export class MlPlugin implements Plugin { usageCollection: pluginsSetup.usageCollection, licenseManagement: pluginsSetup.licenseManagement, home: pluginsSetup.home, + mlConfig, }, { element: params.element, diff --git a/x-pack/plugins/ml/server/config.ts b/x-pack/plugins/ml/server/config.ts new file mode 100644 index 00000000000000..7cef6f17bbefb4 --- /dev/null +++ b/x-pack/plugins/ml/server/config.ts @@ -0,0 +1,15 @@ +/* + * 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 { PluginConfigDescriptor } from 'kibana/server'; +import { MlConfigType, configSchema } from '../common/types/ml_config'; + +export const config: PluginConfigDescriptor = { + exposeToBrowser: { + file_data_visualizer: true, + }, + schema: configSchema, +}; diff --git a/x-pack/plugins/ml/server/index.ts b/x-pack/plugins/ml/server/index.ts index 175c20bf49c947..6e638d647a3875 100644 --- a/x-pack/plugins/ml/server/index.ts +++ b/x-pack/plugins/ml/server/index.ts @@ -9,3 +9,5 @@ import { MlServerPlugin } from './plugin'; export { MlPluginSetup, MlPluginStart } from './plugin'; export const plugin = (ctx: PluginInitializerContext) => new MlServerPlugin(ctx); + +export { config } from './config'; diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 2ae29202ede43d..d07026c0883b8d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -9732,7 +9732,6 @@ "xpack.ml.datavisualizer.selector.dataVisualizerTitle": "データビジュアライザー", "xpack.ml.datavisualizer.selector.experimentalBadgeLabel": "実験的", "xpack.ml.datavisualizer.selector.experimentalBadgeTooltipLabel": "実験的機能。フィードバックをお待ちしています。", - "xpack.ml.datavisualizer.selector.importDataDescription": "ログファイルからデータをインポートします。最大 100 MB のファイルをアップロードできます。", "xpack.ml.datavisualizer.selector.importDataTitle": "データのインポート", "xpack.ml.datavisualizer.selector.selectIndexButtonLabel": "インデックスを選択", "xpack.ml.datavisualizer.selector.selectIndexPatternDescription": "既存の Elasticsearch インデックスのデータを可視化します。", @@ -9983,7 +9982,6 @@ "xpack.ml.fileDatavisualizer.welcomeContent.logFilesWithCommonFormatDescription": "タイムスタンプの一般的フォーマットのログファイル", "xpack.ml.fileDatavisualizer.welcomeContent.newlineDelimitedJsonDescription": "改行区切りの JSON", "xpack.ml.fileDatavisualizer.welcomeContent.supportedFileFormatDescription": "ファイルデータビジュアライザーはこれらのファイル形式をサポートしています:", - "xpack.ml.fileDatavisualizer.welcomeContent.uploadedFilesAllowedSizeDescription": "最大 100 MB のファイルをアップロードできます。", "xpack.ml.fileDatavisualizer.welcomeContent.visualizeDataFromLogFileDescription": "ファイルデータビジュアライザーは、ログファイルのフィールドとメトリックの理解に役立ちます。ファイルをアップロードして、データを分析し、 Elasticsearch インデックスにインポートするか選択できます。", "xpack.ml.fileDatavisualizer.welcomeContent.visualizeDataFromLogFileTitle": "ログファイルのデータを可視化 {experimentalBadge}", "xpack.ml.formatters.metricChangeDescription.actualSameAsTypicalDescription": "実際値が通常値と同じ", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7f5df15dec83ac..7e64ff6301fafc 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -9735,7 +9735,6 @@ "xpack.ml.datavisualizer.selector.dataVisualizerTitle": "数据可视化工具", "xpack.ml.datavisualizer.selector.experimentalBadgeLabel": "实验性", "xpack.ml.datavisualizer.selector.experimentalBadgeTooltipLabel": "实验功能。我们很乐意听取您的反馈意见。", - "xpack.ml.datavisualizer.selector.importDataDescription": "从日志文件导入数据。您可以上传最大 100 MB 的文件。", "xpack.ml.datavisualizer.selector.importDataTitle": "导入数据", "xpack.ml.datavisualizer.selector.selectIndexButtonLabel": "选择索引", "xpack.ml.datavisualizer.selector.selectIndexPatternDescription": "可视化现有 Elasticsearch 索引中的数据。", @@ -9986,7 +9985,6 @@ "xpack.ml.fileDatavisualizer.welcomeContent.logFilesWithCommonFormatDescription": "具有时间戳通用格式的日志文件", "xpack.ml.fileDatavisualizer.welcomeContent.newlineDelimitedJsonDescription": "换行符分隔的 JSON", "xpack.ml.fileDatavisualizer.welcomeContent.supportedFileFormatDescription": "File Data Visualizer 支持以下文件格式:", - "xpack.ml.fileDatavisualizer.welcomeContent.uploadedFilesAllowedSizeDescription": "您可以上传最大 100 MB 的文件。", "xpack.ml.fileDatavisualizer.welcomeContent.visualizeDataFromLogFileDescription": "File Data Visualizer 可帮助您理解日志文件中的字段和指标。上传文件、分析文件数据,然后选择是否将数据导入 Elasticsearch 索引。", "xpack.ml.fileDatavisualizer.welcomeContent.visualizeDataFromLogFileTitle": "可视化来自日志文件的数据 {experimentalBadge}", "xpack.ml.formatters.metricChangeDescription.actualSameAsTypicalDescription": "实际上与典型模式相同", From 67536e4b3cda294dae60e4f5e013e3afcfc4d1fd Mon Sep 17 00:00:00 2001 From: Aaron Caldwell Date: Wed, 8 Apr 2020 08:12:37 -0600 Subject: [PATCH 21/52] =?UTF-8?q?Fix=20issue=20with=20license=20not=20gett?= =?UTF-8?q?ing=20obtained=20&=20passed=20to=20server=E2=80=A6=20(#62883)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- x-pack/legacy/plugins/tilemap/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/legacy/plugins/tilemap/index.js b/x-pack/legacy/plugins/tilemap/index.js index 767a0fe72985e8..d4105519ee0a77 100644 --- a/x-pack/legacy/plugins/tilemap/index.js +++ b/x-pack/legacy/plugins/tilemap/index.js @@ -15,7 +15,7 @@ export const tilemap = kibana => { require: ['xpack_main', 'vis_type_vislib'], publicDir: resolve(__dirname, 'public'), uiExports: { - visTypeEnhancers: ['plugins/tilemap/vis_type_enhancers/update_tilemap_settings'], + hacks: ['plugins/tilemap/vis_type_enhancers/update_tilemap_settings'], }, init: function(server) { const thisPlugin = this; From d94d7cc7195870c9c7379062684c0adbf2a5e73b Mon Sep 17 00:00:00 2001 From: Poff Poffenberger Date: Wed, 8 Apr 2020 09:20:25 -0500 Subject: [PATCH 22/52] [Canvas] Fix Canvas-specific storybook after new platform changes (#61876) * Fix Canvas storybook webpack config * Temporarily disable workpad export example * Mock out lib/notify and download_workpad Co-authored-by: Elastic Machine --- .../canvas/.storybook/webpack.config.js | 27 ++++++++++++++++--- .../canvas/tasks/mocks/downloadWorkpad.js | 13 +++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 x-pack/legacy/plugins/canvas/tasks/mocks/downloadWorkpad.js diff --git a/x-pack/legacy/plugins/canvas/.storybook/webpack.config.js b/x-pack/legacy/plugins/canvas/.storybook/webpack.config.js index 85cb6d45c595da..cc74faeac6a964 100644 --- a/x-pack/legacy/plugins/canvas/.storybook/webpack.config.js +++ b/x-pack/legacy/plugins/canvas/.storybook/webpack.config.js @@ -6,6 +6,7 @@ const path = require('path'); const webpack = require('webpack'); +const { stringifyRequest } = require('loader-utils'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const { DLL_OUTPUT, KIBANA_ROOT } = require('./constants'); @@ -73,7 +74,20 @@ module.exports = async ({ config }) => { path: path.resolve(KIBANA_ROOT, 'src/optimize/postcss.config.js'), }, }, - { loader: 'sass-loader' }, + { + loader: 'sass-loader', + options: { + prependData(loaderContext) { + return `@import ${stringifyRequest( + loaderContext, + path.resolve(KIBANA_ROOT, 'src/legacy/ui/public/styles/_styling_constants.scss') + )};\n`; + }, + sassOptions: { + includePaths: [path.resolve(KIBANA_ROOT, 'node_modules')], + }, + }, + }, ], }); @@ -86,8 +100,9 @@ module.exports = async ({ config }) => { loader: 'css-loader', options: { importLoaders: 2, - modules: true, - localIdentName: '[name]__[local]___[hash:base64:5]', + modules: { + localIdentName: '[name]__[local]___[hash:base64:5]', + }, }, }, { @@ -159,7 +174,11 @@ module.exports = async ({ config }) => { // what require() calls it will execute within the bundle JSON.stringify({ type, modules: extensions[type] || [] }), ].join(''); - }) + }), + + // Mock out libs used by a few componets to avoid loading in kibana_legacy and platform + new webpack.NormalModuleReplacementPlugin(/lib\/notify/, path.resolve(__dirname, '../tasks/mocks/uiNotify')), + new webpack.NormalModuleReplacementPlugin(/lib\/download_workpad/, path.resolve(__dirname, '../tasks/mocks/downloadWorkpad')), ); // Tell Webpack about relevant extensions diff --git a/x-pack/legacy/plugins/canvas/tasks/mocks/downloadWorkpad.js b/x-pack/legacy/plugins/canvas/tasks/mocks/downloadWorkpad.js new file mode 100644 index 00000000000000..3571448c11aa98 --- /dev/null +++ b/x-pack/legacy/plugins/canvas/tasks/mocks/downloadWorkpad.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +export const downloadWorkpad = async workpadId => console.log(`Download workpad ${workpadId}`); + +export const downloadRenderedWorkpad = async renderedWorkpad => + console.log(`Download workpad ${renderedWorkpad.id}`); + +export const downloadRuntime = async basePath => console.log(`Download run time at ${basePath}`); + +export const downloadZippedRuntime = async data => console.log(`Downloading data ${data}`); From 1af82c709fe403cb6a3dccda5e29b0d4589a433f Mon Sep 17 00:00:00 2001 From: eyalkoren <41850454+eyalkoren@users.noreply.github.com> Date: Wed, 8 Apr 2020 17:34:04 +0300 Subject: [PATCH 23/52] [APM] Agent remote configuration: general settings descriptions (#62276) * Updates general remote config descriptions I removed `log_level` from here because it seems it doesn't fit at least the Java, Go and Node agents - see #61821, and it is already deactivated for most others (this doesn't have to be included in this PR though). * Update general_settings.ts * Restore log_level definition * Remove extra spaces Co-authored-by: Nathan L Smith --- .../setting_definitions/general_settings.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts index f1d11c5c70c2be..e73aed35e87f94 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/general_settings.ts @@ -63,7 +63,7 @@ export const generalSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.captureBody.description', { defaultMessage: - 'For transactions that are HTTP requests, the agent can optionally capture the request body (e.g. POST variables).' + 'For transactions that are HTTP requests, the agent can optionally capture the request body (e.g. POST variables).\nFor transactions that are initiated by receiving a message from a message broker, the agent can capture the textual message body.' } ), options: [ @@ -87,7 +87,7 @@ export const generalSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.captureHeaders.description', { defaultMessage: - 'If set to `true`, the agent will capture request and response headers, including cookies.\n\nNOTE: Setting this to `false` reduces network bandwidth, disk space and object allocations.' + 'If set to `true`, the agent will capture HTTP request and response headers (including cookies), as well as message headers/properties when using messaging frameworks (like Kafka).\n\nNOTE: Setting this to `false` reduces network bandwidth, disk space and object allocations.' } ), excludeAgents: ['js-base', 'rum-js', 'nodejs'] @@ -117,7 +117,7 @@ export const generalSettings: RawSettingDefinition[] = [ }), description: i18n.translate('xpack.apm.agentConfig.recording.description', { defaultMessage: - 'When recording, the agent instruments incoming HTTP requests, tracks errors, and collects and sends metrics. When inactive, the agent works as a noop, not collecting data and not communicating with the APM Server except for polling for updated configuration. As this is a reversible switch, agent threads are not being killed when inactivated, but they will be mostly idle in this state, so the overhead should be negligible. You can use this setting to dynamically control whether Elastic APM is enabled or disabled.' + 'When recording, the agent instruments incoming HTTP requests, tracks errors, and collects and sends metrics. When set to non-recording, the agent works as a noop, not collecting data and not communicating with the APM Server except for polling for updated configuration. As this is a reversible switch, agent threads are not being killed when set to non-recording, but they will be mostly idle in this state, so the overhead should be negligible. You can use this setting to dynamically control whether Elastic APM is enabled or disabled.' }), excludeAgents: ['nodejs'] }, @@ -215,7 +215,7 @@ export const generalSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.transactionSampleRate.description', { defaultMessage: - 'By default, the agent will sample every transaction (e.g. request to your service). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. We still record overall time and the result for unsampled transactions, but no context information, labels, or spans.' + 'By default, the agent will sample every transaction (e.g. request to your service). To reduce overhead and storage requirements, you can set the sample rate to a value between 0.0 and 1.0. We still record overall time and the result for unsampled transactions, but not context information, labels, or spans.' } ) } From 5d34697ea57f444ffa7ba5b1ff2e00f1e85ee0e1 Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Wed, 8 Apr 2020 10:46:06 -0400 Subject: [PATCH 24/52] [SIEM][Detection Engine] - Update list values in REST interfaces (#62320) Summary - #60022 - Follow up on #60171 - Modifies boolean filters to enum of "included" and "excluded" - Adds operator types of enum "match", "match_all", "list", and "exists" - Adds values properties to include those for "list" - DOES NOT FILTER ON THE VALUES JUST YET (That will be a follow on PR) --- .../routes/__mocks__/request_responses.ts | 28 ++-- .../routes/__mocks__/utils.ts | 28 ++-- .../routes/rules/validate.test.ts | 28 ++-- .../add_prepackaged_rules_schema.test.ts | 28 ++-- .../schemas/create_rules_schema.test.ts | 28 ++-- .../schemas/import_rules_schema.test.ts | 28 ++-- .../routes/schemas/patch_rules_schema.test.ts | 53 ++++--- .../schemas/response/__mocks__/utils.ts | 28 ++-- .../routes/schemas/response/schemas.ts | 37 +++-- .../routes/schemas/schemas.ts | 30 +++- .../schemas/types/lists_default_array.test.ts | 131 ++++++++++++++++-- .../schemas/types/lists_default_array.ts | 8 +- .../schemas/update_rules_schema.test.ts | 25 ++-- .../rules/get_export_all.test.ts | 28 ++-- .../rules/get_export_by_object_ids.test.ts | 56 +++++--- .../scripts/rules/patches/update_list.json | 27 ++-- .../rules/queries/query_with_list.json | 32 +++-- .../scripts/rules/updates/update_list.json | 27 ++-- .../signals/__mocks__/es_results.ts | 28 ++-- .../signals/build_bulk_body.test.ts | 112 +++++++++------ .../signals/build_rule.test.ts | 84 ++++++----- 21 files changed, 578 insertions(+), 296 deletions(-) diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts index 3b24b722f73561..77c1641d073c60 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts @@ -450,25 +450,31 @@ export const getResult = (): RuleAlertType => ({ lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/utils.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/utils.ts index 63fe51f2c81cdc..c929b0718207d6 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/utils.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/utils.ts @@ -141,25 +141,31 @@ export const getOutputRuleAlertForRest = (): Omit< lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/validate.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/validate.test.ts index 77e05796fbcbe4..7537401e5a3667 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/validate.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/validate.test.ts @@ -74,25 +74,31 @@ export const ruleOutput: RulesSchema = { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/add_prepackaged_rules_schema.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/add_prepackaged_rules_schema.test.ts index b10627d151fa29..8c741c937bf159 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/add_prepackaged_rules_schema.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/add_prepackaged_rules_schema.test.ts @@ -1561,25 +1561,31 @@ describe('add prepackaged rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/create_rules_schema.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/create_rules_schema.test.ts index 08bd01ee9a1a00..e56e8e5fe34d31 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/create_rules_schema.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/create_rules_schema.test.ts @@ -1526,25 +1526,31 @@ describe('create rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/import_rules_schema.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/import_rules_schema.test.ts index c8e5bb981f921b..40f7b19ea12b3e 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/import_rules_schema.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/import_rules_schema.test.ts @@ -1747,25 +1747,31 @@ describe('import rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/patch_rules_schema.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/patch_rules_schema.test.ts index 45b5028f392b9b..e01a8f40fcea4a 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/patch_rules_schema.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/patch_rules_schema.test.ts @@ -1229,25 +1229,31 @@ describe('patch rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -1263,25 +1269,28 @@ describe('patch rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts index 46cd1b653b5b44..d5ea950d163f57 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/__mocks__/utils.ts @@ -66,25 +66,31 @@ export const getBaseResponsePayload = (anchorDate: string = ANCHOR_DATE): RulesS lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/schemas.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/schemas.ts index 538c8f754fd6ea..faae1dde835452 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/schemas.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/response/schemas.ts @@ -154,13 +154,34 @@ export const note = t.string; // NOTE: Experimental list support not being shipped currently and behind a feature flag // TODO: Remove this comment once we lists have passed testing and is ready for the release -export const boolean_operator = t.keyof({ and: null, 'and not': null }); -export const list_type = t.keyof({ value: null }); // TODO: (LIST-FEATURE) Eventually this can include "list" when we support lists CRUD -export const list_value = t.exact(t.type({ name: t.string, type: list_type })); +export const list_field = t.string; +export const list_values_operator = t.keyof({ included: null, excluded: null }); +export const list_values_type = t.keyof({ match: null, match_all: null, list: null, exists: null }); +export const list_values = t.exact( + t.intersection([ + t.type({ + name: t.string, + }), + t.partial({ + id: t.string, + description: t.string, + created_at, + }), + ]) +); export const list = t.exact( - t.type({ - field: t.string, - boolean_operator, - values: t.array(list_value), - }) + t.intersection([ + t.type({ + field: t.string, + values_operator: list_values_operator, + values_type: list_values_type, + }), + t.partial({ values: t.array(list_values) }), + ]) ); +export const list_and = t.intersection([ + list, + t.partial({ + and: t.array(list), + }), +]); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/schemas.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/schemas.ts index 16e419f389f09e..c17ae8466a86c5 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/schemas.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/schemas.ts @@ -126,12 +126,28 @@ export const note = Joi.string(); // NOTE: Experimental list support not being shipped currently and behind a feature flag // TODO: (LIST-FEATURE) Remove this comment once we lists have passed testing and is ready for the release -export const boolean_operator = Joi.string().valid('and', 'and not'); -export const list_type = Joi.string().valid('value'); // TODO: (LIST-FEATURE) Eventually this can be "list" when we support list types -export const list_value = Joi.object({ name: Joi.string().required(), type: list_type.required() }); +export const list_field = Joi.string(); +export const list_values_operator = Joi.string().valid(['included', 'excluded']); +export const list_values_types = Joi.string().valid(['match', 'match_all', 'list', 'exists']); +export const list_values = Joi.object({ + name: Joi.string().required(), + id: Joi.string(), + description: Joi.string(), + created_at, +}); export const list = Joi.object({ - field: Joi.string().required(), - boolean_operator: boolean_operator.required(), - values: Joi.array().items(list_value), + field: list_field.required(), + values_operator: list_values_operator.required(), + values_type: list_values_types.required(), + values: Joi.when('values_type', { + is: 'exists', + then: Joi.forbidden(), + otherwise: Joi.array() + .items(list_values) + .required(), + }), +}); +export const list_and = Joi.object({ + and: Joi.array().items(list), }); -export const lists = Joi.array().items(list); +export const lists = Joi.array().items(list.concat(list_and)); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts index 14df1c3d8cd55a..e8a9c7b0886a19 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.test.ts @@ -23,25 +23,79 @@ describe('lists_default_array', () => { const payload = [ { field: 'source.ip', - boolean_operator: 'and', + values_operator: 'included', + values_type: 'exists', + }, + { + field: 'host.name', + values_operator: 'excluded', + values_type: 'match', values: [ { - name: '127.0.0.1', - type: 'value', + name: 'rock01', + }, + ], + and: [ + { + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, + ]; + const decoded = ListsDefaultArray.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + test('it should not validate an array of lists that includes a values_operator other than included or excluded', () => { + const payload = [ + { + field: 'source.ip', + values_operator: 'included', + values_type: 'exists', + }, + { + field: 'host.name', + values_operator: 'excluded', + values_type: 'exists', + }, + { + field: 'host.hostname', + values_operator: 'jibber jabber', + values_type: 'exists', + }, + ]; + const decoded = ListsDefaultArray.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "jibber jabber" supplied to "values_operator"', + ]); + expect(message.schema).toEqual({}); + }); + + // TODO - this scenario should never come up, as the values key is forbidden when values_type is "exists" in the incoming schema - need to find a good way to do this in io-ts + test('it will validate an array of lists that includes "values" when "values_type" is "exists"', () => { + const payload = [ { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'exists', values: [ { - name: 'rock01', - type: 'value', - }, - { - name: 'mothra', - type: 'value', + name: '127.0.0.1', }, ], }, @@ -53,15 +107,63 @@ describe('lists_default_array', () => { expect(message.schema).toEqual(payload); }); + // TODO - this scenario should never come up, as the values key is required when values_type is "match" in the incoming schema - need to find a good way to do this in io-ts + test('it will validate an array of lists that does not include "values" when "values_type" is "match"', () => { + const payload = [ + { + field: 'host.name', + values_operator: 'excluded', + values_type: 'match', + }, + ]; + const decoded = ListsDefaultArray.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + // TODO - this scenario should never come up, as the values key is required when values_type is "match_all" in the incoming schema - need to find a good way to do this in io-ts + test('it will validate an array of lists that does not include "values" when "values_type" is "match_all"', () => { + const payload = [ + { + field: 'host.name', + values_operator: 'excluded', + values_type: 'match_all', + }, + ]; + const decoded = ListsDefaultArray.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + // TODO - this scenario should never come up, as the values key is required when values_type is "list" in the incoming schema - need to find a good way to do this in io-ts + test('it should not validate an array of lists that does not include "values" when "values_type" is "list"', () => { + const payload = [ + { + field: 'host.name', + values_operator: 'excluded', + values_type: 'list', + }, + ]; + const decoded = ListsDefaultArray.decode(payload); + const message = pipe(decoded, foldLeftRight); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + test('it should not validate an array with a number', () => { const payload = [ { field: 'source.ip', - boolean_operator: 'and', + values_operator: 'included', + values_type: 'exists', values: [ { name: '127.0.0.1', - type: 'value', }, ], }, @@ -70,7 +172,10 @@ describe('lists_default_array', () => { const decoded = ListsDefaultArray.decode(payload); const message = pipe(decoded, foldLeftRight); - expect(getPaths(left(message.errors))).toEqual(['Invalid value "5" supplied to ""']); + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "5" supplied to ""', + 'Invalid value "5" supplied to ""', + ]); expect(message.schema).toEqual({}); }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.ts index 0e0944a11b4166..85a38e296494a1 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/types/lists_default_array.ts @@ -7,10 +7,10 @@ import * as t from 'io-ts'; import { Either } from 'fp-ts/lib/Either'; -import { list } from '../response/schemas'; +import { list_and as listAnd } from '../response/schemas'; export type ListsDefaultArrayC = t.Type; -type List = t.TypeOf; +type List = t.TypeOf; /** * Types the ListsDefaultArray as: @@ -18,9 +18,9 @@ type List = t.TypeOf; */ export const ListsDefaultArray: ListsDefaultArrayC = new t.Type( 'listsWithDefaultArray', - t.array(list).is, + t.array(listAnd).is, (input): Either => - input == null ? t.success([]) : t.array(list).decode(input), + input == null ? t.success([]) : t.array(listAnd).decode(input), t.identity ); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/update_rules_schema.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/update_rules_schema.test.ts index 6f6beea7fa5fbd..e8f9aad620ca01 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/update_rules_schema.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/schemas/update_rules_schema.test.ts @@ -1552,25 +1552,28 @@ describe('create rules schema', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_all.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_all.test.ts index ca6fb15e1fad90..dd004e3685b1d7 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_all.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_all.test.ts @@ -82,25 +82,31 @@ describe('getExportAll', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_by_object_ids.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_by_object_ids.test.ts index 175c906f7996cf..715cb23e8444a9 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_by_object_ids.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/get_export_by_object_ids.test.ts @@ -90,25 +90,31 @@ describe('get_export_by_object_ids', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -212,25 +218,31 @@ describe('get_export_by_object_ids', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/patches/update_list.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/patches/update_list.json index 8c86f4c85af1d8..4db8724db4e13d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/patches/update_list.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/patches/update_list.json @@ -3,21 +3,28 @@ "lists": [ { "field": "source.ip", - "boolean_operator": "and", - "values": [ - { - "name": "127.0.0.1", - "type": "value" - } - ] + "values_operator": "excluded", + "values_type": "exists" }, { "field": "host.name", - "boolean_operator": "and not", + "values_operator": "included", + "values_type": "match", "values": [ { - "name": "rock01", - "type": "value" + "name": "rock01" + } + ], + "and": [ + { + "field": "host.id", + "values_operator": "included", + "values_type": "match_all", + "values": [ + { + "name": "123456" + } + ] } ] } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/queries/query_with_list.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/queries/query_with_list.json index f6856eec59966d..997d03369a699a 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/queries/query_with_list.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/queries/query_with_list.json @@ -9,25 +9,31 @@ "lists": [ { "field": "source.ip", - "boolean_operator": "and", - "values": [ - { - "name": "127.0.0.1", - "type": "value" - } - ] + "values_operator": "included", + "values_type": "exists" }, { "field": "host.name", - "boolean_operator": "and not", + "values_operator": "excluded", + "values_type": "match", "values": [ { - "name": "rock01", - "type": "value" - }, + "name": "rock01" + } + ], + "and": [ { - "name": "mothra", - "type": "value" + "field": "host.id", + "values_operator": "included", + "values_type": "match_all", + "values": [ + { + "name": "123" + }, + { + "name": "678" + } + ] } ] } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/updates/update_list.json b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/updates/update_list.json index 6704c9676fa562..66b198974f5743 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/updates/update_list.json +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/rules/updates/update_list.json @@ -9,21 +9,28 @@ "lists": [ { "field": "source.ip", - "boolean_operator": "and", - "values": [ - { - "name": "127.0.0.1", - "type": "value" - } - ] + "values_operator": "excluded", + "values_type": "exists" }, { "field": "host.name", - "boolean_operator": "and not", + "values_operator": "included", + "values_type": "match", "values": [ { - "name": "rock01", - "type": "value" + "name": "rock01" + } + ], + "and": [ + { + "field": "host.id", + "values_operator": "included", + "values_type": "match_all", + "values": [ + { + "name": "123456" + } + ] } ] } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts index 6d7d7e93d7e6e0..7a211c5631da6f 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/__mocks__/es_results.ts @@ -47,25 +47,31 @@ export const sampleRuleAlertParams = ( lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts index f2c2b99bdac8c9..f1729e35ce1f07 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_bulk_body.test.ts @@ -93,25 +93,31 @@ describe('buildBulkBody', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -213,25 +219,31 @@ describe('buildBulkBody', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -331,25 +343,31 @@ describe('buildBulkBody', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -442,25 +460,31 @@ describe('buildBulkBody', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_rule.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_rule.test.ts index e360ceaf02f4dc..e5183ed4df7bd9 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_rule.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/build_rule.test.ts @@ -82,25 +82,31 @@ describe('buildRule', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -159,25 +165,31 @@ describe('buildRule', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, @@ -235,25 +247,31 @@ describe('buildRule', () => { lists: [ { field: 'source.ip', - boolean_operator: 'and', - values: [ - { - name: '127.0.0.1', - type: 'value', - }, - ], + values_operator: 'included', + values_type: 'exists', }, { field: 'host.name', - boolean_operator: 'and not', + values_operator: 'excluded', + values_type: 'match', values: [ { name: 'rock01', - type: 'value', }, + ], + and: [ { - name: 'mothra', - type: 'value', + field: 'host.id', + values_operator: 'included', + values_type: 'match_all', + values: [ + { + name: '123', + }, + { + name: '678', + }, + ], }, ], }, From 90e6f2ca6de48858e9faa8a802905abf3aa23e8f Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Wed, 8 Apr 2020 16:57:23 +0200 Subject: [PATCH 25/52] fixing multiple metrics (#62929) --- .../options/metrics_axes/__snapshots__/index.test.tsx.snap | 3 +++ .../public/components/options/metrics_axes/index.test.tsx | 1 + .../public/components/options/metrics_axes/index.tsx | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/__snapshots__/index.test.tsx.snap b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/__snapshots__/index.test.tsx.snap index 442bc826d51fcc..09e0753d592e52 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/__snapshots__/index.test.tsx.snap +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/__snapshots__/index.test.tsx.snap @@ -54,6 +54,7 @@ exports[`MetricsAxisOptions component should init with the default set of props } vis={ Object { + "serialize": [MockFunction], "setState": [MockFunction], "type": Object { "schemas": Object { @@ -126,6 +127,7 @@ exports[`MetricsAxisOptions component should init with the default set of props } vis={ Object { + "serialize": [MockFunction], "setState": [MockFunction], "type": Object { "schemas": Object { @@ -169,6 +171,7 @@ exports[`MetricsAxisOptions component should init with the default set of props setCategoryAxis={[Function]} vis={ Object { + "serialize": [MockFunction], "setState": [MockFunction], "type": Object { "schemas": Object { diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.test.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.test.tsx index a3f150e7188175..524792d1460fe3 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.test.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.test.tsx @@ -95,6 +95,7 @@ describe('MetricsAxisOptions component', () => { schemas: { metrics: [{ name: 'metric' }] }, }, setState: jest.fn(), + serialize: jest.fn(), }, stateParams: { valueAxes: [axis], diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.tsx index c7b4562b1087e4..114305d653dd1c 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/index.tsx @@ -299,7 +299,7 @@ function MetricsAxisOptions(props: ValidationVisOptionsProps) }, [stateParams.seriesParams]); useEffect(() => { - vis.setState({ type: visType } as any); + vis.setState({ ...vis.serialize(), type: visType }); }, [vis, visType]); return isTabSelected ? ( From 202366310483f51f614b3b1f2001917547803e2b Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 8 Apr 2020 10:03:37 -0600 Subject: [PATCH 26/52] [Maps] Add date-fields to metrics selection (#62629) Co-authored-by: Elastic Machine --- x-pack/plugins/maps/public/components/metric_editor.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/maps/public/components/metric_editor.js b/x-pack/plugins/maps/public/components/metric_editor.js index 530f402592b2ba..d1affe2f42190f 100644 --- a/x-pack/plugins/maps/public/components/metric_editor.js +++ b/x-pack/plugins/maps/public/components/metric_editor.js @@ -24,8 +24,13 @@ function filterFieldsForAgg(fields, aggType) { return getTermsFields(fields); } + const metricAggFieldTypes = ['number']; + if (aggType !== AGG_TYPE.SUM) { + metricAggFieldTypes.push('date'); + } + return fields.filter(field => { - return field.aggregatable && field.type === 'number'; + return field.aggregatable && metricAggFieldTypes.includes(field.type); }); } From 3457dde6f55c606a3f693ef75fe237ab07b56904 Mon Sep 17 00:00:00 2001 From: nnamdifrankie <56440728+nnamdifrankie@users.noreply.github.com> Date: Wed, 8 Apr 2020 12:10:00 -0400 Subject: [PATCH 27/52] [Endpoint] EMT-146: add host status info to the metadata API response (#62876) [Endpoint] EMT-146: add host status info to the metadata API response --- x-pack/plugins/endpoint/common/types.ts | 28 ++++++++++++++++++- .../endpoint/store/hosts/action.ts | 4 +-- .../endpoint/store/hosts/index.test.ts | 2 +- .../endpoint/store/hosts/middleware.test.ts | 2 +- .../store/hosts/mock_host_result_list.ts | 7 +++-- .../endpoint/store/hosts/reducer.ts | 4 +-- .../server/routes/alerts/details/handlers.ts | 2 +- .../endpoint/server/routes/metadata/index.ts | 15 +++++++--- .../server/routes/metadata/metadata.test.ts | 9 +++--- .../api_integration/apis/endpoint/metadata.ts | 17 +++++------ 10 files changed, 64 insertions(+), 26 deletions(-) diff --git a/x-pack/plugins/endpoint/common/types.ts b/x-pack/plugins/endpoint/common/types.ts index e8e1281a889253..a614526d92a3f9 100644 --- a/x-pack/plugins/endpoint/common/types.ts +++ b/x-pack/plugins/endpoint/common/types.ts @@ -86,7 +86,7 @@ export interface AlertResultList { export interface HostResultList { /* the hosts restricted by the page size */ - hosts: HostMetadata[]; + hosts: HostInfo[]; /* the total number of unique hosts in the index */ total: number; /* the page size requested */ @@ -252,6 +252,32 @@ export type AlertData = AlertEvent & AlertMetadata; export type AlertDetails = AlertData & AlertState; +/** + * The status of the host + */ +export enum HostStatus { + /** + * Default state of the host when no host information is present or host information cannot + * be retrieved. e.g. API error + */ + ERROR = 'error', + + /** + * Host is online as indicated by its checkin status during the last checkin window + */ + ONLINE = 'online', + + /** + * Host is offline as indicated by its checkin status during the last checkin window + */ + OFFLINE = 'offline', +} + +export type HostInfo = Immutable<{ + metadata: HostMetadata; + host_status: HostStatus; +}>; + export type HostMetadata = Immutable<{ '@timestamp': number; event: { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/action.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/action.ts index dee35aa3b895a2..4dafa68ddb647d 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/action.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/action.ts @@ -5,7 +5,7 @@ */ import { HostListPagination, ServerApiError } from '../../types'; -import { HostResultList, HostMetadata } from '../../../../../common/types'; +import { HostResultList, HostInfo } from '../../../../../common/types'; interface ServerReturnedHostList { type: 'serverReturnedHostList'; @@ -14,7 +14,7 @@ interface ServerReturnedHostList { interface ServerReturnedHostDetails { type: 'serverReturnedHostDetails'; - payload: HostMetadata; + payload: HostInfo; } interface ServerFailedToReturnHostDetails { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/index.test.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/index.test.ts index 9aff66cdfb75ef..6148934343635a 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/index.test.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/index.test.ts @@ -52,7 +52,7 @@ describe('HostList store concerns', () => { }); const currentState = store.getState(); - expect(currentState.hosts).toEqual(payload.hosts); + expect(currentState.hosts).toEqual(payload.hosts.map(hostInfo => hostInfo.metadata)); expect(currentState.pageSize).toEqual(payload.request_page_size); expect(currentState.pageIndex).toEqual(payload.request_page_index); expect(currentState.total).toEqual(payload.total); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/middleware.test.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/middleware.test.ts index a1973a38b65347..8c8578426aa294 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/middleware.test.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/middleware.test.ts @@ -58,6 +58,6 @@ describe('host list middleware', () => { paging_properties: [{ page_index: 0 }, { page_size: 10 }], }), }); - expect(listData(getState())).toEqual(apiResponse.hosts); + expect(listData(getState())).toEqual(apiResponse.hosts.map(hostInfo => hostInfo.metadata)); }); }); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/mock_host_result_list.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/mock_host_result_list.ts index db39ecf4483122..d4c2602e34387e 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/mock_host_result_list.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/mock_host_result_list.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { HostResultList } from '../../../../../common/types'; +import { HostResultList, HostStatus } from '../../../../../common/types'; import { EndpointDocGenerator } from '../../../../../common/generate_data'; export const mockHostResultList: (options?: { @@ -27,7 +27,10 @@ export const mockHostResultList: (options?: { const hosts = []; for (let index = 0; index < actualCountToReturn; index++) { const generator = new EndpointDocGenerator('seed'); - hosts.push(generator.generateHostMetadata()); + hosts.push({ + metadata: generator.generateHostMetadata(), + host_status: HostStatus.ERROR, + }); } const mock: HostResultList = { hosts, diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/reducer.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/reducer.ts index fd70317a9f37ee..ad6741dab7be7f 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/reducer.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/hosts/reducer.ts @@ -34,7 +34,7 @@ export const hostListReducer: Reducer = ( } = action.payload; return { ...state, - hosts, + hosts: hosts.map(hostInfo => hostInfo.metadata), total, pageSize, pageIndex, @@ -43,7 +43,7 @@ export const hostListReducer: Reducer = ( } else if (action.type === 'serverReturnedHostDetails') { return { ...state, - details: action.payload, + details: action.payload.metadata, }; } else if (action.type === 'serverFailedToReturnHostDetails') { return { diff --git a/x-pack/plugins/endpoint/server/routes/alerts/details/handlers.ts b/x-pack/plugins/endpoint/server/routes/alerts/details/handlers.ts index 725e362f91ec76..0f32deb4fad9b2 100644 --- a/x-pack/plugins/endpoint/server/routes/alerts/details/handlers.ts +++ b/x-pack/plugins/endpoint/server/routes/alerts/details/handlers.ts @@ -41,7 +41,7 @@ export const alertDetailsHandlerWrapper = function( id: response._id, ...response._source, state: { - host_metadata: currentHostInfo, + host_metadata: currentHostInfo?.metadata, }, next: await pagination.getNextUrl(), prev: await pagination.getPrevUrl(), diff --git a/x-pack/plugins/endpoint/server/routes/metadata/index.ts b/x-pack/plugins/endpoint/server/routes/metadata/index.ts index ef01db9af98c4b..450469914bc50c 100644 --- a/x-pack/plugins/endpoint/server/routes/metadata/index.ts +++ b/x-pack/plugins/endpoint/server/routes/metadata/index.ts @@ -8,7 +8,7 @@ import { IRouter, RequestHandlerContext } from 'kibana/server'; import { SearchResponse } from 'elasticsearch'; import { schema } from '@kbn/config-schema'; -import { HostMetadata, HostResultList } from '../../../common/types'; +import { HostInfo, HostMetadata, HostResultList, HostStatus } from '../../../common/types'; import { EndpointAppContext } from '../../types'; import { getESQueryHostMetadataByID, kibanaRequestToMetadataListESQuery } from './query_builders'; @@ -87,7 +87,7 @@ export function registerEndpointRoutes(router: IRouter, endpointAppContext: Endp export async function getHostData( context: RequestHandlerContext, id: string -): Promise { +): Promise { const query = getESQueryHostMetadataByID(id); const response = (await context.core.elasticsearch.dataClient.callAsCurrentUser( 'search', @@ -98,7 +98,7 @@ export async function getHostData( return undefined; } - return response.hits.hits[0]._source; + return enrichHostMetadata(response.hits.hits[0]._source); } function mapToHostResultList( @@ -113,7 +113,7 @@ function mapToHostResultList( hosts: searchResponse.hits.hits .map(response => response.inner_hits.most_recent.hits.hits) .flatMap(data => data as HitSource) - .map(entry => entry._source), + .map(entry => enrichHostMetadata(entry._source)), total: totalNumberOfHosts, }; } else { @@ -125,3 +125,10 @@ function mapToHostResultList( }; } } + +function enrichHostMetadata(hostMetadata: HostMetadata): HostInfo { + return { + metadata: hostMetadata, + host_status: HostStatus.ERROR, + }; +} diff --git a/x-pack/plugins/endpoint/server/routes/metadata/metadata.test.ts b/x-pack/plugins/endpoint/server/routes/metadata/metadata.test.ts index e0fd11e737e7dc..9bd251735cc044 100644 --- a/x-pack/plugins/endpoint/server/routes/metadata/metadata.test.ts +++ b/x-pack/plugins/endpoint/server/routes/metadata/metadata.test.ts @@ -18,7 +18,7 @@ import { httpServiceMock, loggingServiceMock, } from '../../../../../../src/core/server/mocks'; -import { HostMetadata, HostResultList } from '../../../common/types'; +import { HostInfo, HostMetadata, HostResultList, HostStatus } from '../../../common/types'; import { SearchResponse } from 'elasticsearch'; import { EndpointConfigSchema } from '../../config'; import * as data from '../../test_data/all_metadata_data.json'; @@ -230,7 +230,7 @@ describe('test endpoint route', () => { expect(message).toEqual('Endpoint Not Found'); }); - it('should return a single endpoint', async () => { + it('should return a single endpoint with status error', async () => { const mockRequest = httpServerMock.createKibanaRequest({ params: { id: (data as any).hits.hits[0]._id }, }); @@ -257,8 +257,9 @@ describe('test endpoint route', () => { expect(mockScopedClient.callAsCurrentUser).toBeCalled(); expect(routeConfig.options).toEqual({ authRequired: true }); expect(mockResponse.ok).toBeCalled(); - const result = mockResponse.ok.mock.calls[0][0]?.body as HostMetadata; - expect(result).toHaveProperty('endpoint'); + const result = mockResponse.ok.mock.calls[0][0]?.body as HostInfo; + expect(result).toHaveProperty('metadata.endpoint'); + expect(result.host_status).toEqual(HostStatus.ERROR); }); }); }); diff --git a/x-pack/test/api_integration/apis/endpoint/metadata.ts b/x-pack/test/api_integration/apis/endpoint/metadata.ts index ad495d45054041..887be6b85b100c 100644 --- a/x-pack/test/api_integration/apis/endpoint/metadata.ts +++ b/x-pack/test/api_integration/apis/endpoint/metadata.ts @@ -139,7 +139,7 @@ export default function({ getService }: FtrProviderContext) { .expect(200); expect(body.total).to.eql(2); const resultIps: string[] = [].concat( - ...body.hosts.map((metadata: Record) => metadata.host.ip) + ...body.hosts.map((hostInfo: Record) => hostInfo.metadata.host.ip) ); expect(resultIps).to.eql([ '10.192.213.130', @@ -164,7 +164,7 @@ export default function({ getService }: FtrProviderContext) { .expect(200); expect(body.total).to.eql(2); const resultOsVariantValue: Set = new Set( - body.hosts.map((metadata: Record) => metadata.host.os.variant) + body.hosts.map((hostInfo: Record) => hostInfo.metadata.host.os.variant) ); expect(Array.from(resultOsVariantValue)).to.eql([variantValue]); expect(body.hosts.length).to.eql(2); @@ -182,17 +182,17 @@ export default function({ getService }: FtrProviderContext) { }) .expect(200); expect(body.total).to.eql(1); - const resultIp: string = body.hosts[0].host.ip.filter( + const resultIp: string = body.hosts[0].metadata.host.ip.filter( (ip: string) => ip === targetEndpointIp ); expect(resultIp).to.eql([targetEndpointIp]); - expect(body.hosts[0].event.created).to.eql(1579881969541); + expect(body.hosts[0].metadata.event.created).to.eql(1579881969541); expect(body.hosts.length).to.eql(1); expect(body.request_page_size).to.eql(10); expect(body.request_page_index).to.eql(0); }); - it('metadata api should return the endpoint based on the elastic agent id', async () => { + it('metadata api should return the endpoint based on the elastic agent id, and status should be error', async () => { const targetEndpointId = 'fc0ff548-feba-41b6-8367-65e8790d0eaf'; const targetElasticAgentId = '023fa40c-411d-4188-a941-4147bfadd095'; const { body } = await supertest @@ -203,11 +203,12 @@ export default function({ getService }: FtrProviderContext) { }) .expect(200); expect(body.total).to.eql(1); - const resultHostId: string = body.hosts[0].host.id; - const resultElasticAgentId: string = body.hosts[0].elastic.agent.id; + const resultHostId: string = body.hosts[0].metadata.host.id; + const resultElasticAgentId: string = body.hosts[0].metadata.elastic.agent.id; expect(resultHostId).to.eql(targetEndpointId); expect(resultElasticAgentId).to.eql(targetElasticAgentId); - expect(body.hosts[0].event.created).to.eql(1579881969541); + expect(body.hosts[0].metadata.event.created).to.eql(1579881969541); + expect(body.hosts[0].host_status).to.eql('error'); expect(body.hosts.length).to.eql(1); expect(body.request_page_size).to.eql(10); expect(body.request_page_index).to.eql(0); From 8d8c41153afa90d53004ab872a4ea86ca30a7b37 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 8 Apr 2020 09:22:06 -0700 Subject: [PATCH 28/52] Reporting/fix listing pagination (#62881) * [Reporting] Fix report table pagination * update snapshot * nice little comment --- .../report_listing.test.tsx.snap | 524 ------------------ .../public/components/report_listing.tsx | 60 +- 2 files changed, 31 insertions(+), 553 deletions(-) diff --git a/x-pack/plugins/reporting/public/components/__snapshots__/report_listing.test.tsx.snap b/x-pack/plugins/reporting/public/components/__snapshots__/report_listing.test.tsx.snap index 75bc1f9eea696d..271d61c2242105 100644 --- a/x-pack/plugins/reporting/public/components/__snapshots__/report_listing.test.tsx.snap +++ b/x-pack/plugins/reporting/public/components/__snapshots__/report_listing.test.tsx.snap @@ -2,525 +2,6 @@ exports[`ReportListing Report job listing with some items 1`] = ` Array [ - -
- - -
- -
- - - -
-
- - - - -
- - -
-
- - - -
- -
- - - -
- - -
-
- -
- -
- -
- - -
- -
- -
- - -
- - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - -
- -
-
- - -
-
-
- - Report - -
-
-
- - Created at - -
-
-
- - Status - -
-
-
- - Actions - -
-
-
- - Loading reports - -
-
-
-
-
- -
- , { throw error; } } + + // Since the contents of the table have changed, we must reset the pagination + // and re-fetch. Otherwise, the Nth page we are on could be empty of jobs. + this.setState(() => ({ page: 0 }), this.fetchJobs); }; return ( @@ -476,34 +480,32 @@ class ReportListingUi extends Component { onSelectionChange: this.onSelectionChange, }; - const search = { - toolsRight: this.renderDeleteButton(), - }; - return ( - + + + {this.state.selectedJobs.length > 0 ? this.renderDeleteButton() : null} + ); } } From 18c3f75bfbcf95bc531b0c752c887a0e502b720a Mon Sep 17 00:00:00 2001 From: Phillip Burch Date: Wed, 8 Apr 2020 11:38:23 -0500 Subject: [PATCH 29/52] The theme doesn't exist on props when used from the alerting management screen (#62811) --- .../infra/public/components/alerting/metrics/expression.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx index 0903787dd05c41..2e43ede2480ce5 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/expression.tsx @@ -320,11 +320,11 @@ interface ExpressionRowProps { const StyledExpressionRow = euiStyled(EuiFlexGroup)` display: flex; flex-wrap: wrap; - margin: 0 -${props => props.theme.eui.euiSizeXS}; + margin: 0 -4px; `; const StyledExpression = euiStyled.div` - padding: 0 ${props => props.theme.eui.euiSizeXS}; + padding: 0 4px; `; export const ExpressionRow: React.FC = props => { From 730dcbf6382acb50b0c7664ca2b86fb22d5dba7a Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Wed, 8 Apr 2020 09:54:42 -0700 Subject: [PATCH 30/52] Implemented actions server API for supporting preconfigured connectors (#62382) * Implemented actions server API for supporting preconfigured connectors defined in kibana.yaml * Fixed type check * Fixed due to comments and extended functional tests * Fixed tests and renamed connectors * fixed jest tests * Fixed type checks * Fixed failing alert save * Fixed alert client tests * fixed type checks * Fixed language check error * Fixed jest tests * Added missing comments and docs * fixed due to comments * Fixed json config for preconfigured * fixed type check, reverted config * config experiment with json stringify * revert experiment * Removed the spaces from connector names in config --- .../__snapshots__/step1.test.tsx.snap | 1 + .../alerts/configuration/configuration.tsx | 2 +- .../alerts/configuration/step1.test.tsx | 2 + .../public/containers/case/configure/api.ts | 4 +- .../case/configure/use_connectors.tsx | 2 +- .../configure_cases/__mock__/index.tsx | 2 + .../routes/__mocks__/request_responses.ts | 2 + .../scripts/get_action_instances.sh | 2 +- x-pack/plugins/actions/README.md | 11 +- x-pack/plugins/actions/common/types.ts | 1 + .../actions/server/actions_client.mock.ts | 2 +- .../actions/server/actions_client.test.ts | 94 ++++++-- .../plugins/actions/server/actions_client.ts | 116 +++++---- x-pack/plugins/actions/server/config.test.ts | 38 +++ x-pack/plugins/actions/server/config.ts | 12 + x-pack/plugins/actions/server/index.ts | 8 +- ...configured_action_disabled_modification.ts | 24 ++ x-pack/plugins/actions/server/mocks.ts | 1 + x-pack/plugins/actions/server/plugin.test.ts | 33 ++- x-pack/plugins/actions/server/plugin.ts | 30 ++- .../plugins/actions/server/routes/delete.ts | 13 +- .../actions/server/routes/find.test.ts | 152 ------------ x-pack/plugins/actions/server/routes/find.ts | 95 -------- .../actions/server/routes/get_all.test.ts | 117 ++++++++++ .../plugins/actions/server/routes/get_all.ts | 42 ++++ x-pack/plugins/actions/server/routes/index.ts | 2 +- x-pack/plugins/actions/server/types.ts | 5 + .../alerting/server/alerts_client.test.ts | 1 + .../plugins/alerting/server/alerts_client.ts | 52 ++++- .../server/alerts_client_factory.test.ts | 2 + .../alerting/server/alerts_client_factory.ts | 5 + x-pack/plugins/alerting/server/plugin.ts | 1 + .../case/common/api/cases/configure.ts | 7 - .../api/cases/configure/get_connectors.ts | 10 +- .../builtin_action_types/email.test.tsx | 4 + .../builtin_action_types/webhook.test.tsx | 2 + .../lib/action_connector_api.test.ts | 25 +- .../application/lib/action_connector_api.ts | 24 +- .../action_form.test.tsx | 15 ++ .../action_connector_form/action_form.tsx | 2 +- .../connector_edit_flyout.test.tsx | 1 + .../connector_reducer.test.ts | 1 + .../actions_connectors_list.test.tsx | 125 ++++------ .../components/actions_connectors_list.tsx | 2 +- .../components/alerts_list.test.tsx | 28 +-- .../triggers_actions_ui/public/types.ts | 1 + .../alerting_api_integration/common/config.ts | 24 ++ .../actions/builtin_action_types/email.ts | 2 + .../actions/builtin_action_types/es_index.ts | 4 + .../actions/builtin_action_types/pagerduty.ts | 2 + .../builtin_action_types/server_log.ts | 2 + .../builtin_action_types/servicenow.ts | 2 + .../actions/builtin_action_types/slack.ts | 2 + .../actions/builtin_action_types/webhook.ts | 2 + .../tests/actions/create.ts | 1 + .../tests/actions/delete.ts | 30 +++ .../security_and_spaces/tests/actions/get.ts | 35 +++ .../tests/actions/{find.ts => get_all.ts} | 220 +++++++++--------- .../tests/actions/index.ts | 2 +- .../tests/actions/update.ts | 40 ++++ .../actions/builtin_action_types/es_index.ts | 4 + .../spaces_only/tests/actions/create.ts | 1 + .../spaces_only/tests/actions/delete.ts | 11 + .../spaces_only/tests/actions/find.ts | 92 -------- .../spaces_only/tests/actions/get.ts | 13 ++ .../spaces_only/tests/actions/get_all.ts | 116 +++++++++ .../spaces_only/tests/actions/index.ts | 2 +- .../tests/actions/type_not_enabled.ts | 2 + .../spaces_only/tests/actions/update.ts | 21 ++ 69 files changed, 1050 insertions(+), 701 deletions(-) create mode 100644 x-pack/plugins/actions/server/lib/errors/preconfigured_action_disabled_modification.ts delete mode 100644 x-pack/plugins/actions/server/routes/find.test.ts delete mode 100644 x-pack/plugins/actions/server/routes/find.ts create mode 100644 x-pack/plugins/actions/server/routes/get_all.test.ts create mode 100644 x-pack/plugins/actions/server/routes/get_all.ts rename x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/{find.ts => get_all.ts} (57%) delete mode 100644 x-pack/test/alerting_api_integration/spaces_only/tests/actions/find.ts create mode 100644 x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/__snapshots__/step1.test.tsx.snap b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/__snapshots__/step1.test.tsx.snap index 94d951a94fe29a..cb1081c0c14da6 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/__snapshots__/step1.test.tsx.snap +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/__snapshots__/step1.test.tsx.snap @@ -25,6 +25,7 @@ exports[`Step1 editing should allow for editing 1`] = ` "actionTypeId": "1abc", "config": Object {}, "id": "1", + "isPreconfigured": false, "name": "Testing", } } diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/configuration.tsx b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/configuration.tsx index 0933cd22db7c9f..eaa474ba177b18 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/configuration.tsx +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/configuration.tsx @@ -61,7 +61,7 @@ export const AlertsConfiguration: React.FC = ( async function fetchEmailActions() { const kibanaActions = await kfetch({ method: 'GET', - pathname: `/api/action/_find`, + pathname: `/api/action/_getAll`, }); const actions = kibanaActions.data.filter( diff --git a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/step1.test.tsx b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/step1.test.tsx index 650294c29e9a50..19a1a61d00a424 100644 --- a/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/step1.test.tsx +++ b/x-pack/legacy/plugins/monitoring/public/components/alerts/configuration/step1.test.tsx @@ -27,6 +27,7 @@ describe('Step1', () => { actionTypeId: '1abc', name: 'Testing', config: {}, + isPreconfigured: false, }, ]; const selectedEmailActionId = emailActions[0].id; @@ -83,6 +84,7 @@ describe('Step1', () => { actionTypeId: '.email', name: '', config: {}, + isPreconfigured: false, }, ], selectedEmailActionId: NEW_ACTION_ID, 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 ed47cdc62a1b67..c24081c777a968 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 @@ -6,7 +6,7 @@ import { isEmpty } from 'lodash/fp'; import { - CasesConnectorsFindResult, + Connector, CasesConfigurePatch, CasesConfigureResponse, CasesConfigureRequest, @@ -18,7 +18,7 @@ import { ApiProps } from '../types'; import { convertToCamelCase, decodeCaseConfigureResponse } from '../utils'; import { CaseConfigure } from './types'; -export const fetchConnectors = async ({ signal }: ApiProps): Promise => { +export const fetchConnectors = async ({ signal }: ApiProps): Promise => { const response = await KibanaServices.get().http.fetch( `${CASES_CONFIGURE_URL}/connectors/_find`, { diff --git a/x-pack/legacy/plugins/siem/public/containers/case/configure/use_connectors.tsx b/x-pack/legacy/plugins/siem/public/containers/case/configure/use_connectors.tsx index d31dcdbee2a146..30108ecf33874a 100644 --- a/x-pack/legacy/plugins/siem/public/containers/case/configure/use_connectors.tsx +++ b/x-pack/legacy/plugins/siem/public/containers/case/configure/use_connectors.tsx @@ -31,7 +31,7 @@ export const useConnectors = (): ReturnConnectors => { const res = await fetchConnectors({ signal: abortCtrl.signal }); if (!didCancel) { setLoading(false); - setConnectors(res.data); + setConnectors(res); } } catch (error) { if (!didCancel) { diff --git a/x-pack/legacy/plugins/siem/public/pages/case/components/configure_cases/__mock__/index.tsx b/x-pack/legacy/plugins/siem/public/pages/case/components/configure_cases/__mock__/index.tsx index a3df3664398ad2..135f0f2a7e26d7 100644 --- a/x-pack/legacy/plugins/siem/public/pages/case/components/configure_cases/__mock__/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/case/components/configure_cases/__mock__/index.tsx @@ -21,6 +21,7 @@ export const connectors: Connector[] = [ id: '123', actionTypeId: '.servicenow', name: 'My Connector', + isPreconfigured: false, config: { apiUrl: 'https://instance1.service-now.com', casesConfiguration: { @@ -48,6 +49,7 @@ export const connectors: Connector[] = [ id: '456', actionTypeId: '.servicenow', name: 'My Connector 2', + isPreconfigured: false, config: { apiUrl: 'https://instance2.service-now.com', casesConfiguration: { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts index 77c1641d073c60..e400360a5a5b25 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/__mocks__/request_responses.ts @@ -383,6 +383,7 @@ export const createActionResult = (): ActionResult => ({ actionTypeId: 'action-id-1', name: '', config: {}, + isPreconfigured: false, }); export const nonRuleAlert = () => ({ @@ -518,6 +519,7 @@ export const updateActionResult = (): ActionResult => ({ actionTypeId: 'action-id-1', name: '', config: {}, + isPreconfigured: false, }); export const getMockPrivilegesResult = () => ({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/get_action_instances.sh b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/get_action_instances.sh index 7804439ce07345..750c5574f4a729 100755 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/get_action_instances.sh +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/scripts/get_action_instances.sh @@ -13,5 +13,5 @@ set -e # https://github.com/elastic/kibana/blob/master/x-pack/legacy/plugins/actions/README.md#get-apiaction_find-find-actions curl -s -k \ -u ${ELASTICSEARCH_USERNAME}:${ELASTICSEARCH_PASSWORD} \ - -X GET ${KIBANA_URL}${SPACE_URL}/api/action/_find \ + -X GET ${KIBANA_URL}${SPACE_URL}/api/action/_getAll \ | jq . diff --git a/x-pack/plugins/actions/README.md b/x-pack/plugins/actions/README.md index d217d26e84836b..82cc09f5e9eca6 100644 --- a/x-pack/plugins/actions/README.md +++ b/x-pack/plugins/actions/README.md @@ -28,7 +28,7 @@ Table of Contents - [RESTful API](#restful-api) - [`POST /api/action`: Create action](#post-apiaction-create-action) - [`DELETE /api/action/{id}`: Delete action](#delete-apiactionid-delete-action) - - [`GET /api/action/_find`: Find actions](#get-apiactionfind-find-actions) + - [`GET /api/action/_getAll`: Get all actions](#get-apiaction-get-all-actions) - [`GET /api/action/{id}`: Get action](#get-apiactionid-get-action) - [`GET /api/action/types`: List action types](#get-apiactiontypes-list-action-types) - [`PUT /api/action/{id}`: Update action](#put-apiactionid-update-action) @@ -92,6 +92,7 @@ Built-In-Actions are configured using the _xpack.actions_ namespoace under _kiba | _xpack.actions._**enabled** | Feature toggle which enabled Actions in Kibana. | boolean | | _xpack.actions._**whitelistedHosts** | Which _hostnames_ are whitelisted for the Built-In-Action? This list should contain hostnames of every external service you wish to interact with using Webhooks, Email or any other built in Action. Note that you may use the string "\*" in place of a specific hostname to enable Kibana to target any URL, but keep in mind the potential use of such a feature to execute [SSRF](https://www.owasp.org/index.php/Server_Side_Request_Forgery) attacks from your server. | Array | | _xpack.actions._**enabledActionTypes** | A list of _actionTypes_ id's that are enabled. A "\*" may be used as an element to indicate all registered actionTypes should be enabled. The actionTypes registered for Kibana are `.server-log`, `.slack`, `.email`, `.index`, `.pagerduty`, `.webhook`. Default: `["*"]` | Array | +| _xpack.actions._**preconfigured** | A list of preconfigured actions. Default: `[]` | Array | #### Whitelisting Built-in Action Types @@ -174,11 +175,13 @@ Params: | -------- | --------------------------------------------- | ------ | | id | The id of the action you're trying to delete. | string | -### `GET /api/action/_find`: Find actions +### `GET /api/action/_getAll`: Get all actions -Params: +No parameters. -See the [saved objects API documentation for find](https://www.elastic.co/guide/en/kibana/master/saved-objects-api-find.html). All the properties are the same except that you cannot pass in `type`. +Return all actions from saved objects merged with predefined list. +Use the [saved objects API for find](https://www.elastic.co/guide/en/kibana/master/saved-objects-api-find.html) with the proprties: `type: 'action'` and `perPage: 10000`. +List of predefined actions should be set up in Kibana.yaml. ### `GET /api/action/{id}`: Get action diff --git a/x-pack/plugins/actions/common/types.ts b/x-pack/plugins/actions/common/types.ts index f3042a701211f7..61b338d47b9f50 100644 --- a/x-pack/plugins/actions/common/types.ts +++ b/x-pack/plugins/actions/common/types.ts @@ -20,4 +20,5 @@ export interface ActionResult { actionTypeId: string; name: string; config: Record; + isPreconfigured: boolean; } diff --git a/x-pack/plugins/actions/server/actions_client.mock.ts b/x-pack/plugins/actions/server/actions_client.mock.ts index 8a39d68f40bb6e..431bfb1e99c3bd 100644 --- a/x-pack/plugins/actions/server/actions_client.mock.ts +++ b/x-pack/plugins/actions/server/actions_client.mock.ts @@ -12,9 +12,9 @@ const createActionsClientMock = () => { const mocked: jest.Mocked = { create: jest.fn(), get: jest.fn(), - find: jest.fn(), delete: jest.fn(), update: jest.fn(), + getAll: jest.fn(), }; return mocked; }; diff --git a/x-pack/plugins/actions/server/actions_client.test.ts b/x-pack/plugins/actions/server/actions_client.test.ts index 0df07ad58fb9e3..955e1569380a5d 100644 --- a/x-pack/plugins/actions/server/actions_client.test.ts +++ b/x-pack/plugins/actions/server/actions_client.test.ts @@ -51,6 +51,7 @@ beforeEach(() => { savedObjectsClient, scopedClusterClient, defaultKibanaIndex, + preconfiguredActions: [], }); }); @@ -83,6 +84,7 @@ describe('create()', () => { }); expect(result).toEqual({ id: '1', + isPreconfigured: false, name: 'my name', actionTypeId: 'my-action-type', config: {}, @@ -178,6 +180,7 @@ describe('create()', () => { }); expect(result).toEqual({ id: '1', + isPreconfigured: false, name: 'my name', actionTypeId: 'my-action-type', config: { @@ -226,6 +229,7 @@ describe('create()', () => { savedObjectsClient, scopedClusterClient, defaultKibanaIndex, + preconfiguredActions: [], }); const savedObjectCreateResult = { @@ -305,6 +309,7 @@ describe('get()', () => { const result = await actionsClient.get({ id: '1' }); expect(result).toEqual({ id: '1', + isPreconfigured: false, }); expect(savedObjectsClient.get).toHaveBeenCalledTimes(1); expect(savedObjectsClient.get.mock.calls[0]).toMatchInlineSnapshot(` @@ -314,9 +319,44 @@ describe('get()', () => { ] `); }); + + test('return predefined action with id', async () => { + actionsClient = new ActionsClient({ + actionTypeRegistry, + savedObjectsClient, + scopedClusterClient, + defaultKibanaIndex, + preconfiguredActions: [ + { + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: { + test: 'test1', + }, + isPreconfigured: true, + name: 'test', + config: { + foo: 'bar', + }, + }, + ], + }); + + const result = await actionsClient.get({ id: 'testPreconfigured' }); + expect(result).toEqual({ + id: 'testPreconfigured', + actionTypeId: '.slack', + isPreconfigured: true, + name: 'test', + config: { + foo: 'bar', + }, + }); + expect(savedObjectsClient.get).not.toHaveBeenCalled(); + }); }); -describe('find()', () => { +describe('getAll()', () => { test('calls savedObjectsClient with parameters', async () => { const expectedResult = { total: 1, @@ -327,6 +367,7 @@ describe('find()', () => { id: '1', type: 'type', attributes: { + name: 'test', config: { foo: 'bar', }, @@ -339,31 +380,50 @@ describe('find()', () => { scopedClusterClient.callAsInternalUser.mockResolvedValueOnce({ aggregations: { '1': { doc_count: 6 }, + testPreconfigured: { doc_count: 2 }, }, }); - const result = await actionsClient.find({}); - expect(result).toEqual({ - total: 1, - perPage: 10, - page: 1, - data: [ + + actionsClient = new ActionsClient({ + actionTypeRegistry, + savedObjectsClient, + scopedClusterClient, + defaultKibanaIndex, + preconfiguredActions: [ { - id: '1', + id: 'testPreconfigured', + actionTypeId: '.slack', + secrets: {}, + isPreconfigured: true, + name: 'test', config: { foo: 'bar', }, - referencedByCount: 6, }, ], }); - expect(savedObjectsClient.find).toHaveBeenCalledTimes(1); - expect(savedObjectsClient.find.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "type": "action", + const result = await actionsClient.getAll(); + expect(result).toEqual([ + { + id: '1', + isPreconfigured: false, + name: 'test', + config: { + foo: 'bar', }, - ] - `); + referencedByCount: 6, + }, + { + id: 'testPreconfigured', + actionTypeId: '.slack', + isPreconfigured: true, + name: 'test', + config: { + foo: 'bar', + }, + referencedByCount: 2, + }, + ]); }); }); @@ -420,6 +480,7 @@ describe('update()', () => { }); expect(result).toEqual({ id: 'my-action', + isPreconfigured: false, actionTypeId: 'my-action-type', name: 'my name', config: {}, @@ -524,6 +585,7 @@ describe('update()', () => { }); expect(result).toEqual({ id: 'my-action', + isPreconfigured: false, actionTypeId: 'my-action-type', name: 'my name', config: { diff --git a/x-pack/plugins/actions/server/actions_client.ts b/x-pack/plugins/actions/server/actions_client.ts index 129829850f9c1b..8f73bfb31ea4de 100644 --- a/x-pack/plugins/actions/server/actions_client.ts +++ b/x-pack/plugins/actions/server/actions_client.ts @@ -11,9 +11,16 @@ import { SavedObject, } from 'src/core/server'; +import { i18n } from '@kbn/i18n'; import { ActionTypeRegistry } from './action_type_registry'; import { validateConfig, validateSecrets } from './lib'; -import { ActionResult, FindActionResult, RawAction } from './types'; +import { ActionResult, FindActionResult, RawAction, PreConfiguredAction } from './types'; +import { PreconfiguredActionDisabledModificationError } from './lib/errors/preconfigured_action_disabled_modification'; + +// We are assuming there won't be many actions. This is why we will load +// all the actions in advance and assume the total count to not go over 10000. +// We'll set this max setting assuming it's never reached. +export const MAX_ACTIONS_RETURNED = 10000; interface ActionUpdate extends SavedObjectAttributes { name: string; @@ -29,35 +36,12 @@ interface CreateOptions { action: Action; } -interface FindOptions { - options?: { - perPage?: number; - page?: number; - search?: string; - defaultSearchOperator?: 'AND' | 'OR'; - searchFields?: string[]; - sortField?: string; - hasReference?: { - type: string; - id: string; - }; - fields?: string[]; - filter?: string; - }; -} - -interface FindResult { - page: number; - perPage: number; - total: number; - data: FindActionResult[]; -} - interface ConstructorOptions { defaultKibanaIndex: string; scopedClusterClient: IScopedClusterClient; actionTypeRegistry: ActionTypeRegistry; savedObjectsClient: SavedObjectsClientContract; + preconfiguredActions: PreConfiguredAction[]; } interface UpdateOptions { @@ -70,17 +54,20 @@ export class ActionsClient { private readonly scopedClusterClient: IScopedClusterClient; private readonly savedObjectsClient: SavedObjectsClientContract; private readonly actionTypeRegistry: ActionTypeRegistry; + private readonly preconfiguredActions: PreConfiguredAction[]; constructor({ actionTypeRegistry, defaultKibanaIndex, scopedClusterClient, savedObjectsClient, + preconfiguredActions, }: ConstructorOptions) { this.actionTypeRegistry = actionTypeRegistry; this.savedObjectsClient = savedObjectsClient; this.scopedClusterClient = scopedClusterClient; this.defaultKibanaIndex = defaultKibanaIndex; + this.preconfiguredActions = preconfiguredActions; } /** @@ -106,6 +93,7 @@ export class ActionsClient { actionTypeId: result.attributes.actionTypeId, name: result.attributes.name, config: result.attributes.config, + isPreconfigured: false, }; } @@ -113,6 +101,20 @@ export class ActionsClient { * Update action */ public async update({ id, action }: UpdateOptions): Promise { + if ( + this.preconfiguredActions.find(preconfiguredAction => preconfiguredAction.id === id) !== + undefined + ) { + throw new PreconfiguredActionDisabledModificationError( + i18n.translate('xpack.actions.serverSideErrors.predefinedActionUpdateDisabled', { + defaultMessage: 'Preconfigured action {id} is not allowed to update.', + values: { + id, + }, + }), + 'update' + ); + } const existingObject = await this.savedObjectsClient.get('action', id); const { actionTypeId } = existingObject.attributes; const { name, config, secrets } = action; @@ -134,6 +136,7 @@ export class ActionsClient { actionTypeId: result.attributes.actionTypeId as string, name: result.attributes.name as string, config: result.attributes.config as Record, + isPreconfigured: false, }; } @@ -141,6 +144,18 @@ export class ActionsClient { * Get an action */ public async get({ id }: { id: string }): Promise { + const preconfiguredActionsList = this.preconfiguredActions.find( + preconfiguredAction => preconfiguredAction.id === id + ); + if (preconfiguredActionsList !== undefined) { + return { + id, + actionTypeId: preconfiguredActionsList.actionTypeId, + name: preconfiguredActionsList.name, + config: preconfiguredActionsList.config, + isPreconfigured: true, + }; + } const result = await this.savedObjectsClient.get('action', id); return { @@ -148,36 +163,56 @@ export class ActionsClient { actionTypeId: result.attributes.actionTypeId, name: result.attributes.name, config: result.attributes.config, + isPreconfigured: false, }; } /** - * Find actions + * Get all actions with preconfigured list */ - public async find({ options = {} }: FindOptions): Promise { - const findResult = await this.savedObjectsClient.find({ - ...options, - type: 'action', - }); + public async getAll(): Promise { + const savedObjectsActions = ( + await this.savedObjectsClient.find({ + perPage: MAX_ACTIONS_RETURNED, + type: 'action', + }) + ).saved_objects.map(actionFromSavedObject); - const data = await injectExtraFindData( + const mergedResult = [ + ...savedObjectsActions, + ...this.preconfiguredActions.map(preconfiguredAction => ({ + id: preconfiguredAction.id, + actionTypeId: preconfiguredAction.actionTypeId, + name: preconfiguredAction.name, + config: preconfiguredAction.config, + isPreconfigured: true, + })), + ].sort((a, b) => a.name.localeCompare(b.name)); + return await injectExtraFindData( this.defaultKibanaIndex, this.scopedClusterClient, - findResult.saved_objects.map(actionFromSavedObject) + mergedResult ); - - return { - page: findResult.page, - perPage: findResult.per_page, - total: findResult.total, - data, - }; } /** * Delete action */ public async delete({ id }: { id: string }) { + if ( + this.preconfiguredActions.find(preconfiguredAction => preconfiguredAction.id === id) !== + undefined + ) { + throw new PreconfiguredActionDisabledModificationError( + i18n.translate('xpack.actions.serverSideErrors.predefinedActionDeleteDisabled', { + defaultMessage: 'Preconfigured action {id} is not allowed to delete.', + values: { + id, + }, + }), + 'delete' + ); + } return await this.savedObjectsClient.delete('action', id); } } @@ -186,6 +221,7 @@ function actionFromSavedObject(savedObject: SavedObject): ActionResul return { id: savedObject.id, ...savedObject.attributes, + isPreconfigured: false, }; } diff --git a/x-pack/plugins/actions/server/config.test.ts b/x-pack/plugins/actions/server/config.test.ts index 67b7553c4a7361..51e87dbd75b48d 100644 --- a/x-pack/plugins/actions/server/config.test.ts +++ b/x-pack/plugins/actions/server/config.test.ts @@ -14,6 +14,44 @@ describe('config validation', () => { "enabledActionTypes": Array [ "*", ], + "preconfigured": Array [], + "whitelistedHosts": Array [ + "*", + ], + } + `); + }); + + test('action with preconfigured actions', () => { + const config: Record = { + preconfigured: [ + { + id: 'my-slack1', + actionTypeId: '.slack', + name: 'Slack #xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + }, + ], + }; + expect(configSchema.validate(config)).toMatchInlineSnapshot(` + Object { + "enabled": true, + "enabledActionTypes": Array [ + "*", + ], + "preconfigured": Array [ + Object { + "actionTypeId": ".slack", + "config": Object { + "webhookUrl": "https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz", + }, + "id": "my-slack1", + "name": "Slack #xyz", + "secrets": Object {}, + }, + ], "whitelistedHosts": Array [ "*", ], diff --git a/x-pack/plugins/actions/server/config.ts b/x-pack/plugins/actions/server/config.ts index 9e4795be6c2082..1f04efd1941b4b 100644 --- a/x-pack/plugins/actions/server/config.ts +++ b/x-pack/plugins/actions/server/config.ts @@ -21,6 +21,18 @@ export const configSchema = schema.object({ defaultValue: [WhitelistedHosts.Any], } ), + preconfigured: schema.arrayOf( + schema.object({ + id: schema.string({ minLength: 1 }), + name: schema.string(), + actionTypeId: schema.string({ minLength: 1 }), + config: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), + secrets: schema.recordOf(schema.string(), schema.any(), { defaultValue: {} }), + }), + { + defaultValue: [], + } + ), }); export type ActionsConfig = TypeOf; diff --git a/x-pack/plugins/actions/server/index.ts b/x-pack/plugins/actions/server/index.ts index eee2ae352fe3d0..88553c314112f3 100644 --- a/x-pack/plugins/actions/server/index.ts +++ b/x-pack/plugins/actions/server/index.ts @@ -11,7 +11,13 @@ import { ActionsClient as ActionsClientClass } from './actions_client'; export type ActionsClient = PublicMethodsOf; -export { ActionsPlugin, ActionResult, ActionTypeExecutorOptions, ActionType } from './types'; +export { + ActionsPlugin, + ActionResult, + ActionTypeExecutorOptions, + ActionType, + PreConfiguredAction, +} from './types'; export { PluginSetupContract, PluginStartContract } from './plugin'; export const plugin = (initContext: PluginInitializerContext) => new ActionsPlugin(initContext); diff --git a/x-pack/plugins/actions/server/lib/errors/preconfigured_action_disabled_modification.ts b/x-pack/plugins/actions/server/lib/errors/preconfigured_action_disabled_modification.ts new file mode 100644 index 00000000000000..884353e132b9c5 --- /dev/null +++ b/x-pack/plugins/actions/server/lib/errors/preconfigured_action_disabled_modification.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { KibanaResponseFactory } from '../../../../../../src/core/server'; +import { ErrorThatHandlesItsOwnResponse } from './types'; + +export type PreconfiguredActionDisabledFrom = 'update' | 'delete'; + +export class PreconfiguredActionDisabledModificationError extends Error + implements ErrorThatHandlesItsOwnResponse { + public readonly disabledFrom: PreconfiguredActionDisabledFrom; + + constructor(message: string, disabledFrom: PreconfiguredActionDisabledFrom) { + super(message); + this.disabledFrom = disabledFrom; + } + + public sendResponse(res: KibanaResponseFactory) { + return res.badRequest({ body: { message: this.message } }); + } +} diff --git a/x-pack/plugins/actions/server/mocks.ts b/x-pack/plugins/actions/server/mocks.ts index 75396f2aad897d..bc4268bb698723 100644 --- a/x-pack/plugins/actions/server/mocks.ts +++ b/x-pack/plugins/actions/server/mocks.ts @@ -21,6 +21,7 @@ const createStartMock = () => { execute: jest.fn(), isActionTypeEnabled: jest.fn(), getActionsClientWithRequest: jest.fn().mockResolvedValue(actionsClientMock.create()), + preconfiguredActions: [], }; return mock; }; diff --git a/x-pack/plugins/actions/server/plugin.test.ts b/x-pack/plugins/actions/server/plugin.test.ts index 383f84590fbc6d..6215b08df81d4f 100644 --- a/x-pack/plugins/actions/server/plugin.test.ts +++ b/x-pack/plugins/actions/server/plugin.test.ts @@ -31,7 +31,34 @@ describe('Actions Plugin', () => { let pluginsSetup: jest.Mocked; beforeEach(() => { - context = coreMock.createPluginInitializerContext(); + context = coreMock.createPluginInitializerContext({ + preconfigured: [ + { + id: 'my-slack1', + actionTypeId: '.slack', + name: 'Slack #xyz', + description: 'Send a message to the #xyz channel', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + }, + { + id: 'custom-system-abc-connector', + actionTypeId: 'system-abc-action-type', + description: 'Send a notification to system ABC', + name: 'System ABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + secrets: { + xyzSecret1: 'credential1', + xyzSecret2: 'credential2', + }, + }, + ], + }); plugin = new ActionsPlugin(context); coreSetup = coreMock.createSetup(); @@ -160,7 +187,9 @@ describe('Actions Plugin', () => { let pluginsStart: jest.Mocked; beforeEach(() => { - const context = coreMock.createPluginInitializerContext(); + const context = coreMock.createPluginInitializerContext({ + preconfigured: [], + }); plugin = new ActionsPlugin(context); coreSetup = coreMock.createSetup(); coreStart = coreMock.createStart(); diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index ce31e62bc9b8e8..34c9e7aa9e8b8f 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -30,7 +30,7 @@ import { LICENSE_TYPE } from '../../licensing/common/types'; import { SpacesPluginSetup, SpacesServiceSetup } from '../../spaces/server'; import { ActionsConfig } from './config'; -import { Services, ActionType } from './types'; +import { Services, ActionType, PreConfiguredAction } from './types'; import { ActionExecutor, TaskRunnerFactory, LicenseState, ILicenseState } from './lib'; import { ActionsClient } from './actions_client'; import { ActionTypeRegistry } from './action_type_registry'; @@ -44,7 +44,7 @@ import { getActionsConfigurationUtilities } from './actions_config'; import { createActionRoute, deleteActionRoute, - findActionRoute, + getAllActionRoute, getActionRoute, updateActionRoute, listActionTypesRoute, @@ -67,6 +67,7 @@ export interface PluginStartContract { isActionTypeEnabled(id: string): boolean; execute(options: ExecuteOptions): Promise; getActionsClientWithRequest(request: KibanaRequest): Promise>; + preconfiguredActions: PreConfiguredAction[]; } export interface ActionsPluginsSetup { @@ -97,6 +98,7 @@ export class ActionsPlugin implements Plugin, Plugi private eventLogger?: IEventLogger; private isESOUsingEphemeralEncryptionKey?: boolean; private readonly telemetryLogger: Logger; + private readonly preconfiguredActions: PreConfiguredAction[]; constructor(initContext: PluginInitializerContext) { this.config = initContext.config @@ -113,6 +115,7 @@ export class ActionsPlugin implements Plugin, Plugi this.logger = initContext.logger.get('actions'); this.telemetryLogger = initContext.logger.get('telemetry'); + this.preconfiguredActions = []; } public async setup(core: CoreSetup, plugins: ActionsPluginsSetup): Promise { @@ -151,8 +154,14 @@ export class ActionsPlugin implements Plugin, Plugi // get executions count const taskRunnerFactory = new TaskRunnerFactory(actionExecutor); - const actionsConfigUtils = getActionsConfigurationUtilities( - (await this.config) as ActionsConfig + const actionsConfig = (await this.config) as ActionsConfig; + const actionsConfigUtils = getActionsConfigurationUtilities(actionsConfig); + + this.preconfiguredActions.push( + ...actionsConfig.preconfigured.map( + preconfiguredAction => + ({ ...preconfiguredAction, isPreconfigured: true } as PreConfiguredAction) + ) ); const actionTypeRegistry = new ActionTypeRegistry({ taskRunnerFactory, @@ -197,7 +206,7 @@ export class ActionsPlugin implements Plugin, Plugi createActionRoute(router, this.licenseState); deleteActionRoute(router, this.licenseState); getActionRoute(router, this.licenseState); - findActionRoute(router, this.licenseState); + getAllActionRoute(router, this.licenseState); updateActionRoute(router, this.licenseState); listActionTypesRoute(router, this.licenseState); executeActionRoute(router, this.licenseState, actionExecutor); @@ -226,6 +235,7 @@ export class ActionsPlugin implements Plugin, Plugi kibanaIndex, adminClient, isESOUsingEphemeralEncryptionKey, + preconfiguredActions, } = this; actionExecutor!.initialize({ @@ -271,8 +281,10 @@ export class ActionsPlugin implements Plugin, Plugi actionTypeRegistry: actionTypeRegistry!, defaultKibanaIndex: await kibanaIndex, scopedClusterClient: adminClient!.asScoped(request), + preconfiguredActions, }); }, + preconfiguredActions, }; } @@ -289,7 +301,12 @@ export class ActionsPlugin implements Plugin, Plugi private createRouteHandlerContext = ( defaultKibanaIndex: string ): IContextProvider, 'actions'> => { - const { actionTypeRegistry, adminClient, isESOUsingEphemeralEncryptionKey } = this; + const { + actionTypeRegistry, + adminClient, + isESOUsingEphemeralEncryptionKey, + preconfiguredActions, + } = this; return async function actionsRouteHandlerContext(context, request) { return { getActionsClient: () => { @@ -303,6 +320,7 @@ export class ActionsPlugin implements Plugin, Plugi actionTypeRegistry: actionTypeRegistry!, defaultKibanaIndex, scopedClusterClient: adminClient!.asScoped(request), + preconfiguredActions, }); }, listTypes: actionTypeRegistry!.list.bind(actionTypeRegistry!), diff --git a/x-pack/plugins/actions/server/routes/delete.ts b/x-pack/plugins/actions/server/routes/delete.ts index cddebb3a8e31e3..ffd1f0faabbabc 100644 --- a/x-pack/plugins/actions/server/routes/delete.ts +++ b/x-pack/plugins/actions/server/routes/delete.ts @@ -17,7 +17,7 @@ import { IKibanaResponse, KibanaResponseFactory, } from 'kibana/server'; -import { ILicenseState, verifyApiAccess } from '../lib'; +import { ILicenseState, verifyApiAccess, isErrorThatHandlesItsOwnResponse } from '../lib'; import { BASE_ACTION_API_PATH } from '../../common'; const paramSchema = schema.object({ @@ -46,8 +46,15 @@ export const deleteActionRoute = (router: IRouter, licenseState: ILicenseState) } const actionsClient = context.actions.getActionsClient(); const { id } = req.params; - await actionsClient.delete({ id }); - return res.noContent(); + try { + await actionsClient.delete({ id }); + return res.noContent(); + } catch (e) { + if (isErrorThatHandlesItsOwnResponse(e)) { + return e.sendResponse(res); + } + throw e; + } }) ); }; diff --git a/x-pack/plugins/actions/server/routes/find.test.ts b/x-pack/plugins/actions/server/routes/find.test.ts deleted file mode 100644 index 1b130421fa71fa..00000000000000 --- a/x-pack/plugins/actions/server/routes/find.test.ts +++ /dev/null @@ -1,152 +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 { findActionRoute } from './find'; -import { mockRouter, RouterMock } from '../../../../../src/core/server/http/router/router.mock'; -import { licenseStateMock } from '../lib/license_state.mock'; -import { verifyApiAccess } from '../lib'; -import { mockHandlerArguments } from './_mock_handler_arguments'; - -jest.mock('../lib/verify_api_access.ts', () => ({ - verifyApiAccess: jest.fn(), -})); - -beforeEach(() => { - jest.resetAllMocks(); -}); - -describe('findActionRoute', () => { - it('finds actions with proper parameters', async () => { - const licenseState = licenseStateMock.create(); - const router: RouterMock = mockRouter.create(); - - findActionRoute(router, licenseState); - - const [config, handler] = router.get.mock.calls[0]; - - expect(config.path).toMatchInlineSnapshot(`"/api/action/_find"`); - expect(config.options).toMatchInlineSnapshot(` - Object { - "tags": Array [ - "access:actions-read", - ], - } - `); - - const findResult = { - page: 1, - perPage: 1, - total: 0, - data: [], - }; - const actionsClient = { - find: jest.fn().mockResolvedValueOnce(findResult), - }; - - const [context, req, res] = mockHandlerArguments( - { actionsClient }, - { - query: { - per_page: 1, - page: 1, - default_search_operator: 'OR', - }, - }, - ['ok'] - ); - - expect(await handler(context, req, res)).toMatchInlineSnapshot(` - Object { - "body": Object { - "data": Array [], - "page": 1, - "perPage": 1, - "total": 0, - }, - } - `); - - expect(actionsClient.find).toHaveBeenCalledTimes(1); - expect(actionsClient.find.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "options": Object { - "defaultSearchOperator": "OR", - "fields": undefined, - "filter": undefined, - "page": 1, - "perPage": 1, - "search": undefined, - "sortField": undefined, - "sortOrder": undefined, - }, - }, - ] - `); - - expect(res.ok).toHaveBeenCalledWith({ - body: findResult, - }); - }); - - it('ensures the license allows finding actions', async () => { - const licenseState = licenseStateMock.create(); - const router: RouterMock = mockRouter.create(); - - findActionRoute(router, licenseState); - - const [, handler] = router.get.mock.calls[0]; - - const actionsClient = { - find: jest.fn().mockResolvedValueOnce({ - page: 1, - perPage: 1, - total: 0, - data: [], - }), - }; - - const [context, req, res] = mockHandlerArguments(actionsClient, { - query: { - per_page: 1, - page: 1, - default_search_operator: 'OR', - }, - }); - - await handler(context, req, res); - - expect(verifyApiAccess).toHaveBeenCalledWith(licenseState); - }); - - it('ensures the license check prevents finding actions', async () => { - const licenseState = licenseStateMock.create(); - const router: RouterMock = mockRouter.create(); - - (verifyApiAccess as jest.Mock).mockImplementation(() => { - throw new Error('OMG'); - }); - - findActionRoute(router, licenseState); - - const [, handler] = router.get.mock.calls[0]; - - const [context, req, res] = mockHandlerArguments( - {}, - { - query: { - per_page: 1, - page: 1, - default_search_operator: 'OR', - }, - }, - ['ok'] - ); - expect(handler(context, req, res)).rejects.toMatchInlineSnapshot(`[Error: OMG]`); - - expect(verifyApiAccess).toHaveBeenCalledWith(licenseState); - }); -}); diff --git a/x-pack/plugins/actions/server/routes/find.ts b/x-pack/plugins/actions/server/routes/find.ts deleted file mode 100644 index 45b967629a2a85..00000000000000 --- a/x-pack/plugins/actions/server/routes/find.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { schema, TypeOf } from '@kbn/config-schema'; -import { - IRouter, - RequestHandlerContext, - KibanaRequest, - IKibanaResponse, - KibanaResponseFactory, -} from 'kibana/server'; -import { FindOptions } from '../../../alerting/server'; -import { ILicenseState, verifyApiAccess } from '../lib'; -import { BASE_ACTION_API_PATH } from '../../common'; - -// config definition -const querySchema = schema.object({ - per_page: schema.number({ defaultValue: 20, min: 0 }), - page: schema.number({ defaultValue: 1, min: 1 }), - search: schema.maybe(schema.string()), - default_search_operator: schema.oneOf([schema.literal('OR'), schema.literal('AND')], { - defaultValue: 'OR', - }), - search_fields: schema.maybe(schema.oneOf([schema.arrayOf(schema.string()), schema.string()])), - sort_field: schema.maybe(schema.string()), - sort_order: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])), - has_reference: schema.maybe( - // use nullable as maybe is currently broken - // in config-schema - schema.nullable( - schema.object({ - type: schema.string(), - id: schema.string(), - }) - ) - ), - fields: schema.maybe(schema.arrayOf(schema.string())), - filter: schema.maybe(schema.string()), -}); - -export const findActionRoute = (router: IRouter, licenseState: ILicenseState) => { - router.get( - { - path: `${BASE_ACTION_API_PATH}/_find`, - validate: { - query: querySchema, - }, - options: { - tags: ['access:actions-read'], - }, - }, - router.handleLegacyErrors(async function( - context: RequestHandlerContext, - req: KibanaRequest, any, any>, - res: KibanaResponseFactory - ): Promise> { - verifyApiAccess(licenseState); - if (!context.actions) { - return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' }); - } - const actionsClient = context.actions.getActionsClient(); - const query = req.query; - const options: FindOptions['options'] = { - perPage: query.per_page, - page: query.page, - search: query.search, - defaultSearchOperator: query.default_search_operator, - sortField: query.sort_field, - fields: query.fields, - filter: query.filter, - sortOrder: query.sort_order, - }; - - if (query.search_fields) { - options.searchFields = Array.isArray(query.search_fields) - ? query.search_fields - : [query.search_fields]; - } - - if (query.has_reference) { - options.hasReference = query.has_reference; - } - - const findResult = await actionsClient.find({ - options, - }); - return res.ok({ - body: findResult, - }); - }) - ); -}; diff --git a/x-pack/plugins/actions/server/routes/get_all.test.ts b/x-pack/plugins/actions/server/routes/get_all.test.ts new file mode 100644 index 00000000000000..6499427b8c1a53 --- /dev/null +++ b/x-pack/plugins/actions/server/routes/get_all.test.ts @@ -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 { getAllActionRoute } from './get_all'; +import { mockRouter, RouterMock } from '../../../../../src/core/server/http/router/router.mock'; +import { licenseStateMock } from '../lib/license_state.mock'; +import { verifyApiAccess } from '../lib'; +import { mockHandlerArguments } from './_mock_handler_arguments'; + +jest.mock('../lib/verify_api_access.ts', () => ({ + verifyApiAccess: jest.fn(), +})); + +beforeEach(() => { + jest.resetAllMocks(); +}); + +describe('getAllActionRoute', () => { + it('get all actions with proper parameters', async () => { + const licenseState = licenseStateMock.create(); + const router: RouterMock = mockRouter.create(); + + getAllActionRoute(router, licenseState); + + const [config, handler] = router.get.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/api/action/_getAll"`); + expect(config.options).toMatchInlineSnapshot(` + Object { + "tags": Array [ + "access:actions-read", + ], + } + `); + + const actionsClient = { + getAll: jest.fn().mockResolvedValueOnce([]), + }; + + const [context, req, res] = mockHandlerArguments({ actionsClient }, {}, ['ok']); + + expect(await handler(context, req, res)).toMatchInlineSnapshot(` + Object { + "body": Array [], + } + `); + + expect(actionsClient.getAll).toHaveBeenCalledTimes(1); + + expect(res.ok).toHaveBeenCalledWith({ + body: [], + }); + }); + + it('ensures the license allows getting all actions', async () => { + const licenseState = licenseStateMock.create(); + const router: RouterMock = mockRouter.create(); + + getAllActionRoute(router, licenseState); + + const [config, handler] = router.get.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/api/action/_getAll"`); + expect(config.options).toMatchInlineSnapshot(` + Object { + "tags": Array [ + "access:actions-read", + ], + } + `); + + const actionsClient = { + getAll: jest.fn().mockResolvedValueOnce([]), + }; + + const [context, req, res] = mockHandlerArguments({ actionsClient }, {}, ['ok']); + + await handler(context, req, res); + + expect(verifyApiAccess).toHaveBeenCalledWith(licenseState); + }); + + it('ensures the license check prevents getting all actions', async () => { + const licenseState = licenseStateMock.create(); + const router: RouterMock = mockRouter.create(); + + (verifyApiAccess as jest.Mock).mockImplementation(() => { + throw new Error('OMG'); + }); + + getAllActionRoute(router, licenseState); + + const [config, handler] = router.get.mock.calls[0]; + + expect(config.path).toMatchInlineSnapshot(`"/api/action/_getAll"`); + expect(config.options).toMatchInlineSnapshot(` + Object { + "tags": Array [ + "access:actions-read", + ], + } + `); + + const actionsClient = { + getAll: jest.fn().mockResolvedValueOnce([]), + }; + + const [context, req, res] = mockHandlerArguments({ actionsClient }, {}, ['ok']); + + expect(handler(context, req, res)).rejects.toMatchInlineSnapshot(`[Error: OMG]`); + + expect(verifyApiAccess).toHaveBeenCalledWith(licenseState); + }); +}); diff --git a/x-pack/plugins/actions/server/routes/get_all.ts b/x-pack/plugins/actions/server/routes/get_all.ts new file mode 100644 index 00000000000000..c70a13bc01c9f8 --- /dev/null +++ b/x-pack/plugins/actions/server/routes/get_all.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + IRouter, + RequestHandlerContext, + KibanaRequest, + IKibanaResponse, + KibanaResponseFactory, +} from 'kibana/server'; +import { ILicenseState, verifyApiAccess } from '../lib'; +import { BASE_ACTION_API_PATH } from '../../common'; + +export const getAllActionRoute = (router: IRouter, licenseState: ILicenseState) => { + router.get( + { + path: `${BASE_ACTION_API_PATH}/_getAll`, + validate: {}, + options: { + tags: ['access:actions-read'], + }, + }, + router.handleLegacyErrors(async function( + context: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ): Promise> { + verifyApiAccess(licenseState); + if (!context.actions) { + return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' }); + } + const actionsClient = context.actions.getActionsClient(); + const result = await actionsClient.getAll(); + return res.ok({ + body: result, + }); + }) + ); +}; diff --git a/x-pack/plugins/actions/server/routes/index.ts b/x-pack/plugins/actions/server/routes/index.ts index 33191132bece55..94f9ec1c943646 100644 --- a/x-pack/plugins/actions/server/routes/index.ts +++ b/x-pack/plugins/actions/server/routes/index.ts @@ -6,7 +6,7 @@ export { createActionRoute } from './create'; export { deleteActionRoute } from './delete'; -export { findActionRoute } from './find'; +export { getAllActionRoute } from './get_all'; export { getActionRoute } from './get'; export { updateActionRoute } from './update'; export { listActionTypesRoute } from './list_action_types'; diff --git a/x-pack/plugins/actions/server/types.ts b/x-pack/plugins/actions/server/types.ts index 999e739e77060c..92e38d77314f83 100644 --- a/x-pack/plugins/actions/server/types.ts +++ b/x-pack/plugins/actions/server/types.ts @@ -55,6 +55,11 @@ export interface ActionResult { actionTypeId: string; name: string; config: Record; + isPreconfigured: boolean; +} + +export interface PreConfiguredAction extends ActionResult { + secrets: Record; } export interface FindActionResult extends ActionResult { diff --git a/x-pack/plugins/alerting/server/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client.test.ts index 0e929ff457fbd2..a9ff5ee8ecdc62 100644 --- a/x-pack/plugins/alerting/server/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client.test.ts @@ -30,6 +30,7 @@ const alertsClientParams = { invalidateAPIKey: jest.fn(), logger: loggingServiceMock.create().get(), encryptedSavedObjectsPlugin: encryptedSavedObjects, + preconfiguredActions: [], }; beforeEach(() => { diff --git a/x-pack/plugins/alerting/server/alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client.ts index 5538b44b69fcbb..6f8478df58a533 100644 --- a/x-pack/plugins/alerting/server/alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client.ts @@ -13,6 +13,7 @@ import { SavedObjectReference, SavedObject, } from 'src/core/server'; +import { PreConfiguredAction } from '../../actions/server'; import { Alert, PartialAlert, @@ -53,6 +54,7 @@ interface ConstructorOptions { getUserName: () => Promise; createAPIKey: () => Promise; invalidateAPIKey: (params: InvalidateAPIKeyParams) => Promise; + preconfiguredActions: PreConfiguredAction[]; } export interface FindOptions { @@ -123,6 +125,7 @@ export class AlertsClient { private readonly invalidateAPIKey: ( params: InvalidateAPIKeyParams ) => Promise; + private preconfiguredActions: PreConfiguredAction[]; encryptedSavedObjectsPlugin: EncryptedSavedObjectsPluginStart; constructor({ @@ -136,6 +139,7 @@ export class AlertsClient { createAPIKey, invalidateAPIKey, encryptedSavedObjectsPlugin, + preconfiguredActions, }: ConstructorOptions) { this.logger = logger; this.getUserName = getUserName; @@ -147,6 +151,7 @@ export class AlertsClient { this.createAPIKey = createAPIKey; this.invalidateAPIKey = invalidateAPIKey; this.encryptedSavedObjectsPlugin = encryptedSavedObjectsPlugin; + this.preconfiguredActions = preconfiguredActions; } public async create({ data, options }: CreateOptions): Promise { @@ -659,18 +664,37 @@ export class AlertsClient { private async denormalizeActions( alertActions: NormalizedAlertAction[] ): Promise<{ actions: RawAlert['actions']; references: SavedObjectReference[] }> { - // Fetch action objects in bulk - const actionIds = [...new Set(alertActions.map(alertAction => alertAction.id))]; - const bulkGetOpts = actionIds.map(id => ({ id, type: 'action' })); - const bulkGetResult = await this.savedObjectsClient.bulkGet(bulkGetOpts); const actionMap = new Map(); - for (const action of bulkGetResult.saved_objects) { - if (action.error) { - throw Boom.badRequest( - `Failed to load action ${action.id} (${action.error.statusCode}): ${action.error.message}` - ); + // map preconfigured actions + for (const alertAction of alertActions) { + const action = this.preconfiguredActions.find( + preconfiguredAction => preconfiguredAction.id === alertAction.id + ); + if (action !== undefined) { + actionMap.set(action.id, action); + } + } + // Fetch action objects in bulk + // Excluding preconfigured actions to avoid an not found error, which is already mapped + const actionIds = [ + ...new Set( + alertActions + .filter(alertAction => !actionMap.has(alertAction.id)) + .map(alertAction => alertAction.id) + ), + ]; + if (actionIds.length > 0) { + const bulkGetOpts = actionIds.map(id => ({ id, type: 'action' })); + const bulkGetResult = await this.savedObjectsClient.bulkGet(bulkGetOpts); + + for (const action of bulkGetResult.saved_objects) { + if (action.error) { + throw Boom.badRequest( + `Failed to load action ${action.id} (${action.error.statusCode}): ${action.error.message}` + ); + } + actionMap.set(action.id, action); } - actionMap.set(action.id, action); } // Extract references and set actionTypeId const references: SavedObjectReference[] = []; @@ -681,10 +705,16 @@ export class AlertsClient { name: actionRef, type: 'action', }); + const actionMapValue = actionMap.get(id); + // if action is a save object, than actionTypeId should be under attributes property + // if action is a preconfigured, than actionTypeId is the action property + const actionTypeId = actionIds.find(actionId => actionId === id) + ? actionMapValue.attributes.actionTypeId + : actionMapValue.actionTypeId; return { ...alertAction, actionRef, - actionTypeId: actionMap.get(id).attributes.actionTypeId, + actionTypeId, }; }); return { diff --git a/x-pack/plugins/alerting/server/alerts_client_factory.test.ts b/x-pack/plugins/alerting/server/alerts_client_factory.test.ts index 4c74ca54a0d2f4..951d18a33b35f1 100644 --- a/x-pack/plugins/alerting/server/alerts_client_factory.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client_factory.test.ts @@ -28,6 +28,7 @@ const alertsClientFactoryParams: jest.Mocked = { getSpaceId: jest.fn(), spaceIdToNamespace: jest.fn(), encryptedSavedObjectsPlugin: encryptedSavedObjectsMock.createStart(), + preconfiguredActions: [], }; const fakeRequest: Request = { headers: {}, @@ -67,6 +68,7 @@ test('creates an alerts client with proper constructor arguments', async () => { createAPIKey: expect.any(Function), invalidateAPIKey: expect.any(Function), encryptedSavedObjectsPlugin: alertsClientFactoryParams.encryptedSavedObjectsPlugin, + preconfiguredActions: [], }); }); diff --git a/x-pack/plugins/alerting/server/alerts_client_factory.ts b/x-pack/plugins/alerting/server/alerts_client_factory.ts index fd480658e236ac..734417e72733e3 100644 --- a/x-pack/plugins/alerting/server/alerts_client_factory.ts +++ b/x-pack/plugins/alerting/server/alerts_client_factory.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { PreConfiguredAction } from '../../actions/server'; import { AlertsClient } from './alerts_client'; import { AlertTypeRegistry, SpaceIdToNamespaceFunction } from './types'; import { KibanaRequest, Logger, SavedObjectsClientContract } from '../../../../src/core/server'; @@ -19,6 +20,7 @@ export interface AlertsClientFactoryOpts { getSpaceId: (request: KibanaRequest) => string | undefined; spaceIdToNamespace: SpaceIdToNamespaceFunction; encryptedSavedObjectsPlugin: EncryptedSavedObjectsPluginStart; + preconfiguredActions: PreConfiguredAction[]; } export class AlertsClientFactory { @@ -30,6 +32,7 @@ export class AlertsClientFactory { private getSpaceId!: (request: KibanaRequest) => string | undefined; private spaceIdToNamespace!: SpaceIdToNamespaceFunction; private encryptedSavedObjectsPlugin!: EncryptedSavedObjectsPluginStart; + private preconfiguredActions!: PreConfiguredAction[]; public initialize(options: AlertsClientFactoryOpts) { if (this.isInitialized) { @@ -43,6 +46,7 @@ export class AlertsClientFactory { this.securityPluginSetup = options.securityPluginSetup; this.spaceIdToNamespace = options.spaceIdToNamespace; this.encryptedSavedObjectsPlugin = options.encryptedSavedObjectsPlugin; + this.preconfiguredActions = options.preconfiguredActions; } public create( @@ -100,6 +104,7 @@ export class AlertsClientFactory { result: invalidateAPIKeyResult, }; }, + preconfiguredActions: this.preconfiguredActions, }); } } diff --git a/x-pack/plugins/alerting/server/plugin.ts b/x-pack/plugins/alerting/server/plugin.ts index 90e274df3a5ee8..172a1062263453 100644 --- a/x-pack/plugins/alerting/server/plugin.ts +++ b/x-pack/plugins/alerting/server/plugin.ts @@ -218,6 +218,7 @@ export class AlertingPlugin { getSpaceId(request: KibanaRequest) { return spaces?.getSpaceId(request); }, + preconfiguredActions: plugins.actions.preconfiguredActions, }); taskRunnerFactory.initialize({ diff --git a/x-pack/plugins/case/common/api/cases/configure.ts b/x-pack/plugins/case/common/api/cases/configure.ts index 9b210c2aa05adc..d92af587d0e92b 100644 --- a/x-pack/plugins/case/common/api/cases/configure.ts +++ b/x-pack/plugins/case/common/api/cases/configure.ts @@ -61,13 +61,6 @@ export type CasesConnectorConfiguration = rt.TypeOf action.actionTypeId === CASE_SERVICE_NOW_ACTION + ); + return response.ok({ body: results }); } catch (error) { return response.customError(wrapError(error)); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email.test.tsx index a7d479f922ed1b..af9e34071fd095 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email.test.tsx @@ -39,6 +39,7 @@ describe('connector validation', () => { id: 'test', actionTypeId: '.email', name: 'email', + isPreconfigured: false, config: { from: 'test@test.com', port: 2323, @@ -66,6 +67,7 @@ describe('connector validation', () => { }, id: 'test', actionTypeId: '.email', + isPreconfigured: false, name: 'email', config: { from: 'test@test.com', @@ -117,6 +119,7 @@ describe('connector validation', () => { }, id: 'test', actionTypeId: '.email', + isPreconfigured: false, name: 'email', config: { from: 'test@test.com', @@ -144,6 +147,7 @@ describe('connector validation', () => { }, id: 'test', actionTypeId: '.email', + isPreconfigured: false, name: 'email', config: { from: 'test@test.com', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook.test.tsx index fdb60bd2d91466..c4489a316d2c00 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook.test.tsx @@ -39,6 +39,7 @@ describe('webhook connector validation', () => { id: 'test', actionTypeId: '.webhook', name: 'webhook', + isPreconfigured: false, config: { method: 'PUT', url: 'http:\\test', @@ -106,6 +107,7 @@ describe('WebhookActionConnectorFields renders', () => { }, id: 'test', actionTypeId: '.webhook', + isPreconfigured: false, name: 'webhook', config: { method: 'PUT', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.test.ts index ee68b7e269c342..e9cf2a270d180d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.test.ts @@ -43,27 +43,14 @@ describe('loadActionTypes', () => { }); describe('loadAllActions', () => { - test('should call find actions API', async () => { - const resolvedValue = { - page: 1, - perPage: 10000, - total: 0, - data: [], - }; - http.get.mockResolvedValueOnce(resolvedValue); + test('should call getAll actions API', async () => { + http.get.mockResolvedValueOnce([]); const result = await loadAllActions({ http }); - expect(result).toEqual(resolvedValue); + expect(result).toEqual([]); expect(http.get.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "/api/action/_find", - Object { - "query": Object { - "per_page": 10000, - "sort_field": "name.keyword", - "sort_order": "asc", - }, - }, + "/api/action/_getAll", ] `); }); @@ -73,6 +60,7 @@ describe('createActionConnector', () => { test('should call create action API', async () => { const connector: ActionConnectorWithoutId = { actionTypeId: 'test', + isPreconfigured: false, name: 'My test', config: {}, secrets: {}, @@ -86,7 +74,7 @@ describe('createActionConnector', () => { Array [ "/api/action", Object { - "body": "{\\"actionTypeId\\":\\"test\\",\\"name\\":\\"My test\\",\\"config\\":{},\\"secrets\\":{}}", + "body": "{\\"actionTypeId\\":\\"test\\",\\"isPreconfigured\\":false,\\"name\\":\\"My test\\",\\"config\\":{},\\"secrets\\":{}}", }, ] `); @@ -98,6 +86,7 @@ describe('updateActionConnector', () => { const id = '123'; const connector: ActionConnectorWithoutId = { actionTypeId: 'test', + isPreconfigured: false, name: 'My test', config: {}, secrets: {}, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.ts index 26ad97f05849d4..e82d268accdd82 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_connector_api.ts @@ -8,32 +8,12 @@ import { HttpSetup } from 'kibana/public'; import { BASE_ACTION_API_PATH } from '../constants'; import { ActionConnector, ActionConnectorWithoutId, ActionType } from '../../types'; -// We are assuming there won't be many actions. This is why we will load -// all the actions in advance and assume the total count to not go over 100 or so. -// We'll set this max setting assuming it's never reached. -const MAX_ACTIONS_RETURNED = 10000; - export async function loadActionTypes({ http }: { http: HttpSetup }): Promise { return await http.get(`${BASE_ACTION_API_PATH}/types`); } -export async function loadAllActions({ - http, -}: { - http: HttpSetup; -}): Promise<{ - page: number; - perPage: number; - total: number; - data: ActionConnector[]; -}> { - return await http.get(`${BASE_ACTION_API_PATH}/_find`, { - query: { - per_page: MAX_ACTIONS_RETURNED, - sort_field: 'name.keyword', - sort_order: 'asc', - }, - }); +export async function loadAllActions({ http }: { http: HttpSetup }): Promise { + return await http.get(`${BASE_ACTION_API_PATH}/_getAll`); } export async function createActionConnector({ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx index 89d37c4d00a112..41564146bb84d9 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx @@ -11,6 +11,10 @@ import { act } from 'react-dom/test-utils'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; import { ValidationResult, Alert, AlertAction } from '../../../types'; import { ActionForm } from './action_form'; +jest.mock('../../lib/action_connector_api', () => ({ + loadAllActions: jest.fn(), + loadActionTypes: jest.fn(), +})); const actionTypeRegistry = actionTypeRegistryMock.create(); describe('action_form', () => { let deps: any; @@ -73,6 +77,17 @@ describe('action_form', () => { let wrapper: ReactWrapper; async function setup() { + const { loadAllActions } = jest.requireMock('../../lib/action_connector_api'); + loadAllActions.mockResolvedValueOnce([ + { + secrets: {}, + id: 'test', + actionTypeId: actionType.id, + name: 'Test connector', + config: {}, + isPreconfigured: false, + }, + ]); const mockes = coreMock.createSetup(); deps = { toastNotifications: mockes.notifications.toasts, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 3ade4e6368f96e..6b011ac84bc6f1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -129,7 +129,7 @@ export const ActionForm = ({ async function loadConnectors() { try { const actionsResponse = await loadAllActions({ http }); - setConnectors(actionsResponse.data); + setConnectors(actionsResponse); } catch (e) { toastNotifications.addDanger({ title: i18n.translate( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.test.tsx index f9aa2cad8bfc60..2c063ea6b4fa64 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.test.tsx @@ -47,6 +47,7 @@ describe('connector_edit_flyout', () => { actionTypeId: 'test-action-type-id', actionType: 'test-action-type-name', name: 'action-connector', + isPreconfigured: false, referencedByCount: 0, config: {}, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_reducer.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_reducer.test.ts index df7e5d8fe9a78d..e469a501089128 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_reducer.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_reducer.test.ts @@ -15,6 +15,7 @@ describe('connector reducer', () => { actionTypeId: 'test-action-type-id', name: 'action-connector', referencedByCount: 0, + isPreconfigured: false, config: {}, }; }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx index 9331fe17046949..4fa1e7e4c6e4df 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx @@ -29,12 +29,7 @@ describe('actions_connectors_list component empty', () => { const { loadAllActions, loadActionTypes } = jest.requireMock( '../../../lib/action_connector_api' ); - loadAllActions.mockResolvedValueOnce({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValueOnce([]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -111,27 +106,22 @@ describe('actions_connectors_list component with items', () => { const { loadAllActions, loadActionTypes } = jest.requireMock( '../../../lib/action_connector_api' ); - loadAllActions.mockResolvedValueOnce({ - page: 1, - perPage: 10000, - total: 2, - data: [ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - config: {}, - }, - ], - }); + loadAllActions.mockResolvedValueOnce([ + { + id: '1', + actionTypeId: 'test', + description: 'My test', + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + description: 'My test 2', + referencedByCount: 1, + config: {}, + }, + ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -214,12 +204,7 @@ describe('actions_connectors_list component empty with show only capability', () const { loadAllActions, loadActionTypes } = jest.requireMock( '../../../lib/action_connector_api' ); - loadAllActions.mockResolvedValueOnce({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValueOnce([]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -289,27 +274,22 @@ describe('actions_connectors_list with show only capability', () => { const { loadAllActions, loadActionTypes } = jest.requireMock( '../../../lib/action_connector_api' ); - loadAllActions.mockResolvedValueOnce({ - page: 1, - perPage: 10000, - total: 2, - data: [ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - config: {}, - }, - ], - }); + loadAllActions.mockResolvedValueOnce([ + { + id: '1', + actionTypeId: 'test', + description: 'My test', + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + description: 'My test 2', + referencedByCount: 1, + config: {}, + }, + ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -384,27 +364,22 @@ describe('actions_connectors_list component with disabled items', () => { const { loadAllActions, loadActionTypes } = jest.requireMock( '../../../lib/action_connector_api' ); - loadAllActions.mockResolvedValueOnce({ - page: 1, - perPage: 10000, - total: 2, - data: [ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - config: {}, - }, - ], - }); + loadAllActions.mockResolvedValueOnce([ + { + id: '1', + actionTypeId: 'test', + description: 'My test', + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + description: 'My test 2', + referencedByCount: 1, + config: {}, + }, + ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index fc07171347e5e5..81693e1d2d9d14 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -110,7 +110,7 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { setIsLoadingActions(true); try { const actionsResponse = await loadAllActions({ http }); - setActions(actionsResponse.data); + setActions(actionsResponse); } catch (e) { toastNotifications.addDanger({ title: i18n.translate( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx index 108cc724aa4074..66aa02e1930a3e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.test.tsx @@ -72,12 +72,7 @@ describe('alerts_list component empty', () => { }, ]); loadAlertTypes.mockResolvedValue([{ id: 'test_alert_type', name: 'some alert type' }]); - loadAllActions.mockResolvedValue({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValue([]); const mockes = coreMock.createSetup(); const [ @@ -196,12 +191,7 @@ describe('alerts_list component with items', () => { }, ]); loadAlertTypes.mockResolvedValue([{ id: 'test_alert_type', name: 'some alert type' }]); - loadAllActions.mockResolvedValue({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValue([]); const mockes = coreMock.createSetup(); const [ { @@ -286,12 +276,7 @@ describe('alerts_list component empty with show only capability', () => { }, ]); loadAlertTypes.mockResolvedValue([{ id: 'test_alert_type', name: 'some alert type' }]); - loadAllActions.mockResolvedValue({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValue([]); const mockes = coreMock.createSetup(); const [ { @@ -405,12 +390,7 @@ describe('alerts_list with show only capability', () => { }, ]); loadAlertTypes.mockResolvedValue([{ id: 'test_alert_type', name: 'some alert type' }]); - loadAllActions.mockResolvedValue({ - page: 1, - perPage: 10000, - total: 0, - data: [], - }); + loadAllActions.mockResolvedValue([]); const mockes = coreMock.createSetup(); const [ { diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 7dfaa7b918f705..31c77833cc0e87 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -66,6 +66,7 @@ export interface ActionConnector { name: string; referencedByCount?: number; config: Record; + isPreconfigured: boolean; } export type ActionConnectorWithoutId = Omit; diff --git a/x-pack/test/alerting_api_integration/common/config.ts b/x-pack/test/alerting_api_integration/common/config.ts index 5fb1afa7d584f2..4d32a5ae9f53c4 100644 --- a/x-pack/test/alerting_api_integration/common/config.ts +++ b/x-pack/test/alerting_api_integration/common/config.ts @@ -77,6 +77,30 @@ export function createTestConfig(name: string, options: CreateTestConfigOptions) `--xpack.actions.enabledActionTypes=${JSON.stringify(enabledActionTypes)}`, '--xpack.alerting.enabled=true', '--xpack.eventLog.logEntries=true', + `--xpack.actions.preconfigured=${JSON.stringify([ + { + id: 'my-slack1', + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + }, + { + id: 'custom-system-abc-connector', + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + secrets: { + xyzSecret1: 'credential1', + xyzSecret2: 'credential2', + }, + }, + ])}`, ...disabledPlugins.map(key => `--xpack.${key}.enabled=false`), `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'alerts')}`, `--plugin-path=${path.join(__dirname, 'fixtures', 'plugins', 'actions')}`, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/email.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/email.ts index e228f6c1f81c6f..6001dd531cfae8 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/email.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/email.ts @@ -39,6 +39,7 @@ export default function emailTest({ getService }: FtrProviderContext) { createdActionId = createdAction.id; expect(createdAction).to.eql({ id: createdActionId, + isPreconfigured: false, name: 'An email action', actionTypeId: '.email', config: { @@ -58,6 +59,7 @@ export default function emailTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'An email action', actionTypeId: '.email', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index.ts index 01eaf92da33fe5..612eba858ea0b0 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/es_index.ts @@ -40,6 +40,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'An index action', actionTypeId: '.index', config: { @@ -57,6 +58,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'An index action', actionTypeId: '.index', config: { index: ES_TEST_INDEX_NAME, refresh: false, executionTimeField: null }, @@ -79,6 +81,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(createdActionWithIndex).to.eql({ id: createdActionWithIndex.id, + isPreconfigured: false, name: 'An index action with index config', actionTypeId: '.index', config: { @@ -96,6 +99,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(fetchedActionWithIndex).to.eql({ id: fetchedActionWithIndex.id, + isPreconfigured: false, name: 'An index action with index config', actionTypeId: '.index', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/pagerduty.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/pagerduty.ts index cfc04663c6a4f3..eeb0818b5fbabd 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/pagerduty.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/pagerduty.ts @@ -50,6 +50,7 @@ export default function pagerdutyTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'A pagerduty action', actionTypeId: '.pagerduty', config: { @@ -65,6 +66,7 @@ export default function pagerdutyTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'A pagerduty action', actionTypeId: '.pagerduty', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/server_log.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/server_log.ts index f4ea568cf08c34..e9d3e6c542442b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/server_log.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/server_log.ts @@ -31,6 +31,7 @@ export default function serverLogTest({ getService }: FtrProviderContext) { serverLogActionId = createdAction.id; expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'A server.log action', actionTypeId: '.server-log', config: {}, @@ -44,6 +45,7 @@ export default function serverLogTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'A server.log action', actionTypeId: '.server-log', config: {}, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts index 48f348e1b834d8..054f8f6141817e 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/servicenow.ts @@ -101,6 +101,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'A servicenow action', actionTypeId: '.servicenow', config: { @@ -117,6 +118,7 @@ export default function servicenowTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'A servicenow action', actionTypeId: '.servicenow', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/slack.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/slack.ts index 8afa43bfea21e6..e00589b7e85b7b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/slack.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/slack.ts @@ -47,6 +47,7 @@ export default function slackTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'A slack action', actionTypeId: '.slack', config: {}, @@ -60,6 +61,7 @@ export default function slackTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'A slack action', actionTypeId: '.slack', config: {}, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/webhook.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/webhook.ts index da83dbf8c47e26..fd996ea4507bab 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/webhook.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/builtin_action_types/webhook.ts @@ -92,6 +92,7 @@ export default function webhookTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'A generic Webhook action', actionTypeId: '.webhook', config: { @@ -108,6 +109,7 @@ export default function webhookTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'A generic Webhook action', actionTypeId: '.webhook', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/create.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/create.ts index 43a3861491467f..922315eba5a5c6 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/create.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/create.ts @@ -55,6 +55,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { objectRemover.add(space.id, response.body.id, 'action'); expect(response.body).to.eql({ id: response.body.id, + isPreconfigured: false, name: 'My action', actionTypeId: 'test.index-record', config: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/delete.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/delete.ts index 6fca330887c3e6..011e47cf11b394 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/delete.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/delete.ts @@ -137,6 +137,36 @@ export default function deleteActionTests({ getService }: FtrProviderContext) { throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); + + it(`shouldn't delete action from preconfigured list`, async () => { + const response = await supertestWithoutAuth + .delete(`${getUrlPrefix(space.id)}/api/action/my-slack1`) + .auth(user.username, user.password) + .set('kbn-xsrf', 'foo'); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'global_read at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(404); + expect(response.body).to.eql({ + statusCode: 404, + error: 'Not Found', + message: 'Not Found', + }); + break; + case 'superuser at space1': + case 'space_1_all at space1': + expect(response.body).to.eql({ + statusCode: 400, + error: 'Bad Request', + message: 'Preconfigured action my-slack1 is not allowed to delete.', + }); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); }); } }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get.ts index bed4c805aaf573..c84b089d48c85e 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get.ts @@ -59,6 +59,7 @@ export default function getActionTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(200); expect(response.body).to.eql({ id: createdAction.id, + isPreconfigured: false, actionTypeId: 'test.index-record', name: 'My action', config: { @@ -115,6 +116,40 @@ export default function getActionTests({ getService }: FtrProviderContext) { throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); + + it('should handle get preconfigured action request appropriately', async () => { + const response = await supertestWithoutAuth + .get(`${getUrlPrefix(space.id)}/api/action/my-slack1`) + .auth(user.username, user.password); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(404); + expect(response.body).to.eql({ + statusCode: 404, + error: 'Not Found', + message: 'Not Found', + }); + break; + case 'global_read at space1': + case 'superuser at space1': + case 'space_1_all at space1': + expect(response.statusCode).to.eql(200); + expect(response.body).to.eql({ + id: 'my-slack1', + actionTypeId: '.slack', + name: 'Slack#xyz', + isPreconfigured: true, + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + }); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); }); } }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/find.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts similarity index 57% rename from x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/find.ts rename to x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts index 89c5b4f451f82b..80b512f3fb5e3f 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/find.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/get_all.ts @@ -10,11 +10,11 @@ import { getUrlPrefix, getTestAlertData, ObjectRemover } from '../../../common/l import { FtrProviderContext } from '../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export -export default function findActionTests({ getService }: FtrProviderContext) { +export default function getAllActionTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - describe('find', () => { + describe('getAll', () => { const objectRemover = new ObjectRemover(supertest); afterEach(() => objectRemover.removeAll()); @@ -22,7 +22,7 @@ export default function findActionTests({ getService }: FtrProviderContext) { for (const scenario of UserAtSpaceScenarios) { const { user, space } = scenario; describe(scenario.id, () => { - it('should handle find action request appropriately', async () => { + it('should handle get all action request appropriately', async () => { const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/action`) .set('kbn-xsrf', 'foo') @@ -40,11 +40,7 @@ export default function findActionTests({ getService }: FtrProviderContext) { objectRemover.add(space.id, createdAction.id, 'action'); const response = await supertestWithoutAuth - .get( - `${getUrlPrefix( - space.id - )}/api/action/_find?search=test.index-record&search_fields=actionTypeId` - ) + .get(`${getUrlPrefix(space.id)}/api/action/_getAll`) .auth(user.username, user.password); switch (scenario.id) { @@ -61,90 +57,47 @@ export default function findActionTests({ getService }: FtrProviderContext) { case 'superuser at space1': case 'space_1_all at space1': expect(response.statusCode).to.eql(200); - expect(response.body).to.eql({ - page: 1, - perPage: 20, - total: 1, - data: [ - { - id: createdAction.id, - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - referencedByCount: 0, + expect(response.body).to.eql([ + { + id: createdAction.id, + isPreconfigured: false, + name: 'My action', + actionTypeId: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, }, - ], - }); - break; - default: - throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); - } - }); - - it('should handle find action request with filter appropriately', async () => { - const { body: createdAction } = await supertest - .post(`${getUrlPrefix(space.id)}/api/action`) - .set('kbn-xsrf', 'foo') - .send({ - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - secrets: { - encrypted: 'This value should be encrypted', - }, - }) - .expect(200); - objectRemover.add(space.id, createdAction.id, 'action'); - - const response = await supertestWithoutAuth - .get( - `${getUrlPrefix( - space.id - )}/api/action/_find?filter=action.attributes.actionTypeId:test.index-record` - ) - .auth(user.username, user.password); - - switch (scenario.id) { - case 'no_kibana_privileges at space1': - case 'space_1_all at space2': - expect(response.statusCode).to.eql(404); - expect(response.body).to.eql({ - statusCode: 404, - error: 'Not Found', - message: 'Not Found', - }); - break; - case 'global_read at space1': - case 'superuser at space1': - case 'space_1_all at space1': - expect(response.statusCode).to.eql(200); - expect(response.body).to.eql({ - page: 1, - perPage: 20, - total: 1, - data: [ - { - id: createdAction.id, - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - referencedByCount: 0, + referencedByCount: 0, + }, + { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', }, - ], - }); + referencedByCount: 0, + }, + { + id: 'custom-system-abc-connector', + isPreconfigured: true, + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + referencedByCount: 0, + }, + ]); break; default: throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); - it('should handle find request appropriately with proper referencedByCount', async () => { + it('should handle get all request appropriately with proper referencedByCount', async () => { const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/action`) .set('kbn-xsrf', 'foo') @@ -172,6 +125,13 @@ export default function findActionTests({ getService }: FtrProviderContext) { id: createdAction.id, params: {}, }, + { + group: 'default', + id: 'my-slack1', + params: { + message: 'test', + }, + }, ], }) ) @@ -179,11 +139,7 @@ export default function findActionTests({ getService }: FtrProviderContext) { objectRemover.add(space.id, createdAlert.id, 'alert'); const response = await supertestWithoutAuth - .get( - `${getUrlPrefix( - space.id - )}/api/action/_find?filter=action.attributes.actionTypeId:test.index-record` - ) + .get(`${getUrlPrefix(space.id)}/api/action/_getAll`) .auth(user.username, user.password); switch (scenario.id) { @@ -200,29 +156,47 @@ export default function findActionTests({ getService }: FtrProviderContext) { case 'superuser at space1': case 'space_1_all at space1': expect(response.statusCode).to.eql(200); - expect(response.body).to.eql({ - page: 1, - perPage: 20, - total: 1, - data: [ - { - id: createdAction.id, - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - referencedByCount: 1, + expect(response.body).to.eql([ + { + id: createdAction.id, + isPreconfigured: false, + name: 'My action', + actionTypeId: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, }, - ], - }); + referencedByCount: 1, + }, + { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + referencedByCount: 1, + }, + { + id: 'custom-system-abc-connector', + isPreconfigured: true, + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + referencedByCount: 0, + }, + ]); break; default: throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); - it(`shouldn't find action from another space`, async () => { + it(`shouldn't get actions from another space`, async () => { const { body: createdAction } = await supertest .post(`${getUrlPrefix(space.id)}/api/action`) .set('kbn-xsrf', 'foo') @@ -240,11 +214,7 @@ export default function findActionTests({ getService }: FtrProviderContext) { objectRemover.add(space.id, createdAction.id, 'action'); const response = await supertestWithoutAuth - .get( - `${getUrlPrefix( - 'other' - )}/api/action/_find?search=test.index-record&search_fields=actionTypeId` - ) + .get(`${getUrlPrefix('other')}/api/action/_getAll`) .auth(user.username, user.password); switch (scenario.id) { @@ -261,12 +231,30 @@ export default function findActionTests({ getService }: FtrProviderContext) { case 'global_read at space1': case 'superuser at space1': expect(response.statusCode).to.eql(200); - expect(response.body).to.eql({ - page: 1, - perPage: 20, - total: 0, - data: [], - }); + expect(response.body).to.eql([ + { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + referencedByCount: 0, + }, + { + id: 'custom-system-abc-connector', + isPreconfigured: true, + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + referencedByCount: 0, + }, + ]); break; default: throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts index c6960a4eedd256..d7ec2e78ccb308 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/index.ts @@ -19,7 +19,7 @@ export default function actionsTests({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./create')); loadTestFile(require.resolve('./delete')); loadTestFile(require.resolve('./execute')); - loadTestFile(require.resolve('./find')); + loadTestFile(require.resolve('./get_all')); loadTestFile(require.resolve('./get')); loadTestFile(require.resolve('./list_action_types')); loadTestFile(require.resolve('./update')); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/update.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/update.ts index a792efede07ee0..6cafbeb8c6ea8b 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/update.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/actions/update.ts @@ -69,6 +69,7 @@ export default function updateActionTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(200); expect(response.body).to.eql({ id: createdAction.id, + isPreconfigured: false, actionTypeId: 'test.index-record', name: 'My action updated', config: { @@ -307,6 +308,45 @@ export default function updateActionTests({ getService }: FtrProviderContext) { throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); } }); + + it(`shouldn't update action from preconfigured list`, async () => { + const response = await supertestWithoutAuth + .put(`${getUrlPrefix(space.id)}/api/action/custom-system-abc-connector`) + .auth(user.username, user.password) + .set('kbn-xsrf', 'foo') + .send({ + name: 'My action updated', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'space_1_all at space2': + case 'global_read at space1': + expect(response.statusCode).to.eql(404); + expect(response.body).to.eql({ + statusCode: 404, + error: 'Not Found', + message: 'Not Found', + }); + break; + case 'superuser at space1': + case 'space_1_all at space1': + expect(response.body).to.eql({ + statusCode: 400, + error: 'Bad Request', + message: `Preconfigured action custom-system-abc-connector is not allowed to update.`, + }); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); }); } }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts index 3713e9c24419f7..874d42ac04736a 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/builtin_action_types/es_index.ts @@ -38,6 +38,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(createdAction).to.eql({ id: createdAction.id, + isPreconfigured: false, name: 'An index action', actionTypeId: '.index', config: { @@ -55,6 +56,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(fetchedAction).to.eql({ id: fetchedAction.id, + isPreconfigured: false, name: 'An index action', actionTypeId: '.index', config: { index: ES_TEST_INDEX_NAME, refresh: false, executionTimeField: null }, @@ -77,6 +79,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(createdActionWithIndex).to.eql({ id: createdActionWithIndex.id, + isPreconfigured: false, name: 'An index action with index config', actionTypeId: '.index', config: { @@ -94,6 +97,7 @@ export default function indexTest({ getService }: FtrProviderContext) { expect(fetchedActionWithIndex).to.eql({ id: fetchedActionWithIndex.id, + isPreconfigured: false, name: 'An index action with index config', actionTypeId: '.index', config: { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/create.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/create.ts index efd707b59cd343..c70c289194abbd 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/create.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/create.ts @@ -37,6 +37,7 @@ export default function createActionTests({ getService }: FtrProviderContext) { objectRemover.add(Spaces.space1.id, response.body.id, 'action'); expect(response.body).to.eql({ id: response.body.id, + isPreconfigured: false, name: 'My action', actionTypeId: 'test.index-record', config: { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/delete.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/delete.ts index 283e51352c2726..26a811d2cc512e 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/delete.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/delete.ts @@ -76,5 +76,16 @@ export default function deleteActionTests({ getService }: FtrProviderContext) { message: 'Saved object [action/2] not found', }); }); + + it(`shouldn't delete action from preconfigured list`, async () => { + await supertest + .delete(`${getUrlPrefix(Spaces.space1.id)}/api/action/my-slack1`) + .set('kbn-xsrf', 'foo') + .expect(400, { + statusCode: 400, + error: 'Bad Request', + message: `Preconfigured action my-slack1 is not allowed to delete.`, + }); + }); }); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/find.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/find.ts deleted file mode 100644 index acbc9edc1f2fba..00000000000000 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/find.ts +++ /dev/null @@ -1,92 +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 { Spaces } from '../../scenarios'; -import { getUrlPrefix, ObjectRemover } from '../../../common/lib'; -import { FtrProviderContext } from '../../../common/ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default function findActionTests({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - - describe('find', () => { - const objectRemover = new ObjectRemover(supertest); - - afterEach(() => objectRemover.removeAll()); - - it('should handle find action request appropriately', async () => { - const { body: createdAction } = await supertest - .post(`${getUrlPrefix(Spaces.space1.id)}/api/action`) - .set('kbn-xsrf', 'foo') - .send({ - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - secrets: { - encrypted: 'This value should be encrypted', - }, - }) - .expect(200); - objectRemover.add(Spaces.space1.id, createdAction.id, 'action'); - - await supertest - .get( - `${getUrlPrefix( - Spaces.space1.id - )}/api/action/_find?search=test.index-record&search_fields=actionTypeId` - ) - .expect(200, { - page: 1, - perPage: 20, - total: 1, - data: [ - { - id: createdAction.id, - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - referencedByCount: 0, - }, - ], - }); - }); - - it(`shouldn't find action from another space`, async () => { - const { body: createdAction } = await supertest - .post(`${getUrlPrefix(Spaces.space1.id)}/api/action`) - .set('kbn-xsrf', 'foo') - .send({ - name: 'My action', - actionTypeId: 'test.index-record', - config: { - unencrypted: `This value shouldn't get encrypted`, - }, - secrets: { - encrypted: 'This value should be encrypted', - }, - }) - .expect(200); - objectRemover.add(Spaces.space1.id, createdAction.id, 'action'); - - await supertest - .get( - `${getUrlPrefix( - Spaces.other.id - )}/api/action/_find?search=test.index-record&search_fields=actionTypeId` - ) - .expect(200, { - page: 1, - perPage: 20, - total: 0, - data: [], - }); - }); - }); -} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get.ts index 0f896bfaa0af9b..a4a13441fb7668 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get.ts @@ -38,6 +38,7 @@ export default function getActionTests({ getService }: FtrProviderContext) { .get(`${getUrlPrefix(Spaces.space1.id)}/api/action/${createdAction.id}`) .expect(200, { id: createdAction.id, + isPreconfigured: false, actionTypeId: 'test.index-record', name: 'My action', config: { @@ -71,5 +72,17 @@ export default function getActionTests({ getService }: FtrProviderContext) { message: `Saved object [action/${createdAction.id}] not found`, }); }); + + it('should handle get action request from preconfigured list', async () => { + await supertest.get(`${getUrlPrefix(Spaces.space1.id)}/api/action/my-slack1`).expect(200, { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + }); + }); }); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts new file mode 100644 index 00000000000000..517c64f178af5b --- /dev/null +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/get_all.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Spaces } from '../../scenarios'; +import { getUrlPrefix, ObjectRemover } from '../../../common/lib'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default function getAllActionTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('getAll', () => { + const objectRemover = new ObjectRemover(supertest); + + afterEach(() => objectRemover.removeAll()); + + it('should handle get all action request appropriately', async () => { + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/action`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'My action', + actionTypeId: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }) + .expect(200); + objectRemover.add(Spaces.space1.id, createdAction.id, 'action'); + + await supertest.get(`${getUrlPrefix(Spaces.space1.id)}/api/action/_getAll`).expect(200, [ + { + id: createdAction.id, + isPreconfigured: false, + name: 'My action', + actionTypeId: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + referencedByCount: 0, + }, + { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + referencedByCount: 0, + }, + { + id: 'custom-system-abc-connector', + isPreconfigured: true, + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + referencedByCount: 0, + }, + ]); + }); + + it(`shouldn't get all action from another space`, async () => { + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(Spaces.space1.id)}/api/action`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'My action', + actionTypeId: 'test.index-record', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }) + .expect(200); + objectRemover.add(Spaces.space1.id, createdAction.id, 'action'); + + await supertest.get(`${getUrlPrefix(Spaces.other.id)}/api/action/_getAll`).expect(200, [ + { + id: 'my-slack1', + isPreconfigured: true, + actionTypeId: '.slack', + name: 'Slack#xyz', + config: { + webhookUrl: 'https://hooks.slack.com/services/abcd/efgh/ijklmnopqrstuvwxyz', + }, + referencedByCount: 0, + }, + { + id: 'custom-system-abc-connector', + isPreconfigured: true, + actionTypeId: 'system-abc-action-type', + name: 'SystemABC', + config: { + xyzConfig1: 'value1', + xyzConfig2: 'value2', + listOfThings: ['a', 'b', 'c', 'd'], + }, + referencedByCount: 0, + }, + ]); + }); + }); +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts index fb2be8c86f4e8b..75544b7fd41697 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts @@ -11,7 +11,7 @@ export default function actionsTests({ loadTestFile }: FtrProviderContext) { describe('Actions', () => { loadTestFile(require.resolve('./create')); loadTestFile(require.resolve('./delete')); - loadTestFile(require.resolve('./find')); + loadTestFile(require.resolve('./get_all')); loadTestFile(require.resolve('./get')); loadTestFile(require.resolve('./list_action_types')); loadTestFile(require.resolve('./update')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/type_not_enabled.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/type_not_enabled.ts index 18a0ecc23c1e14..2593f342a8a862 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/type_not_enabled.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/type_not_enabled.ts @@ -63,6 +63,7 @@ export default function typeNotEnabledTests({ getService }: FtrProviderContext) actionTypeId: 'test.not-enabled', config: {}, id: 'uuid-actionId', + isPreconfigured: false, name: 'an action created before test.not-enabled was disabled', }); }); @@ -89,6 +90,7 @@ export default function typeNotEnabledTests({ getService }: FtrProviderContext) actionTypeId: 'test.not-enabled', config: {}, id: 'uuid-actionId', + isPreconfigured: false, name: 'an action created before test.not-enabled was disabled', }); }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/update.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/update.ts index fb0c5e13c0720d..05d26aaaed2ec3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/update.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/update.ts @@ -48,6 +48,7 @@ export default function updateActionTests({ getService }: FtrProviderContext) { }) .expect(200, { id: createdAction.id, + isPreconfigured: false, actionTypeId: 'test.index-record', name: 'My action updated', config: { @@ -99,5 +100,25 @@ export default function updateActionTests({ getService }: FtrProviderContext) { message: `Saved object [action/${createdAction.id}] not found`, }); }); + + it(`shouldn't update action from preconfigured list`, async () => { + await supertest + .put(`${getUrlPrefix(Spaces.space1.id)}/api/action/custom-system-abc-connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'My action updated', + config: { + unencrypted: `This value shouldn't get encrypted`, + }, + secrets: { + encrypted: 'This value should be encrypted', + }, + }) + .expect(400, { + statusCode: 400, + error: 'Bad Request', + message: `Preconfigured action custom-system-abc-connector is not allowed to update.`, + }); + }); }); } From 9d89a4fb4900a372c2445f0359374da8d9030515 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 8 Apr 2020 13:03:15 -0400 Subject: [PATCH 31/52] Support multiple reserved feature privileges (#61980) * support multiple reserved feature privileges * update reserved privilege ids * additional testing * Add ml_user and ml_admin reserved privileges * prrevent reserved privilege ids from sttarting with 'reserved_' * address pr feedback: dedicated reserved privilege type * re-enable ML test suites Co-authored-by: Elastic Machine --- x-pack/plugins/features/common/feature.ts | 3 +- .../common/reserved_kibana_privilege.ts | 12 + .../features/server/feature_registry.test.ts | 254 +++++++++++++----- .../features/server/feature_registry.ts | 4 +- .../plugins/features/server/feature_schema.ts | 16 +- x-pack/plugins/ml/server/plugin.ts | 35 ++- x-pack/plugins/monitoring/server/plugin.ts | 23 +- .../security/server/authorization/index.ts | 5 +- .../privileges/privileges.test.ts | 51 ++-- .../authorization/privileges/privileges.ts | 10 +- .../validate_feature_privileges.test.ts | 17 +- .../validate_reserved_privileges.test.ts | 181 +++++++++++++ .../validate_reserved_privileges.ts | 20 ++ x-pack/test/api_integration/apis/ml/index.ts | 5 +- .../apis/security/privileges.ts | 2 +- .../apis/security/privileges_basic.ts | 2 +- .../functional/apps/machine_learning/index.ts | 5 +- 17 files changed, 512 insertions(+), 133 deletions(-) create mode 100644 x-pack/plugins/features/common/reserved_kibana_privilege.ts create mode 100644 x-pack/plugins/security/server/authorization/validate_reserved_privileges.test.ts create mode 100644 x-pack/plugins/security/server/authorization/validate_reserved_privileges.ts diff --git a/x-pack/plugins/features/common/feature.ts b/x-pack/plugins/features/common/feature.ts index 82fcc33f5c8ceb..ef32a8a80a0bd6 100644 --- a/x-pack/plugins/features/common/feature.ts +++ b/x-pack/plugins/features/common/feature.ts @@ -7,6 +7,7 @@ import { RecursiveReadonly } from '@kbn/utility-types'; import { FeatureKibanaPrivileges } from './feature_kibana_privileges'; import { SubFeatureConfig, SubFeature } from './sub_feature'; +import { ReservedKibanaPrivilege } from './reserved_kibana_privilege'; /** * Interface for registering a feature. @@ -122,8 +123,8 @@ export interface FeatureConfig { * @private */ reserved?: { - privilege: FeatureKibanaPrivileges; description: string; + privileges: ReservedKibanaPrivilege[]; }; } diff --git a/x-pack/plugins/features/common/reserved_kibana_privilege.ts b/x-pack/plugins/features/common/reserved_kibana_privilege.ts new file mode 100644 index 00000000000000..0186011382e84c --- /dev/null +++ b/x-pack/plugins/features/common/reserved_kibana_privilege.ts @@ -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. + */ + +import { FeatureKibanaPrivileges } from '.'; + +export interface ReservedKibanaPrivilege { + id: string; + privilege: FeatureKibanaPrivileges; +} diff --git a/x-pack/plugins/features/server/feature_registry.test.ts b/x-pack/plugins/features/server/feature_registry.test.ts index 5b4f7728c9f311..2039f8f6acda2a 100644 --- a/x-pack/plugins/features/server/feature_registry.test.ts +++ b/x-pack/plugins/features/server/feature_registry.test.ts @@ -110,19 +110,24 @@ describe('FeatureRegistry', () => { ], privilegesTooltip: 'some fancy tooltip', reserved: { - privilege: { - catalogue: ['foo'], - management: { - foo: ['bar'], - }, - app: ['app1'], - savedObject: { - all: ['space', 'etc', 'telemetry'], - read: ['canvas', 'config', 'url'], + privileges: [ + { + id: 'reserved', + privilege: { + catalogue: ['foo'], + management: { + foo: ['bar'], + }, + app: ['app1'], + savedObject: { + all: ['space', 'etc', 'telemetry'], + read: ['canvas', 'config', 'url'], + }, + api: ['someApiEndpointTag', 'anotherEndpointTag'], + ui: ['allowsFoo', 'showBar', 'showBaz'], + }, }, - api: ['someApiEndpointTag', 'anotherEndpointTag'], - ui: ['allowsFoo', 'showBar', 'showBaz'], - }, + ], description: 'some completely adequate description', }, }; @@ -264,13 +269,18 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'foo', - privilege: { - ui: [], - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + ui: [], + savedObject: { + all: [], + read: [], + }, + }, }, - }, + ], }, }; @@ -278,7 +288,7 @@ describe('FeatureRegistry', () => { featureRegistry.register(feature); const result = featureRegistry.getAll(); - const reservedPrivilege = result[0]!.reserved!.privilege; + const reservedPrivilege = result[0]!.reserved!.privileges[0].privilege; expect(reservedPrivilege.savedObject.all).toEqual(['telemetry']); expect(reservedPrivilege.savedObject.read).toEqual(['config', 'url']); }); @@ -520,14 +530,19 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + app: ['foo', 'bar', 'baz'], + }, }, - ui: [], - app: ['foo', 'bar', 'baz'], - }, + ], }, }; @@ -546,14 +561,19 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + app: ['foo', 'bar'], + }, }, - ui: [], - app: ['foo', 'bar'], - }, + ], }, }; @@ -666,15 +686,20 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - catalogue: ['foo', 'bar', 'baz'], - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + catalogue: ['foo', 'bar', 'baz'], + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, }, - ui: [], - app: [], - }, + ], }, }; @@ -694,15 +719,20 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - catalogue: ['foo', 'bar'], - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + catalogue: ['foo', 'bar'], + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, }, - ui: [], - app: [], - }, + ], }, }; @@ -840,18 +870,23 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - catalogue: ['bar'], - management: { - kibana: ['hey-there'], - }, - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + catalogue: ['bar'], + management: { + kibana: ['hey-there'], + }, + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, }, - ui: [], - app: [], - }, + ], }, }; @@ -874,18 +909,23 @@ describe('FeatureRegistry', () => { privileges: null, reserved: { description: 'something', - privilege: { - catalogue: ['bar'], - management: { - kibana: ['hey-there'], - }, - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'reserved', + privilege: { + catalogue: ['bar'], + management: { + kibana: ['hey-there'], + }, + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, }, - ui: [], - app: [], - }, + ], }, }; @@ -896,6 +936,78 @@ describe('FeatureRegistry', () => { ); }); + it('allows multiple reserved feature privileges to be registered', () => { + const feature: FeatureConfig = { + id: 'test-feature', + name: 'Test Feature', + app: [], + privileges: null, + reserved: { + description: 'my reserved privileges', + privileges: [ + { + id: 'a_reserved_1', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, + }, + { + id: 'a_reserved_2', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, + }, + ], + }, + }; + + const featureRegistry = new FeatureRegistry(); + featureRegistry.register(feature); + const result = featureRegistry.getAll(); + expect(result).toHaveLength(1); + expect(result[0].reserved?.privileges).toHaveLength(2); + }); + + it('does not allow reserved privilege ids to start with "reserved_"', () => { + const feature: FeatureConfig = { + id: 'test-feature', + name: 'Test Feature', + app: [], + privileges: null, + reserved: { + description: 'my reserved privileges', + privileges: [ + { + id: 'reserved_1', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + app: [], + }, + }, + ], + }, + }; + + const featureRegistry = new FeatureRegistry(); + expect(() => featureRegistry.register(feature)).toThrowErrorMatchingInlineSnapshot( + `"child \\"reserved\\" fails because [child \\"privileges\\" fails because [\\"privileges\\" at position 0 fails because [child \\"id\\" fails because [\\"id\\" with value \\"reserved_1\\" fails to match the required pattern: /^(?!reserved_)[a-zA-Z0-9_-]+$/]]]]"` + ); + }); + it('cannot register feature after getAll has been called', () => { const feature1: FeatureConfig = { id: 'test-feature', diff --git a/x-pack/plugins/features/server/feature_registry.ts b/x-pack/plugins/features/server/feature_registry.ts index 73a353cd274711..6140b7ac87ce02 100644 --- a/x-pack/plugins/features/server/feature_registry.ts +++ b/x-pack/plugins/features/server/feature_registry.ts @@ -39,9 +39,9 @@ export class FeatureRegistry { function applyAutomaticPrivilegeGrants(feature: FeatureConfig): FeatureConfig { const allPrivilege = feature.privileges?.all; const readPrivilege = feature.privileges?.read; - const reservedPrivilege = feature.reserved?.privilege; + const reservedPrivileges = (feature.reserved?.privileges ?? []).map(rp => rp.privilege); - applyAutomaticAllPrivilegeGrants(allPrivilege, reservedPrivilege); + applyAutomaticAllPrivilegeGrants(allPrivilege, ...reservedPrivileges); applyAutomaticReadPrivilegeGrants(readPrivilege); return feature; diff --git a/x-pack/plugins/features/server/feature_schema.ts b/x-pack/plugins/features/server/feature_schema.ts index fdeceb30b4e3d9..403d9586bf1600 100644 --- a/x-pack/plugins/features/server/feature_schema.ts +++ b/x-pack/plugins/features/server/feature_schema.ts @@ -18,6 +18,7 @@ const prohibitedFeatureIds: Array = ['catalogue', 'managem const featurePrivilegePartRegex = /^[a-zA-Z0-9_-]+$/; const subFeaturePrivilegePartRegex = /^[a-zA-Z0-9_-]+$/; const managementSectionIdRegex = /^[a-zA-Z0-9_-]+$/; +const reservedFeaturePrrivilegePartRegex = /^(?!reserved_)[a-zA-Z0-9_-]+$/; export const uiCapabilitiesRegex = /^[a-zA-Z0-9:_-]+$/; const managementSchema = Joi.object().pattern( @@ -118,8 +119,17 @@ const schema = Joi.object({ }), privilegesTooltip: Joi.string(), reserved: Joi.object({ - privilege: privilegeSchema.required(), description: Joi.string().required(), + privileges: Joi.array() + .items( + Joi.object({ + id: Joi.string() + .regex(reservedFeaturePrrivilegePartRegex) + .required(), + privilege: privilegeSchema.required(), + }) + ) + .required(), }), }); @@ -209,7 +219,9 @@ export function validateFeature(feature: FeatureConfig) { privilegeEntries.push(...Object.entries(feature.privileges)); } if (feature.reserved) { - privilegeEntries.push(['reserved', feature.reserved.privilege]); + feature.reserved.privileges.forEach(reservedPrivilege => { + privilegeEntries.push([reservedPrivilege.id, reservedPrivilege.privilege]); + }); } if (privilegeEntries.length === 0) { diff --git a/x-pack/plugins/ml/server/plugin.ts b/x-pack/plugins/ml/server/plugin.ts index 7d3ef116e67ab7..c7add12be142cb 100644 --- a/x-pack/plugins/ml/server/plugin.ts +++ b/x-pack/plugins/ml/server/plugin.ts @@ -79,19 +79,36 @@ export class MlServerPlugin implements Plugin { - validateFeaturePrivileges(featuresService.getFeatures()); + const features = featuresService.getFeatures(); + validateFeaturePrivileges(features); + validateReservedPrivileges(features); await registerPrivilegesWithCluster(logger, privileges, applicationName, clusterClient); }, diff --git a/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts b/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts index 3d25fc03f568b6..b023c12d35b79a 100644 --- a/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts +++ b/x-pack/plugins/security/server/authorization/privileges/privileges.test.ts @@ -409,13 +409,18 @@ describe('features', () => { }, privileges: null, reserved: { - privilege: { - savedObject: { - all: ['ignore-me-1', 'ignore-me-2'], - read: ['ignore-me-1', 'ignore-me-2'], + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['ignore-me-1', 'ignore-me-2'], + read: ['ignore-me-1', 'ignore-me-2'], + }, + ui: ['ignore-me-1'], + }, }, - ui: ['ignore-me-1'], - }, + ], description: '', }, }), @@ -591,13 +596,18 @@ describe('reserved', () => { }, privileges: null, reserved: { - privilege: { - savedObject: { - all: [], - read: [], + privileges: [ + { + id: 'foo', + privilege: { + savedObject: { + all: [], + read: [], + }, + ui: [], + }, }, - ui: [], - }, + ], description: '', }, }), @@ -627,13 +637,18 @@ describe('reserved', () => { app: [], privileges: null, reserved: { - privilege: { - savedObject: { - all: ['savedObject-all-1', 'savedObject-all-2'], - read: ['savedObject-read-1', 'savedObject-read-2'], + privileges: [ + { + id: 'foo', + privilege: { + savedObject: { + all: ['savedObject-all-1', 'savedObject-all-2'], + read: ['savedObject-read-1', 'savedObject-read-2'], + }, + ui: ['ui-1', 'ui-2'], + }, }, - ui: ['ui-1', 'ui-2'], - }, + ], description: '', }, }), diff --git a/x-pack/plugins/security/server/authorization/privileges/privileges.ts b/x-pack/plugins/security/server/authorization/privileges/privileges.ts index b25aad30a34238..9a8935f80a174f 100644 --- a/x-pack/plugins/security/server/authorization/privileges/privileges.ts +++ b/x-pack/plugins/security/server/authorization/privileges/privileges.ts @@ -110,10 +110,12 @@ export function privilegesFactory( }, reserved: features.reduce((acc: Record, feature: Feature) => { if (feature.reserved) { - acc[feature.id] = [ - actions.version, - ...featurePrivilegeBuilder.getActions(feature.reserved!.privilege, feature), - ]; + feature.reserved.privileges.forEach(reservedPrivilege => { + acc[reservedPrivilege.id] = [ + actions.version, + ...uniq(featurePrivilegeBuilder.getActions(reservedPrivilege.privilege, feature)), + ]; + }); } return acc; }, {}), diff --git a/x-pack/plugins/security/server/authorization/validate_feature_privileges.test.ts b/x-pack/plugins/security/server/authorization/validate_feature_privileges.test.ts index ac386d287cff19..cd2c7faa263c96 100644 --- a/x-pack/plugins/security/server/authorization/validate_feature_privileges.test.ts +++ b/x-pack/plugins/security/server/authorization/validate_feature_privileges.test.ts @@ -26,13 +26,18 @@ it('allows features with reserved privileges to be defined', () => { privileges: null, reserved: { description: 'foo', - privilege: { - savedObject: { - all: ['foo'], - read: ['bar'], + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, }, - ui: [], - }, + ], }, }); diff --git a/x-pack/plugins/security/server/authorization/validate_reserved_privileges.test.ts b/x-pack/plugins/security/server/authorization/validate_reserved_privileges.test.ts new file mode 100644 index 00000000000000..26af0dadfb2886 --- /dev/null +++ b/x-pack/plugins/security/server/authorization/validate_reserved_privileges.test.ts @@ -0,0 +1,181 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Feature } from '../../../features/server'; +import { validateReservedPrivileges } from './validate_reserved_privileges'; + +it('allows features to be defined without privileges', () => { + const feature: Feature = new Feature({ + id: 'foo', + name: 'foo', + app: [], + privileges: null, + }); + + validateReservedPrivileges([feature]); +}); + +it('allows features with a single reserved privilege to be defined', () => { + const feature: Feature = new Feature({ + id: 'foo', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + validateReservedPrivileges([feature]); +}); + +it('allows multiple features with reserved privileges to be defined', () => { + const feature1: Feature = new Feature({ + id: 'foo', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved-1', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + const feature2: Feature = new Feature({ + id: 'foo2', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved-2', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + validateReservedPrivileges([feature1, feature2]); +}); + +it('prevents a feature from specifying the same reserved privilege id', () => { + const feature1: Feature = new Feature({ + id: 'foo', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + expect(() => validateReservedPrivileges([feature1])).toThrowErrorMatchingInlineSnapshot( + `"Duplicate reserved privilege id detected: reserved. This is not allowed."` + ); +}); + +it('prevents features from sharing a reserved privilege id', () => { + const feature1: Feature = new Feature({ + id: 'foo', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + const feature2: Feature = new Feature({ + id: 'foo2', + name: 'foo', + app: [], + privileges: null, + reserved: { + description: 'foo', + privileges: [ + { + id: 'reserved', + privilege: { + savedObject: { + all: ['foo'], + read: ['bar'], + }, + ui: [], + }, + }, + ], + }, + }); + + expect(() => validateReservedPrivileges([feature1, feature2])).toThrowErrorMatchingInlineSnapshot( + `"Duplicate reserved privilege id detected: reserved. This is not allowed."` + ); +}); diff --git a/x-pack/plugins/security/server/authorization/validate_reserved_privileges.ts b/x-pack/plugins/security/server/authorization/validate_reserved_privileges.ts new file mode 100644 index 00000000000000..0915308fc0f894 --- /dev/null +++ b/x-pack/plugins/security/server/authorization/validate_reserved_privileges.ts @@ -0,0 +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. + */ + +import { Feature } from '../../../features/server'; + +export function validateReservedPrivileges(features: Feature[]) { + const seenPrivilegeIds = new Set(); + + for (const feature of features) { + (feature?.reserved?.privileges ?? []).forEach(({ id }) => { + if (seenPrivilegeIds.has(id)) { + throw new Error(`Duplicate reserved privilege id detected: ${id}. This is not allowed.`); + } + seenPrivilegeIds.add(id); + }); + } +} diff --git a/x-pack/test/api_integration/apis/ml/index.ts b/x-pack/test/api_integration/apis/ml/index.ts index bcba156a64f0e4..4e21faa610bfe2 100644 --- a/x-pack/test/api_integration/apis/ml/index.ts +++ b/x-pack/test/api_integration/apis/ml/index.ts @@ -9,10 +9,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function({ getService, loadTestFile }: FtrProviderContext) { const ml = getService('ml'); - // ML tests need to be disabled in orde to get the ES snapshot with - // https://github.com/elastic/elasticsearch/pull/54713 promoted - // and should be re-enabled as part of https://github.com/elastic/kibana/pull/61980 - describe.skip('Machine Learning', function() { + describe('Machine Learning', function() { this.tags(['mlqa']); before(async () => { diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index 77293ddff3f9f6..9bec3fd076e865 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -41,7 +41,7 @@ export default function({ getService }: FtrProviderContext) { }, global: ['all', 'read'], space: ['all', 'read'], - reserved: ['ml', 'monitoring'], + reserved: ['ml_user', 'ml_admin', 'monitoring'], }; await supertest diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 0b29fc1cac7de7..1f9eac148b3029 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -39,7 +39,7 @@ export default function({ getService }: FtrProviderContext) { }, global: ['all', 'read'], space: ['all', 'read'], - reserved: ['ml', 'monitoring'], + reserved: ['ml_user', 'ml_admin', 'monitoring'], }; await supertest diff --git a/x-pack/test/functional/apps/machine_learning/index.ts b/x-pack/test/functional/apps/machine_learning/index.ts index 143899a61ffb96..47c699e3094916 100644 --- a/x-pack/test/functional/apps/machine_learning/index.ts +++ b/x-pack/test/functional/apps/machine_learning/index.ts @@ -8,10 +8,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function({ getService, loadTestFile }: FtrProviderContext) { const ml = getService('ml'); - // ML tests need to be disabled in orde to get the ES snapshot with - // https://github.com/elastic/elasticsearch/pull/54713 promoted - // and should be re-enabled as part of https://github.com/elastic/kibana/pull/61980 - describe.skip('machine learning', function() { + describe('machine learning', function() { this.tags('ciGroup3'); before(async () => { From 3e4469c99c28f8bb1b517bf2ed41539af73f4ffa Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Wed, 8 Apr 2020 13:13:40 -0400 Subject: [PATCH 32/52] [ML] Analytics: ensure both keyword/text types are excluded for selected excluded field (#62712) * exclude keyword and text types of field selected for exclusion * only show keyword type fields of accepted fields for depVar * make excludes field logic generic * fix regex to ensure escaped dot. reset regex and mainfield * ensure cloned jobs get correct excluded fields * add clarifying comments --- .../create_analytics_form.tsx | 2 +- .../form_options_validation.ts | 2 +- .../hooks/use_create_analytics_form/state.ts | 52 ++++++++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx index e5f30a50ed8f0d..0c83dfb6a2346e 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/create_analytics_form.tsx @@ -250,7 +250,7 @@ export const CreateAnalyticsForm: FC = ({ actions, sta dependentVariableOptions: [] as State['form']['dependentVariableOptions'], }; - await newJobCapsService.initializeFromIndexPattern(indexPattern); + await newJobCapsService.initializeFromIndexPattern(indexPattern, false, false); // Get fields and filter for supported types for job type const { fields } = newJobCapsService; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/form_options_validation.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/form_options_validation.ts index 9c0bc69f4b41f9..4bd03fec7cc729 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/form_options_validation.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/create_analytics_form/form_options_validation.ts @@ -10,7 +10,7 @@ import { ANALYSIS_CONFIG_TYPE } from '../../../../common/analytics'; import { AnalyticsJobType } from '../../hooks/use_create_analytics_form/state'; import { BASIC_NUMERICAL_TYPES, EXTENDED_NUMERICAL_TYPES } from '../../../../common/fields'; -const CATEGORICAL_TYPES = new Set(['ip', 'keyword', 'text']); +const CATEGORICAL_TYPES = new Set(['ip', 'keyword']); // List of system fields we want to ignore for the numeric field check. export const OMIT_FIELDS: string[] = ['_source', '_type', '_index', '_id', '_version', '_score']; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts index 01a39d2ef9f3b6..e121268e65e86c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/hooks/use_create_analytics_form/state.ts @@ -8,6 +8,7 @@ import { EuiComboBoxOptionOption } from '@elastic/eui'; import { DeepPartial, DeepReadonly } from '../../../../../../../common/types/common'; import { checkPermission } from '../../../../../privilege/check_privilege'; import { mlNodesAvailable } from '../../../../../ml_nodes_check'; +import { newJobCapsService } from '../../../../../services/new_job_capabilities_service'; import { isClassificationAnalysis, @@ -158,6 +159,55 @@ export const getInitialState = (): State => ({ estimatedModelMemoryLimit: '', }); +const getExcludesFields = (excluded: string[]) => { + const { fields } = newJobCapsService; + const updatedExcluded: string[] = []; + // Loop through excluded fields to check for multiple types of same field + for (let i = 0; i < excluded.length; i++) { + const fieldName = excluded[i]; + let mainField; + + // No dot in fieldName - it is the main field + if (fieldName.includes('.') === false) { + mainField = fieldName; + } else { + // Dot in fieldName - check if there's a field whose name equals the fieldName with the last dot suffix removed + const regex = /\.[^.]*$/; + const suffixRemovedField = fieldName.replace(regex, ''); + const fieldMatch = newJobCapsService.getFieldById(suffixRemovedField); + + // There's a match - set as the main field + if (fieldMatch !== null) { + mainField = suffixRemovedField; + } else { + // No main field to be found - add the fieldName to updatedExcluded array if it's not already there + if (updatedExcluded.includes(fieldName) === false) { + updatedExcluded.push(fieldName); + } + } + } + + if (mainField !== undefined) { + // Add the main field to the updatedExcluded array if it's not already there + if (updatedExcluded.includes(mainField) === false) { + updatedExcluded.push(mainField); + } + // Create regex to find all other fields whose names begin with main field followed by a dot + const regex = new RegExp(`${mainField}\\..+`); + + // Loop through fields and add fields matching the pattern to updatedExcluded array + for (let j = 0; j < fields.length; j++) { + const field = fields[j].name; + if (updatedExcluded.includes(field) === false && field.match(regex) !== null) { + updatedExcluded.push(field); + } + } + } + } + + return updatedExcluded; +}; + export const getJobConfigFromFormState = ( formState: State['form'] ): DeepPartial => { @@ -175,7 +225,7 @@ export const getJobConfigFromFormState = ( index: formState.destinationIndex, }, analyzed_fields: { - excludes: formState.excludes, + excludes: getExcludesFields(formState.excludes), }, analysis: { outlier_detection: {}, From 56fa9a5776631ad1699393ae323f9e0ebabb117f Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 8 Apr 2020 10:17:05 -0700 Subject: [PATCH 33/52] skip flaky suite (#59030) --- .../components/load_mappings/load_mappings_provider.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx index da4b8e6f6eef24..95630a69818436 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/load_mappings/load_mappings_provider.test.tsx @@ -51,7 +51,8 @@ const openModalWithJsonContent = ({ find, waitFor }: TestBed) => async (json: an }); }; -describe('', () => { +// FLAKY: https://github.com/elastic/kibana/issues/59030 +describe.skip('', () => { test('it should forward valid mapping definition', async () => { const mappingsToLoad = { properties: { From bfdccfdbc54f98e0c41cfc22665c5e424ec462a0 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 8 Apr 2020 11:22:52 -0600 Subject: [PATCH 34/52] [Maps] Show create filter button for top-term tooltip property (#62461) * [Maps] Show create filter button top-term tooltip property * add missing imports * update import for NP migration Co-authored-by: Elastic Machine --- .../maps/public/layers/fields/es_agg_field.ts | 2 +- .../layers/tooltips/es_agg_tooltip_property.ts | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/maps/public/layers/fields/es_agg_field.ts b/x-pack/plugins/maps/public/layers/fields/es_agg_field.ts index 65f952ca01038c..34f7dd4b9578fc 100644 --- a/x-pack/plugins/maps/public/layers/fields/es_agg_field.ts +++ b/x-pack/plugins/maps/public/layers/fields/es_agg_field.ts @@ -90,7 +90,7 @@ export class ESAggField implements IESAggField { async createTooltipProperty(value: string | undefined): Promise { const indexPattern = await this._source.getIndexPattern(); const tooltipProperty = new TooltipProperty(this.getName(), await this.getLabel(), value); - return new ESAggTooltipProperty(tooltipProperty, indexPattern, this); + return new ESAggTooltipProperty(tooltipProperty, indexPattern, this, this.getAggType()); } getValueAggDsl(indexPattern: IndexPattern): unknown | null { diff --git a/x-pack/plugins/maps/public/layers/tooltips/es_agg_tooltip_property.ts b/x-pack/plugins/maps/public/layers/tooltips/es_agg_tooltip_property.ts index 24011c51ddbaad..acd05475f97627 100644 --- a/x-pack/plugins/maps/public/layers/tooltips/es_agg_tooltip_property.ts +++ b/x-pack/plugins/maps/public/layers/tooltips/es_agg_tooltip_property.ts @@ -4,9 +4,25 @@ * you may not use this file except in compliance with the Elastic License. */ import { ESTooltipProperty } from './es_tooltip_property'; +import { AGG_TYPE } from '../../../common/constants'; +import { ITooltipProperty } from './tooltip_property'; +import { IField } from '../fields/field'; +import { IndexPattern } from '../../../../../../src/plugins/data/public'; export class ESAggTooltipProperty extends ESTooltipProperty { + private readonly _aggType: AGG_TYPE; + + constructor( + tooltipProperty: ITooltipProperty, + indexPattern: IndexPattern, + field: IField, + aggType: AGG_TYPE + ) { + super(tooltipProperty, indexPattern, field); + this._aggType = aggType; + } + isFilterable(): boolean { - return false; + return this._aggType === AGG_TYPE.TERMS; } } From 8cacbdfaa5242c3b251ac334c1a31a98da6933a2 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 8 Apr 2020 19:23:16 +0200 Subject: [PATCH 35/52] [Uptime]Alerting UI text in case filter is selected (#62570) Co-authored-by: Elastic Machine --- .../alerts/uptime_alerts_flyout_wrapper.tsx | 4 ++-- .../functional/alerts/alert_monitor_status.tsx | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/x-pack/legacy/plugins/uptime/public/components/connected/alerts/uptime_alerts_flyout_wrapper.tsx b/x-pack/legacy/plugins/uptime/public/components/connected/alerts/uptime_alerts_flyout_wrapper.tsx index b547f8b076f931..a49468ad3dd066 100644 --- a/x-pack/legacy/plugins/uptime/public/components/connected/alerts/uptime_alerts_flyout_wrapper.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/connected/alerts/uptime_alerts_flyout_wrapper.tsx @@ -17,7 +17,7 @@ interface Props { export const UptimeAlertsFlyoutWrapper = ({ alertTypeId, canChangeTrigger }: Props) => { const dispatch = useDispatch(); - const setAddFlyoutVisiblity = (value: React.SetStateAction) => + const setAddFlyoutVisibility = (value: React.SetStateAction) => // @ts-ignore the value here is a boolean, and it works with the action creator function dispatch(setAlertFlyoutVisible(value)); @@ -28,7 +28,7 @@ export const UptimeAlertsFlyoutWrapper = ({ alertTypeId, canChangeTrigger }: Pro alertFlyoutVisible={alertFlyoutVisible} alertTypeId={alertTypeId} canChangeTrigger={canChangeTrigger} - setAlertFlyoutVisibility={setAddFlyoutVisiblity} + setAlertFlyoutVisibility={setAddFlyoutVisibility} /> ); }; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/alerts/alert_monitor_status.tsx b/x-pack/legacy/plugins/uptime/public/components/functional/alerts/alert_monitor_status.tsx index 5143e1c9639048..b86e85f35b17d4 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/alerts/alert_monitor_status.tsx +++ b/x-pack/legacy/plugins/uptime/public/components/functional/alerts/alert_monitor_status.tsx @@ -268,7 +268,21 @@ export const AlertMonitorStatusComponent: React.FC = pr /> } data-test-subj="xpack.uptime.alerts.monitorStatus.numTimesExpression" - description="any monitor is down >" + description={ + filters + ? i18n.translate( + 'xpack.uptime.alerts.monitorStatus.numTimesExpression.matchingMonitors.description', + { + defaultMessage: 'matching monitors are down >', + } + ) + : i18n.translate( + 'xpack.uptime.alerts.monitorStatus.numTimesExpression.anyMonitors.description', + { + defaultMessage: 'any monitor is down >', + } + ) + } id="ping-count" value={`${numTimes} times`} /> From 3598b8c44c84165e282aeff234f51417c3c54f96 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 8 Apr 2020 11:24:04 -0600 Subject: [PATCH 36/52] [Maps] fix attribution overflow with exit full screen button (#62699) * [Maps] fix attribution overflow with exit full screen button * use margin-left instead of padding-left Co-authored-by: Elastic Machine --- .../attribution_control/_attribution_control.scss | 4 ++++ .../widget_overlay/attribution_control/index.js | 2 ++ .../widget_overlay/attribution_control/view.js | 7 ++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss index 9ebaee57fba4db..e319535b4a45ca 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss +++ b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/_attribution_control.scss @@ -4,3 +4,7 @@ pointer-events: all; padding-left: $euiSizeM; } + +.mapAttributionControl__fullScreen { + margin-left: $euiSizeXXL * 4; +} diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js index e73a51ffa2ced9..8bad536b39245a 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js +++ b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/index.js @@ -7,10 +7,12 @@ import { connect } from 'react-redux'; import { AttributionControl } from './view'; import { getLayerList } from '../../../selectors/map_selectors'; +import { getIsFullScreen } from '../../../selectors/ui_selectors'; function mapStateToProps(state = {}) { return { layerList: getLayerList(state), + isFullScreen: getIsFullScreen(state), }; } diff --git a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js index 161b5b81c12554..8f11d1b23376c9 100644 --- a/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js +++ b/x-pack/legacy/plugins/maps/public/connected_components/widget_overlay/attribution_control/view.js @@ -7,6 +7,7 @@ import React, { Fragment } from 'react'; import _ from 'lodash'; import { EuiText, EuiLink } from '@elastic/eui'; +import classNames from 'classnames'; export class AttributionControl extends React.Component { state = { @@ -86,7 +87,11 @@ export class AttributionControl extends React.Component { return null; } return ( -
+
{this._renderAttributions()} From 1c718d676049d77168b5c326a4a92543ce158e8d Mon Sep 17 00:00:00 2001 From: Josh Dover Date: Wed, 8 Apr 2020 11:30:12 -0600 Subject: [PATCH 37/52] Add --filter option to API docs script (#62888) --- src/dev/run_check_published_api_changes.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/dev/run_check_published_api_changes.ts b/src/dev/run_check_published_api_changes.ts index 8bb3fb20cea8b7..ba3cd1280f34bb 100644 --- a/src/dev/run_check_published_api_changes.ts +++ b/src/dev/run_check_published_api_changes.ts @@ -163,6 +163,7 @@ interface Options { accept: boolean; docs: boolean; help: boolean; + filter: string; } async function run( @@ -205,6 +206,7 @@ async function run( const extraFlags: string[] = []; const opts = (getopts(process.argv.slice(2), { boolean: ['accept', 'docs', 'help'], + string: ['filter'], default: { project: undefined, }, @@ -222,6 +224,8 @@ async function run( opts.help = true; } + const folders = ['core/public', 'core/server', 'plugins/data/server', 'plugins/data/public']; + if (opts.help) { process.stdout.write( dedent(chalk` @@ -240,9 +244,13 @@ async function run( {dim # Checks for and automatically accepts and updates documentation for any changes to the Kibana Core API} {dim $} node scripts/check_published_api_changes --accept + {dim # Only checks the core/public directory} + {dim $} node scripts/check_published_api_changes --filter=core/public + Options: --accept {dim Accepts all changes by updating the API Review files and documentation} --docs {dim Updates the Core API documentation} + --only {dim RegExp that folder names must match, folders: [${folders.join(', ')}]} --help {dim Show this message} `) ); @@ -258,9 +266,11 @@ async function run( return false; } - const folders = ['core/public', 'core/server', 'plugins/data/server', 'plugins/data/public']; - - const results = await Promise.all(folders.map(folder => run(folder, { log, opts }))); + const results = await Promise.all( + folders + .filter(folder => (opts.filter.length ? folder.match(opts.filter) : true)) + .map(folder => run(folder, { log, opts })) + ); if (results.find(r => r === false) !== undefined) { process.exitCode = 1; From cbe479b8bd1297a5f54b2b9a3f8ea9f480cbb713 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 8 Apr 2020 12:39:59 -0500 Subject: [PATCH 38/52] [Metrics UI] Invalidate non-count alerts which have no metrics (#62837) --- .../public/components/alerting/metrics/validation.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx b/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx index 55365c3d4c2ba1..d84e46d08a2879 100644 --- a/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx +++ b/x-pack/plugins/infra/public/components/alerting/metrics/validation.tsx @@ -23,6 +23,7 @@ export function validateMetricThreshold({ timeWindowSize: string[]; threshold0: string[]; threshold1: string[]; + metric: string[]; }; } = {}; validationResult.errors = errors; @@ -41,6 +42,7 @@ export function validateMetricThreshold({ timeWindowSize: [], threshold0: [], threshold1: [], + metric: [], }; if (!c.aggType) { errors[id].aggField.push( @@ -73,6 +75,14 @@ export function validateMetricThreshold({ }) ); } + + if (!c.metric && c.aggType !== 'count') { + errors[id].metric.push( + i18n.translate('xpack.infra.metrics.alertFlyout.error.metricRequired', { + defaultMessage: 'Metric is required.', + }) + ); + } }); return validationResult; From 941a4879ae2072344cc3be5846c47c8e2340d153 Mon Sep 17 00:00:00 2001 From: Zacqary Adam Xeper Date: Wed, 8 Apr 2020 12:40:27 -0500 Subject: [PATCH 39/52] [Alerting] Fix validation support for nested IErrorObjects (#62833) * [Alerting] Add validation support for nested IErrorObjects * Typecheck fix * Fix recursion crash when errors are strings * Typecheck fix --- .../public/application/sections/alert_form/alert_add.tsx | 9 ++++++++- .../public/common/expression_items/of.tsx | 3 ++- .../public/common/expression_items/threshold.tsx | 3 ++- x-pack/plugins/triggers_actions_ui/public/types.ts | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx index e44e20751b315e..e025248fad52e6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ import React, { useCallback, useReducer, useState } from 'react'; +import { isObject } from 'lodash'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiTitle, @@ -83,7 +84,7 @@ export const AlertAdd = ({ ...(alertType ? alertType.validate(alert.params).errors : []), ...validateBaseProperties(alert).errors, } as IErrorObject; - const hasErrors = !!Object.keys(errors).find(errorKey => errors[errorKey].length >= 1); + const hasErrors = parseErrors(errors); const actionsErrors: Array<{ errors: IErrorObject; @@ -213,3 +214,9 @@ export const AlertAdd = ({ ); }; + +const parseErrors: (errors: IErrorObject) => boolean = errors => + !!Object.values(errors).find(errorList => { + if (isObject(errorList)) return parseErrors(errorList as IErrorObject); + return errorList.length >= 1; + }); diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/of.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/of.tsx index d399f6136690b7..3de0a99ccbbd91 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/of.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/of.tsx @@ -17,13 +17,14 @@ import { } from '@elastic/eui'; import { builtInAggregationTypes } from '../constants'; import { AggregationType } from '../types'; +import { IErrorObject } from '../../types'; import { ClosablePopoverTitle } from './components'; import './of.scss'; interface OfExpressionProps { aggType: string; aggField?: string; - errors: { [key: string]: string[] }; + errors: IErrorObject; onChangeSelectedAggField: (selectedAggType?: string) => void; fields: Record; customAggTypesOptions?: { diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/threshold.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/threshold.tsx index fb3ff9ceb09265..99dd7b63383fbf 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/threshold.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/threshold.tsx @@ -18,11 +18,12 @@ import { } from '@elastic/eui'; import { builtInComparators } from '../constants'; import { Comparator } from '../types'; +import { IErrorObject } from '../../types'; import { ClosablePopoverTitle } from './components'; interface ThresholdExpressionProps { thresholdComparator: string; - errors: { [key: string]: string[] }; + errors: IErrorObject; onChangeSelectedThresholdComparator: (selectedThresholdComparator?: string) => void; onChangeSelectedThreshold: (selectedThreshold?: number[]) => void; customComparators?: { diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 31c77833cc0e87..7f78d327d01225 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -112,5 +112,5 @@ export interface AlertTypeModel { } export interface IErrorObject { - [key: string]: string[]; + [key: string]: string | string[] | IErrorObject; } From d4f2bd744dc64eb530277927c67807c2a5fb9ba2 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Wed, 8 Apr 2020 10:45:15 -0700 Subject: [PATCH 40/52] Exclude disabled datasources and streams from agent config (#62869) --- .../datasource_to_agent_datasource.test.ts | 42 ++++++++++++++++++- .../datasource_to_agent_datasource.ts | 18 ++++---- .../server/services/agent_config.ts | 6 +-- 3 files changed, 53 insertions(+), 13 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 ab039be8e7c22d..b897c03e89f821 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 @@ -41,7 +41,7 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { }, { id: 'test-logs-bar', - enabled: false, + enabled: true, dataset: 'bar', config: { barVar: { value: 'bar-value' }, @@ -119,7 +119,7 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { }, { id: 'test-logs-bar', - enabled: false, + enabled: true, dataset: 'bar', barVar: 'bar-value', barVar2: [1, 2], @@ -140,6 +140,44 @@ describe('Ingest Manager - storedDatasourceToAgentDatasource', () => { }); }); + it('returns agent datasource config without disabled streams', () => { + expect( + storedDatasourceToAgentDatasource({ + ...mockDatasource, + inputs: [ + { + ...mockInput, + streams: [{ ...mockInput.streams[0] }, { ...mockInput.streams[1], enabled: false }], + }, + ], + }) + ).toEqual({ + id: 'mock-datasource', + namespace: 'default', + enabled: true, + use_output: 'default', + inputs: [ + { + type: 'test-logs', + enabled: true, + inputVar: 'input-value', + inputVar3: { + testField: 'test', + }, + streams: [ + { + id: 'test-logs-foo', + enabled: true, + dataset: 'foo', + fooVar: 'foo-value', + fooVar2: [1, 2], + }, + ], + }, + ], + }); + }); + it('returns agent datasource config without disabled inputs', () => { expect( storedDatasourceToAgentDatasource({ 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 f58eaacb7be673..20bbbec8919d63 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 @@ -51,14 +51,16 @@ export const storedDatasourceToAgentDatasource = ( const fullInput = { ...input, ...Object.entries(input.config || {}).reduce(configReducer, {}), - streams: input.streams.map(stream => { - const fullStream = { - ...stream, - ...Object.entries(stream.config || {}).reduce(configReducer, {}), - }; - delete fullStream.config; - return fullStream; - }), + streams: input.streams + .filter(stream => stream.enabled) + .map(stream => { + const fullStream = { + ...stream, + ...Object.entries(stream.config || {}).reduce(configReducer, {}), + }; + delete fullStream.config; + return fullStream; + }), }; delete fullInput.config; return fullInput; diff --git a/x-pack/plugins/ingest_manager/server/services/agent_config.ts b/x-pack/plugins/ingest_manager/server/services/agent_config.ts index a941494072ae3d..309ddca3784c29 100644 --- a/x-pack/plugins/ingest_manager/server/services/agent_config.ts +++ b/x-pack/plugins/ingest_manager/server/services/agent_config.ts @@ -319,9 +319,9 @@ class AgentConfigService { return outputs; }, {} as FullAgentConfig['outputs']), }, - datasources: (config.datasources as Datasource[]).map(ds => - storedDatasourceToAgentDatasource(ds) - ), + datasources: (config.datasources as Datasource[]) + .filter(datasource => datasource.enabled) + .map(ds => storedDatasourceToAgentDatasource(ds)), revision: config.revision, }; From 184f59447bfb1cb5ffc83e0e8d1df8bfe282f9d8 Mon Sep 17 00:00:00 2001 From: Oliver Gupte Date: Wed, 8 Apr 2020 11:13:39 -0700 Subject: [PATCH 41/52] [APM] Service map - fixes layout issues for maps with no rum services (#62887) * Closes #62878 in Service Maps by improving the selection algorithm for root nodes * Fixes some latent centering issues when navigating in the service map. * Removes unused imports * Added layoutstopDelayTimeout to cleanup step --- .../components/app/ServiceMap/Cytoscape.tsx | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Cytoscape.tsx b/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Cytoscape.tsx index 21bedc204f48b7..e4b656ae8160d7 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Cytoscape.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ServiceMap/Cytoscape.tsx @@ -14,8 +14,6 @@ import React, { useState } from 'react'; import { debounce } from 'lodash'; -import { isRumAgentName } from '../../../../../../../plugins/apm/common/agent_name'; -import { AGENT_NAME } from '../../../../../../../plugins/apm/common/elasticsearch_fieldnames'; import { animationOptions, cytoscapeOptions, @@ -96,10 +94,15 @@ function getLayoutOptions( } function selectRoots(cy: cytoscape.Core): string[] { - const nodes = cy.nodes(); - const roots = nodes.roots(); - const rumNodes = nodes.filter(node => isRumAgentName(node.data(AGENT_NAME))); - return rumNodes.union(roots).map(node => node.id()); + const bfs = cy.elements().bfs({ + roots: cy.elements().leaves() + }); + const furthestNodeFromLeaves = bfs.path.last(); + return cy + .elements() + .roots() + .union(furthestNodeFromLeaves) + .map(el => el.id()); } export function Cytoscape({ @@ -168,15 +171,26 @@ export function Cytoscape({ layout.run(); } }; + let layoutstopDelayTimeout: NodeJS.Timeout; const layoutstopHandler: cytoscape.EventHandler = event => { - event.cy.animate({ - ...animationOptions, - center: { - eles: serviceName - ? event.cy.getElementById(serviceName) - : event.cy.collection() + // This 0ms timer is necessary to prevent a race condition + // between the layout finishing rendering and viewport centering + layoutstopDelayTimeout = setTimeout(() => { + if (serviceName) { + event.cy.animate({ + ...animationOptions, + fit: { + eles: event.cy.elements(), + padding: nodeHeight + }, + center: { + eles: event.cy.getElementById(serviceName) + } + }); + } else { + event.cy.fit(undefined, nodeHeight); } - }); + }, 0); }; // debounce hover tracking so it doesn't spam telemetry with redundant events const trackNodeEdgeHover = debounce( @@ -231,6 +245,7 @@ export function Cytoscape({ cy.removeListener('select', 'node', selectHandler); cy.removeListener('unselect', 'node', unselectHandler); } + clearTimeout(layoutstopDelayTimeout); }; }, [cy, height, serviceName, trackApmEvent, width]); From 369ddff95192373923fb5323ef06b70868303c4c Mon Sep 17 00:00:00 2001 From: Spencer Date: Wed, 8 Apr 2020 12:15:48 -0700 Subject: [PATCH 42/52] [kbn/optimizer] link to kibanaReact/kibanaUtils plugins (#62720) * [kbn/optimizer] link to data/kibanaReact/kibanaUtils plugins * depend on normalize-path package * typos * avoid loading kibanaUtils and kibanaReact from urls * update types and tests, now that whole plugin is exported to window * update snapshot, removed export of `plugins` property * fix condition, ignore things NOT in data/react/utils * make es_ui_shared a "static bundle" too * move kibana_utils/common usage to /public * convert some more /common usage to /public * use async-download/ordered-execution for bootstrap script * fix typo * remove kibanaUtils bundle * remove kibanaReact bundle * Revert "remove kibanaReact bundle" This reverts commit f14e9ee604ae8f0bb664a04c6966e337254d2659. * Revert "remove kibanaUtils bundle" This reverts commit a64b2a7f647f44f6d1941dba4ba39076ce5d74d9. * stop linking to the data plugin * add comment pointing to async-download info Co-authored-by: spalger Co-authored-by: Elastic Machine --- packages/kbn-optimizer/package.json | 1 + .../basic_optimization.test.ts.snap | 4 +- .../src/worker/webpack.config.ts | 68 ++++++++++++++++-- packages/kbn-ui-shared-deps/polyfills.js | 7 ++ src/core/public/plugins/plugin_loader.test.ts | 2 +- src/core/public/plugins/plugin_loader.ts | 33 ++++++--- .../public/input_control_vis_type.ts | 2 +- .../kibana/public/discover/kibana_services.ts | 4 +- .../vis_type_metric/public/services.ts | 2 +- .../vis_type_table/public/services.ts | 2 +- .../vis_type_tagcloud/public/services.ts | 2 +- .../public/metrics_type.ts | 2 +- .../public/__mocks__/services.ts | 2 +- .../vis_type_vega/public/vega_type.ts | 2 +- .../vis_type_vislib/public/services.ts | 2 +- .../ui/ui_render/bootstrap/template.js.hbs | 69 ++++++++----------- src/plugins/discover/public/services.ts | 2 +- .../embeddable_action_storage.test.ts | 2 +- src/plugins/es_ui_shared/kibana.json | 5 ++ src/plugins/es_ui_shared/public/index.ts | 8 +++ src/plugins/kibana_react/kibana.json | 5 ++ .../public/adapters/react_to_ui_component.ts | 2 +- .../adapters/ui_to_react_component.test.tsx | 2 +- .../public/adapters/ui_to_react_component.ts | 2 +- src/plugins/kibana_react/public/index.ts | 8 +++ src/plugins/kibana_utils/kibana.json | 5 ++ src/plugins/kibana_utils/public/index.ts | 11 ++- .../ui_actions/public/actions/action.ts | 2 +- .../public/actions/action_definition.ts | 2 +- 29 files changed, 182 insertions(+), 78 deletions(-) create mode 100644 src/plugins/es_ui_shared/kibana.json create mode 100644 src/plugins/kibana_react/kibana.json create mode 100644 src/plugins/kibana_utils/kibana.json diff --git a/packages/kbn-optimizer/package.json b/packages/kbn-optimizer/package.json index b648004760d7c7..b3e5a8c518682e 100644 --- a/packages/kbn-optimizer/package.json +++ b/packages/kbn-optimizer/package.json @@ -32,6 +32,7 @@ "json-stable-stringify": "^1.0.1", "loader-utils": "^1.2.3", "node-sass": "^4.13.0", + "normalize-path": "^3.0.0", "postcss-loader": "^3.0.0", "raw-loader": "^3.1.0", "resolve-url-loader": "^3.1.1", diff --git a/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap b/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap index d52d89eebe2f13..4b4bb1282d9395 100644 --- a/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap +++ b/packages/kbn-optimizer/src/integration_tests/__snapshots__/basic_optimization.test.ts.snap @@ -57,6 +57,6 @@ OptimizerConfig { } `; -exports[`builds expected bundles, saves bundle counts to metadata: bar bundle 1`] = `"var __kbnBundles__=typeof __kbnBundles__===\\"object\\"?__kbnBundles__:{};__kbnBundles__[\\"plugin/bar\\"]=function(modules){function webpackJsonpCallback(data){var chunkIds=data[0];var moreModules=data[1];var moduleId,chunkId,i=0,resolves=[];for(;i bundle.id === p.id)) { + return; + } + + // ignore requests that don't include a /data/public, /kibana_react/public, or + // /kibana_utils/public segment as a cheap way to avoid doing path resolution + // for paths that couldn't possibly resolve to what we're looking for + const reqToStaticBundle = STATIC_BUNDLE_PLUGINS.some(p => + request.includes(`/${p.dirname}/public`) + ); + if (!reqToStaticBundle) { + return; + } + + // determine the most acurate resolution string we can without running full resolution + const rootRelative = normalizePath( + Path.relative(bundle.sourceRoot, Path.resolve(context, request)) + ); + for (const { id, dirname } of STATIC_BUNDLE_PLUGINS) { + if (rootRelative === `src/plugins/${dirname}/public`) { + return `__kbnBundles__['plugin/${id}']`; + } + } + + // import doesn't match a root public import + return undefined; +} + export function getWebpackConfig(bundle: Bundle, worker: WorkerConfig) { const commonConfig: webpack.Configuration = { node: { fs: 'empty' }, @@ -63,7 +117,6 @@ export function getWebpackConfig(bundle: Bundle, worker: WorkerConfig) { // When the entry point is loaded, assign it's exported `plugin` // value to a key on the global `__kbnBundles__` object. library: ['__kbnBundles__', `plugin/${bundle.id}`], - libraryExport: 'plugin', } : {}), }, @@ -72,9 +125,16 @@ export function getWebpackConfig(bundle: Bundle, worker: WorkerConfig) { noEmitOnErrors: true, }, - externals: { - ...UiSharedDeps.externals, - }, + externals: [ + UiSharedDeps.externals, + function(context, request, cb) { + try { + cb(undefined, dynamicExternals(bundle, context, request)); + } catch (error) { + cb(error, undefined); + } + }, + ], plugins: [new CleanWebpackPlugin(), new DisallowedSyntaxPlugin()], diff --git a/packages/kbn-ui-shared-deps/polyfills.js b/packages/kbn-ui-shared-deps/polyfills.js index d2305d643e4d20..1f1392b02baffa 100644 --- a/packages/kbn-ui-shared-deps/polyfills.js +++ b/packages/kbn-ui-shared-deps/polyfills.js @@ -20,6 +20,13 @@ require('core-js/stable'); require('regenerator-runtime/runtime'); require('custom-event-polyfill'); + +if (typeof window.Event === 'object') { + // IE11 doesn't support unknown event types, required by react-use + // https://github.com/streamich/react-use/issues/73 + window.Event = CustomEvent; +} + require('whatwg-fetch'); require('abortcontroller-polyfill/dist/polyfill-patch-fetch'); require('./vendor/childnode_remove_polyfill'); diff --git a/src/core/public/plugins/plugin_loader.test.ts b/src/core/public/plugins/plugin_loader.test.ts index e5cbffc3e2d943..b4e2c3095f14a7 100644 --- a/src/core/public/plugins/plugin_loader.test.ts +++ b/src/core/public/plugins/plugin_loader.test.ts @@ -71,7 +71,7 @@ test('`loadPluginBundles` creates a script tag and loads initializer', async () // Setup a fake initializer as if a plugin bundle had actually been loaded. const fakeInitializer = jest.fn(); - coreWindow.__kbnBundles__['plugin/plugin-a'] = fakeInitializer; + coreWindow.__kbnBundles__['plugin/plugin-a'] = { plugin: fakeInitializer }; // Call the onload callback fakeScriptTag.onload(); await expect(loadPromise).resolves.toEqual(fakeInitializer); diff --git a/src/core/public/plugins/plugin_loader.ts b/src/core/public/plugins/plugin_loader.ts index 63aba0dde2af81..bf7711055e97ba 100644 --- a/src/core/public/plugins/plugin_loader.ts +++ b/src/core/public/plugins/plugin_loader.ts @@ -32,7 +32,7 @@ export type UnknownPluginInitializer = PluginInitializer new Promise>( (resolve, reject) => { - const script = document.createElement('script'); const coreWindow = (window as unknown) as CoreWindow; + const exportId = `plugin/${pluginName}`; + + const readPluginExport = () => { + const PluginExport: any = coreWindow.__kbnBundles__[exportId]; + if (typeof PluginExport?.plugin !== 'function') { + reject( + new Error(`Definition of plugin "${pluginName}" should be a function (${bundlePath}).`) + ); + } else { + resolve( + PluginExport.plugin as PluginInitializer + ); + } + }; + if (coreWindow.__kbnBundles__[exportId]) { + readPluginExport(); + return; + } + + 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`); script.setAttribute('src', bundlePath); @@ -89,15 +108,7 @@ export const loadPluginBundle: LoadPluginBundle = < // Wire up resolve and reject script.onload = () => { cleanupTag(); - - const initializer = coreWindow.__kbnBundles__[`plugin/${pluginName}`]; - if (!initializer || typeof initializer !== 'function') { - reject( - new Error(`Definition of plugin "${pluginName}" should be a function (${bundlePath}).`) - ); - } else { - resolve(initializer as PluginInitializer); - } + readPluginExport(); }; script.onerror = () => { diff --git a/src/legacy/core_plugins/input_control_vis/public/input_control_vis_type.ts b/src/legacy/core_plugins/input_control_vis/public/input_control_vis_type.ts index 023e6ebb7125ce..badea68eec19f9 100644 --- a/src/legacy/core_plugins/input_control_vis/public/input_control_vis_type.ts +++ b/src/legacy/core_plugins/input_control_vis/public/input_control_vis_type.ts @@ -23,7 +23,7 @@ import { createInputControlVisController } from './vis_controller'; import { getControlsTab } from './components/editor/controls_tab'; import { OptionsTab } from './components/editor/options_tab'; import { InputControlVisDependencies } from './plugin'; -import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/common'; +import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/public'; export function createInputControlVisTypeDefinition(deps: InputControlVisDependencies) { const InputControlVisController = createInputControlVisController(deps); 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 e6421142f66666..98679a8f24d16a 100644 --- a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts +++ b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts @@ -17,6 +17,8 @@ * under the License. */ import { DiscoverServices } from './build_services'; +import { createGetterSetter } from '../../../../../plugins/kibana_utils/public'; +import { search } from '../../../../../plugins/data/public'; let angularModule: any = null; let services: DiscoverServices | null = null; @@ -50,8 +52,6 @@ export const [getUrlTracker, setUrlTracker] = createGetterSetter<{ setTrackedUrl: (url: string) => void; }>('urlTracker'); -import { search } from '../../../../../plugins/data/public'; -import { createGetterSetter } from '../../../../../plugins/kibana_utils/common'; export const { getRequestInspectorStats, getResponseInspectorStats, tabifyAggResponse } = search; export { unhashUrl, diff --git a/src/legacy/core_plugins/vis_type_metric/public/services.ts b/src/legacy/core_plugins/vis_type_metric/public/services.ts index 5af11bc7f0b039..b303ccd5aeed20 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/services.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/common'; +import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; import { DataPublicPluginStart } from '../../../../plugins/data/public'; export const [getFormatService, setFormatService] = createGetterSetter< diff --git a/src/legacy/core_plugins/vis_type_table/public/services.ts b/src/legacy/core_plugins/vis_type_table/public/services.ts index 08efed733cafe5..b4b491ac7a5552 100644 --- a/src/legacy/core_plugins/vis_type_table/public/services.ts +++ b/src/legacy/core_plugins/vis_type_table/public/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/common'; +import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; import { DataPublicPluginStart } from '../../../../plugins/data/public'; export const [getFormatService, setFormatService] = createGetterSetter< diff --git a/src/legacy/core_plugins/vis_type_tagcloud/public/services.ts b/src/legacy/core_plugins/vis_type_tagcloud/public/services.ts index fef46282eb8ddd..272bed3e91a08c 100644 --- a/src/legacy/core_plugins/vis_type_tagcloud/public/services.ts +++ b/src/legacy/core_plugins/vis_type_tagcloud/public/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/common'; +import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; import { DataPublicPluginStart } from '../../../../plugins/data/public'; export const [getFormatService, setFormatService] = createGetterSetter< diff --git a/src/legacy/core_plugins/vis_type_timeseries/public/metrics_type.ts b/src/legacy/core_plugins/vis_type_timeseries/public/metrics_type.ts index 30c62d778933bf..1db35c406eb132 100644 --- a/src/legacy/core_plugins/vis_type_timeseries/public/metrics_type.ts +++ b/src/legacy/core_plugins/vis_type_timeseries/public/metrics_type.ts @@ -25,7 +25,7 @@ import { metricsRequestHandler } from './request_handler'; import { EditorController } from './editor_controller'; // @ts-ignore import { PANEL_TYPES } from '../../../../plugins/vis_type_timeseries/common/panel_types'; -import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/common'; +import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/public'; export const metricsVisDefinition = { name: 'metrics', diff --git a/src/legacy/core_plugins/vis_type_vega/public/__mocks__/services.ts b/src/legacy/core_plugins/vis_type_vega/public/__mocks__/services.ts index 64a9aaaf3b7a68..b2f3e5b2241e61 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/__mocks__/services.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/__mocks__/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../../../../plugins/kibana_utils/common'; +import { createGetterSetter } from '../../../../../plugins/kibana_utils/public'; import { DataPublicPluginStart } from '../../../../../plugins/data/public'; import { IUiSettingsClient, NotificationsStart, SavedObjectsStart } from 'kibana/public'; import { dataPluginMock } from '../../../../../plugins/data/public/mocks'; diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts b/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts index 5d9ed5c8df91c5..f56d7682efc6f9 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts @@ -21,7 +21,7 @@ import { i18n } from '@kbn/i18n'; import { DefaultEditorSize } from '../../../../plugins/vis_default_editor/public'; import { VegaVisualizationDependencies } from './plugin'; import { VegaVisEditor } from './components'; -import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/common'; +import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/public'; import { createVegaRequestHandler } from './vega_request_handler'; // @ts-ignore diff --git a/src/legacy/core_plugins/vis_type_vislib/public/services.ts b/src/legacy/core_plugins/vis_type_vislib/public/services.ts index da50e227d84d20..0d6b1b5e8de589 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/services.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../../../plugins/kibana_utils/common'; +import { createGetterSetter } from '../../../../plugins/kibana_utils/public'; import { DataPublicPluginStart } from '../../../../plugins/data/public'; export const [getDataActions, setDataActions] = createGetterSetter< diff --git a/src/legacy/ui/ui_render/bootstrap/template.js.hbs b/src/legacy/ui/ui_render/bootstrap/template.js.hbs index ad4aa97d8ea7a0..1093153edbbf7e 100644 --- a/src/legacy/ui/ui_render/bootstrap/template.js.hbs +++ b/src/legacy/ui/ui_render/bootstrap/template.js.hbs @@ -30,33 +30,27 @@ if (window.__kbnStrictCsp__ && window.__kbnCspNotEnforced__) { function loadStyleSheet(url, cb) { var dom = document.createElement('link'); + dom.rel = 'stylesheet'; + dom.type = 'text/css'; + dom.href = url; dom.addEventListener('error', failure); - dom.setAttribute('rel', 'stylesheet'); - dom.setAttribute('type', 'text/css'); - dom.setAttribute('href', url); dom.addEventListener('load', cb); document.head.appendChild(dom); } function loadScript(url, cb) { var dom = document.createElement('script'); - dom.setAttribute('async', ''); + {{!-- NOTE: async = false is used to trigger async-download/ordered-execution as outlined here: https://www.html5rocks.com/en/tutorials/speed/script-loading/ --}} + dom.async = false; + dom.src = url; dom.addEventListener('error', failure); - dom.setAttribute('src', url); dom.addEventListener('load', cb); document.head.appendChild(dom); } - function load(urlSet, cb) { - if (urlSet.deps) { - load({ urls: urlSet.deps }, function () { - load({ urls: urlSet.urls }, cb); - }); - return; - } - - var pending = urlSet.urls.length; - urlSet.urls.forEach(function (url) { + function load(urls, cb) { + var pending = urls.length; + urls.forEach(function (url) { var innerCb = function () { pending = pending - 1; if (pending === 0 && typeof cb === 'function') { @@ -74,36 +68,27 @@ if (window.__kbnStrictCsp__ && window.__kbnCspNotEnforced__) { }); } - load({ - deps: [ + load([ {{#each sharedJsDepFilenames}} '{{../regularBundlePath}}/kbn-ui-shared-deps/{{this}}', {{/each}} - ], - urls: [ - { - deps: [ - '{{regularBundlePath}}/kbn-ui-shared-deps/{{sharedJsFilename}}', - { - deps: [ - '{{dllBundlePath}}/vendors_runtime.bundle.dll.js' - ], - urls: [ - {{#each dllJsChunks}} - '{{this}}', - {{/each}} - ] - }, - '{{regularBundlePath}}/commons.bundle.js', - ], - urls: [ - '{{regularBundlePath}}/{{appId}}.bundle.js', - {{#each styleSheetPaths}} - '{{this}}', - {{/each}} - ] - } - ] + '{{regularBundlePath}}/kbn-ui-shared-deps/{{sharedJsFilename}}', + '{{dllBundlePath}}/vendors_runtime.bundle.dll.js', + {{#each dllJsChunks}} + '{{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' + ], function () { + load([ + '{{regularBundlePath}}/{{appId}}.bundle.js', + {{#each styleSheetPaths}} + '{{this}}', + {{/each}} + ]) }); }; } diff --git a/src/plugins/discover/public/services.ts b/src/plugins/discover/public/services.ts index 3a28759d82b71d..37e2144800ea11 100644 --- a/src/plugins/discover/public/services.ts +++ b/src/plugins/discover/public/services.ts @@ -17,7 +17,7 @@ * under the License. */ -import { createGetterSetter } from '../../kibana_utils/common'; +import { createGetterSetter } from '../../kibana_utils/public'; import { DocViewsRegistry } from './doc_views/doc_views_registry'; export const [getDocViewsRegistry, setDocViewsRegistry] = createGetterSetter( diff --git a/src/plugins/embeddable/public/lib/embeddables/embeddable_action_storage.test.ts b/src/plugins/embeddable/public/lib/embeddables/embeddable_action_storage.test.ts index 56facc37fc6661..ddd84b05443455 100644 --- a/src/plugins/embeddable/public/lib/embeddables/embeddable_action_storage.test.ts +++ b/src/plugins/embeddable/public/lib/embeddables/embeddable_action_storage.test.ts @@ -21,7 +21,7 @@ import { Embeddable } from './embeddable'; import { EmbeddableInput } from './i_embeddable'; import { ViewMode } from '../types'; import { EmbeddableActionStorage, SerializedEvent } from './embeddable_action_storage'; -import { of } from '../../../../kibana_utils/common'; +import { of } from '../../../../kibana_utils/public'; class TestEmbeddable extends Embeddable { public readonly type = 'test'; diff --git a/src/plugins/es_ui_shared/kibana.json b/src/plugins/es_ui_shared/kibana.json new file mode 100644 index 00000000000000..5a3db3b3440901 --- /dev/null +++ b/src/plugins/es_ui_shared/kibana.json @@ -0,0 +1,5 @@ +{ + "id": "esUiShared", + "version": "kibana", + "ui": true +} diff --git a/src/plugins/es_ui_shared/public/index.ts b/src/plugins/es_ui_shared/public/index.ts index 944b800c66a284..6db6248f4c68fa 100644 --- a/src/plugins/es_ui_shared/public/index.ts +++ b/src/plugins/es_ui_shared/public/index.ts @@ -35,3 +35,11 @@ export { export { indices } from './indices'; export { useUIAceKeyboardMode } from './use_ui_ace_keyboard_mode'; + +/** dummy plugin, we just want esUiShared to have its own bundle */ +export function plugin() { + return new (class EsUiSharedPlugin { + setup() {} + start() {} + })(); +} diff --git a/src/plugins/kibana_react/kibana.json b/src/plugins/kibana_react/kibana.json new file mode 100644 index 00000000000000..0add1bee84ae02 --- /dev/null +++ b/src/plugins/kibana_react/kibana.json @@ -0,0 +1,5 @@ +{ + "id": "kibanaReact", + "version": "kibana", + "ui": true +} diff --git a/src/plugins/kibana_react/public/adapters/react_to_ui_component.ts b/src/plugins/kibana_react/public/adapters/react_to_ui_component.ts index b4007b30cf8cab..21bba92ada4c16 100644 --- a/src/plugins/kibana_react/public/adapters/react_to_ui_component.ts +++ b/src/plugins/kibana_react/public/adapters/react_to_ui_component.ts @@ -19,7 +19,7 @@ import { ComponentType, createElement as h } from 'react'; import { render as renderReact, unmountComponentAtNode } from 'react-dom'; -import { UiComponent, UiComponentInstance } from '../../../kibana_utils/common'; +import { UiComponent, UiComponentInstance } from '../../../kibana_utils/public'; /** * Transform a React component into a `UiComponent`. diff --git a/src/plugins/kibana_react/public/adapters/ui_to_react_component.test.tsx b/src/plugins/kibana_react/public/adapters/ui_to_react_component.test.tsx index 939d372b9997f7..aefbd66e50fcf4 100644 --- a/src/plugins/kibana_react/public/adapters/ui_to_react_component.test.tsx +++ b/src/plugins/kibana_react/public/adapters/ui_to_react_component.test.tsx @@ -19,7 +19,7 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { UiComponent } from '../../../kibana_utils/common'; +import { UiComponent } from '../../../kibana_utils/public'; import { uiToReactComponent } from './ui_to_react_component'; import { reactToUiComponent } from './react_to_ui_component'; diff --git a/src/plugins/kibana_react/public/adapters/ui_to_react_component.ts b/src/plugins/kibana_react/public/adapters/ui_to_react_component.ts index 9b34880cf4fe3a..ee99ea36726727 100644 --- a/src/plugins/kibana_react/public/adapters/ui_to_react_component.ts +++ b/src/plugins/kibana_react/public/adapters/ui_to_react_component.ts @@ -18,7 +18,7 @@ */ import { FC, createElement as h, useRef, useLayoutEffect, useMemo } from 'react'; -import { UiComponent, UiComponentInstance } from '../../../kibana_utils/common'; +import { UiComponent, UiComponentInstance } from '../../../kibana_utils/public'; /** * Transforms `UiComponent` into a React component. diff --git a/src/plugins/kibana_react/public/index.ts b/src/plugins/kibana_react/public/index.ts index e1689e38dbfe05..9ad9f14ac5659d 100644 --- a/src/plugins/kibana_react/public/index.ts +++ b/src/plugins/kibana_react/public/index.ts @@ -31,3 +31,11 @@ export { Markdown, MarkdownSimple } from './markdown'; export { reactToUiComponent, uiToReactComponent } from './adapters'; export { useUrlTracker } from './use_url_tracker'; export { toMountPoint } from './util'; + +/** dummy plugin, we just want kibanaReact to have its own bundle */ +export function plugin() { + return new (class KibanaReactPlugin { + setup() {} + start() {} + })(); +} diff --git a/src/plugins/kibana_utils/kibana.json b/src/plugins/kibana_utils/kibana.json new file mode 100644 index 00000000000000..6fa39d82d10215 --- /dev/null +++ b/src/plugins/kibana_utils/kibana.json @@ -0,0 +1,5 @@ +{ + "id": "kibanaUtils", + "version": "kibana", + "ui": true +} diff --git a/src/plugins/kibana_utils/public/index.ts b/src/plugins/kibana_utils/public/index.ts index 1876e688c989ac..2f139050e994ab 100644 --- a/src/plugins/kibana_utils/public/index.ts +++ b/src/plugins/kibana_utils/public/index.ts @@ -19,7 +19,6 @@ export { calculateObjectHash, - createGetterSetter, defer, Defer, Get, @@ -31,6 +30,8 @@ export { UiComponent, UiComponentInstance, url, + createGetterSetter, + defaultFeedbackMessage, } from '../common'; export * from './core'; export * from './errors'; @@ -75,3 +76,11 @@ export { } from './state_sync'; export { removeQueryParam, redirectWhenMissing, ensureDefaultIndexPattern } from './history'; export { applyDiff } from './state_management/utils/diff_object'; + +/** dummy plugin, we just want kibanaUtils to have its own bundle */ +export function plugin() { + return new (class KibanaUtilsPlugin { + setup() {} + start() {} + })(); +} diff --git a/src/plugins/ui_actions/public/actions/action.ts b/src/plugins/ui_actions/public/actions/action.ts index 2b2fc004a84c62..f532c2c8aa2193 100644 --- a/src/plugins/ui_actions/public/actions/action.ts +++ b/src/plugins/ui_actions/public/actions/action.ts @@ -17,7 +17,7 @@ * under the License. */ -import { UiComponent } from 'src/plugins/kibana_utils/common'; +import { UiComponent } from 'src/plugins/kibana_utils/public'; import { ActionType, ActionContextMapping } from '../types'; export type ActionByType = Action; diff --git a/src/plugins/ui_actions/public/actions/action_definition.ts b/src/plugins/ui_actions/public/actions/action_definition.ts index c590cf8f34ee07..3eaa13572a826e 100644 --- a/src/plugins/ui_actions/public/actions/action_definition.ts +++ b/src/plugins/ui_actions/public/actions/action_definition.ts @@ -17,7 +17,7 @@ * under the License. */ -import { UiComponent } from 'src/plugins/kibana_utils/common'; +import { UiComponent } from 'src/plugins/kibana_utils/public'; import { ActionType, ActionContextMapping } from '../types'; export interface ActionDefinition { From f84773faed53cf0c3683406d5eaccb5f51975cda Mon Sep 17 00:00:00 2001 From: Josh Dover Date: Wed, 8 Apr 2020 13:16:32 -0600 Subject: [PATCH 43/52] Add basic StatusService (#60335) --- .../kibana-plugin-core-server.coresetup.md | 1 + ...ana-plugin-core-server.coresetup.status.md | 13 + ...in-core-server.corestatus.elasticsearch.md | 11 + .../kibana-plugin-core-server.corestatus.md | 21 ++ ...gin-core-server.corestatus.savedobjects.md | 11 + ...asticsearchstatusmeta.incompatiblenodes.md | 11 + ...gin-core-server.elasticsearchstatusmeta.md | 20 ++ ...er.elasticsearchstatusmeta.warningnodes.md | 11 + .../core/server/kibana-plugin-core-server.md | 8 + ...sversioncompatibility.incompatiblenodes.md | 11 + ....nodesversioncompatibility.iscompatible.md | 11 + ...nodesversioncompatibility.kibanaversion.md | 11 + ...n-core-server.nodesversioncompatibility.md | 22 ++ ...erver.nodesversioncompatibility.message.md | 11 + ....nodesversioncompatibility.warningnodes.md | 11 + ...lugin-core-server.savedobjectstatusmeta.md | 20 ++ ...r.savedobjectstatusmeta.migratedindices.md | 15 ++ ...plugin-core-server.servicestatus.detail.md | 13 + ...e-server.servicestatus.documentationurl.md | 13 + ...-plugin-core-server.servicestatus.level.md | 13 + ...kibana-plugin-core-server.servicestatus.md | 24 ++ ...a-plugin-core-server.servicestatus.meta.md | 13 + ...lugin-core-server.servicestatus.summary.md | 13 + ...a-plugin-core-server.servicestatuslevel.md | 13 + ...-plugin-core-server.servicestatuslevels.md | 37 +++ ...in-core-server.statusservicesetup.core_.md | 13 + ...a-plugin-core-server.statusservicesetup.md | 20 ++ .../kibana-plugin-plugins-data-server.md | 1 - .../elasticsearch_service.mock.ts | 6 + .../elasticsearch/elasticsearch_service.ts | 2 + src/core/server/elasticsearch/index.ts | 1 + src/core/server/elasticsearch/status.test.ts | 222 +++++++++++++++++ src/core/server/elasticsearch/status.ts | 78 ++++++ src/core/server/elasticsearch/types.ts | 8 + .../version_check/ensure_es_version.ts | 2 +- src/core/server/index.ts | 18 +- src/core/server/internal_types.ts | 6 +- src/core/server/legacy/legacy_service.test.ts | 2 + src/core/server/legacy/legacy_service.ts | 3 + src/core/server/mocks.ts | 9 +- src/core/server/plugins/plugin_context.ts | 3 + src/core/server/saved_objects/index.ts | 6 +- .../saved_objects/migrations/core/index.ts | 2 +- .../migrations/core/migration_coordinator.ts | 2 + .../server/saved_objects/migrations/index.ts | 1 + .../saved_objects/migrations/kibana/index.ts | 2 +- .../migrations/kibana/kibana_migrator.mock.ts | 17 +- .../migrations/kibana/kibana_migrator.test.ts | 28 +++ .../migrations/kibana/kibana_migrator.ts | 29 ++- .../saved_objects_service.mock.ts | 7 + .../saved_objects/saved_objects_service.ts | 16 +- src/core/server/saved_objects/status.test.ts | 134 ++++++++++ src/core/server/saved_objects/status.ts | 84 +++++++ src/core/server/saved_objects/types.ts | 13 + src/core/server/server.api.md | 83 +++++++ src/core/server/server.test.mocks.ts | 6 + src/core/server/server.test.ts | 7 + src/core/server/server.ts | 18 +- .../server/status/get_summary_status.test.ts | 180 ++++++++++++++ src/core/server/status/get_summary_status.ts | 84 +++++++ src/core/server/status/index.ts | 21 ++ src/core/server/status/status_service.mock.ts | 71 ++++++ src/core/server/status/status_service.test.ts | 229 ++++++++++++++++++ src/core/server/status/status_service.ts | 78 ++++++ src/core/server/status/test_utils.ts | 25 ++ src/core/server/status/types.ts | 134 ++++++++++ src/core/server/test_utils.ts | 1 + 67 files changed, 2006 insertions(+), 24 deletions(-) create mode 100644 docs/development/core/server/kibana-plugin-core-server.coresetup.status.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md create mode 100644 docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md create mode 100644 src/core/server/elasticsearch/status.test.ts create mode 100644 src/core/server/elasticsearch/status.ts create mode 100644 src/core/server/saved_objects/status.test.ts create mode 100644 src/core/server/saved_objects/status.ts create mode 100644 src/core/server/status/get_summary_status.test.ts create mode 100644 src/core/server/status/get_summary_status.ts create mode 100644 src/core/server/status/index.ts create mode 100644 src/core/server/status/status_service.mock.ts create mode 100644 src/core/server/status/status_service.test.ts create mode 100644 src/core/server/status/status_service.ts create mode 100644 src/core/server/status/test_utils.ts create mode 100644 src/core/server/status/types.ts diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.md index 29fdc37a811767..c10b460da8b4f7 100644 --- a/docs/development/core/server/kibana-plugin-core-server.coresetup.md +++ b/docs/development/core/server/kibana-plugin-core-server.coresetup.md @@ -23,6 +23,7 @@ export interface CoreSetupHttpServiceSetup | [HttpServiceSetup](./kibana-plugin-core-server.httpservicesetup.md) | | [metrics](./kibana-plugin-core-server.coresetup.metrics.md) | MetricsServiceSetup | [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) | | [savedObjects](./kibana-plugin-core-server.coresetup.savedobjects.md) | SavedObjectsServiceSetup | [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) | +| [status](./kibana-plugin-core-server.coresetup.status.md) | StatusServiceSetup | [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) | | [uiSettings](./kibana-plugin-core-server.coresetup.uisettings.md) | UiSettingsServiceSetup | [UiSettingsServiceSetup](./kibana-plugin-core-server.uisettingsservicesetup.md) | | [uuid](./kibana-plugin-core-server.coresetup.uuid.md) | UuidServiceSetup | [UuidServiceSetup](./kibana-plugin-core-server.uuidservicesetup.md) | diff --git a/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md b/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md new file mode 100644 index 00000000000000..f5ea627a9f008a --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.coresetup.status.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreSetup](./kibana-plugin-core-server.coresetup.md) > [status](./kibana-plugin-core-server.coresetup.status.md) + +## CoreSetup.status property + +[StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) + +Signature: + +```typescript +status: StatusServiceSetup; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md new file mode 100644 index 00000000000000..b41e7020c38e95 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.corestatus.elasticsearch.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) > [elasticsearch](./kibana-plugin-core-server.corestatus.elasticsearch.md) + +## CoreStatus.elasticsearch property + +Signature: + +```typescript +elasticsearch: ServiceStatus; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.md new file mode 100644 index 00000000000000..3fde86a18c58bd --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.corestatus.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) + +## CoreStatus interface + +Status of core services. + +Signature: + +```typescript +export interface CoreStatus +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [elasticsearch](./kibana-plugin-core-server.corestatus.elasticsearch.md) | ServiceStatus | | +| [savedObjects](./kibana-plugin-core-server.corestatus.savedobjects.md) | ServiceStatus | | + diff --git a/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md b/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md new file mode 100644 index 00000000000000..d554c6f70d7208 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.corestatus.savedobjects.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [CoreStatus](./kibana-plugin-core-server.corestatus.md) > [savedObjects](./kibana-plugin-core-server.corestatus.savedobjects.md) + +## CoreStatus.savedObjects property + +Signature: + +```typescript +savedObjects: ServiceStatus; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md new file mode 100644 index 00000000000000..f8a45fe9a5a9ce --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) > [incompatibleNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md) + +## ElasticsearchStatusMeta.incompatibleNodes property + +Signature: + +```typescript +incompatibleNodes: NodesVersionCompatibility['incompatibleNodes']; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md new file mode 100644 index 00000000000000..2398410fa4b840 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) + +## ElasticsearchStatusMeta interface + + +Signature: + +```typescript +export interface ElasticsearchStatusMeta +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [incompatibleNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.incompatiblenodes.md) | NodesVersionCompatibility['incompatibleNodes'] | | +| [warningNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md) | NodesVersionCompatibility['warningNodes'] | | + diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md new file mode 100644 index 00000000000000..7374ccd9e7fa87 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) > [warningNodes](./kibana-plugin-core-server.elasticsearchstatusmeta.warningnodes.md) + +## ElasticsearchStatusMeta.warningNodes property + +Signature: + +```typescript +warningNodes: NodesVersionCompatibility['warningNodes']; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md index 793684c1b37961..accab9bf0cb360 100644 --- a/docs/development/core/server/kibana-plugin-core-server.md +++ b/docs/development/core/server/kibana-plugin-core-server.md @@ -66,6 +66,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [ContextSetup](./kibana-plugin-core-server.contextsetup.md) | An object that handles registration of context providers and configuring handlers with context. | | [CoreSetup](./kibana-plugin-core-server.coresetup.md) | Context passed to the plugins setup method. | | [CoreStart](./kibana-plugin-core-server.corestart.md) | Context passed to the plugins start method. | +| [CoreStatus](./kibana-plugin-core-server.corestatus.md) | Status of core services. | | [CustomHttpResponseOptions](./kibana-plugin-core-server.customhttpresponseoptions.md) | HTTP response parameters for a response with adjustable status code. | | [DeprecationAPIClientParams](./kibana-plugin-core-server.deprecationapiclientparams.md) | | | [DeprecationAPIResponse](./kibana-plugin-core-server.deprecationapiresponse.md) | | @@ -75,6 +76,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [ElasticsearchError](./kibana-plugin-core-server.elasticsearcherror.md) | | | [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) | | | [ElasticsearchServiceStart](./kibana-plugin-core-server.elasticsearchservicestart.md) | | +| [ElasticsearchStatusMeta](./kibana-plugin-core-server.elasticsearchstatusmeta.md) | | | [EnvironmentMode](./kibana-plugin-core-server.environmentmode.md) | | | [ErrorHttpResponseOptions](./kibana-plugin-core-server.errorhttpresponseoptions.md) | HTTP response parameters | | [FakeRequest](./kibana-plugin-core-server.fakerequest.md) | Fake request object created manually by Kibana plugins. | @@ -101,6 +103,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [LoggerFactory](./kibana-plugin-core-server.loggerfactory.md) | The single purpose of LoggerFactory interface is to define a way to retrieve a context-based logger instance. | | [LogMeta](./kibana-plugin-core-server.logmeta.md) | Contextual metadata | | [MetricsServiceSetup](./kibana-plugin-core-server.metricsservicesetup.md) | APIs to retrieves metrics gathered and exposed by the core platform. | +| [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) | | | [OnPostAuthToolkit](./kibana-plugin-core-server.onpostauthtoolkit.md) | A tool set defining an outcome of OnPostAuth interceptor for incoming request. | | [OnPreAuthToolkit](./kibana-plugin-core-server.onpreauthtoolkit.md) | A tool set defining an outcome of OnPreAuth interceptor for incoming request. | | [OnPreResponseExtensions](./kibana-plugin-core-server.onpreresponseextensions.md) | Additional data to extend a response. | @@ -162,15 +165,18 @@ The plugin integrates with the core system via lifecycle events: `setup` | [SavedObjectsResolveImportErrorsOptions](./kibana-plugin-core-server.savedobjectsresolveimporterrorsoptions.md) | Options to control the "resolve import" operation. | | [SavedObjectsServiceSetup](./kibana-plugin-core-server.savedobjectsservicesetup.md) | Saved Objects is Kibana's data persistence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceSetup API exposes methods for registering Saved Object types, creating and registering Saved Object client wrappers and factories. | | [SavedObjectsServiceStart](./kibana-plugin-core-server.savedobjectsservicestart.md) | Saved Objects is Kibana's data persisentence mechanism allowing plugins to use Elasticsearch for storing and querying state. The SavedObjectsServiceStart API provides a scoped Saved Objects client for interacting with Saved Objects. | +| [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) | Meta information about the SavedObjectService's status. Available to plugins via [CoreSetup.status](./kibana-plugin-core-server.coresetup.status.md). | | [SavedObjectsType](./kibana-plugin-core-server.savedobjectstype.md) | | | [SavedObjectsTypeManagementDefinition](./kibana-plugin-core-server.savedobjectstypemanagementdefinition.md) | Configuration options for the [type](./kibana-plugin-core-server.savedobjectstype.md)'s management section. | | [SavedObjectsTypeMappingDefinition](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) | Describe a saved object type mapping. | | [SavedObjectsUpdateOptions](./kibana-plugin-core-server.savedobjectsupdateoptions.md) | | | [SavedObjectsUpdateResponse](./kibana-plugin-core-server.savedobjectsupdateresponse.md) | | +| [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) | The current status of a service at a point in time. | | [SessionCookieValidationResult](./kibana-plugin-core-server.sessioncookievalidationresult.md) | Return type from a function to validate cookie contents. | | [SessionStorage](./kibana-plugin-core-server.sessionstorage.md) | Provides an interface to store and retrieve data across requests. | | [SessionStorageCookieOptions](./kibana-plugin-core-server.sessionstoragecookieoptions.md) | Configuration used to create HTTP session storage based on top of cookie mechanism. | | [SessionStorageFactory](./kibana-plugin-core-server.sessionstoragefactory.md) | SessionStorage factory to bind one to an incoming request | +| [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) | API for accessing status of Core and this plugin's dependencies as well as for customizing this plugin's status. | | [StringValidationRegex](./kibana-plugin-core-server.stringvalidationregex.md) | StringValidation with regex object | | [StringValidationRegexString](./kibana-plugin-core-server.stringvalidationregexstring.md) | StringValidation as regex string | | [UiSettingsParams](./kibana-plugin-core-server.uisettingsparams.md) | UiSettings parameters defined by the plugins. | @@ -184,6 +190,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | Variable | Description | | --- | --- | | [kibanaResponseFactory](./kibana-plugin-core-server.kibanaresponsefactory.md) | Set of helpers used to create KibanaResponse to form HTTP response on an incoming request. Should be returned as a result of [RequestHandler](./kibana-plugin-core-server.requesthandler.md) execution. | +| [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md) | The current "level" of availability of a service. | | [validBodyOutput](./kibana-plugin-core-server.validbodyoutput.md) | The set of valid body.output | ## Type Aliases @@ -256,6 +263,7 @@ The plugin integrates with the core system via lifecycle events: `setup` | [SavedObjectsClientWrapperFactory](./kibana-plugin-core-server.savedobjectsclientwrapperfactory.md) | Describes the factory used to create instances of Saved Objects Client Wrappers. | | [SavedObjectsFieldMapping](./kibana-plugin-core-server.savedobjectsfieldmapping.md) | Describe a [saved object type mapping](./kibana-plugin-core-server.savedobjectstypemappingdefinition.md) field.Please refer to [elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) For the mapping documentation | | [ScopeableRequest](./kibana-plugin-core-server.scopeablerequest.md) | A user credentials container. It accommodates the necessary auth credentials to impersonate the current user.See [KibanaRequest](./kibana-plugin-core-server.kibanarequest.md). | +| [ServiceStatusLevel](./kibana-plugin-core-server.servicestatuslevel.md) | A convenience type that represents the union of each value in [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md). | | [SharedGlobalConfig](./kibana-plugin-core-server.sharedglobalconfig.md) | | | [StartServicesAccessor](./kibana-plugin-core-server.startservicesaccessor.md) | Allows plugins to get access to APIs available in start inside async handlers. Promise will not resolve until Core and plugin dependencies have completed start. This should only be used inside handlers registered during setup that will only be executed after start lifecycle. | | [StringValidation](./kibana-plugin-core-server.stringvalidation.md) | Allows regex objects or a regex string | diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md new file mode 100644 index 00000000000000..8e7298d28801c9 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [incompatibleNodes](./kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md) + +## NodesVersionCompatibility.incompatibleNodes property + +Signature: + +```typescript +incompatibleNodes: NodeInfo[]; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md new file mode 100644 index 00000000000000..82a4800a3b4b63 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [isCompatible](./kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md) + +## NodesVersionCompatibility.isCompatible property + +Signature: + +```typescript +isCompatible: boolean; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md new file mode 100644 index 00000000000000..347f2d3474b114 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [kibanaVersion](./kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md) + +## NodesVersionCompatibility.kibanaVersion property + +Signature: + +```typescript +kibanaVersion: string; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md new file mode 100644 index 00000000000000..6fcfacc3bc9085 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) + +## NodesVersionCompatibility interface + +Signature: + +```typescript +export interface NodesVersionCompatibility +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [incompatibleNodes](./kibana-plugin-core-server.nodesversioncompatibility.incompatiblenodes.md) | NodeInfo[] | | +| [isCompatible](./kibana-plugin-core-server.nodesversioncompatibility.iscompatible.md) | boolean | | +| [kibanaVersion](./kibana-plugin-core-server.nodesversioncompatibility.kibanaversion.md) | string | | +| [message](./kibana-plugin-core-server.nodesversioncompatibility.message.md) | string | | +| [warningNodes](./kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md) | NodeInfo[] | | + diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md new file mode 100644 index 00000000000000..415a7825ee2bfe --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.message.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [message](./kibana-plugin-core-server.nodesversioncompatibility.message.md) + +## NodesVersionCompatibility.message property + +Signature: + +```typescript +message?: string; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md new file mode 100644 index 00000000000000..6c017e9fc800ce --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [NodesVersionCompatibility](./kibana-plugin-core-server.nodesversioncompatibility.md) > [warningNodes](./kibana-plugin-core-server.nodesversioncompatibility.warningnodes.md) + +## NodesVersionCompatibility.warningNodes property + +Signature: + +```typescript +warningNodes: NodeInfo[]; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md new file mode 100644 index 00000000000000..3a0b23d18632f1 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) + +## SavedObjectStatusMeta interface + +Meta information about the SavedObjectService's status. Available to plugins via [CoreSetup.status](./kibana-plugin-core-server.coresetup.status.md). + +Signature: + +```typescript +export interface SavedObjectStatusMeta +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [migratedIndices](./kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md) | {
[status: string]: number;
skipped: number;
migrated: number;
} | | + diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md new file mode 100644 index 00000000000000..6a29623b2f122d --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectStatusMeta](./kibana-plugin-core-server.savedobjectstatusmeta.md) > [migratedIndices](./kibana-plugin-core-server.savedobjectstatusmeta.migratedindices.md) + +## SavedObjectStatusMeta.migratedIndices property + +Signature: + +```typescript +migratedIndices: { + [status: string]: number; + skipped: number; + migrated: number; + }; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md new file mode 100644 index 00000000000000..fa369aa0bdfbb4 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.detail.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [detail](./kibana-plugin-core-server.servicestatus.detail.md) + +## ServiceStatus.detail property + +A more detailed description of the service status. + +Signature: + +```typescript +detail?: string; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md new file mode 100644 index 00000000000000..5ef8c1251a6024 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.documentationurl.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [documentationUrl](./kibana-plugin-core-server.servicestatus.documentationurl.md) + +## ServiceStatus.documentationUrl property + +A URL to open in a new tab about how to resolve or troubleshoot the problem. + +Signature: + +```typescript +documentationUrl?: string; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md new file mode 100644 index 00000000000000..551c10c9bff820 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.level.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [level](./kibana-plugin-core-server.servicestatus.level.md) + +## ServiceStatus.level property + +The current availability level of the service. + +Signature: + +```typescript +level: ServiceStatusLevel; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.md new file mode 100644 index 00000000000000..d35fc951c57ffb --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) + +## ServiceStatus interface + +The current status of a service at a point in time. + +Signature: + +```typescript +export interface ServiceStatus | unknown = unknown> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [detail](./kibana-plugin-core-server.servicestatus.detail.md) | string | A more detailed description of the service status. | +| [documentationUrl](./kibana-plugin-core-server.servicestatus.documentationurl.md) | string | A URL to open in a new tab about how to resolve or troubleshoot the problem. | +| [level](./kibana-plugin-core-server.servicestatus.level.md) | ServiceStatusLevel | The current availability level of the service. | +| [meta](./kibana-plugin-core-server.servicestatus.meta.md) | Meta | Any JSON-serializable data to be included in the HTTP API response. Useful for providing more fine-grained, machine-readable information about the service status. May include status information for underlying features. | +| [summary](./kibana-plugin-core-server.servicestatus.summary.md) | string | A high-level summary of the service status. | + diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md new file mode 100644 index 00000000000000..a48994daa5a4e4 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.meta.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [meta](./kibana-plugin-core-server.servicestatus.meta.md) + +## ServiceStatus.meta property + +Any JSON-serializable data to be included in the HTTP API response. Useful for providing more fine-grained, machine-readable information about the service status. May include status information for underlying features. + +Signature: + +```typescript +meta?: Meta; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md b/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md new file mode 100644 index 00000000000000..db90afd6f74a65 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatus.summary.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatus](./kibana-plugin-core-server.servicestatus.md) > [summary](./kibana-plugin-core-server.servicestatus.summary.md) + +## ServiceStatus.summary property + +A high-level summary of the service status. + +Signature: + +```typescript +summary: string; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md new file mode 100644 index 00000000000000..5f995ff5e13e3b --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevel.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatusLevel](./kibana-plugin-core-server.servicestatuslevel.md) + +## ServiceStatusLevel type + +A convenience type that represents the union of each value in [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md). + +Signature: + +```typescript +export declare type ServiceStatusLevel = typeof ServiceStatusLevels[keyof typeof ServiceStatusLevels]; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md new file mode 100644 index 00000000000000..a66cec78c736b8 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.servicestatuslevels.md @@ -0,0 +1,37 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ServiceStatusLevels](./kibana-plugin-core-server.servicestatuslevels.md) + +## ServiceStatusLevels variable + +The current "level" of availability of a service. + +Signature: + +```typescript +ServiceStatusLevels: Readonly<{ + available: Readonly<{ + toString: () => "available"; + valueOf: () => 0; + }>; + degraded: Readonly<{ + toString: () => "degraded"; + valueOf: () => 1; + }>; + unavailable: Readonly<{ + toString: () => "unavailable"; + valueOf: () => 2; + }>; + critical: Readonly<{ + toString: () => "critical"; + valueOf: () => 3; + }>; +}> +``` + +## Remarks + +The values implement `valueOf` to allow for easy comparisons between status levels with <, >, etc. Higher values represent higher severities. Note that the default `Array.prototype.sort` implementation does not correctly sort these values. + +A snapshot serializer is available in `src/core/server/test_utils` to ease testing of these values with Jest. + diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md new file mode 100644 index 00000000000000..6662e68b44d364 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.core_.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) > [core$](./kibana-plugin-core-server.statusservicesetup.core_.md) + +## StatusServiceSetup.core$ property + +Current status for all Core services. + +Signature: + +```typescript +core$: Observable; +``` diff --git a/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md new file mode 100644 index 00000000000000..0551a217520ad7 --- /dev/null +++ b/docs/development/core/server/kibana-plugin-core-server.statusservicesetup.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [StatusServiceSetup](./kibana-plugin-core-server.statusservicesetup.md) + +## StatusServiceSetup interface + +API for accessing status of Core and this plugin's dependencies as well as for customizing this plugin's status. + +Signature: + +```typescript +export interface StatusServiceSetup +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [core$](./kibana-plugin-core-server.statusservicesetup.core_.md) | Observable<CoreStatus> | Current status for all Core services. | + diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md index 259d725b3bf0d9..e756eb9b729050 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md @@ -23,7 +23,6 @@ | Function | Description | | --- | --- | | [getDefaultSearchParams(config)](./kibana-plugin-plugins-data-server.getdefaultsearchparams.md) | | -| [getTotalLoaded({ total, failed, successful })](./kibana-plugin-plugins-data-server.gettotalloaded.md) | | | [parseInterval(interval)](./kibana-plugin-plugins-data-server.parseinterval.md) | | | [plugin(initializerContext)](./kibana-plugin-plugins-data-server.plugin.md) | Static code to be shared externally | | [shouldReadFieldFromDocValues(aggregatable, esType)](./kibana-plugin-plugins-data-server.shouldreadfieldfromdocvalues.md) | | diff --git a/src/core/server/elasticsearch/elasticsearch_service.mock.ts b/src/core/server/elasticsearch/elasticsearch_service.mock.ts index 389d98a0818c8e..da8846f6dddbb9 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.mock.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.mock.ts @@ -26,8 +26,10 @@ import { InternalElasticsearchServiceSetup, ElasticsearchServiceSetup, ElasticsearchServiceStart, + ElasticsearchStatusMeta, } from './types'; import { NodesVersionCompatibility } from './version_check/ensure_es_version'; +import { ServiceStatus, ServiceStatusLevels } from '../status'; const createScopedClusterClientMock = (): jest.Mocked => ({ callAsInternalUser: jest.fn(), @@ -102,6 +104,10 @@ const createInternalSetupContractMock = () => { warningNodes: [], kibanaVersion: '8.0.0', }), + status$: new BehaviorSubject>({ + level: ServiceStatusLevels.available, + summary: 'Elasticsearch is available', + }), legacy: { config$: new BehaviorSubject({} as ElasticsearchConfig), }, diff --git a/src/core/server/elasticsearch/elasticsearch_service.ts b/src/core/server/elasticsearch/elasticsearch_service.ts index b92a6edf778ed0..684f6e15caff98 100644 --- a/src/core/server/elasticsearch/elasticsearch_service.ts +++ b/src/core/server/elasticsearch/elasticsearch_service.ts @@ -40,6 +40,7 @@ import { InternalHttpServiceSetup, GetAuthHeaders } from '../http/'; import { InternalElasticsearchServiceSetup, ElasticsearchServiceStart } from './types'; import { CallAPIOptions } from './api_types'; import { pollEsNodesVersion } from './version_check/ensure_es_version'; +import { calculateStatus$ } from './status'; /** @internal */ interface CoreClusterClients { @@ -186,6 +187,7 @@ export class ElasticsearchService adminClient: this.adminClient, dataClient, createClient: this.createClient, + status$: calculateStatus$(esNodesCompatibility$), }; } diff --git a/src/core/server/elasticsearch/index.ts b/src/core/server/elasticsearch/index.ts index cfd72a6fd5e47b..2e45f710c4dcfd 100644 --- a/src/core/server/elasticsearch/index.ts +++ b/src/core/server/elasticsearch/index.ts @@ -31,3 +31,4 @@ export { config, configSchema, ElasticsearchConfig } from './elasticsearch_confi export { ElasticsearchError, ElasticsearchErrorHelpers } from './errors'; export * from './api_types'; export * from './types'; +export { NodesVersionCompatibility } from './version_check/ensure_es_version'; diff --git a/src/core/server/elasticsearch/status.test.ts b/src/core/server/elasticsearch/status.test.ts new file mode 100644 index 00000000000000..dd5fb04bfd1c63 --- /dev/null +++ b/src/core/server/elasticsearch/status.test.ts @@ -0,0 +1,222 @@ +/* + * 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 { take } from 'rxjs/operators'; +import { Subject, of } from 'rxjs'; + +import { calculateStatus$ } from './status'; +import { ServiceStatusLevels, ServiceStatus } from '../status'; +import { ServiceStatusLevelSnapshotSerializer } from '../status/test_utils'; +import { NodesVersionCompatibility } from './version_check/ensure_es_version'; + +expect.addSnapshotSerializer(ServiceStatusLevelSnapshotSerializer); + +const nodeInfo = { + version: '1.1.1', + ip: '1.1.1.1', + http: { + publish_address: 'https://1.1.1.1:9200', + }, + name: 'node1', +}; + +describe('calculateStatus', () => { + it('starts in unavailable', async () => { + expect( + await calculateStatus$(new Subject()) + .pipe(take(1)) + .toPromise() + ).toEqual({ + level: ServiceStatusLevels.unavailable, + summary: 'Waiting for Elasticsearch', + meta: { + warningNodes: [], + incompatibleNodes: [], + }, + }); + }); + + it('changes to available when isCompatible and no warningNodes', async () => { + expect( + await calculateStatus$( + of({ isCompatible: true, kibanaVersion: '1.1.1', warningNodes: [], incompatibleNodes: [] }) + ) + .pipe(take(2)) + .toPromise() + ).toEqual({ + level: ServiceStatusLevels.available, + summary: 'Elasticsearch is available', + meta: { + warningNodes: [], + incompatibleNodes: [], + }, + }); + }); + + it('changes to degraded when isCompatible and warningNodes present', async () => { + expect( + await calculateStatus$( + of({ + isCompatible: true, + kibanaVersion: '1.1.1', + warningNodes: [nodeInfo], + incompatibleNodes: [], + // this isn't the real message, just used to test that the message + // is forwarded to the status + message: 'Some nodes are a different version', + }) + ) + .pipe(take(2)) + .toPromise() + ).toEqual({ + level: ServiceStatusLevels.degraded, + summary: 'Some nodes are a different version', + meta: { + incompatibleNodes: [], + warningNodes: [nodeInfo], + }, + }); + }); + + it('changes to critical when isCompatible is false', async () => { + expect( + await calculateStatus$( + of({ + isCompatible: false, + kibanaVersion: '2.1.1', + warningNodes: [nodeInfo], + incompatibleNodes: [nodeInfo], + // this isn't the real message, just used to test that the message + // is forwarded to the status + message: 'Incompatible with Elasticsearch', + }) + ) + .pipe(take(2)) + .toPromise() + ).toEqual({ + level: ServiceStatusLevels.critical, + summary: 'Incompatible with Elasticsearch', + meta: { + incompatibleNodes: [nodeInfo], + warningNodes: [nodeInfo], + }, + }); + }); + + it('emits status updates when node compatibility changes', () => { + const nodeCompat$ = new Subject(); + + const statusUpdates: ServiceStatus[] = []; + const subscription = calculateStatus$(nodeCompat$).subscribe(status => + statusUpdates.push(status) + ); + + nodeCompat$.next({ + isCompatible: false, + kibanaVersion: '2.1.1', + incompatibleNodes: [], + warningNodes: [], + message: 'Unable to retrieve version info', + }); + nodeCompat$.next({ + isCompatible: false, + kibanaVersion: '2.1.1', + incompatibleNodes: [nodeInfo], + warningNodes: [], + message: 'Incompatible with Elasticsearch', + }); + nodeCompat$.next({ + isCompatible: true, + kibanaVersion: '1.1.1', + warningNodes: [nodeInfo], + incompatibleNodes: [], + message: 'Some nodes are incompatible', + }); + nodeCompat$.next({ + isCompatible: true, + kibanaVersion: '1.1.1', + warningNodes: [], + incompatibleNodes: [], + }); + + subscription.unsubscribe(); + expect(statusUpdates).toMatchInlineSnapshot(` + Array [ + Object { + "level": unavailable, + "meta": Object { + "incompatibleNodes": Array [], + "warningNodes": Array [], + }, + "summary": "Waiting for Elasticsearch", + }, + Object { + "level": critical, + "meta": Object { + "incompatibleNodes": Array [], + "warningNodes": Array [], + }, + "summary": "Unable to retrieve version info", + }, + Object { + "level": critical, + "meta": Object { + "incompatibleNodes": Array [ + Object { + "http": Object { + "publish_address": "https://1.1.1.1:9200", + }, + "ip": "1.1.1.1", + "name": "node1", + "version": "1.1.1", + }, + ], + "warningNodes": Array [], + }, + "summary": "Incompatible with Elasticsearch", + }, + Object { + "level": degraded, + "meta": Object { + "incompatibleNodes": Array [], + "warningNodes": Array [ + Object { + "http": Object { + "publish_address": "https://1.1.1.1:9200", + }, + "ip": "1.1.1.1", + "name": "node1", + "version": "1.1.1", + }, + ], + }, + "summary": "Some nodes are incompatible", + }, + Object { + "level": available, + "meta": Object { + "incompatibleNodes": Array [], + "warningNodes": Array [], + }, + "summary": "Elasticsearch is available", + }, + ] + `); + }); +}); diff --git a/src/core/server/elasticsearch/status.ts b/src/core/server/elasticsearch/status.ts new file mode 100644 index 00000000000000..1eaa338af12399 --- /dev/null +++ b/src/core/server/elasticsearch/status.ts @@ -0,0 +1,78 @@ +/* + * 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 { Observable, merge, of } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { ServiceStatus, ServiceStatusLevels } from '../status'; +import { ElasticsearchStatusMeta } from './types'; +import { NodesVersionCompatibility } from './version_check/ensure_es_version'; + +export const calculateStatus$ = ( + esNodesCompatibility$: Observable +): Observable> => + merge( + of({ + level: ServiceStatusLevels.unavailable, + summary: `Waiting for Elasticsearch`, + meta: { + warningNodes: [], + incompatibleNodes: [], + }, + }), + esNodesCompatibility$.pipe( + map( + ({ + isCompatible, + message, + incompatibleNodes, + warningNodes, + }): ServiceStatus => { + if (!isCompatible) { + return { + level: ServiceStatusLevels.critical, + summary: + // Message should always be present, but this is a safe fallback + message ?? + `Some Elasticsearch nodes are not compatible with this version of Kibana`, + meta: { warningNodes, incompatibleNodes }, + }; + } else if (warningNodes.length > 0) { + return { + level: ServiceStatusLevels.degraded, + summary: + // Message should always be present, but this is a safe fallback + message ?? + `Some Elasticsearch nodes are running different versions than this version of Kibana`, + meta: { warningNodes, incompatibleNodes }, + }; + } + + return { + level: ServiceStatusLevels.available, + summary: `Elasticsearch is available`, + meta: { + warningNodes: [], + incompatibleNodes: [], + }, + }; + } + ) + ) + ); diff --git a/src/core/server/elasticsearch/types.ts b/src/core/server/elasticsearch/types.ts index ef8edecfd26ec6..3d38935e9fbf0f 100644 --- a/src/core/server/elasticsearch/types.ts +++ b/src/core/server/elasticsearch/types.ts @@ -22,6 +22,7 @@ import { ElasticsearchConfig } from './elasticsearch_config'; import { ElasticsearchClientConfig } from './elasticsearch_client_config'; import { IClusterClient, ICustomClusterClient } from './cluster_client'; import { NodesVersionCompatibility } from './version_check/ensure_es_version'; +import { ServiceStatus } from '../status'; /** * @public @@ -128,4 +129,11 @@ export interface InternalElasticsearchServiceSetup extends ElasticsearchServiceS readonly config$: Observable; }; esNodesCompatibility$: Observable; + status$: Observable>; +} + +/** @public */ +export interface ElasticsearchStatusMeta { + warningNodes: NodesVersionCompatibility['warningNodes']; + incompatibleNodes: NodesVersionCompatibility['incompatibleNodes']; } diff --git a/src/core/server/elasticsearch/version_check/ensure_es_version.ts b/src/core/server/elasticsearch/version_check/ensure_es_version.ts index 3e760ec0efabd6..7bd6331978d1de 100644 --- a/src/core/server/elasticsearch/version_check/ensure_es_version.ts +++ b/src/core/server/elasticsearch/version_check/ensure_es_version.ts @@ -142,7 +142,7 @@ export const pollEsNodesVersion = ({ kibanaVersion, ignoreVersionMismatch, esVersionCheckInterval: healthCheckInterval, -}: PollEsNodesVersionOptions): Observable => { +}: PollEsNodesVersionOptions): Observable => { log.debug('Checking Elasticsearch version'); return timer(0, healthCheckInterval).pipe( exhaustMap(() => { diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 56ce16a951aa26..a298f80f96d8f0 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -60,6 +60,7 @@ import { import { CapabilitiesSetup, CapabilitiesStart } from './capabilities'; import { UuidServiceSetup } from './uuid'; import { MetricsServiceSetup } from './metrics'; +import { StatusServiceSetup } from './status'; export { bootstrap } from './bootstrap'; export { Capabilities, CapabilitiesProvider, CapabilitiesSwitcher } from './capabilities'; @@ -95,6 +96,8 @@ export { ElasticsearchErrorHelpers, ElasticsearchServiceSetup, ElasticsearchServiceStart, + ElasticsearchStatusMeta, + NodesVersionCompatibility, APICaller, FakeRequest, ScopeableRequest, @@ -226,6 +229,7 @@ export { SavedObjectsUpdateResponse, SavedObjectsServiceStart, SavedObjectsServiceSetup, + SavedObjectStatusMeta, SavedObjectsDeleteOptions, ISavedObjectsRepository, SavedObjectsRepository, @@ -294,6 +298,14 @@ export { LegacyInternals, } from './legacy'; +export { + CoreStatus, + ServiceStatus, + ServiceStatusLevel, + ServiceStatusLevels, + StatusServiceSetup, +} from './status'; + /** * Plugin specific context passed to a route handler. * @@ -348,14 +360,16 @@ export interface CoreSetup; } diff --git a/src/core/server/internal_types.ts b/src/core/server/internal_types.ts index 825deea99bc230..ede0d3dc9fcc71 100644 --- a/src/core/server/internal_types.ts +++ b/src/core/server/internal_types.ts @@ -31,6 +31,7 @@ import { import { InternalUiSettingsServiceSetup, InternalUiSettingsServiceStart } from './ui_settings'; import { UuidServiceSetup } from './uuid'; import { InternalMetricsServiceSetup } from './metrics'; +import { InternalStatusServiceSetup } from './status'; /** @internal */ export interface InternalCoreSetup { @@ -38,10 +39,11 @@ export interface InternalCoreSetup { context: ContextSetup; http: InternalHttpServiceSetup; elasticsearch: InternalElasticsearchServiceSetup; - uiSettings: InternalUiSettingsServiceSetup; + metrics: InternalMetricsServiceSetup; savedObjects: InternalSavedObjectsServiceSetup; + status: InternalStatusServiceSetup; + uiSettings: InternalUiSettingsServiceSetup; uuid: UuidServiceSetup; - metrics: InternalMetricsServiceSetup; } /** diff --git a/src/core/server/legacy/legacy_service.test.ts b/src/core/server/legacy/legacy_service.test.ts index c6860086e77842..0cf2ebe55ea10d 100644 --- a/src/core/server/legacy/legacy_service.test.ts +++ b/src/core/server/legacy/legacy_service.test.ts @@ -48,6 +48,7 @@ import { findLegacyPluginSpecs } from './plugins'; import { LegacyVars, LegacyServiceSetupDeps, LegacyServiceStartDeps } from './types'; import { LegacyService } from './legacy_service'; import { coreMock } from '../mocks'; +import { statusServiceMock } from '../status/status_service.mock'; const MockKbnServer: jest.Mock = KbnServer as any; @@ -106,6 +107,7 @@ beforeEach(() => { rendering: renderingServiceMock, metrics: metricsServiceMock.createInternalSetupContract(), uuid: uuidSetup, + status: statusServiceMock.createInternalSetupContract(), }, plugins: { 'plugin-id': 'plugin-value' }, }; diff --git a/src/core/server/legacy/legacy_service.ts b/src/core/server/legacy/legacy_service.ts index bb5f6d5617aaea..f77230301ce023 100644 --- a/src/core/server/legacy/legacy_service.ts +++ b/src/core/server/legacy/legacy_service.ts @@ -306,6 +306,9 @@ export class LegacyService implements CoreService { registerType: setupDeps.core.savedObjects.registerType, getImportExportObjectLimit: setupDeps.core.savedObjects.getImportExportObjectLimit, }, + status: { + core$: setupDeps.core.status.core$, + }, uiSettings: { register: setupDeps.core.uiSettings.register, }, diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts index 31bf17da041afb..faf73044cac4d1 100644 --- a/src/core/server/mocks.ts +++ b/src/core/server/mocks.ts @@ -33,6 +33,7 @@ import { InternalCoreSetup, InternalCoreStart } from './internal_types'; import { capabilitiesServiceMock } from './capabilities/capabilities_service.mock'; import { metricsServiceMock } from './metrics/metrics_service.mock'; import { uuidServiceMock } from './uuid/uuid_service.mock'; +import { statusServiceMock } from './status/status_service.mock'; export { httpServerMock } from './http/http_server.mocks'; export { sessionStorageMock } from './http/cookie_session_storage.mocks'; @@ -133,9 +134,10 @@ function createCoreSetupMock({ elasticsearch: elasticsearchServiceMock.createSetup(), http: httpMock, savedObjects: savedObjectsServiceMock.createInternalSetupContract(), + status: statusServiceMock.createSetupContract(), + metrics: metricsServiceMock.createSetupContract(), uiSettings: uiSettingsMock, uuid: uuidServiceMock.createSetupContract(), - metrics: metricsServiceMock.createSetupContract(), getStartServices: jest .fn, object, any]>, []>() .mockResolvedValue([createCoreStartMock(), pluginStartDeps, pluginStartContract]), @@ -161,10 +163,11 @@ function createInternalCoreSetupMock() { context: contextServiceMock.createSetupContract(), elasticsearch: elasticsearchServiceMock.createInternalSetup(), http: httpServiceMock.createSetupContract(), - uiSettings: uiSettingsServiceMock.createSetupContract(), + metrics: metricsServiceMock.createInternalSetupContract(), savedObjects: savedObjectsServiceMock.createInternalSetupContract(), + status: statusServiceMock.createInternalSetupContract(), uuid: uuidServiceMock.createSetupContract(), - metrics: metricsServiceMock.createInternalSetupContract(), + uiSettings: uiSettingsServiceMock.createSetupContract(), }; return setupDeps; } diff --git a/src/core/server/plugins/plugin_context.ts b/src/core/server/plugins/plugin_context.ts index 32662f07a86f02..61d97aea97459c 100644 --- a/src/core/server/plugins/plugin_context.ts +++ b/src/core/server/plugins/plugin_context.ts @@ -175,6 +175,9 @@ export function createPluginSetupContext( registerType: deps.savedObjects.registerType, getImportExportObjectLimit: deps.savedObjects.getImportExportObjectLimit, }, + status: { + core$: deps.status.core$, + }, uiSettings: { register: deps.uiSettings.register, }, diff --git a/src/core/server/saved_objects/index.ts b/src/core/server/saved_objects/index.ts index b50e47b9eab738..fe4795cad11a5a 100644 --- a/src/core/server/saved_objects/index.ts +++ b/src/core/server/saved_objects/index.ts @@ -68,7 +68,11 @@ export { SavedObjectMigrationContext, } from './migrations'; -export { SavedObjectsType, SavedObjectsTypeManagementDefinition } from './types'; +export { + SavedObjectStatusMeta, + SavedObjectsType, + SavedObjectsTypeManagementDefinition, +} from './types'; export { savedObjectsConfig, savedObjectsMigrationConfig } from './saved_objects_config'; export { SavedObjectTypeRegistry, ISavedObjectTypeRegistry } from './saved_objects_type_registry'; diff --git a/src/core/server/saved_objects/migrations/core/index.ts b/src/core/server/saved_objects/migrations/core/index.ts index 4fbadf90f4b600..466d399f653cd6 100644 --- a/src/core/server/saved_objects/migrations/core/index.ts +++ b/src/core/server/saved_objects/migrations/core/index.ts @@ -22,4 +22,4 @@ export { IndexMigrator } from './index_migrator'; export { buildActiveMappings } from './build_active_mappings'; export { CallCluster } from './call_cluster'; export { LogFn } from './migration_logger'; -export { MigrationResult } from './migration_coordinator'; +export { MigrationResult, MigrationStatus } from './migration_coordinator'; diff --git a/src/core/server/saved_objects/migrations/core/migration_coordinator.ts b/src/core/server/saved_objects/migrations/core/migration_coordinator.ts index ddd82edd934484..5ba2d0afc692e8 100644 --- a/src/core/server/saved_objects/migrations/core/migration_coordinator.ts +++ b/src/core/server/saved_objects/migrations/core/migration_coordinator.ts @@ -39,6 +39,8 @@ import { SavedObjectsMigrationLogger } from './migration_logger'; const DEFAULT_POLL_INTERVAL = 15000; +export type MigrationStatus = 'waiting' | 'running' | 'completed'; + export type MigrationResult = | { status: 'skipped' } | { status: 'patched' } diff --git a/src/core/server/saved_objects/migrations/index.ts b/src/core/server/saved_objects/migrations/index.ts index dc966f0797822c..8ddaed3707eb0c 100644 --- a/src/core/server/saved_objects/migrations/index.ts +++ b/src/core/server/saved_objects/migrations/index.ts @@ -17,6 +17,7 @@ * under the License. */ +export { MigrationResult } from './core'; export { KibanaMigrator, IKibanaMigrator } from './kibana'; export { SavedObjectMigrationFn, diff --git a/src/core/server/saved_objects/migrations/kibana/index.ts b/src/core/server/saved_objects/migrations/kibana/index.ts index 25772c4c9b0b16..df4751521ac533 100644 --- a/src/core/server/saved_objects/migrations/kibana/index.ts +++ b/src/core/server/saved_objects/migrations/kibana/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { KibanaMigrator, IKibanaMigrator } from './kibana_migrator'; +export { KibanaMigrator, IKibanaMigrator, KibanaMigratorStatus } from './kibana_migrator'; diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts index 2ee656721abd0b..257b32c1e4c237 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.mock.ts @@ -17,10 +17,11 @@ * under the License. */ -import { KibanaMigrator } from './kibana_migrator'; +import { KibanaMigrator, KibanaMigratorStatus } from './kibana_migrator'; import { buildActiveMappings } from '../core'; const { mergeTypes } = jest.requireActual('./kibana_migrator'); import { SavedObjectsType } from '../../types'; +import { BehaviorSubject } from 'rxjs'; const defaultSavedObjectTypes: SavedObjectsType[] = [ { @@ -47,6 +48,20 @@ const createMigrator = ( runMigrations: jest.fn(), getActiveMappings: jest.fn(), migrateDocument: jest.fn(), + getStatus$: jest.fn( + () => + new BehaviorSubject({ + status: 'completed', + result: [ + { + status: 'migrated', + destIndex: '.test-kibana_2', + sourceIndex: '.test-kibana_1', + elapsedMs: 10, + }, + ], + }) + ), }; mockMigrator.getActiveMappings.mockReturnValue(buildActiveMappings(mergeTypes(types))); diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts index fd82bf282266ef..336eeff99f47b6 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.test.ts @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +import { take } from 'rxjs/operators'; import { KibanaMigratorOptions, KibanaMigrator } from './kibana_migrator'; import { loggingServiceMock } from '../../../logging/logging_service.mock'; @@ -79,6 +80,33 @@ describe('KibanaMigrator', () => { .filter(callClusterPath => callClusterPath === 'cat.templates'); expect(callClusterCommands.length).toBe(1); }); + + it('emits results on getMigratorResult$()', async () => { + const options = mockOptions(); + const clusterStub = jest.fn(() => ({ status: 404 })); + + options.callCluster = clusterStub; + const migrator = new KibanaMigrator(options); + const migratorStatus = migrator + .getStatus$() + .pipe(take(3)) + .toPromise(); + await migrator.runMigrations(); + const { status, result } = await migratorStatus; + expect(status).toEqual('completed'); + expect(result![0]).toMatchObject({ + destIndex: '.my-index_1', + elapsedMs: expect.any(Number), + sourceIndex: '.my-index', + status: 'migrated', + }); + expect(result![1]).toMatchObject({ + destIndex: 'other-index_1', + elapsedMs: expect.any(Number), + sourceIndex: 'other-index', + status: 'migrated', + }); + }); }); }); diff --git a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts index bc29061b380b88..dafd6c53411966 100644 --- a/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts +++ b/src/core/server/saved_objects/migrations/kibana/kibana_migrator.ts @@ -24,10 +24,17 @@ import { Logger } from 'src/core/server/logging'; import { KibanaConfigType } from 'src/core/server/kibana_config'; +import { BehaviorSubject } from 'rxjs'; import { IndexMapping, SavedObjectsTypeMappingDefinitions } from '../../mappings'; import { SavedObjectUnsanitizedDoc, SavedObjectsSerializer } from '../../serialization'; import { docValidator, PropertyValidators } from '../../validation'; -import { buildActiveMappings, CallCluster, IndexMigrator } from '../core'; +import { + buildActiveMappings, + CallCluster, + IndexMigrator, + MigrationResult, + MigrationStatus, +} from '../core'; import { DocumentMigrator, VersionedTransformer } from '../core/document_migrator'; import { createIndexMap } from '../core/build_index_map'; import { SavedObjectsMigrationConfigType } from '../../saved_objects_config'; @@ -46,6 +53,11 @@ export interface KibanaMigratorOptions { export type IKibanaMigrator = Pick; +export interface KibanaMigratorStatus { + status: MigrationStatus; + result?: MigrationResult[]; +} + /** * Manages the shape of mappings and documents in the Kibana index. */ @@ -58,7 +70,10 @@ export class KibanaMigrator { private readonly mappingProperties: SavedObjectsTypeMappingDefinitions; private readonly typeRegistry: ISavedObjectTypeRegistry; private readonly serializer: SavedObjectsSerializer; - private migrationResult?: Promise>; + private migrationResult?: Promise; + private readonly status$ = new BehaviorSubject({ + status: 'waiting', + }); /** * Creates an instance of KibanaMigrator. @@ -109,12 +124,20 @@ export class KibanaMigrator { Array<{ status: string }> > { if (this.migrationResult === undefined || rerun) { - this.migrationResult = this.runMigrationsInternal(); + this.status$.next({ status: 'running' }); + this.migrationResult = this.runMigrationsInternal().then(result => { + this.status$.next({ status: 'completed', result }); + return result; + }); } return this.migrationResult; } + public getStatus$() { + return this.status$.asObservable(); + } + private runMigrationsInternal() { const kibanaIndexName = this.kibanaConfig.index; const indexMap = createIndexMap({ diff --git a/src/core/server/saved_objects/saved_objects_service.mock.ts b/src/core/server/saved_objects/saved_objects_service.mock.ts index 9fe32b14e64507..7ba4613c857d7b 100644 --- a/src/core/server/saved_objects/saved_objects_service.mock.ts +++ b/src/core/server/saved_objects/saved_objects_service.mock.ts @@ -17,6 +17,8 @@ * under the License. */ +import { BehaviorSubject } from 'rxjs'; + import { SavedObjectsService, InternalSavedObjectsServiceSetup, @@ -29,6 +31,7 @@ import { savedObjectsClientProviderMock } from './service/lib/scoped_client_prov import { savedObjectsRepositoryMock } from './service/lib/repository.mock'; import { savedObjectsClientMock } from './service/saved_objects_client.mock'; import { typeRegistryMock } from './saved_objects_type_registry.mock'; +import { ServiceStatusLevels } from '../status'; type SavedObjectsServiceContract = PublicMethodsOf; @@ -75,6 +78,10 @@ const createSetupContractMock = () => { const createInternalSetupContractMock = () => { const internalSetupContract: jest.Mocked = { ...createSetupContractMock(), + status$: new BehaviorSubject({ + level: ServiceStatusLevels.available, + summary: `SavedObjects is available`, + }), }; return internalSetupContract; }; diff --git a/src/core/server/saved_objects/saved_objects_service.ts b/src/core/server/saved_objects/saved_objects_service.ts index aa440c6454569a..62027928c0bb5d 100644 --- a/src/core/server/saved_objects/saved_objects_service.ts +++ b/src/core/server/saved_objects/saved_objects_service.ts @@ -17,8 +17,8 @@ * under the License. */ -import { Subject } from 'rxjs'; -import { first, filter, take } from 'rxjs/operators'; +import { Subject, Observable } from 'rxjs'; +import { first, filter, take, switchMap } from 'rxjs/operators'; import { CoreService } from '../../types'; import { SavedObjectsClient, @@ -38,7 +38,7 @@ import { SavedObjectConfig, } from './saved_objects_config'; import { KibanaRequest, InternalHttpServiceSetup } from '../http'; -import { SavedObjectsClientContract, SavedObjectsType } from './types'; +import { SavedObjectsClientContract, SavedObjectsType, SavedObjectStatusMeta } from './types'; import { ISavedObjectsRepository, SavedObjectsRepository } from './service/lib/repository'; import { SavedObjectsClientFactoryProvider, @@ -50,6 +50,8 @@ import { SavedObjectTypeRegistry, ISavedObjectTypeRegistry } from './saved_objec import { PropertyValidators } from './validation'; import { SavedObjectsSerializer } from './serialization'; import { registerRoutes } from './routes'; +import { ServiceStatus } from '../status'; +import { calculateStatus$ } from './status'; /** * Saved Objects is Kibana's data persistence mechanism allowing plugins to @@ -164,7 +166,9 @@ export interface SavedObjectsServiceSetup { /** * @internal */ -export type InternalSavedObjectsServiceSetup = SavedObjectsServiceSetup; +export interface InternalSavedObjectsServiceSetup extends SavedObjectsServiceSetup { + status$: Observable>; +} /** * Saved Objects is Kibana's data persisentence mechanism allowing plugins to @@ -321,6 +325,10 @@ export class SavedObjectsService }); return { + status$: calculateStatus$( + this.migrator$.pipe(switchMap(migrator => migrator.getStatus$())), + setupDeps.elasticsearch.status$ + ), setClientFactoryProvider: provider => { if (this.started) { throw new Error('cannot call `setClientFactoryProvider` after service startup.'); diff --git a/src/core/server/saved_objects/status.test.ts b/src/core/server/saved_objects/status.test.ts new file mode 100644 index 00000000000000..8efea1e2c00c65 --- /dev/null +++ b/src/core/server/saved_objects/status.test.ts @@ -0,0 +1,134 @@ +/* + * 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 { of, Observable } from 'rxjs'; +import { ServiceStatus, ServiceStatusLevels } from '../status'; +import { calculateStatus$ } from './status'; +import { take } from 'rxjs/operators'; + +describe('calculateStatus$', () => { + const expectUnavailableDueToEs = (status$: Observable) => + expect(status$.pipe(take(1)).toPromise()).resolves.toEqual({ + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is not available without a healthy Elasticearch connection`, + }); + + const expectUnavailableDueToMigrations = (status$: Observable) => + expect(status$.pipe(take(1)).toPromise()).resolves.toEqual({ + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is waiting to start migrations`, + }); + + describe('when elasticsearch is unavailable', () => { + const esStatus$ = of({ + level: ServiceStatusLevels.unavailable, + summary: 'xxx', + }); + + it('is unavailable before migrations have ran', async () => { + await expectUnavailableDueToEs(calculateStatus$(of(), esStatus$)); + }); + it('is unavailable after migrations have ran', async () => { + await expectUnavailableDueToEs( + calculateStatus$(of({ status: 'completed', result: [] }), esStatus$) + ); + }); + }); + + describe('when elasticsearch is critical', () => { + const esStatus$ = of({ + level: ServiceStatusLevels.critical, + summary: 'xxx', + }); + + it('is unavailable before migrations have ran', async () => { + await expectUnavailableDueToEs(calculateStatus$(of(), esStatus$)); + }); + it('is unavailable after migrations have ran', async () => { + await expectUnavailableDueToEs( + calculateStatus$( + of({ status: 'completed', result: [{ status: 'migrated' } as any] }), + esStatus$ + ) + ); + }); + }); + + describe('when elasticsearch is available', () => { + const esStatus$ = of({ + level: ServiceStatusLevels.available, + summary: 'Available', + }); + + it('is unavailable before migrations have ran', async () => { + await expectUnavailableDueToMigrations(calculateStatus$(of(), esStatus$)); + }); + it('is unavailable while migrations are running', async () => { + await expect( + calculateStatus$(of({ status: 'running' }), esStatus$) + .pipe(take(2)) + .toPromise() + ).resolves.toEqual({ + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is running migrations`, + }); + }); + it('is available after migrations have ran', async () => { + await expect( + calculateStatus$( + of({ status: 'completed', result: [{ status: 'skipped' }, { status: 'patched' }] }), + esStatus$ + ) + .pipe(take(2)) + .toPromise() + ).resolves.toEqual({ + level: ServiceStatusLevels.available, + summary: `SavedObjects service has completed migrations and is available`, + meta: { + migratedIndices: { + migrated: 0, + patched: 1, + skipped: 1, + }, + }, + }); + }); + }); + + describe('when elasticsearch is degraded', () => { + const esStatus$ = of({ level: ServiceStatusLevels.degraded, summary: 'xxx' }); + + it('is unavailable before migrations have ran', async () => { + await expectUnavailableDueToMigrations(calculateStatus$(of(), esStatus$)); + }); + it('is degraded after migrations have ran', async () => { + await expect( + calculateStatus$( + of([{ status: 'skipped' }]), + esStatus$ + ) + .pipe(take(2)) + .toPromise() + ).resolves.toEqual({ + level: ServiceStatusLevels.degraded, + summary: 'SavedObjects service is degraded due to Elasticsearch: [xxx]', + }); + }); + }); +}); diff --git a/src/core/server/saved_objects/status.ts b/src/core/server/saved_objects/status.ts new file mode 100644 index 00000000000000..66a6e2baa17a72 --- /dev/null +++ b/src/core/server/saved_objects/status.ts @@ -0,0 +1,84 @@ +/* + * 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 { Observable, combineLatest } from 'rxjs'; +import { startWith, map } from 'rxjs/operators'; +import { ServiceStatus, ServiceStatusLevels } from '../status'; +import { SavedObjectStatusMeta } from './types'; +import { KibanaMigratorStatus } from './migrations/kibana'; + +export const calculateStatus$ = ( + rawMigratorStatus$: Observable, + elasticsearchStatus$: Observable +): Observable> => { + const migratorStatus$: Observable> = rawMigratorStatus$.pipe( + map(migrationStatus => { + if (migrationStatus.status === 'waiting') { + return { + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is waiting to start migrations`, + }; + } else if (migrationStatus.status === 'running') { + return { + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is running migrations`, + }; + } + + const statusCounts: SavedObjectStatusMeta['migratedIndices'] = { migrated: 0, skipped: 0 }; + if (migrationStatus.result) { + migrationStatus.result.forEach(({ status }) => { + statusCounts[status] = (statusCounts[status] ?? 0) + 1; + }); + } + + return { + level: ServiceStatusLevels.available, + summary: `SavedObjects service has completed migrations and is available`, + meta: { + migratedIndices: statusCounts, + }, + }; + }), + startWith({ + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is waiting to start migrations`, + }) + ); + + return combineLatest([elasticsearchStatus$, migratorStatus$]).pipe( + map(([esStatus, migratorStatus]) => { + if (esStatus.level >= ServiceStatusLevels.unavailable) { + return { + level: ServiceStatusLevels.unavailable, + summary: `SavedObjects service is not available without a healthy Elasticearch connection`, + }; + } else if (migratorStatus.level === ServiceStatusLevels.unavailable) { + return migratorStatus; + } else if (esStatus.level === ServiceStatusLevels.degraded) { + return { + level: esStatus.level, + summary: `SavedObjects service is degraded due to Elasticsearch: [${esStatus.summary}]`, + }; + } else { + return migratorStatus; + } + }) + ); +}; diff --git a/src/core/server/saved_objects/types.ts b/src/core/server/saved_objects/types.ts index 962965a08f8b2a..f14e9d9efb5e3d 100644 --- a/src/core/server/saved_objects/types.ts +++ b/src/core/server/saved_objects/types.ts @@ -46,6 +46,19 @@ export { SavedObjectsMigrationVersion, } from '../../types'; +/** + * Meta information about the SavedObjectService's status. Available to plugins via {@link CoreSetup.status}. + * + * @public + */ +export interface SavedObjectStatusMeta { + migratedIndices: { + [status: string]: number; + skipped: number; + migrated: number; + }; +} + /** * * @public diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index e4e2b8d7adbb77..f3e3b7736d8d30 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -638,6 +638,8 @@ export interface CoreSetup ISavedObjectTypeRegistry; } +// @public +export interface SavedObjectStatusMeta { + // (undocumented) + migratedIndices: { + [status: string]: number; + skipped: number; + migrated: number; + }; +} + // @public (undocumented) export interface SavedObjectsType { convertToAliasScript?: string; @@ -2237,6 +2283,38 @@ export class ScopedClusterClient implements IScopedClusterClient { callAsInternalUser(endpoint: string, clientParams?: Record, options?: CallAPIOptions): Promise; } +// @public +export interface ServiceStatus | unknown = unknown> { + detail?: string; + documentationUrl?: string; + level: ServiceStatusLevel; + meta?: Meta; + summary: string; +} + +// @public +export type ServiceStatusLevel = typeof ServiceStatusLevels[keyof typeof ServiceStatusLevels]; + +// @public +export const ServiceStatusLevels: Readonly<{ + available: Readonly<{ + toString: () => "available"; + valueOf: () => 0; + }>; + degraded: Readonly<{ + toString: () => "degraded"; + valueOf: () => 1; + }>; + unavailable: Readonly<{ + toString: () => "unavailable"; + valueOf: () => 2; + }>; + critical: Readonly<{ + toString: () => "critical"; + valueOf: () => 3; + }>; +}>; + // @public export interface SessionCookieValidationResult { isValid: boolean; @@ -2274,6 +2352,11 @@ export type SharedGlobalConfig = RecursiveReadonly_2<{ // @public export type StartServicesAccessor = () => Promise<[CoreStart, TPluginsStart, TStart]>; +// @public +export interface StatusServiceSetup { + core$: Observable; +} + // @public export type StringValidation = StringValidationRegex | StringValidationRegexString; diff --git a/src/core/server/server.test.mocks.ts b/src/core/server/server.test.mocks.ts index 53d1b742a64944..5d535c98457249 100644 --- a/src/core/server/server.test.mocks.ts +++ b/src/core/server/server.test.mocks.ts @@ -85,3 +85,9 @@ export const mockMetricsService = metricsServiceMock.create(); jest.doMock('./metrics/metrics_service', () => ({ MetricsService: jest.fn(() => mockMetricsService), })); + +import { statusServiceMock } from './status/status_service.mock'; +export const mockStatusService = statusServiceMock.create(); +jest.doMock('./status/status_service', () => ({ + StatusService: jest.fn(() => mockStatusService), +})); diff --git a/src/core/server/server.test.ts b/src/core/server/server.test.ts index a4b5a9d81df203..24c41d511180a1 100644 --- a/src/core/server/server.test.ts +++ b/src/core/server/server.test.ts @@ -29,6 +29,7 @@ import { mockUiSettingsService, mockRenderingService, mockMetricsService, + mockStatusService, } from './server.test.mocks'; import { BehaviorSubject } from 'rxjs'; @@ -63,6 +64,7 @@ test('sets up services on "setup"', async () => { expect(mockUiSettingsService.setup).not.toHaveBeenCalled(); expect(mockRenderingService.setup).not.toHaveBeenCalled(); expect(mockMetricsService.setup).not.toHaveBeenCalled(); + expect(mockStatusService.setup).not.toHaveBeenCalled(); await server.setup(); @@ -74,6 +76,7 @@ test('sets up services on "setup"', async () => { expect(mockUiSettingsService.setup).toHaveBeenCalledTimes(1); expect(mockRenderingService.setup).toHaveBeenCalledTimes(1); expect(mockMetricsService.setup).toHaveBeenCalledTimes(1); + expect(mockStatusService.setup).toHaveBeenCalledTimes(1); }); test('injects legacy dependency to context#setup()', async () => { @@ -141,6 +144,7 @@ test('stops services on "stop"', async () => { expect(mockSavedObjectsService.stop).not.toHaveBeenCalled(); expect(mockUiSettingsService.stop).not.toHaveBeenCalled(); expect(mockMetricsService.stop).not.toHaveBeenCalled(); + expect(mockStatusService.stop).not.toHaveBeenCalled(); await server.stop(); @@ -151,6 +155,7 @@ test('stops services on "stop"', async () => { expect(mockSavedObjectsService.stop).toHaveBeenCalledTimes(1); expect(mockUiSettingsService.stop).toHaveBeenCalledTimes(1); expect(mockMetricsService.stop).toHaveBeenCalledTimes(1); + expect(mockStatusService.stop).toHaveBeenCalledTimes(1); }); test(`doesn't setup core services if config validation fails`, async () => { @@ -167,6 +172,7 @@ test(`doesn't setup core services if config validation fails`, async () => { expect(mockUiSettingsService.setup).not.toHaveBeenCalled(); expect(mockRenderingService.setup).not.toHaveBeenCalled(); expect(mockMetricsService.setup).not.toHaveBeenCalled(); + expect(mockStatusService.setup).not.toHaveBeenCalled(); }); test(`doesn't setup core services if legacy config validation fails`, async () => { @@ -187,4 +193,5 @@ test(`doesn't setup core services if legacy config validation fails`, async () = expect(mockSavedObjectsService.stop).not.toHaveBeenCalled(); expect(mockUiSettingsService.setup).not.toHaveBeenCalled(); expect(mockMetricsService.setup).not.toHaveBeenCalled(); + expect(mockStatusService.setup).not.toHaveBeenCalled(); }); diff --git a/src/core/server/server.ts b/src/core/server/server.ts index 222be572b75e49..07ea431dd3a0df 100644 --- a/src/core/server/server.ts +++ b/src/core/server/server.ts @@ -36,6 +36,9 @@ import { UiSettingsService } from './ui_settings'; import { PluginsService, config as pluginsConfig } from './plugins'; import { SavedObjectsService } from '../server/saved_objects'; import { MetricsService, opsConfig } from './metrics'; +import { CapabilitiesService } from './capabilities'; +import { UuidService } from './uuid'; +import { StatusService } from './status/status_service'; import { config as cspConfig } from './csp'; import { config as elasticsearchConfig } from './elasticsearch'; @@ -50,8 +53,6 @@ import { mapToObject } from '../utils'; import { ContextService } from './context'; import { RequestHandlerContext } from '.'; import { InternalCoreSetup, InternalCoreStart } from './internal_types'; -import { CapabilitiesService } from './capabilities'; -import { UuidService } from './uuid'; const coreId = Symbol('core'); const rootConfigPath = ''; @@ -70,6 +71,7 @@ export class Server { private readonly uiSettings: UiSettingsService; private readonly uuid: UuidService; private readonly metrics: MetricsService; + private readonly status: StatusService; private readonly coreApp: CoreApp; private pluginsInitialized?: boolean; @@ -95,6 +97,7 @@ export class Server { this.capabilities = new CapabilitiesService(core); this.uuid = new UuidService(core); this.metrics = new MetricsService(core); + this.status = new StatusService(core); this.coreApp = new CoreApp(core); } @@ -145,15 +148,21 @@ export class Server { const metricsSetup = await this.metrics.setup({ http: httpSetup }); + const statusSetup = this.status.setup({ + elasticsearch: elasticsearchServiceSetup, + savedObjects: savedObjectsSetup, + }); + const coreSetup: InternalCoreSetup = { capabilities: capabilitiesSetup, context: contextServiceSetup, elasticsearch: elasticsearchServiceSetup, http: httpSetup, - uiSettings: uiSettingsSetup, + metrics: metricsSetup, savedObjects: savedObjectsSetup, + status: statusSetup, + uiSettings: uiSettingsSetup, uuid: uuidSetup, - metrics: metricsSetup, }; const pluginsSetup = await this.plugins.setup(coreSetup); @@ -220,6 +229,7 @@ export class Server { await this.uiSettings.stop(); await this.rendering.stop(); await this.metrics.stop(); + await this.status.stop(); } private registerCoreContext(coreSetup: InternalCoreSetup, rendering: RenderingServiceSetup) { diff --git a/src/core/server/status/get_summary_status.test.ts b/src/core/server/status/get_summary_status.test.ts new file mode 100644 index 00000000000000..7516e82ee784de --- /dev/null +++ b/src/core/server/status/get_summary_status.test.ts @@ -0,0 +1,180 @@ +/* + * 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 { ServiceStatus, ServiceStatusLevels } from './types'; +import { getSummaryStatus } from './get_summary_status'; + +describe('getSummaryStatus', () => { + const available: ServiceStatus = { level: ServiceStatusLevels.available, summary: 'Available' }; + const degraded: ServiceStatus = { + level: ServiceStatusLevels.degraded, + summary: 'This is degraded!', + }; + const unavailable: ServiceStatus = { + level: ServiceStatusLevels.unavailable, + summary: 'This is unavailable!', + }; + const critical: ServiceStatus = { + level: ServiceStatusLevels.critical, + summary: 'This is critical!', + }; + + it('returns available when all status are available', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: available, + s2: available, + s3: available, + }) + ) + ).toMatchObject({ + level: ServiceStatusLevels.available, + }); + }); + + it('returns degraded when the worst status is degraded', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: available, + s2: degraded, + s3: available, + }) + ) + ).toMatchObject({ + level: ServiceStatusLevels.degraded, + }); + }); + + it('returns unavailable when the worst status is unavailable', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: available, + s2: degraded, + s3: unavailable, + }) + ) + ).toMatchObject({ + level: ServiceStatusLevels.unavailable, + }); + }); + + it('returns critical when the worst status is critical', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: critical, + s2: degraded, + s3: unavailable, + }) + ) + ).toMatchObject({ + level: ServiceStatusLevels.critical, + }); + }); + + describe('summary', () => { + describe('when a single service is at highest level', () => { + it('returns all information about that single service', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: degraded, + s2: { + level: ServiceStatusLevels.unavailable, + summary: 'Lorem ipsum', + detail: 'Vivamus pulvinar sem ac luctus ultrices.', + documentationUrl: 'http://helpmenow.com/problem1', + meta: { + custom: { data: 'here' }, + }, + }, + }) + ) + ).toEqual({ + level: ServiceStatusLevels.unavailable, + summary: '[s2]: Lorem ipsum', + detail: 'Vivamus pulvinar sem ac luctus ultrices.', + documentationUrl: 'http://helpmenow.com/problem1', + meta: { + custom: { data: 'here' }, + }, + }); + }); + }); + + describe('when multiple services is at highest level', () => { + it('returns aggregated information about the affected services', () => { + expect( + getSummaryStatus( + Object.entries({ + s1: degraded, + s2: { + level: ServiceStatusLevels.unavailable, + summary: 'Lorem ipsum', + detail: 'Vivamus pulvinar sem ac luctus ultrices.', + documentationUrl: 'http://helpmenow.com/problem1', + meta: { + custom: { data: 'here' }, + }, + }, + s3: { + level: ServiceStatusLevels.unavailable, + summary: 'Proin mattis', + detail: 'Nunc quis nulla at mi lobortis pretium.', + documentationUrl: 'http://helpmenow.com/problem2', + meta: { + other: { data: 'over there' }, + }, + }, + }) + ) + ).toEqual({ + level: ServiceStatusLevels.unavailable, + summary: '[2] services are unavailable', + detail: 'See the status page for more information', + meta: { + affectedServices: { + s2: { + level: ServiceStatusLevels.unavailable, + summary: 'Lorem ipsum', + detail: 'Vivamus pulvinar sem ac luctus ultrices.', + documentationUrl: 'http://helpmenow.com/problem1', + meta: { + custom: { data: 'here' }, + }, + }, + s3: { + level: ServiceStatusLevels.unavailable, + summary: 'Proin mattis', + detail: 'Nunc quis nulla at mi lobortis pretium.', + documentationUrl: 'http://helpmenow.com/problem2', + meta: { + other: { data: 'over there' }, + }, + }, + }, + }, + }); + }); + }); + }); +}); diff --git a/src/core/server/status/get_summary_status.ts b/src/core/server/status/get_summary_status.ts new file mode 100644 index 00000000000000..748a54f0bf8bba --- /dev/null +++ b/src/core/server/status/get_summary_status.ts @@ -0,0 +1,84 @@ +/* + * 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 { ServiceStatus, ServiceStatusLevels, ServiceStatusLevel } from './types'; + +/** + * Returns a single {@link ServiceStatus} that summarizes the most severe status level from a group of statuses. + * @param statuses + */ +export const getSummaryStatus = (statuses: Array<[string, ServiceStatus]>): ServiceStatus => { + const grouped = groupByLevel(statuses); + const highestSeverityLevel = getHighestSeverityLevel(grouped.keys()); + const highestSeverityGroup = grouped.get(highestSeverityLevel)!; + + if (highestSeverityLevel === ServiceStatusLevels.available) { + return { + level: ServiceStatusLevels.available, + summary: `All services are available`, + }; + } else if (highestSeverityGroup.size === 1) { + const [serviceName, status] = [...highestSeverityGroup.entries()][0]; + return { + ...status, + summary: `[${serviceName}]: ${status.summary!}`, + }; + } else { + return { + level: highestSeverityLevel, + summary: `[${highestSeverityGroup.size}] services are ${highestSeverityLevel.toString()}`, + // TODO: include URL to status page + detail: `See the status page for more information`, + meta: { + affectedServices: Object.fromEntries([...highestSeverityGroup]), + }, + }; + } +}; + +const groupByLevel = ( + statuses: Array<[string, ServiceStatus]> +): Map> => { + const byLevel = new Map>(); + + for (const [serviceName, status] of statuses) { + let levelMap = byLevel.get(status.level); + if (!levelMap) { + levelMap = new Map(); + byLevel.set(status.level, levelMap); + } + + levelMap.set(serviceName, status); + } + + return byLevel; +}; + +const getHighestSeverityLevel = (levels: Iterable): ServiceStatusLevel => { + const sorted = [...levels].sort((a, b) => { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } + }); + return sorted[sorted.length - 1] ?? ServiceStatusLevels.available; +}; diff --git a/src/core/server/status/index.ts b/src/core/server/status/index.ts new file mode 100644 index 00000000000000..c39115d55a6827 --- /dev/null +++ b/src/core/server/status/index.ts @@ -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. + */ + +export { StatusService } from './status_service'; +export * from './types'; diff --git a/src/core/server/status/status_service.mock.ts b/src/core/server/status/status_service.mock.ts new file mode 100644 index 00000000000000..d550c2f06750bf --- /dev/null +++ b/src/core/server/status/status_service.mock.ts @@ -0,0 +1,71 @@ +/* + * 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 { StatusService } from './status_service'; +import { + InternalStatusServiceSetup, + StatusServiceSetup, + ServiceStatusLevels, + ServiceStatus, + CoreStatus, +} from './types'; +import { BehaviorSubject } from 'rxjs'; + +const available: ServiceStatus = { + level: ServiceStatusLevels.available, + summary: 'Service is working', +}; +const availableCoreStatus: CoreStatus = { + elasticsearch: available, + savedObjects: available, +}; + +const createSetupContractMock = () => { + const setupContract: jest.Mocked = { + core$: new BehaviorSubject(availableCoreStatus), + }; + + return setupContract; +}; + +const createInternalSetupContractMock = () => { + const setupContract: jest.Mocked = { + core$: new BehaviorSubject(availableCoreStatus), + overall$: new BehaviorSubject(available), + }; + + return setupContract; +}; + +type StatusServiceContract = PublicMethodsOf; + +const createMock = () => { + const mocked: jest.Mocked = { + setup: jest.fn().mockReturnValue(createInternalSetupContractMock()), + start: jest.fn(), + stop: jest.fn(), + }; + return mocked; +}; + +export const statusServiceMock = { + create: createMock, + createSetupContract: createSetupContractMock, + createInternalSetupContract: createInternalSetupContractMock, +}; diff --git a/src/core/server/status/status_service.test.ts b/src/core/server/status/status_service.test.ts new file mode 100644 index 00000000000000..6d92a266369b90 --- /dev/null +++ b/src/core/server/status/status_service.test.ts @@ -0,0 +1,229 @@ +/* + * 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 { of, BehaviorSubject } from 'rxjs'; + +import { ServiceStatus, ServiceStatusLevels, CoreStatus } from './types'; +import { StatusService } from './status_service'; +import { first } from 'rxjs/operators'; +import { mockCoreContext } from '../core_context.mock'; +import { ServiceStatusLevelSnapshotSerializer } from './test_utils'; + +expect.addSnapshotSerializer(ServiceStatusLevelSnapshotSerializer); + +describe('StatusService', () => { + const available: ServiceStatus = { + level: ServiceStatusLevels.available, + summary: 'Available', + }; + const degraded: ServiceStatus = { + level: ServiceStatusLevels.degraded, + summary: 'This is degraded!', + }; + + describe('setup', () => { + describe('core$', () => { + it('rolls up core status observables into single observable', async () => { + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: of(available), + }, + savedObjects: { + status$: of(degraded), + }, + }); + expect(await setup.core$.pipe(first()).toPromise()).toEqual({ + elasticsearch: available, + savedObjects: degraded, + }); + }); + + it('replays last event', async () => { + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: of(available), + }, + savedObjects: { + status$: of(degraded), + }, + }); + const subResult1 = await setup.core$.pipe(first()).toPromise(); + const subResult2 = await setup.core$.pipe(first()).toPromise(); + const subResult3 = await setup.core$.pipe(first()).toPromise(); + expect(subResult1).toEqual({ + elasticsearch: available, + savedObjects: degraded, + }); + expect(subResult2).toEqual({ + elasticsearch: available, + savedObjects: degraded, + }); + expect(subResult3).toEqual({ + elasticsearch: available, + savedObjects: degraded, + }); + }); + + it('does not emit duplicate events', () => { + const elasticsearch$ = new BehaviorSubject(available); + const savedObjects$ = new BehaviorSubject(degraded); + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: elasticsearch$, + }, + savedObjects: { + status$: savedObjects$, + }, + }); + + const statusUpdates: CoreStatus[] = []; + const subscription = setup.core$.subscribe(status => statusUpdates.push(status)); + + elasticsearch$.next(available); + elasticsearch$.next(available); + elasticsearch$.next({ + level: ServiceStatusLevels.available, + summary: `Wow another summary`, + }); + savedObjects$.next(degraded); + savedObjects$.next(available); + savedObjects$.next(available); + subscription.unsubscribe(); + + expect(statusUpdates).toMatchInlineSnapshot(` + Array [ + Object { + "elasticsearch": Object { + "level": available, + "summary": "Available", + }, + "savedObjects": Object { + "level": degraded, + "summary": "This is degraded!", + }, + }, + Object { + "elasticsearch": Object { + "level": available, + "summary": "Wow another summary", + }, + "savedObjects": Object { + "level": degraded, + "summary": "This is degraded!", + }, + }, + Object { + "elasticsearch": Object { + "level": available, + "summary": "Wow another summary", + }, + "savedObjects": Object { + "level": available, + "summary": "Available", + }, + }, + ] + `); + }); + }); + + describe('overall$', () => { + it('exposes an overall summary', async () => { + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: of(degraded), + }, + savedObjects: { + status$: of(degraded), + }, + }); + expect(await setup.overall$.pipe(first()).toPromise()).toMatchObject({ + level: ServiceStatusLevels.degraded, + summary: '[2] services are degraded', + }); + }); + + it('replays last event', async () => { + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: of(degraded), + }, + savedObjects: { + status$: of(degraded), + }, + }); + const subResult1 = await setup.overall$.pipe(first()).toPromise(); + const subResult2 = await setup.overall$.pipe(first()).toPromise(); + const subResult3 = await setup.overall$.pipe(first()).toPromise(); + expect(subResult1).toMatchObject({ + level: ServiceStatusLevels.degraded, + summary: '[2] services are degraded', + }); + expect(subResult2).toMatchObject({ + level: ServiceStatusLevels.degraded, + summary: '[2] services are degraded', + }); + expect(subResult3).toMatchObject({ + level: ServiceStatusLevels.degraded, + summary: '[2] services are degraded', + }); + }); + + it('does not emit duplicate events', () => { + const elasticsearch$ = new BehaviorSubject(available); + const savedObjects$ = new BehaviorSubject(degraded); + const setup = new StatusService(mockCoreContext.create()).setup({ + elasticsearch: { + status$: elasticsearch$, + }, + savedObjects: { + status$: savedObjects$, + }, + }); + + const statusUpdates: ServiceStatus[] = []; + const subscription = setup.overall$.subscribe(status => statusUpdates.push(status)); + + elasticsearch$.next(available); + elasticsearch$.next(available); + elasticsearch$.next({ + level: ServiceStatusLevels.available, + summary: `Wow another summary`, + }); + savedObjects$.next(degraded); + savedObjects$.next(available); + savedObjects$.next(available); + subscription.unsubscribe(); + + expect(statusUpdates).toMatchInlineSnapshot(` + Array [ + Object { + "level": degraded, + "summary": "[savedObjects]: This is degraded!", + }, + Object { + "level": available, + "summary": "All services are available", + }, + ] + `); + }); + }); + }); +}); diff --git a/src/core/server/status/status_service.ts b/src/core/server/status/status_service.ts new file mode 100644 index 00000000000000..b6697d82219519 --- /dev/null +++ b/src/core/server/status/status_service.ts @@ -0,0 +1,78 @@ +/* + * 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. + */ + +/* eslint-disable max-classes-per-file */ + +import { Observable, combineLatest } from 'rxjs'; +import { map, distinctUntilChanged, shareReplay } from 'rxjs/operators'; +import { isDeepStrictEqual } from 'util'; + +import { CoreService } from '../../types'; +import { CoreContext } from '../core_context'; +import { Logger } from '../logging'; +import { InternalElasticsearchServiceSetup } from '../elasticsearch'; +import { InternalSavedObjectsServiceSetup } from '../saved_objects'; + +import { ServiceStatus, CoreStatus, InternalStatusServiceSetup } from './types'; +import { getSummaryStatus } from './get_summary_status'; + +interface SetupDeps { + elasticsearch: Pick; + savedObjects: Pick; +} + +export class StatusService implements CoreService { + private readonly logger: Logger; + + constructor(coreContext: CoreContext) { + this.logger = coreContext.logger.get('status'); + } + + public setup(core: SetupDeps) { + const core$ = this.setupCoreStatus(core); + const overall$: Observable = core$.pipe( + map(coreStatus => { + const summary = getSummaryStatus(Object.entries(coreStatus)); + this.logger.debug(`Recalculated overall status`, { status: summary }); + return summary; + }), + distinctUntilChanged(isDeepStrictEqual) + ); + + return { + core$, + overall$, + }; + } + + public start() {} + + public stop() {} + + private setupCoreStatus({ elasticsearch, savedObjects }: SetupDeps): Observable { + return combineLatest([elasticsearch.status$, savedObjects.status$]).pipe( + map(([elasticsearchStatus, savedObjectsStatus]) => ({ + elasticsearch: elasticsearchStatus, + savedObjects: savedObjectsStatus, + })), + distinctUntilChanged(isDeepStrictEqual), + shareReplay(1) + ); + } +} diff --git a/src/core/server/status/test_utils.ts b/src/core/server/status/test_utils.ts new file mode 100644 index 00000000000000..765fa8771f3758 --- /dev/null +++ b/src/core/server/status/test_utils.ts @@ -0,0 +1,25 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ServiceStatusLevels, ServiceStatusLevel } from './types'; + +export const ServiceStatusLevelSnapshotSerializer: jest.SnapshotSerializerPlugin = { + test: (val: any) => Object.values(ServiceStatusLevels).includes(val), + print: (val: ServiceStatusLevel) => val.toString(), +}; diff --git a/src/core/server/status/types.ts b/src/core/server/status/types.ts new file mode 100644 index 00000000000000..84a7356c66bbf7 --- /dev/null +++ b/src/core/server/status/types.ts @@ -0,0 +1,134 @@ +/* + * 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 { Observable } from 'rxjs'; +import { deepFreeze } from '../../utils'; + +/** + * The current status of a service at a point in time. + * + * @typeParam Meta - JSON-serializable object. Plugins should export this type to allow other plugins to read the `meta` + * field in a type-safe way. + * @public + */ +export interface ServiceStatus | unknown = unknown> { + /** + * The current availability level of the service. + */ + level: ServiceStatusLevel; + /** + * A high-level summary of the service status. + */ + summary: string; + /** + * A more detailed description of the service status. + */ + detail?: string; + /** + * A URL to open in a new tab about how to resolve or troubleshoot the problem. + */ + documentationUrl?: string; + /** + * Any JSON-serializable data to be included in the HTTP API response. Useful for providing more fine-grained, + * machine-readable information about the service status. May include status information for underlying features. + */ + meta?: Meta; +} + +/** + * The current "level" of availability of a service. + * + * @remarks + * The values implement `valueOf` to allow for easy comparisons between status levels with <, >, etc. Higher values + * represent higher severities. Note that the default `Array.prototype.sort` implementation does not correctly sort + * these values. + * + * A snapshot serializer is available in `src/core/server/test_utils` to ease testing of these values with Jest. + * + * @public + */ +export const ServiceStatusLevels = deepFreeze({ + /** + * Everything is working! + */ + available: { + toString: () => 'available', + valueOf: () => 0, + }, + /** + * Some features may not be working. + */ + degraded: { + toString: () => 'degraded', + valueOf: () => 1, + }, + /** + * The service is unavailable, but other functions that do not depend on this service should work. + */ + unavailable: { + toString: () => 'unavailable', + valueOf: () => 2, + }, + /** + * Block all user functions and display the status page, reserved for Core services only. + */ + critical: { + toString: () => 'critical', + valueOf: () => 3, + }, +}); + +/** + * A convenience type that represents the union of each value in {@link ServiceStatusLevels}. + * @public + */ +export type ServiceStatusLevel = typeof ServiceStatusLevels[keyof typeof ServiceStatusLevels]; + +/** + * Status of core services. + * + * @internalRemarks + * Only contains entries for backend services that could have a non-available `status`. + * For example, `context` cannot possibly be broken, so it is not included. + * + * @public + */ +export interface CoreStatus { + elasticsearch: ServiceStatus; + savedObjects: ServiceStatus; +} + +/** + * API for accessing status of Core and this plugin's dependencies as well as for customizing this plugin's status. + * @public + */ +export interface StatusServiceSetup { + /** + * Current status for all Core services. + */ + core$: Observable; +} + +/** @internal */ +export interface InternalStatusServiceSetup extends StatusServiceSetup { + /** + * Overall system status used for HTTP API + */ + overall$: Observable; +} diff --git a/src/core/server/test_utils.ts b/src/core/server/test_utils.ts index 470b1c2d135b70..f7e6fbcd0c131e 100644 --- a/src/core/server/test_utils.ts +++ b/src/core/server/test_utils.ts @@ -18,3 +18,4 @@ */ export { createHttpServer } from './http/test_utils'; +export { ServiceStatusLevelSnapshotSerializer } from './status/test_utils'; From e0a519424fce5758434b914c38d877cbc7588f93 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Wed, 8 Apr 2020 15:10:44 -0500 Subject: [PATCH 44/52] Index pattern management plugin - src/legacy/core_plugins/management => new platform plugin (#62594) * implement index pattern management plugin in new platform --- .i18nrc.json | 1 + .../services => kibana/public}/index.ts | 5 +- .../step_index_pattern.test.tsx | 2 +- .../step_index_pattern/step_index_pattern.tsx | 2 +- .../step_time_field/step_time_field.test.tsx | 2 +- .../step_time_field/step_time_field.tsx | 2 +- .../create_index_pattern_wizard/index.js | 3 +- .../lib/get_indices.test.ts | 2 +- .../lib/get_indices.ts | 2 +- .../edit_index_pattern/edit_index_pattern.js | 13 ++--- .../sections/index_patterns/index.js | 5 +- .../__jest__/objects_table.test.js | 4 +- .../components/flyout/__jest__/flyout.test.js | 4 +- src/legacy/core_plugins/management/index.ts | 37 ------------- .../core_plugins/management/package.json | 5 -- .../core_plugins/management/public/index.ts | 38 -------------- .../core_plugins/management/public/legacy.ts | 45 ---------------- .../new_platform/new_platform.karma_mock.js | 15 ++++++ .../ui/public/new_platform/new_platform.ts | 6 +++ .../index_pattern_management/kibana.json | 7 +++ .../index_pattern_management/public}/index.ts | 11 ++-- .../index_pattern_management/public}/mocks.ts | 52 +++++++++---------- .../public}/plugin.ts | 41 +++++++-------- .../public/service}/creation/config.ts | 8 +-- .../public/service}/creation/index.ts | 0 .../public/service}/creation/manager.ts | 21 ++++++-- .../public/service}/index.ts | 0 .../index_pattern_management_service.ts | 51 ++++++++---------- .../public/service}/list/config.ts | 9 ++-- .../public/service}/list/index.ts | 0 .../public/service}/list/manager.ts | 18 +++++-- x-pack/legacy/plugins/rollup/kibana.json | 3 +- .../rollup_index_pattern_creation_config.js | 2 +- .../rollup_index_pattern_list_config.js | 2 +- x-pack/legacy/plugins/rollup/public/legacy.ts | 8 +-- x-pack/legacy/plugins/rollup/public/plugin.ts | 17 ++---- .../components/copy_to_space_flyout.test.tsx | 6 --- .../components/copy_to_space_flyout.tsx | 2 +- .../copy_to_space_flyout_footer.tsx | 2 +- .../components/processing_copy_to_space.tsx | 2 +- .../summarize_copy_result.test.ts | 2 +- .../summarize_copy_result.ts | 2 +- .../translations/translations/ja-JP.json | 10 ++-- .../translations/translations/zh-CN.json | 10 ++-- 44 files changed, 183 insertions(+), 296 deletions(-) rename src/legacy/core_plugins/{management/public/np_ready/services => kibana/public}/index.ts (86%) delete mode 100644 src/legacy/core_plugins/management/index.ts delete mode 100644 src/legacy/core_plugins/management/package.json delete mode 100644 src/legacy/core_plugins/management/public/index.ts delete mode 100644 src/legacy/core_plugins/management/public/legacy.ts create mode 100644 src/plugins/index_pattern_management/kibana.json rename src/{legacy/core_plugins/management/public/np_ready => plugins/index_pattern_management/public}/index.ts (83%) rename src/{legacy/core_plugins/management/public/np_ready => plugins/index_pattern_management/public}/mocks.ts (57%) rename src/{legacy/core_plugins/management/public/np_ready => plugins/index_pattern_management/public}/plugin.ts (60%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/creation/config.ts (88%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/creation/index.ts (100%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/creation/manager.ts (79%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/index.ts (100%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/index_pattern_management_service.ts (51%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/list/config.ts (87%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/list/index.ts (100%) rename src/{legacy/core_plugins/management/public/np_ready/services/index_pattern_management => plugins/index_pattern_management/public/service}/list/manager.ts (75%) diff --git a/.i18nrc.json b/.i18nrc.json index 3b0b40b40792e8..19d361aed93445 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -24,6 +24,7 @@ "src/legacy/core_plugins/management", "src/plugins/management" ], + "indexPatternManagement": "src/plugins/index_pattern_management", "advancedSettings": "src/plugins/advanced_settings", "kibana_legacy": "src/plugins/kibana_legacy", "kibana_react": "src/legacy/core_plugins/kibana_react", diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index.ts b/src/legacy/core_plugins/kibana/public/index.ts similarity index 86% rename from src/legacy/core_plugins/management/public/np_ready/services/index.ts rename to src/legacy/core_plugins/kibana/public/index.ts index 9df010223542be..a4fffc6eec26da 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index.ts +++ b/src/legacy/core_plugins/kibana/public/index.ts @@ -17,4 +17,7 @@ * under the License. */ -export * from './index_pattern_management'; +export { + ProcessedImportResponse, + processImportResponse, +} from './management/sections/objects/lib/process_import_response'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.test.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.test.tsx index 25bd36829b6d03..40471b95d774c1 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.test.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.test.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { StepIndexPattern } from '../step_index_pattern'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; import { Header } from './components/header'; -import { IndexPatternCreationConfig } from '../../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../../plugins/index_pattern_management/public'; import { coreMock } from '../../../../../../../../../../core/public/mocks'; import { dataPluginMock } from '../../../../../../../../../../plugins/data/public/mocks'; import { SavedObjectsFindResponsePublic } from '../../../../../../../../../../core/public'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.tsx index bbb6bf26e5b311..648bf7f8f97388 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_index_pattern/step_index_pattern.tsx @@ -39,7 +39,7 @@ import { LoadingIndices } from './components/loading_indices'; import { StatusMessage } from './components/status_message'; import { IndicesList } from './components/indices_list'; import { Header } from './components/header'; -import { IndexPatternCreationConfig } from '../../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../../plugins/index_pattern_management/public'; import { MatchedIndex } from '../../types'; interface StepIndexPatternProps { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.test.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.test.tsx index e0c43105cb320f..b23b1e3ad9051e 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.test.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.test.tsx @@ -19,7 +19,7 @@ import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -import { IndexPatternCreationConfig } from '../../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../../plugins/index_pattern_management/public'; import { IFieldType } from '../../../../../../../../../../plugins/data/public'; import { StepTimeField } from '../step_time_field'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx index 80582cc1fbd921..a58bf10c9dab8b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/components/step_time_field/step_time_field.tsx @@ -34,7 +34,7 @@ import { Header } from './components/header'; import { TimeField } from './components/time_field'; import { AdvancedOptions } from './components/advanced_options'; import { ActionButtons } from './components/action_buttons'; -import { IndexPatternCreationConfig } from '../../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../../plugins/index_pattern_management/public'; import { DataPublicPluginStart } from '../../../../../../../../../../plugins/data/public'; interface StepTimeFieldProps { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/index.js index 50c5a58d35db3b..47cb773258cb46 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/index.js @@ -20,7 +20,6 @@ import uiRoutes from 'ui/routes'; import angularTemplate from './angular_template.html'; import { npStart } from 'ui/new_platform'; -import { setup as managementSetup } from '../../../../../../management/public/legacy'; import { getCreateBreadcrumbs } from '../breadcrumbs'; import { renderCreateIndexPatternWizard, destroyCreateIndexPatternWizard } from './render'; @@ -33,7 +32,7 @@ uiRoutes.when('/management/kibana/index_pattern', { const kbnUrl = $injector.get('kbnUrl'); $scope.$$postDigest(() => { const $routeParams = $injector.get('$routeParams'); - const indexPatternCreationType = managementSetup.indexPattern.creation.getType( + const indexPatternCreationType = npStart.plugins.indexPatternManagement.creation.getType( $routeParams.type ); const services = { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.test.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.test.ts index 5a8460fcb51bae..40583af7177fee 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.test.ts +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.test.ts @@ -18,7 +18,7 @@ */ import { getIndices } from './get_indices'; -import { IndexPatternCreationConfig } from './../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../plugins/index_pattern_management/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { LegacyApiCaller } from '../../../../../../../../../plugins/data/public/search'; diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.ts index 3848c425e2d495..3b1b7a3b52a5b8 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.ts +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/lib/get_indices.ts @@ -18,7 +18,7 @@ */ import { get, sortBy } from 'lodash'; -import { IndexPatternCreationConfig } from '../../../../../../../management/public'; +import { IndexPatternCreationConfig } from '../../../../../../../../../plugins/index_pattern_management/public'; import { DataPublicPluginStart } from '../../../../../../../../../plugins/data/public'; import { MatchedIndex } from '../types'; 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 6d302ac5a74f35..594430ca01f4ce 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 @@ -29,7 +29,6 @@ import { uiModules } from 'ui/modules'; import template from './edit_index_pattern.html'; import { fieldWildcardMatcher } from '../../../../../../../../plugins/kibana_utils/public'; import { subscribeWithScope } from '../../../../../../../../plugins/kibana_legacy/public'; -import { setup as managementSetup } from '../../../../../../management/public/legacy'; import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { SourceFiltersTable } from './source_filters_table'; @@ -239,14 +238,12 @@ uiModules $scope.editSectionsProvider = Private(IndicesEditSectionsProvider); $scope.kbnUrl = Private(KbnUrlProvider); $scope.indexPattern = $route.current.locals.indexPattern; - $scope.indexPatternListProvider = managementSetup.indexPattern.list; - $scope.indexPattern.tags = managementSetup.indexPattern.list.getIndexPatternTags( + $scope.indexPatternListProvider = npStart.plugins.indexPatternManagement.list; + $scope.indexPattern.tags = npStart.plugins.indexPatternManagement.list.getIndexPatternTags( $scope.indexPattern, $scope.indexPattern.id === config.get('defaultIndex') ); - $scope.getFieldInfo = managementSetup.indexPattern.list.getFieldInfo.bind( - managementSetup.indexPattern.list - ); + $scope.getFieldInfo = npStart.plugins.indexPatternManagement.list.getFieldInfo; docTitle.change($scope.indexPattern.title); const otherPatterns = _.filter($route.current.locals.indexPatterns, pattern => { @@ -257,7 +254,7 @@ uiModules $scope.editSections = $scope.editSectionsProvider( $scope.indexPattern, $scope.fieldFilter, - managementSetup.indexPattern.list + npStart.plugins.indexPatternManagement.list ); $scope.refreshFilters(); $scope.fields = $scope.indexPattern.getNonScriptedFields(); @@ -363,7 +360,7 @@ uiModules $scope.editSections = $scope.editSectionsProvider( $scope.indexPattern, $scope.fieldFilter, - managementSetup.indexPattern.list + npStart.plugins.indexPatternManagement.list ); if ($scope.fieldFilter === undefined) { diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.js index 310797a7f3a0cc..a8376c0e84bf9b 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.js @@ -18,7 +18,6 @@ */ import { management } from 'ui/management'; -import { setup as managementSetup } from '../../../../../management/public/legacy'; import './create_index_pattern_wizard'; import './edit_index_pattern'; import uiRoutes from 'ui/routes'; @@ -111,7 +110,7 @@ uiModules transclude: true, template: indexTemplate, link: async function($scope) { - const indexPatternCreationOptions = await managementSetup.indexPattern.creation.getIndexPatternCreationOptions( + const indexPatternCreationOptions = await npStart.plugins.indexPatternManagement.creation.getIndexPatternCreationOptions( url => { $scope.$evalAsync(() => kbnUrl.change(url)); } @@ -124,7 +123,7 @@ uiModules const id = pattern.id; const title = pattern.get('title'); const isDefault = $scope.defaultIndex === id; - const tags = managementSetup.indexPattern.list.getIndexPatternTags( + const tags = npStart.plugins.indexPatternManagement.list.getIndexPatternTags( pattern, isDefault ); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js index a5e34f8955fe30..7b9c17640a0f3e 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/__jest__/objects_table.test.js @@ -19,7 +19,7 @@ import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -import { mockManagementPlugin } from '../../../../../../../../management/public/np_ready/mocks'; +import { mockManagementPlugin } from '../../../../../../../../../../plugins/index_pattern_management/public/mocks'; import { Query } from '@elastic/eui'; import { ObjectsTable, POSSIBLE_TYPES } from '../objects_table'; @@ -30,7 +30,7 @@ import { extractExportDetails } from '../../../lib/extract_export_details'; jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); -jest.mock('../../../../../../../../management/public/legacy', () => ({ +jest.mock('../../../../../../../../../../plugins/index_pattern_management/public', () => ({ setup: mockManagementPlugin.createSetupContract(), start: mockManagementPlugin.createStartContract(), })); diff --git a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js index 97c0d5b89d657b..5d14c4609b918c 100644 --- a/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js +++ b/src/legacy/core_plugins/kibana/public/management/sections/objects/components/objects_table/components/flyout/__jest__/flyout.test.js @@ -19,7 +19,7 @@ import React from 'react'; import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers'; -import { mockManagementPlugin } from '../../../../../../../../../../management/public/np_ready/mocks'; +import { mockManagementPlugin } from '../../../../../../../../../../../../plugins/index_pattern_management/public/mocks'; import { Flyout } from '../flyout'; jest.mock('ui/kfetch', () => ({ kfetch: jest.fn() })); @@ -48,7 +48,7 @@ jest.mock('../../../../../lib/resolve_saved_objects', () => ({ saveObjects: jest.fn(), })); -jest.mock('../../../../../../../../../../management/public/legacy', () => ({ +jest.mock('../../../../../../../../../../../../plugins/index_pattern_management/public', () => ({ setup: mockManagementPlugin.createSetupContract(), start: mockManagementPlugin.createStartContract(), })); diff --git a/src/legacy/core_plugins/management/index.ts b/src/legacy/core_plugins/management/index.ts deleted file mode 100644 index 4962c948f842f2..00000000000000 --- a/src/legacy/core_plugins/management/index.ts +++ /dev/null @@ -1,37 +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'; - -// eslint-disable-next-line import/no-default-export -export default function ManagementPlugin(kibana: any) { - const config: Legacy.PluginSpecOptions = { - id: 'stack-management', - publicDir: resolve(__dirname, 'public'), - config: (Joi: any) => { - return Joi.object({ - enabled: Joi.boolean().default(true), - }).default(); - }, - init: (server: Legacy.Server) => ({}), - }; - - return new kibana.Plugin(config); -} diff --git a/src/legacy/core_plugins/management/package.json b/src/legacy/core_plugins/management/package.json deleted file mode 100644 index 77d33a7bce3b6c..00000000000000 --- a/src/legacy/core_plugins/management/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "management", - "version": "kibana" -} - \ No newline at end of file diff --git a/src/legacy/core_plugins/management/public/index.ts b/src/legacy/core_plugins/management/public/index.ts deleted file mode 100644 index bc3737524e1259..00000000000000 --- a/src/legacy/core_plugins/management/public/index.ts +++ /dev/null @@ -1,38 +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. - */ - -/** - * Static np-ready code, re-exported here so consumers can import from - * `src/legacy/core_plugins/management/public` - * - * @public - */ - -export { - ManagementSetup, - ManagementStart, - plugin, - IndexPatternCreationConfig, - IndexPatternListConfig, -} from './np_ready'; - -export { - processImportResponse, - ProcessedImportResponse, -} from '../../kibana/public/management/sections/objects/lib/process_import_response'; diff --git a/src/legacy/core_plugins/management/public/legacy.ts b/src/legacy/core_plugins/management/public/legacy.ts deleted file mode 100644 index 96d2c74398a0e8..00000000000000 --- a/src/legacy/core_plugins/management/public/legacy.ts +++ /dev/null @@ -1,45 +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. - */ - -/** - * New Platform Shim - * - * In this file, we import any legacy dependencies we have, and shim them into - * our plugin by manually constructing the values that the new platform will - * eventually be passing to the `setup/start` method of our plugin definition. - * - * The idea is that our `plugin.ts` can stay "pure" and not contain any legacy - * world code. Then when it comes time to migrate to the new platform, we can - * simply delete this shim file. - * - * We are also calling `setup/start` here and exporting our public contract so that - * other legacy plugins are able to import from '../core_plugins/management/legacy' - * and receive the response value of the `setup/start` contract, mimicking the - * data that will eventually be injected by the new platform. - */ - -import { PluginInitializerContext } from 'src/core/public'; -import { npSetup, npStart } from 'ui/new_platform'; - -import { plugin } from '.'; - -const pluginInstance = plugin({} as PluginInitializerContext); - -export const setup = pluginInstance.setup(npSetup.core, { home: npSetup.plugins.home }); -export const start = pluginInstance.start(npStart.core, {}); 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 f70ef069dd134e..0779d6472671cb 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 @@ -290,6 +290,10 @@ export const npSetup = { }), }, }, + indexPatternManagement: { + list: { addListConfig: sinon.fake() }, + creation: { addCreationConfig: sinon.fake() }, + }, discover: { docViews: { addDocView: sinon.fake(), @@ -325,6 +329,17 @@ export const npStart = { }), }, }, + indexPatternManagement: { + list: { + getType: sinon.fake(), + getIndexPatternCreationOptions: sinon.fake(), + }, + creation: { + getIndexPatternTags: sinon.fake(), + getFieldInfo: sinon.fake(), + areScriptedFieldsEnabled: sinon.fake(), + }, + }, embeddable: { getEmbeddableFactory: sinon.fake(), getEmbeddableFactories: sinon.fake(), diff --git a/src/legacy/ui/public/new_platform/new_platform.ts b/src/legacy/ui/public/new_platform/new_platform.ts index b4b5099081759e..cdd7e1a9949127 100644 --- a/src/legacy/ui/public/new_platform/new_platform.ts +++ b/src/legacy/ui/public/new_platform/new_platform.ts @@ -47,6 +47,10 @@ import { AdvancedSettingsStart, } from '../../../../plugins/advanced_settings/public'; import { ManagementSetup, ManagementStart } from '../../../../plugins/management/public'; +import { + IndexPatternManagementSetup, + IndexPatternManagementStart, +} from '../../../../plugins/index_pattern_management/public'; import { BfetchPublicSetup, BfetchPublicStart } from '../../../../plugins/bfetch/public'; import { UsageCollectionSetup } from '../../../../plugins/usage_collection/public'; import { TelemetryPluginSetup, TelemetryPluginStart } from '../../../../plugins/telemetry/public'; @@ -86,6 +90,7 @@ export interface PluginsSetup { visualizations: VisualizationsSetup; telemetry?: TelemetryPluginSetup; savedObjectsManagement: SavedObjectsManagementPluginSetup; + indexPatternManagement: IndexPatternManagementSetup; } export interface PluginsStart { @@ -107,6 +112,7 @@ export interface PluginsStart { telemetry?: TelemetryPluginStart; dashboard: DashboardStart; savedObjectsManagement: SavedObjectsManagementPluginStart; + indexPatternManagement: IndexPatternManagementStart; } export const npSetup = { diff --git a/src/plugins/index_pattern_management/kibana.json b/src/plugins/index_pattern_management/kibana.json new file mode 100644 index 00000000000000..d5397a11184aab --- /dev/null +++ b/src/plugins/index_pattern_management/kibana.json @@ -0,0 +1,7 @@ +{ + "id": "indexPatternManagement", + "version": "kibana", + "server": false, + "ui": true, + "requiredPlugins": [] +} diff --git a/src/legacy/core_plugins/management/public/np_ready/index.ts b/src/plugins/index_pattern_management/public/index.ts similarity index 83% rename from src/legacy/core_plugins/management/public/np_ready/index.ts rename to src/plugins/index_pattern_management/public/index.ts index bae0f1d3e23cdb..da482c0c51f0ac 100644 --- a/src/legacy/core_plugins/management/public/np_ready/index.ts +++ b/src/plugins/index_pattern_management/public/index.ts @@ -29,14 +29,11 @@ * either types, or static code. */ import { PluginInitializerContext } from 'src/core/public'; -import { ManagementPlugin } from './plugin'; -export { ManagementSetup, ManagementStart } from './plugin'; +import { IndexPatternManagementPlugin } from './plugin'; +export { IndexPatternManagementSetup, IndexPatternManagementStart } from './plugin'; export function plugin(initializerContext: PluginInitializerContext) { - return new ManagementPlugin(initializerContext); + return new IndexPatternManagementPlugin(initializerContext); } -export { - IndexPatternCreationConfig, - IndexPatternListConfig, -} from './services/index_pattern_management'; +export { IndexPatternCreationConfig, IndexPatternListConfig } from './service'; diff --git a/src/legacy/core_plugins/management/public/np_ready/mocks.ts b/src/plugins/index_pattern_management/public/mocks.ts similarity index 57% rename from src/legacy/core_plugins/management/public/np_ready/mocks.ts rename to src/plugins/index_pattern_management/public/mocks.ts index ae0be98de63f37..bc97f46c302e32 100644 --- a/src/legacy/core_plugins/management/public/np_ready/mocks.ts +++ b/src/plugins/index_pattern_management/public/mocks.ts @@ -18,42 +18,38 @@ */ import { PluginInitializerContext } from 'src/core/public'; -import { coreMock } from '../../../../../core/public/mocks'; +import { coreMock } from '../../../core/public/mocks'; import { - ManagementSetup, - ManagementStart, - ManagementPlugin, - ManagementPluginSetupDependencies, + IndexPatternManagementSetup, + IndexPatternManagementStart, + IndexPatternManagementPlugin, } from './plugin'; -const createSetupContract = (): ManagementSetup => ({ - indexPattern: { - creation: { - add: jest.fn(), - getType: jest.fn(), - getIndexPatternCreationOptions: jest.fn(), - } as any, - list: { - add: jest.fn(), - getIndexPatternTags: jest.fn(), - getFieldInfo: jest.fn(), - areScriptedFieldsEnabled: jest.fn(), - } as any, - }, +const createSetupContract = (): IndexPatternManagementSetup => ({ + creation: { + addCreationConfig: jest.fn(), + } as any, + list: { + addListConfig: jest.fn(), + } as any, }); -const createStartContract = (): ManagementStart => ({}); +const createStartContract = (): IndexPatternManagementStart => ({ + creation: { + getType: jest.fn(), + getIndexPatternCreationOptions: jest.fn(), + } as any, + list: { + getIndexPatternTags: jest.fn(), + getFieldInfo: jest.fn(), + areScriptedFieldsEnabled: jest.fn(), + } as any, +}); const createInstance = async () => { - const plugin = new ManagementPlugin({} as PluginInitializerContext); + const plugin = new IndexPatternManagementPlugin({} as PluginInitializerContext); - const setup = plugin.setup(coreMock.createSetup(), ({ - home: { - featureCatalogue: { - register: jest.fn(), - }, - }, - } as unknown) as ManagementPluginSetupDependencies); + const setup = plugin.setup(coreMock.createSetup()); const doStart = () => plugin.start(coreMock.createStart(), {}); return { diff --git a/src/legacy/core_plugins/management/public/np_ready/plugin.ts b/src/plugins/index_pattern_management/public/plugin.ts similarity index 60% rename from src/legacy/core_plugins/management/public/np_ready/plugin.ts rename to src/plugins/index_pattern_management/public/plugin.ts index 2a8ef10c817cc9..93bb0ead1df4af 100644 --- a/src/legacy/core_plugins/management/public/np_ready/plugin.ts +++ b/src/plugins/index_pattern_management/public/plugin.ts @@ -17,43 +17,40 @@ * under the License. */ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'src/core/public'; -import { HomePublicPluginSetup } from 'src/plugins/home/public'; -import { IndexPatternManagementService, IndexPatternManagementSetup } from './services'; +import { + IndexPatternManagementService, + IndexPatternManagementServiceSetup, + IndexPatternManagementServiceStart, +} from './service'; -export interface ManagementPluginSetupDependencies { - home: HomePublicPluginSetup; -} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface IndexPatternManagementSetupDependencies {} // eslint-disable-next-line @typescript-eslint/no-empty-interface -interface ManagementPluginStartDependencies {} +export interface IndexPatternManagementStartDependencies {} -export interface ManagementSetup { - indexPattern: IndexPatternManagementSetup; -} +export type IndexPatternManagementSetup = IndexPatternManagementServiceSetup; -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface ManagementStart {} +export type IndexPatternManagementStart = IndexPatternManagementServiceStart; -export class ManagementPlugin +export class IndexPatternManagementPlugin implements Plugin< - ManagementSetup, - ManagementStart, - ManagementPluginSetupDependencies, - ManagementPluginStartDependencies + IndexPatternManagementSetup, + IndexPatternManagementStart, + IndexPatternManagementSetupDependencies, + IndexPatternManagementStartDependencies > { private readonly indexPattern = new IndexPatternManagementService(); constructor(initializerContext: PluginInitializerContext) {} - public setup(core: CoreSetup, { home }: ManagementPluginSetupDependencies) { - return { - indexPattern: this.indexPattern.setup({ httpClient: core.http, home }), - }; + public setup(core: CoreSetup) { + return this.indexPattern.setup({ httpClient: core.http }); } - public start(core: CoreStart, plugins: ManagementPluginStartDependencies) { - return {}; + public start(core: CoreStart, plugins: IndexPatternManagementStartDependencies) { + return this.indexPattern.start(); } public stop() { diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/config.ts b/src/plugins/index_pattern_management/public/service/creation/config.ts similarity index 88% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/config.ts rename to src/plugins/index_pattern_management/public/service/creation/config.ts index 5714fa33389624..29ab0ebfc3d5f7 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/config.ts +++ b/src/plugins/index_pattern_management/public/service/creation/config.ts @@ -18,20 +18,20 @@ */ import { i18n } from '@kbn/i18n'; -import { MatchedIndex } from '../../../../../../kibana/public/management/sections/index_patterns/create_index_pattern_wizard/types'; +import { MatchedIndex } from '../../../../../legacy/core_plugins/kibana/public/management/sections/index_patterns/create_index_pattern_wizard/types'; const indexPatternTypeName = i18n.translate( - 'management.editIndexPattern.createIndex.defaultTypeName', + 'indexPatternManagement.editIndexPattern.createIndex.defaultTypeName', { defaultMessage: 'index pattern' } ); const indexPatternButtonText = i18n.translate( - 'management.editIndexPattern.createIndex.defaultButtonText', + 'indexPatternManagement.editIndexPattern.createIndex.defaultButtonText', { defaultMessage: 'Standard index pattern' } ); const indexPatternButtonDescription = i18n.translate( - 'management.editIndexPattern.createIndex.defaultButtonDescription', + 'indexPatternManagement.editIndexPattern.createIndex.defaultButtonDescription', { defaultMessage: 'Perform full aggregations against any data' } ); diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/index.ts b/src/plugins/index_pattern_management/public/service/creation/index.ts similarity index 100% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/index.ts rename to src/plugins/index_pattern_management/public/service/creation/index.ts diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/manager.ts b/src/plugins/index_pattern_management/public/service/creation/manager.ts similarity index 79% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/manager.ts rename to src/plugins/index_pattern_management/public/service/creation/manager.ts index e7fa13409ab046..32b3e7ee7a133b 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/creation/manager.ts +++ b/src/plugins/index_pattern_management/public/service/creation/manager.ts @@ -17,23 +17,25 @@ * under the License. */ -import { HttpSetup } from '../../../../../../../../core/public'; +import { HttpSetup } from '../../../../../core/public'; import { IndexPatternCreationConfig, UrlHandler, IndexPatternCreationOption } from './config'; export class IndexPatternCreationManager { private configs: IndexPatternCreationConfig[]; - constructor(private readonly httpClient: HttpSetup) { + constructor() { this.configs = []; } - public add(Config: typeof IndexPatternCreationConfig) { - const config = new Config({ httpClient: this.httpClient }); + public addCreationConfig = (httpClient: HttpSetup) => ( + Config: typeof IndexPatternCreationConfig + ) => { + const config = new Config({ httpClient }); if (this.configs.findIndex(c => c.key === config.key) !== -1) { throw new Error(`${config.key} exists in IndexPatternCreationManager.`); } this.configs.push(config); - } + }; public getType(key: string | undefined): IndexPatternCreationConfig | null { if (key) { @@ -58,4 +60,13 @@ export class IndexPatternCreationManager { ); return options; } + + setup = (httpClient: HttpSetup) => ({ + addCreationConfig: this.addCreationConfig(httpClient).bind(this), + }); + + start = () => ({ + getType: this.getType.bind(this), + getIndexPatternCreationOptions: this.getIndexPatternCreationOptions.bind(this), + }); } diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/index.ts b/src/plugins/index_pattern_management/public/service/index.ts similarity index 100% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/index.ts rename to src/plugins/index_pattern_management/public/service/index.ts diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/index_pattern_management_service.ts b/src/plugins/index_pattern_management/public/service/index_pattern_management_service.ts similarity index 51% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/index_pattern_management_service.ts rename to src/plugins/index_pattern_management/public/service/index_pattern_management_service.ts index 2b6f008dd928a1..4780fa00ed468d 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/index_pattern_management_service.ts +++ b/src/plugins/index_pattern_management/public/service/index_pattern_management_service.ts @@ -17,18 +17,12 @@ * under the License. */ -import { i18n } from '@kbn/i18n'; -import { - FeatureCatalogueCategory, - HomePublicPluginSetup, -} from '../../../../../../../plugins/home/public'; -import { HttpSetup } from '../../../../../../../core/public'; +import { HttpSetup } from '../../../../core/public'; import { IndexPatternCreationManager, IndexPatternCreationConfig } from './creation'; import { IndexPatternListManager, IndexPatternListConfig } from './list'; interface SetupDependencies { httpClient: HttpSetup; - home: HomePublicPluginSetup; } /** @@ -37,31 +31,29 @@ interface SetupDependencies { * @internal */ export class IndexPatternManagementService { - public setup({ httpClient, home }: SetupDependencies) { - const creation = new IndexPatternCreationManager(httpClient); - const list = new IndexPatternListManager(); + indexPatternCreationManager: IndexPatternCreationManager; + indexPatternListConfig: IndexPatternListManager; - creation.add(IndexPatternCreationConfig); - list.add(IndexPatternListConfig); + constructor() { + this.indexPatternCreationManager = new IndexPatternCreationManager(); + this.indexPatternListConfig = new IndexPatternListManager(); + } + + public setup({ httpClient }: SetupDependencies) { + const creationManagerSetup = this.indexPatternCreationManager.setup(httpClient); + creationManagerSetup.addCreationConfig(IndexPatternCreationConfig); + this.indexPatternListConfig.setup().addListConfig(IndexPatternListConfig); - home.featureCatalogue.register({ - id: 'index_patterns', - title: i18n.translate('management.indexPatternHeader', { - defaultMessage: 'Index Patterns', - }), - description: i18n.translate('management.indexPatternLabel', { - defaultMessage: - 'Manage the index patterns that help retrieve your data from Elasticsearch.', - }), - icon: 'indexPatternApp', - path: '/app/kibana#/management/kibana/index_patterns', - showOnHomePage: true, - category: FeatureCatalogueCategory.ADMIN, - }); + return { + creation: creationManagerSetup, + list: this.indexPatternListConfig.setup(), + }; + } + public start() { return { - creation, - list, + creation: this.indexPatternCreationManager.start(), + list: this.indexPatternListConfig.start(), }; } @@ -71,4 +63,5 @@ export class IndexPatternManagementService { } /** @internal */ -export type IndexPatternManagementSetup = ReturnType; +export type IndexPatternManagementServiceSetup = ReturnType; +export type IndexPatternManagementServiceStart = ReturnType; diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/config.ts b/src/plugins/index_pattern_management/public/service/list/config.ts similarity index 87% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/config.ts rename to src/plugins/index_pattern_management/public/service/list/config.ts index dd4d77a6811717..87c246e8913e53 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/config.ts +++ b/src/plugins/index_pattern_management/public/service/list/config.ts @@ -33,9 +33,12 @@ export class IndexPatternListConfig { ? [ { key: 'default', - name: i18n.translate('management.editIndexPattern.list.defaultIndexPatternListName', { - defaultMessage: 'Default', - }), + name: i18n.translate( + 'indexPatternManagement.editIndexPattern.list.defaultIndexPatternListName', + { + defaultMessage: 'Default', + } + ), }, ] : []; diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/index.ts b/src/plugins/index_pattern_management/public/service/list/index.ts similarity index 100% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/index.ts rename to src/plugins/index_pattern_management/public/service/list/index.ts diff --git a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/manager.ts b/src/plugins/index_pattern_management/public/service/list/manager.ts similarity index 75% rename from src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/manager.ts rename to src/plugins/index_pattern_management/public/service/list/manager.ts index 73ca33ae914a9b..3a2910a222cd7c 100644 --- a/src/legacy/core_plugins/management/public/np_ready/services/index_pattern_management/list/manager.ts +++ b/src/plugins/index_pattern_management/public/service/list/manager.ts @@ -27,7 +27,7 @@ export class IndexPatternListManager { this.configs = []; } - public add(Config: typeof IndexPatternListConfig) { + private addListConfig(Config: typeof IndexPatternListConfig) { const config = new Config(); if (this.configs.findIndex(c => c.key === config.key) !== -1) { throw new Error(`${config.key} exists in IndexPatternListManager.`); @@ -35,7 +35,7 @@ export class IndexPatternListManager { this.configs.push(config); } - public getIndexPatternTags(indexPattern: IIndexPattern, isDefault: boolean) { + private getIndexPatternTags(indexPattern: IIndexPattern, isDefault: boolean) { return this.configs.reduce((tags: IndexPatternTag[], config) => { return config.getIndexPatternTags ? tags.concat(config.getIndexPatternTags(indexPattern, isDefault)) @@ -43,15 +43,25 @@ export class IndexPatternListManager { }, []); } - public getFieldInfo(indexPattern: IIndexPattern, field: IFieldType): string[] { + private getFieldInfo(indexPattern: IIndexPattern, field: IFieldType): string[] { return this.configs.reduce((info: string[], config) => { return config.getFieldInfo ? info.concat(config.getFieldInfo(indexPattern, field)) : info; }, []); } - public areScriptedFieldsEnabled(indexPattern: IIndexPattern): boolean { + private areScriptedFieldsEnabled(indexPattern: IIndexPattern): boolean { return this.configs.every(config => { return config.areScriptedFieldsEnabled ? config.areScriptedFieldsEnabled(indexPattern) : true; }); } + + setup = () => ({ + addListConfig: this.addListConfig.bind(this), + }); + + start = () => ({ + getIndexPatternTags: this.getIndexPatternTags.bind(this), + getFieldInfo: this.getFieldInfo.bind(this), + areScriptedFieldsEnabled: this.areScriptedFieldsEnabled.bind(this), + }); } diff --git a/x-pack/legacy/plugins/rollup/kibana.json b/x-pack/legacy/plugins/rollup/kibana.json index 3781d59d8c0f36..3df8bd7c187d5e 100644 --- a/x-pack/legacy/plugins/rollup/kibana.json +++ b/x-pack/legacy/plugins/rollup/kibana.json @@ -4,7 +4,8 @@ "requiredPlugins": [ "home", "index_management", - "metrics" + "metrics", + "indexPatternManagement" ], "optionalPlugins": [ "usageCollection" diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js index f0eb21a219442f..f4de2a30981276 100644 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js +++ b/x-pack/legacy/plugins/rollup/public/index_pattern_creation/rollup_index_pattern_creation_config.js @@ -8,7 +8,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { RollupPrompt } from './components/rollup_prompt'; -import { IndexPatternCreationConfig } from '../../../../../../src/legacy/core_plugins/management/public'; +import { IndexPatternCreationConfig } from '../../../../../../src/plugins/index_pattern_management/public'; const rollupIndexPatternTypeName = i18n.translate( 'xpack.rollupJobs.editRollupIndexPattern.createIndex.defaultTypeName', diff --git a/x-pack/legacy/plugins/rollup/public/index_pattern_list/rollup_index_pattern_list_config.js b/x-pack/legacy/plugins/rollup/public/index_pattern_list/rollup_index_pattern_list_config.js index fbf2612b83aa82..809a76d1868b22 100644 --- a/x-pack/legacy/plugins/rollup/public/index_pattern_list/rollup_index_pattern_list_config.js +++ b/x-pack/legacy/plugins/rollup/public/index_pattern_list/rollup_index_pattern_list_config.js @@ -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 { IndexPatternListConfig } from '../../../../../../src/legacy/core_plugins/management/public'; +import { IndexPatternListConfig } from '../../../../../../src/plugins/index_pattern_management/public'; function isRollup(indexPattern) { return ( diff --git a/x-pack/legacy/plugins/rollup/public/legacy.ts b/x-pack/legacy/plugins/rollup/public/legacy.ts index ec530e63408f45..83945110c2c760 100644 --- a/x-pack/legacy/plugins/rollup/public/legacy.ts +++ b/x-pack/legacy/plugins/rollup/public/legacy.ts @@ -6,14 +6,8 @@ import { npSetup, npStart } from 'ui/new_platform'; import { RollupPlugin } from './plugin'; -import { setup as management } from '../../../../../src/legacy/core_plugins/management/public/legacy'; const plugin = new RollupPlugin(); -export const setup = plugin.setup(npSetup.core, { - ...npSetup.plugins, - __LEGACY: { - managementLegacy: management, - }, -}); +export const setup = plugin.setup(npSetup.core, npSetup.plugins); export const start = plugin.start(npStart.core, npStart.plugins); diff --git a/x-pack/legacy/plugins/rollup/public/plugin.ts b/x-pack/legacy/plugins/rollup/public/plugin.ts index c58975419e20f1..5782e88c3448bf 100644 --- a/x-pack/legacy/plugins/rollup/public/plugin.ts +++ b/x-pack/legacy/plugins/rollup/public/plugin.ts @@ -7,7 +7,6 @@ import { i18n } from '@kbn/i18n'; import { CoreSetup, CoreStart, Plugin } from 'kibana/public'; import { PluginsStart } from './legacy_imports'; -import { ManagementSetup as ManagementSetupLegacy } from '../../../../../src/legacy/core_plugins/management/public/np_ready'; import { rollupBadgeExtension, rollupToggleExtension } from './extend_index_management'; // @ts-ignore import { RollupIndexPatternCreationConfig } from './index_pattern_creation/rollup_index_pattern_creation_config'; @@ -26,6 +25,7 @@ import { import { CRUD_APP_BASE_PATH } from './crud_app/constants'; import { ManagementSetup } from '../../../../../src/plugins/management/public'; import { IndexMgmtSetup } from '../../../../plugins/index_management/public'; +import { IndexPatternManagementSetup } from '../../../../../src/plugins/index_pattern_management/public'; import { search } from '../../../../../src/plugins/data/public'; // @ts-ignore import { setEsBaseAndXPackBase, setHttp } from './crud_app/services'; @@ -33,23 +33,16 @@ import { setNotifications, setFatalErrors } from './kibana_services'; import { renderApp } from './application'; export interface RollupPluginSetupDependencies { - __LEGACY: { - managementLegacy: ManagementSetupLegacy; - }; home?: HomePublicPluginSetup; management: ManagementSetup; indexManagement?: IndexMgmtSetup; + indexPatternManagement: IndexPatternManagementSetup; } export class RollupPlugin implements Plugin { setup( core: CoreSetup, - { - __LEGACY: { managementLegacy }, - home, - management, - indexManagement, - }: RollupPluginSetupDependencies + { home, management, indexManagement, indexPatternManagement }: RollupPluginSetupDependencies ) { setFatalErrors(core.fatalErrors); @@ -61,8 +54,8 @@ export class RollupPlugin implements Plugin { const isRollupIndexPatternsEnabled = core.uiSettings.get(CONFIG_ROLLUPS); if (isRollupIndexPatternsEnabled) { - managementLegacy.indexPattern.creation.add(RollupIndexPatternCreationConfig); - managementLegacy.indexPattern.list.add(RollupIndexPatternListConfig); + indexPatternManagement.creation.addCreationConfig(RollupIndexPatternCreationConfig); + indexPatternManagement.list.addListConfig(RollupIndexPatternListConfig); } if (home) { diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx index 7809b511adda49..99b4e184c071a6 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.test.tsx @@ -6,7 +6,6 @@ import React from 'react'; import Boom from 'boom'; import { mountWithIntl, nextTick } from 'test_utils/enzyme_helpers'; -import { mockManagementPlugin } from '../../../../../../src/legacy/core_plugins/management/public/np_ready/mocks'; import { CopySavedObjectsToSpaceFlyout } from './copy_to_space_flyout'; import { CopyToSpaceForm } from './copy_to_space_form'; import { EuiLoadingSpinner, EuiEmptyPrompt } from '@elastic/eui'; @@ -19,11 +18,6 @@ import { spacesManagerMock } from '../../spaces_manager/mocks'; import { SpacesManager } from '../../spaces_manager'; import { ToastsApi } from 'src/core/public'; -jest.mock('../../../../../../src/legacy/core_plugins/management/public/legacy', () => ({ - setup: mockManagementPlugin.createSetupContract(), - start: mockManagementPlugin.createStartContract(), -})); - interface SetupOpts { mockSpaces?: Space[]; returnBeforeSpacesLoad?: boolean; diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx index 4d92505c4aebbc..fee41fc7e36d32 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx @@ -25,7 +25,7 @@ import { ToastsStart } from 'src/core/public'; import { ProcessedImportResponse, processImportResponse, -} from '../../../../../../src/legacy/core_plugins/management/public'; +} from '../../../../../../src/legacy/core_plugins/kibana/public'; import { SavedObjectsManagementRecord } from '../../../../../../src/plugins/saved_objects_management/public'; import { Space } from '../../../common/model/space'; import { SpacesManager } from '../../spaces_manager'; diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx index b22cec0af5ea83..4f6ff55dbfbb2d 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx @@ -8,7 +8,7 @@ import React, { Fragment } from 'react'; import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiStat, EuiHorizontalRule } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/management/public'; +import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/kibana/public'; import { ImportRetry } from '../types'; interface Props { diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx index 96cbac4b48065a..ea74fc92b95ead 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx @@ -13,7 +13,7 @@ import { EuiHorizontalRule, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/management/public'; +import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/kibana/public'; import { SavedObjectsManagementRecord } from '../../../../../../src/plugins/saved_objects_management/public'; import { Space } from '../../../common/model/space'; import { CopyOptions, ImportRetry } from '../types'; diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts index fb2616619c644b..65a0cabfeb7166 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts @@ -5,7 +5,7 @@ */ import { summarizeCopyResult } from './summarize_copy_result'; -import { ProcessedImportResponse } from 'src/legacy/core_plugins/management/public'; +import { ProcessedImportResponse } from 'src/legacy/core_plugins/kibana/public'; const createSavedObjectsManagementRecord = () => ({ type: 'dashboard', diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts index 96e642b0f45d8b..44c9e9993bf102 100644 --- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts +++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ProcessedImportResponse } from 'src/legacy/core_plugins/management/public'; +import { ProcessedImportResponse } from 'src/legacy/core_plugins/kibana/public'; import { SavedObjectsManagementRecord } from 'src/plugins/saved_objects_management/public'; export interface SummarizedSavedObjectResult { diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index d07026c0883b8d..00ac5b77d00f3b 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2523,12 +2523,10 @@ "management.breadcrumb": "管理", "management.connectDataDisplayName": "データに接続", "management.displayName": "管理", - "management.editIndexPattern.createIndex.defaultButtonDescription": "すべてのデータに完全集約を実行", - "management.editIndexPattern.createIndex.defaultButtonText": "標準インデックスパターン", - "management.editIndexPattern.createIndex.defaultTypeName": "インデックスパターン", - "management.editIndexPattern.list.defaultIndexPatternListName": "デフォルト", - "management.indexPatternHeader": "インデックスパターン", - "management.indexPatternLabel": "Elasticsearch からのデータの取得に役立つインデックスパターンを管理します。", + "indexPatternManagement.editIndexPattern.createIndex.defaultButtonDescription": "すべてのデータに完全集約を実行", + "indexPatternManagement.editIndexPattern.createIndex.defaultButtonText": "標準インデックスパターン", + "indexPatternManagement.editIndexPattern.createIndex.defaultTypeName": "インデックスパターン", + "indexPatternManagement.editIndexPattern.list.defaultIndexPatternListName": "デフォルト", "management.nav.label": "管理", "management.nav.menu": "管理メニュー", "management.stackManagement.managementDescription": "Elastic Stack の管理を行うセンターコンソールです。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7e64ff6301fafc..f6d84431bef7fb 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2524,12 +2524,10 @@ "management.breadcrumb": "管理", "management.connectDataDisplayName": "连接数据", "management.displayName": "管理", - "management.editIndexPattern.createIndex.defaultButtonDescription": "对任何数据执行完全聚合", - "management.editIndexPattern.createIndex.defaultButtonText": "标准索引模式", - "management.editIndexPattern.createIndex.defaultTypeName": "索引模式", - "management.editIndexPattern.list.defaultIndexPatternListName": "默认值", - "management.indexPatternHeader": "索引模式", - "management.indexPatternLabel": "管理帮助从 Elasticsearch 检索数据的索引模式。", + "indexPatternManagement.editIndexPattern.createIndex.defaultButtonDescription": "对任何数据执行完全聚合", + "indexPatternManagement.editIndexPattern.createIndex.defaultButtonText": "标准索引模式", + "indexPatternManagement.editIndexPattern.createIndex.defaultTypeName": "索引模式", + "indexPatternManagement.editIndexPattern.list.defaultIndexPatternListName": "默认值", "management.nav.label": "管理", "management.nav.menu": "管理菜单", "management.stackManagement.managementDescription": "您用于管理 Elastic Stack 的中心控制台。", From fdb4a37a6016c8afce52203ecccbe03e6fc4064e Mon Sep 17 00:00:00 2001 From: Lee Drengenberg Date: Wed, 8 Apr 2020 20:33:21 +0000 Subject: [PATCH 45/52] restore empty_kibana after saved objects test (#62951) --- test/functional/apps/management/_mgmt_import_saved_objects.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/functional/apps/management/_mgmt_import_saved_objects.js b/test/functional/apps/management/_mgmt_import_saved_objects.js index 53b7e7062ee2d4..2f9d9f9bfb178f 100644 --- a/test/functional/apps/management/_mgmt_import_saved_objects.js +++ b/test/functional/apps/management/_mgmt_import_saved_objects.js @@ -35,6 +35,7 @@ export default function({ getService, getPageObjects }) { afterEach(async function() { await esArchiver.unload('discover'); + await esArchiver.load('empty_kibana'); }); it('should import saved objects mgmt', async function() { From 86a25876601053604d08ad4884db796066b819b2 Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Wed, 8 Apr 2020 13:33:51 -0700 Subject: [PATCH 46/52] [Ingest] Data source configuration validation UI (#61180) * Initial pass at datasource configuration validation * Show error icon and red text at input and stream levels * Add tests, fix bugs in validation method * Fix typings --- .../components/datasource_input_config.tsx | 63 ++- .../components/datasource_input_panel.tsx | 50 +- .../datasource_input_stream_config.tsx | 55 +- .../components/datasource_input_var_field.tsx | 28 +- .../components/index.ts | 1 + .../create_datasource_page/index.tsx | 16 +- .../create_datasource_page/services/index.ts | 7 + .../services/validate_datasource.test.ts | 504 ++++++++++++++++++ .../services/validate_datasource.ts | 232 ++++++++ .../step_configure_datasource.tsx | 169 ++++-- .../ingest_manager/services/index.ts | 2 + .../ingest_manager/types/index.ts | 3 + 12 files changed, 1038 insertions(+), 92 deletions(-) create mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.test.ts create mode 100644 x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.ts diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_config.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_config.tsx index 356739af1ff9a8..0e8763cb2d4c09 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_config.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_config.tsx @@ -6,26 +6,38 @@ import React, { useState, Fragment } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; import { - EuiFlexGrid, EuiFlexGroup, EuiFlexItem, EuiText, + EuiTextColor, EuiSpacer, EuiButtonEmpty, EuiTitle, + EuiIconTip, } from '@elastic/eui'; import { DatasourceInput, RegistryVarsEntry } from '../../../../types'; -import { isAdvancedVar } from '../services'; +import { isAdvancedVar, DatasourceConfigValidationResults, validationHasErrors } from '../services'; import { DatasourceInputVarField } from './datasource_input_var_field'; export const DatasourceInputConfig: React.FunctionComponent<{ packageInputVars?: RegistryVarsEntry[]; datasourceInput: DatasourceInput; updateDatasourceInput: (updatedInput: Partial) => void; -}> = ({ packageInputVars, datasourceInput, updateDatasourceInput }) => { + inputVarsValidationResults: DatasourceConfigValidationResults; + forceShowErrors?: boolean; +}> = ({ + packageInputVars, + datasourceInput, + updateDatasourceInput, + inputVarsValidationResults, + forceShowErrors, +}) => { // Showing advanced options toggle state const [isShowingAdvanced, setIsShowingAdvanced] = useState(false); + // Errors state + const hasErrors = forceShowErrors && validationHasErrors(inputVarsValidationResults); + const requiredVars: RegistryVarsEntry[] = []; const advancedVars: RegistryVarsEntry[] = []; @@ -40,15 +52,36 @@ export const DatasourceInputConfig: React.FunctionComponent<{ } return ( - - + + -

- -

+ + +

+ + + +

+
+ {hasErrors ? ( + + + } + position="right" + type="alert" + iconProps={{ color: 'danger' }} + /> + + ) : null} +
@@ -60,7 +93,7 @@ export const DatasourceInputConfig: React.FunctionComponent<{

- + {requiredVars.map(varDef => { const { name: varName, type: varType } = varDef; @@ -81,6 +114,8 @@ export const DatasourceInputConfig: React.FunctionComponent<{ }, }); }} + errors={inputVarsValidationResults.config![varName]} + forceShowErrors={forceShowErrors} /> ); @@ -123,6 +158,8 @@ export const DatasourceInputConfig: React.FunctionComponent<{ }, }); }} + errors={inputVarsValidationResults.config![varName]} + forceShowErrors={forceShowErrors} /> ); @@ -132,6 +169,6 @@ export const DatasourceInputConfig: React.FunctionComponent<{ ) : null}
-
+ ); }; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_panel.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_panel.tsx index 74b08f48df12de..6b0c68ccb7d3fa 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_panel.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_panel.tsx @@ -17,8 +17,10 @@ import { EuiButtonIcon, EuiHorizontalRule, EuiSpacer, + EuiIconTip, } from '@elastic/eui'; import { DatasourceInput, DatasourceInputStream, RegistryInput } from '../../../../types'; +import { DatasourceInputValidationResults, validationHasErrors } from '../services'; import { DatasourceInputConfig } from './datasource_input_config'; import { DatasourceInputStreamConfig } from './datasource_input_stream_config'; @@ -32,10 +34,21 @@ export const DatasourceInputPanel: React.FunctionComponent<{ packageInput: RegistryInput; datasourceInput: DatasourceInput; updateDatasourceInput: (updatedInput: Partial) => void; -}> = ({ packageInput, datasourceInput, updateDatasourceInput }) => { + inputValidationResults: DatasourceInputValidationResults; + forceShowErrors?: boolean; +}> = ({ + packageInput, + datasourceInput, + updateDatasourceInput, + inputValidationResults, + forceShowErrors, +}) => { // Showing streams toggle state const [isShowingStreams, setIsShowingStreams] = useState(false); + // Errors state + const hasErrors = forceShowErrors && validationHasErrors(inputValidationResults); + return ( {/* Header / input-level toggle */} @@ -43,9 +56,32 @@ export const DatasourceInputPanel: React.FunctionComponent<{ -

{packageInput.title || packageInput.type}

-
+ + + +

+ + {packageInput.title || packageInput.type} + +

+
+
+ {hasErrors ? ( + + + } + position="right" + type="alert" + iconProps={{ color: 'danger' }} + /> + + ) : null} +
} checked={datasourceInput.enabled} onChange={e => { @@ -122,6 +158,8 @@ export const DatasourceInputPanel: React.FunctionComponent<{ packageInputVars={packageInput.vars} datasourceInput={datasourceInput} updateDatasourceInput={updateDatasourceInput} + inputVarsValidationResults={{ config: inputValidationResults.config }} + forceShowErrors={forceShowErrors} /> @@ -165,6 +203,10 @@ export const DatasourceInputPanel: React.FunctionComponent<{ updateDatasourceInput(updatedInput); }} + inputStreamValidationResults={ + inputValidationResults.streams![datasourceInputStream.id] + } + forceShowErrors={forceShowErrors} /> diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_stream_config.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_stream_config.tsx index 3bf5b2bb4c0f02..43e8f5a2c060db 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_stream_config.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_stream_config.tsx @@ -7,26 +7,38 @@ import React, { useState, Fragment } from 'react'; import ReactMarkdown from 'react-markdown'; import { FormattedMessage } from '@kbn/i18n/react'; import { - EuiFlexGrid, EuiFlexGroup, EuiFlexItem, EuiSwitch, EuiText, EuiSpacer, EuiButtonEmpty, + EuiTextColor, + EuiIconTip, } from '@elastic/eui'; import { DatasourceInputStream, RegistryStream, RegistryVarsEntry } from '../../../../types'; -import { isAdvancedVar } from '../services'; +import { isAdvancedVar, DatasourceConfigValidationResults, validationHasErrors } from '../services'; import { DatasourceInputVarField } from './datasource_input_var_field'; export const DatasourceInputStreamConfig: React.FunctionComponent<{ packageInputStream: RegistryStream; datasourceInputStream: DatasourceInputStream; updateDatasourceInputStream: (updatedStream: Partial) => void; -}> = ({ packageInputStream, datasourceInputStream, updateDatasourceInputStream }) => { + inputStreamValidationResults: DatasourceConfigValidationResults; + forceShowErrors?: boolean; +}> = ({ + packageInputStream, + datasourceInputStream, + updateDatasourceInputStream, + inputStreamValidationResults, + forceShowErrors, +}) => { // Showing advanced options toggle state const [isShowingAdvanced, setIsShowingAdvanced] = useState(false); + // Errors state + const hasErrors = forceShowErrors && validationHasErrors(inputStreamValidationResults); + const requiredVars: RegistryVarsEntry[] = []; const advancedVars: RegistryVarsEntry[] = []; @@ -41,10 +53,33 @@ export const DatasourceInputStreamConfig: React.FunctionComponent<{ } return ( - - + + + + + {packageInputStream.title || packageInputStream.dataset} + + + {hasErrors ? ( + + + } + position="right" + type="alert" + iconProps={{ color: 'danger' }} + /> + + ) : null} + + } checked={datasourceInputStream.enabled} onChange={e => { const enabled = e.target.checked; @@ -62,7 +97,7 @@ export const DatasourceInputStreamConfig: React.FunctionComponent<{ ) : null} - + {requiredVars.map(varDef => { const { name: varName, type: varType } = varDef; @@ -83,6 +118,8 @@ export const DatasourceInputStreamConfig: React.FunctionComponent<{ }, }); }} + errors={inputStreamValidationResults.config![varName]} + forceShowErrors={forceShowErrors} /> ); @@ -125,6 +162,8 @@ export const DatasourceInputStreamConfig: React.FunctionComponent<{ }, }); }} + errors={inputStreamValidationResults.config![varName]} + forceShowErrors={forceShowErrors} /> ); @@ -134,6 +173,6 @@ export const DatasourceInputStreamConfig: React.FunctionComponent<{ ) : null} - + ); }; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_var_field.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_var_field.tsx index bcb99eed88ac04..846a807f9240d3 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_var_field.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/datasource_input_var_field.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 from 'react'; +import React, { useState } from 'react'; import ReactMarkdown from 'react-markdown'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiFormRow, EuiFieldText, EuiComboBox, EuiText, EuiCodeEditor } from '@elastic/eui'; @@ -16,12 +16,20 @@ export const DatasourceInputVarField: React.FunctionComponent<{ varDef: RegistryVarsEntry; value: any; onChange: (newValue: any) => void; -}> = ({ varDef, value, onChange }) => { + errors?: string[] | null; + forceShowErrors?: boolean; +}> = ({ varDef, value, onChange, errors: varErrors, forceShowErrors }) => { + const [isDirty, setIsDirty] = useState(false); + const { multi, required, type, title, name, description } = varDef; + const isInvalid = (isDirty || forceShowErrors) && !!varErrors; + const errors = isInvalid ? varErrors : null; + const renderField = () => { - if (varDef.multi) { + if (multi) { return ( ({ label: val }))} onCreateOption={(newVal: any) => { onChange([...value, newVal]); @@ -29,10 +37,11 @@ export const DatasourceInputVarField: React.FunctionComponent<{ onChange={(newVals: any[]) => { onChange(newVals.map(val => val.label)); }} + onBlur={() => setIsDirty(true)} /> ); } - if (varDef.type === 'yaml') { + if (type === 'yaml') { return ( onChange(newVal)} + onBlur={() => setIsDirty(true)} /> ); } return ( onChange(e.target.value)} + onBlur={() => setIsDirty(true)} /> ); }; return ( ) : null } - helpText={} + helpText={} > {renderField()} diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/index.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/index.ts index e5f18e1449d1b2..3bfca756689115 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/index.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/components/index.ts @@ -5,3 +5,4 @@ */ export { CreateDatasourcePageLayout } from './layout'; export { DatasourceInputPanel } from './datasource_input_panel'; +export { DatasourceInputVarField } from './datasource_input_var_field'; 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 23d0f3317a6673..7815ab9cd1d6ed 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 @@ -21,6 +21,7 @@ import { useLinks as useEPMLinks } from '../../epm/hooks'; import { CreateDatasourcePageLayout } from './components'; import { CreateDatasourceFrom, CreateDatasourceStep } from './types'; import { CREATE_DATASOURCE_STEP_PATHS } from './constants'; +import { DatasourceValidationResults, validateDatasource } from './services'; import { StepSelectPackage } from './step_select_package'; import { StepSelectConfig } from './step_select_config'; import { StepConfigureDatasource } from './step_configure_datasource'; @@ -51,6 +52,9 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { inputs: [], }); + // Datasource validation state + const [validationResults, setValidationResults] = useState(); + // Update package info method const updatePackageInfo = (updatedPackageInfo: PackageInfo | undefined) => { if (updatedPackageInfo) { @@ -84,9 +88,18 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { ...updatedFields, }; setDatasource(newDatasource); - // eslint-disable-next-line no-console console.debug('Datasource updated', newDatasource); + updateDatasourceValidation(newDatasource); + }; + + const updateDatasourceValidation = (newDatasource?: NewDatasource) => { + if (packageInfo) { + const newValidationResult = validateDatasource(newDatasource || datasource, packageInfo); + setValidationResults(newValidationResult); + // eslint-disable-next-line no-console + console.debug('Datasource validation results', newValidationResult); + } }; // Cancel url @@ -202,6 +215,7 @@ export const CreateDatasourcePage: React.FunctionComponent = () => { packageInfo={packageInfo} datasource={datasource} updateDatasource={updateDatasource} + validationResults={validationResults!} backLink={ {from === 'config' ? ( diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/index.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/index.ts index 44e5bfa41cb9bf..d99f0712db3c36 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/index.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/index.ts @@ -4,3 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ export { isAdvancedVar } from './is_advanced_var'; +export { + DatasourceValidationResults, + DatasourceConfigValidationResults, + DatasourceInputValidationResults, + validateDatasource, + validationHasErrors, +} from './validate_datasource'; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.test.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.test.ts new file mode 100644 index 00000000000000..a45fabeb5ed6a3 --- /dev/null +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.test.ts @@ -0,0 +1,504 @@ +/* + * 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 { + PackageInfo, + InstallationStatus, + NewDatasource, + RegistryDatasource, +} from '../../../../types'; +import { validateDatasource, validationHasErrors } from './validate_datasource'; + +describe('Ingest Manager - validateDatasource()', () => { + const mockPackage = ({ + name: 'mock-package', + title: 'Mock package', + version: '0.0.0', + description: 'description', + type: 'mock', + categories: [], + requirement: { kibana: { versions: '' }, elasticsearch: { versions: '' } }, + format_version: '', + download: '', + path: '', + assets: { + kibana: { + dashboard: [], + visualization: [], + search: [], + 'index-pattern': [], + }, + }, + status: InstallationStatus.notInstalled, + datasources: [ + { + name: 'datasource1', + title: 'Datasource 1', + description: 'test datasource', + inputs: [ + { + type: 'foo', + title: 'Foo', + vars: [ + { default: 'foo-input-var-value', name: 'foo-input-var-name', type: 'text' }, + { + default: 'foo-input2-var-value', + name: 'foo-input2-var-name', + required: true, + type: 'text', + }, + { name: 'foo-input3-var-name', type: 'text', required: true, multi: true }, + ], + streams: [ + { + dataset: 'foo', + input: 'foo', + title: 'Foo', + vars: [{ name: 'var-name', type: 'yaml' }], + }, + ], + }, + { + type: 'bar', + title: 'Bar', + vars: [ + { + default: ['value1', 'value2'], + name: 'bar-input-var-name', + type: 'text', + multi: true, + }, + { name: 'bar-input2-var-name', required: true, type: 'text' }, + ], + streams: [ + { + dataset: 'bar', + input: 'bar', + title: 'Bar', + vars: [{ name: 'var-name', type: 'yaml', required: true }], + }, + { + dataset: 'bar2', + input: 'bar2', + title: 'Bar 2', + vars: [{ default: 'bar2-var-value', name: 'var-name', type: 'text' }], + }, + ], + }, + { + type: 'with-no-config-or-streams', + title: 'With no config or streams', + streams: [], + }, + { + type: 'with-disabled-streams', + title: 'With disabled streams', + streams: [ + { + dataset: 'disabled', + input: 'disabled', + title: 'Disabled', + enabled: false, + vars: [{ multi: true, required: true, name: 'var-name', type: 'text' }], + }, + { dataset: 'disabled2', input: 'disabled2', title: 'Disabled 2', enabled: false }, + ], + }, + ], + }, + ], + } as unknown) as PackageInfo; + + const validDatasource: NewDatasource = { + name: 'datasource1-1', + config_id: 'test-config', + enabled: true, + output_id: 'test-output', + inputs: [ + { + type: 'foo', + enabled: true, + config: { + 'foo-input-var-name': { value: 'foo-input-var-value', type: 'text' }, + 'foo-input2-var-name': { value: 'foo-input2-var-value', type: 'text' }, + 'foo-input3-var-name': { value: ['test'], type: 'text' }, + }, + streams: [ + { + id: 'foo-foo', + dataset: 'foo', + enabled: true, + config: { 'var-name': { value: 'test_yaml: value', type: 'yaml' } }, + }, + ], + }, + { + type: 'bar', + enabled: true, + config: { + 'bar-input-var-name': { value: ['value1', 'value2'], type: 'text' }, + 'bar-input2-var-name': { value: 'test', type: 'text' }, + }, + streams: [ + { + id: 'bar-bar', + dataset: 'bar', + enabled: true, + config: { 'var-name': { value: 'test_yaml: value', type: 'yaml' } }, + }, + { + id: 'bar-bar2', + dataset: 'bar2', + enabled: true, + config: { 'var-name': { value: undefined, type: 'text' } }, + }, + ], + }, + { + type: 'with-no-config-or-streams', + enabled: true, + streams: [], + }, + { + type: 'with-disabled-streams', + enabled: true, + streams: [ + { + id: 'with-disabled-streams-disabled', + dataset: 'disabled', + enabled: false, + config: { 'var-name': { value: undefined, type: 'text' } }, + }, + { + id: 'with-disabled-streams-disabled2', + dataset: 'disabled2', + enabled: false, + }, + ], + }, + ], + }; + + const invalidDatasource: NewDatasource = { + ...validDatasource, + name: '', + inputs: [ + { + type: 'foo', + enabled: true, + config: { + 'foo-input-var-name': { value: undefined, type: 'text' }, + 'foo-input2-var-name': { value: '', type: 'text' }, + 'foo-input3-var-name': { value: [], type: 'text' }, + }, + streams: [ + { + id: 'foo-foo', + dataset: 'foo', + enabled: true, + config: { 'var-name': { value: 'invalidyaml: test\n foo bar:', type: 'yaml' } }, + }, + ], + }, + { + type: 'bar', + enabled: true, + config: { + 'bar-input-var-name': { value: 'invalid value for multi', type: 'text' }, + 'bar-input2-var-name': { value: undefined, type: 'text' }, + }, + streams: [ + { + id: 'bar-bar', + dataset: 'bar', + enabled: true, + config: { 'var-name': { value: ' \n\n', type: 'yaml' } }, + }, + { + id: 'bar-bar2', + dataset: 'bar2', + enabled: true, + config: { 'var-name': { value: undefined, type: 'text' } }, + }, + ], + }, + { + type: 'with-no-config-or-streams', + enabled: true, + streams: [], + }, + { + type: 'with-disabled-streams', + enabled: true, + streams: [ + { + id: 'with-disabled-streams-disabled', + dataset: 'disabled', + enabled: false, + config: { + 'var-name': { + value: 'invalid value but not checked due to not enabled', + type: 'text', + }, + }, + }, + { + id: 'with-disabled-streams-disabled2', + dataset: 'disabled2', + enabled: false, + }, + ], + }, + ], + }; + + const noErrorsValidationResults = { + name: null, + description: null, + inputs: { + foo: { + config: { + 'foo-input-var-name': null, + 'foo-input2-var-name': null, + 'foo-input3-var-name': null, + }, + streams: { 'foo-foo': { config: { 'var-name': null } } }, + }, + bar: { + config: { 'bar-input-var-name': null, 'bar-input2-var-name': null }, + streams: { + 'bar-bar': { config: { 'var-name': null } }, + 'bar-bar2': { config: { 'var-name': null } }, + }, + }, + 'with-disabled-streams': { + streams: { 'with-disabled-streams-disabled': { config: { 'var-name': null } } }, + }, + }, + }; + + it('returns no errors for valid datasource configuration', () => { + expect(validateDatasource(validDatasource, mockPackage)).toEqual(noErrorsValidationResults); + }); + + it('returns errors for invalid datasource configuration', () => { + expect(validateDatasource(invalidDatasource, mockPackage)).toEqual({ + name: ['Name is required'], + description: null, + inputs: { + foo: { + config: { + 'foo-input-var-name': null, + 'foo-input2-var-name': ['foo-input2-var-name is required'], + 'foo-input3-var-name': ['foo-input3-var-name is required'], + }, + streams: { 'foo-foo': { config: { 'var-name': ['Invalid YAML format'] } } }, + }, + bar: { + config: { + 'bar-input-var-name': ['Invalid format'], + 'bar-input2-var-name': ['bar-input2-var-name is required'], + }, + streams: { + 'bar-bar': { config: { 'var-name': ['var-name is required'] } }, + 'bar-bar2': { config: { 'var-name': null } }, + }, + }, + 'with-disabled-streams': { + streams: { 'with-disabled-streams-disabled': { config: { 'var-name': null } } }, + }, + }, + }); + }); + + it('returns no errors for disabled inputs', () => { + const disabledInputs = invalidDatasource.inputs.map(input => ({ ...input, enabled: false })); + expect(validateDatasource({ ...validDatasource, inputs: disabledInputs }, mockPackage)).toEqual( + noErrorsValidationResults + ); + }); + + it('returns only datasource and input-level errors for disabled streams', () => { + const inputsWithDisabledStreams = invalidDatasource.inputs.map(input => + input.streams + ? { + ...input, + streams: input.streams.map(stream => ({ ...stream, enabled: false })), + } + : input + ); + expect( + validateDatasource({ ...invalidDatasource, inputs: inputsWithDisabledStreams }, mockPackage) + ).toEqual({ + name: ['Name is required'], + description: null, + inputs: { + foo: { + config: { + 'foo-input-var-name': null, + 'foo-input2-var-name': ['foo-input2-var-name is required'], + 'foo-input3-var-name': ['foo-input3-var-name is required'], + }, + streams: { 'foo-foo': { config: { 'var-name': null } } }, + }, + bar: { + config: { + 'bar-input-var-name': ['Invalid format'], + 'bar-input2-var-name': ['bar-input2-var-name is required'], + }, + streams: { + 'bar-bar': { config: { 'var-name': null } }, + 'bar-bar2': { config: { 'var-name': null } }, + }, + }, + 'with-disabled-streams': { + streams: { 'with-disabled-streams-disabled': { config: { 'var-name': null } } }, + }, + }, + }); + }); + + it('returns no errors for packages with no datasources', () => { + expect( + validateDatasource(validDatasource, { + ...mockPackage, + datasources: undefined, + }) + ).toEqual({ + name: null, + description: null, + inputs: null, + }); + expect( + validateDatasource(validDatasource, { + ...mockPackage, + datasources: [], + }) + ).toEqual({ + name: null, + description: null, + inputs: null, + }); + }); + + it('returns no errors for packages with no inputs', () => { + expect( + validateDatasource(validDatasource, { + ...mockPackage, + datasources: [{} as RegistryDatasource], + }) + ).toEqual({ + name: null, + description: null, + inputs: null, + }); + expect( + validateDatasource(validDatasource, { + ...mockPackage, + datasources: [({ inputs: [] } as unknown) as RegistryDatasource], + }) + ).toEqual({ + name: null, + description: null, + inputs: null, + }); + }); +}); + +describe('Ingest Manager - validationHasErrors()', () => { + it('returns true for stream validation results with errors', () => { + expect( + validationHasErrors({ + config: { foo: ['foo error'], bar: null }, + }) + ).toBe(true); + }); + + it('returns false for stream validation results with no errors', () => { + expect( + validationHasErrors({ + config: { foo: null, bar: null }, + }) + ).toBe(false); + }); + + it('returns true for input validation results with errors', () => { + expect( + validationHasErrors({ + config: { foo: ['foo error'], bar: null }, + streams: { stream1: { config: { foo: null, bar: null } } }, + }) + ).toBe(true); + expect( + validationHasErrors({ + config: { foo: null, bar: null }, + streams: { stream1: { config: { foo: ['foo error'], bar: null } } }, + }) + ).toBe(true); + }); + + it('returns false for input validation results with no errors', () => { + expect( + validationHasErrors({ + config: { foo: null, bar: null }, + streams: { stream1: { config: { foo: null, bar: null } } }, + }) + ).toBe(false); + }); + + it('returns true for datasource validation results with errors', () => { + expect( + validationHasErrors({ + name: ['name error'], + description: null, + inputs: { + input1: { + config: { foo: null, bar: null }, + streams: { stream1: { config: { foo: null, bar: null } } }, + }, + }, + }) + ).toBe(true); + expect( + validationHasErrors({ + name: null, + description: null, + inputs: { + input1: { + config: { foo: ['foo error'], bar: null }, + streams: { stream1: { config: { foo: null, bar: null } } }, + }, + }, + }) + ).toBe(true); + expect( + validationHasErrors({ + name: null, + description: null, + inputs: { + input1: { + config: { foo: null, bar: null }, + streams: { stream1: { config: { foo: ['foo error'], bar: null } } }, + }, + }, + }) + ).toBe(true); + }); + + it('returns false for datasource validation results with no errors', () => { + expect( + validationHasErrors({ + name: null, + description: null, + inputs: { + input1: { + config: { foo: null, bar: null }, + streams: { stream1: { config: { foo: null, bar: null } } }, + }, + }, + }) + ).toBe(false); + }); +}); diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.ts new file mode 100644 index 00000000000000..518e2bfc1af07a --- /dev/null +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/services/validate_datasource.ts @@ -0,0 +1,232 @@ +/* + * 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 { safeLoad } from 'js-yaml'; +import { getFlattenedObject } from '../../../../services'; +import { + NewDatasource, + DatasourceInput, + DatasourceInputStream, + DatasourceConfigRecordEntry, + PackageInfo, + RegistryInput, + RegistryVarsEntry, +} from '../../../../types'; + +type Errors = string[] | null; + +type ValidationEntry = Record; + +export interface DatasourceConfigValidationResults { + config?: ValidationEntry; +} + +export type DatasourceInputValidationResults = DatasourceConfigValidationResults & { + streams?: Record; +}; + +export interface DatasourceValidationResults { + name: Errors; + description: Errors; + inputs: Record | null; +} + +/* + * Returns validation information for a given datasource configuration and package info + * Note: this method assumes that `datasource` is correctly structured for the given package + */ +export const validateDatasource = ( + datasource: NewDatasource, + packageInfo: PackageInfo +): DatasourceValidationResults => { + const validationResults: DatasourceValidationResults = { + name: null, + description: null, + inputs: {}, + }; + + if (!datasource.name.trim()) { + validationResults.name = [ + i18n.translate('xpack.ingestManager.datasourceValidation.nameRequiredErrorMessage', { + defaultMessage: 'Name is required', + }), + ]; + } + + if ( + !packageInfo.datasources || + packageInfo.datasources.length === 0 || + !packageInfo.datasources[0] || + !packageInfo.datasources[0].inputs || + packageInfo.datasources[0].inputs.length === 0 + ) { + validationResults.inputs = null; + return validationResults; + } + + const registryInputsByType: Record< + string, + RegistryInput + > = packageInfo.datasources[0].inputs.reduce((inputs, registryInput) => { + inputs[registryInput.type] = registryInput; + return inputs; + }, {} as Record); + + // Validate each datasource input with either its own config fields or streams + datasource.inputs.forEach(input => { + if (!input.config && !input.streams) { + return; + } + + const inputValidationResults: DatasourceInputValidationResults = { + config: undefined, + streams: {}, + }; + + const inputVarsByName = (registryInputsByType[input.type].vars || []).reduce( + (vars, registryVar) => { + vars[registryVar.name] = registryVar; + return vars; + }, + {} as Record + ); + + // Validate input-level config fields + const inputConfigs = Object.entries(input.config || {}); + if (inputConfigs.length) { + inputValidationResults.config = inputConfigs.reduce((results, [name, configEntry]) => { + results[name] = input.enabled + ? validateDatasourceConfig(configEntry, inputVarsByName[name]) + : null; + return results; + }, {} as ValidationEntry); + } else { + delete inputValidationResults.config; + } + + // Validate each input stream with config fields + if (input.streams.length) { + input.streams.forEach(stream => { + if (!stream.config) { + return; + } + + const streamValidationResults: DatasourceConfigValidationResults = { + config: undefined, + }; + + const streamVarsByName = ( + ( + registryInputsByType[input.type].streams.find( + registryStream => registryStream.dataset === stream.dataset + ) || {} + ).vars || [] + ).reduce((vars, registryVar) => { + vars[registryVar.name] = registryVar; + return vars; + }, {} as Record); + + // Validate stream-level config fields + streamValidationResults.config = Object.entries(stream.config).reduce( + (results, [name, configEntry]) => { + results[name] = + input.enabled && stream.enabled + ? validateDatasourceConfig(configEntry, streamVarsByName[name]) + : null; + return results; + }, + {} as ValidationEntry + ); + + inputValidationResults.streams![stream.id] = streamValidationResults; + }); + } else { + delete inputValidationResults.streams; + } + + if (inputValidationResults.config || inputValidationResults.streams) { + validationResults.inputs![input.type] = inputValidationResults; + } + }); + + if (Object.entries(validationResults.inputs!).length === 0) { + validationResults.inputs = null; + } + return validationResults; +}; + +const validateDatasourceConfig = ( + configEntry: DatasourceConfigRecordEntry, + varDef: RegistryVarsEntry +): string[] | null => { + const errors = []; + const { value } = configEntry; + let parsedValue: any = value; + + if (typeof value === 'string') { + parsedValue = value.trim(); + } + + if (varDef.required) { + if (parsedValue === undefined || (typeof parsedValue === 'string' && !parsedValue)) { + errors.push( + i18n.translate('xpack.ingestManager.datasourceValidation.requiredErrorMessage', { + defaultMessage: '{fieldName} is required', + values: { + fieldName: varDef.title || varDef.name, + }, + }) + ); + } + } + + if (varDef.type === 'yaml') { + try { + parsedValue = safeLoad(value); + } catch (e) { + errors.push( + i18n.translate('xpack.ingestManager.datasourceValidation.invalidYamlFormatErrorMessage', { + defaultMessage: 'Invalid YAML format', + }) + ); + } + } + + if (varDef.multi) { + if (parsedValue && !Array.isArray(parsedValue)) { + errors.push( + i18n.translate('xpack.ingestManager.datasourceValidation.invalidArrayErrorMessage', { + defaultMessage: 'Invalid format', + }) + ); + } + if ( + varDef.required && + (!parsedValue || (Array.isArray(parsedValue) && parsedValue.length === 0)) + ) { + errors.push( + i18n.translate('xpack.ingestManager.datasourceValidation.requiredErrorMessage', { + defaultMessage: '{fieldName} is required', + values: { + fieldName: varDef.title || varDef.name, + }, + }) + ); + } + } + + return errors.length ? errors : null; +}; + +export const validationHasErrors = ( + validationResults: + | DatasourceValidationResults + | DatasourceInputValidationResults + | DatasourceConfigValidationResults +) => { + const flattenedValidation = getFlattenedObject(validationResults); + return !!Object.entries(flattenedValidation).find(([, value]) => !!value); +}; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/step_configure_datasource.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/step_configure_datasource.tsx index b45beef4a8b5e4..105d6c66a57047 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/step_configure_datasource.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_config/create_datasource_page/step_configure_datasource.tsx @@ -9,17 +9,16 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { EuiSteps, EuiPanel, - EuiFlexGrid, EuiFlexGroup, EuiFlexItem, EuiFormRow, - EuiFieldText, EuiButtonEmpty, EuiSpacer, EuiEmptyPrompt, EuiText, EuiButton, EuiComboBox, + EuiCallOut, } from '@elastic/eui'; import { AgentConfig, @@ -28,21 +27,37 @@ import { NewDatasource, DatasourceInput, } from '../../../types'; +import { Loading } from '../../../components'; import { packageToConfigDatasourceInputs } from '../../../services'; -import { DatasourceInputPanel } from './components'; +import { DatasourceValidationResults, validationHasErrors } from './services'; +import { DatasourceInputPanel, DatasourceInputVarField } from './components'; export const StepConfigureDatasource: React.FunctionComponent<{ agentConfig: AgentConfig; packageInfo: PackageInfo; datasource: NewDatasource; updateDatasource: (fields: Partial) => void; + validationResults: DatasourceValidationResults; backLink: JSX.Element; cancelUrl: string; onNext: () => void; -}> = ({ agentConfig, packageInfo, datasource, updateDatasource, backLink, cancelUrl, onNext }) => { +}> = ({ + agentConfig, + packageInfo, + datasource, + updateDatasource, + validationResults, + backLink, + cancelUrl, + onNext, +}) => { // Form show/hide states const [isShowingAdvancedDefine, setIsShowingAdvancedDefine] = useState(false); + // Form submit state + const [submitAttempted, setSubmitAttempted] = useState(false); + const hasErrors = validationResults ? validationHasErrors(validationResults) : false; + // Update datasource's package and config info useEffect(() => { const dsPackage = datasource.package; @@ -81,56 +96,56 @@ export const StepConfigureDatasource: React.FunctionComponent<{ }, [datasource.package, datasource.config_id, agentConfig, packageInfo, updateDatasource]); // Step A, define datasource - const DefineDatasource = ( + const renderDefineDatasource = () => ( - - - - } - > - - updateDatasource({ - name: e.target.value, - }) - } - /> - + + + { + updateDatasource({ + name: newValue, + }); + }} + errors={validationResults!.name} + forceShowErrors={submitAttempted} + /> - - - } - labelAppend={ - - - - } - > - - updateDatasource({ - description: e.target.value, - }) - } - /> - + + { + updateDatasource({ + description: newValue, + }); + }} + errors={validationResults!.description} + forceShowErrors={submitAttempted} + /> - + - - + + - + + ) : null} @@ -182,7 +198,7 @@ export const StepConfigureDatasource: React.FunctionComponent<{ // Step B, configure inputs (and their streams) // Assume packages only export one datasource for now - const ConfigureInputs = + const renderConfigureInputs = () => packageInfo.datasources && packageInfo.datasources[0] && packageInfo.datasources[0].inputs && @@ -208,6 +224,8 @@ export const StepConfigureDatasource: React.FunctionComponent<{ inputs: newInputs, }); }} + inputValidationResults={validationResults!.inputs![datasourceInput.type]} + forceShowErrors={submitAttempted} /> ) : null; @@ -232,7 +250,7 @@ export const StepConfigureDatasource: React.FunctionComponent<{ ); - return ( + return validationResults ? ( @@ -251,7 +269,7 @@ export const StepConfigureDatasource: React.FunctionComponent<{ defaultMessage: 'Define your datasource', } ), - children: DefineDatasource, + children: renderDefineDatasource(), }, { title: i18n.translate( @@ -260,13 +278,34 @@ export const StepConfigureDatasource: React.FunctionComponent<{ defaultMessage: 'Choose the data you want to collect', } ), - children: ConfigureInputs, + children: renderConfigureInputs(), }, ]} /> + {hasErrors && submitAttempted ? ( + + +

+ +

+
+ +
+ ) : null} @@ -278,7 +317,17 @@ export const StepConfigureDatasource: React.FunctionComponent<{
- onNext()}> + { + setSubmitAttempted(true); + if (!hasErrors) { + onNext(); + } + }} + > + ) : ( + ); }; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/services/index.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/services/index.ts index 0aa08602e4d4de..5ebd1300baf65d 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/services/index.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/services/index.ts @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +export { getFlattenedObject } from '../../../../../../../src/core/utils'; + export { agentConfigRouteService, datasourceRouteService, diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/types/index.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/types/index.ts index 333a9b049fa853..32615278b67d76 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/types/index.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/types/index.ts @@ -16,6 +16,7 @@ export { NewDatasource, DatasourceInput, DatasourceInputStream, + DatasourceConfigRecordEntry, // API schemas - Agent Config GetAgentConfigsResponse, GetAgentConfigsResponseItem, @@ -56,6 +57,7 @@ export { RegistryVarsEntry, RegistryInput, RegistryStream, + RegistryDatasource, PackageList, PackageListItem, PackagesGroupedByStatus, @@ -70,4 +72,5 @@ export { DeletePackageResponse, DetailViewPanelName, InstallStatus, + InstallationStatus, } from '../../../../common'; From 578e443bdd79ea6436289ee39703816fe7419ebd Mon Sep 17 00:00:00 2001 From: Dmitry Lemeshko Date: Thu, 9 Apr 2020 00:08:21 +0300 Subject: [PATCH 47/52] FTR: add chromium-based Edge browser support (#61684) * bump dependency, add edge support in ftr services * add config files * fix browser version for msedge * use npm ms-chromium-edge-driver * download edge driver aside from session creation * move dependency to dev * update dist/index file * bump edge-driver version * change type to msedge to match w3c spec * fix discover tests for Edge * Revert "fix discover tests for Edge" This reverts commit 87e7fdd256433ef1ad392147d6bd63b925552b37. * bump driver version up Co-authored-by: Elastic Machine --- package.json | 5 +- packages/kbn-pm/dist/index.js | 1105 +++-------------- .../lib/config/schema.ts | 2 +- test/functional/config.edge.js | 34 + test/functional/services/browser.ts | 4 +- .../web_element_wrapper.ts | 9 +- test/functional/services/remote/browsers.ts | 1 + test/functional/services/remote/remote.ts | 17 +- test/functional/services/remote/webdriver.ts | 50 +- x-pack/test/functional/config.edge.js | 21 + yarn.lock | 320 ++++- 11 files changed, 556 insertions(+), 1012 deletions(-) create mode 100644 test/functional/config.edge.js create mode 100644 x-pack/test/functional/config.edge.js diff --git a/package.json b/package.json index 4c5db5321c2823..bd0fec3a5c116e 100644 --- a/package.json +++ b/package.json @@ -376,7 +376,7 @@ "@types/recompose": "^0.30.6", "@types/redux-actions": "^2.6.1", "@types/request": "^2.48.2", - "@types/selenium-webdriver": "^4.0.5", + "@types/selenium-webdriver": "4.0.9", "@types/semver": "^5.5.0", "@types/sinon": "^7.0.13", "@types/strip-ansi": "^3.0.0", @@ -462,6 +462,7 @@ "load-grunt-config": "^3.0.1", "mocha": "^7.1.1", "mock-http-server": "1.3.0", + "ms-chromium-edge-driver": "^0.2.0", "multistream": "^2.1.1", "murmurhash3js": "3.0.1", "mutation-observer": "^1.0.3", @@ -480,7 +481,7 @@ "react-textarea-autosize": "^7.1.2", "regenerate": "^1.4.0", "sass-lint": "^1.12.1", - "selenium-webdriver": "^4.0.0-alpha.5", + "selenium-webdriver": "^4.0.0-alpha.7", "simple-git": "1.116.0", "simplebar-react": "^2.1.0", "sinon": "^7.4.2", diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index 0cc1ad6326671d..7a858deff41d37 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -79260,7 +79260,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(705); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _build_production_projects__WEBPACK_IMPORTED_MODULE_0__["buildProductionProjects"]; }); -/* harmony import */ var _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(928); +/* harmony import */ var _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(923); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "prepareExternalProjectDependencies", function() { return _prepare_project_dependencies__WEBPACK_IMPORTED_MODULE_1__["prepareExternalProjectDependencies"]; }); /* @@ -79445,9 +79445,9 @@ const pAll = __webpack_require__(707); const arrify = __webpack_require__(709); const globby = __webpack_require__(710); const isGlob = __webpack_require__(604); -const cpFile = __webpack_require__(913); -const junk = __webpack_require__(925); -const CpyError = __webpack_require__(926); +const cpFile = __webpack_require__(908); +const junk = __webpack_require__(920); +const CpyError = __webpack_require__(921); const defaultOptions = { ignoreJunk: true @@ -79697,8 +79697,8 @@ const fs = __webpack_require__(23); const arrayUnion = __webpack_require__(711); const glob = __webpack_require__(713); const fastGlob = __webpack_require__(718); -const dirGlob = __webpack_require__(906); -const gitignore = __webpack_require__(909); +const dirGlob = __webpack_require__(901); +const gitignore = __webpack_require__(904); const DEFAULT_FILTER = () => false; @@ -81531,11 +81531,11 @@ module.exports.generateTasks = pkg.generateTasks; Object.defineProperty(exports, "__esModule", { value: true }); var optionsManager = __webpack_require__(720); var taskManager = __webpack_require__(721); -var reader_async_1 = __webpack_require__(877); -var reader_stream_1 = __webpack_require__(901); -var reader_sync_1 = __webpack_require__(902); -var arrayUtils = __webpack_require__(904); -var streamUtils = __webpack_require__(905); +var reader_async_1 = __webpack_require__(872); +var reader_stream_1 = __webpack_require__(896); +var reader_sync_1 = __webpack_require__(897); +var arrayUtils = __webpack_require__(899); +var streamUtils = __webpack_require__(900); /** * Synchronous API. */ @@ -82175,9 +82175,9 @@ var extend = __webpack_require__(838); */ var compilers = __webpack_require__(841); -var parsers = __webpack_require__(873); -var cache = __webpack_require__(874); -var utils = __webpack_require__(875); +var parsers = __webpack_require__(868); +var cache = __webpack_require__(869); +var utils = __webpack_require__(870); var MAX_LENGTH = 1024 * 64; /** @@ -100710,9 +100710,9 @@ var toRegex = __webpack_require__(729); */ var compilers = __webpack_require__(858); -var parsers = __webpack_require__(869); -var Extglob = __webpack_require__(872); -var utils = __webpack_require__(871); +var parsers = __webpack_require__(864); +var Extglob = __webpack_require__(867); +var utils = __webpack_require__(866); var MAX_LENGTH = 1024 * 64; /** @@ -101222,7 +101222,7 @@ var parsers = __webpack_require__(862); * Module dependencies */ -var debug = __webpack_require__(864)('expand-brackets'); +var debug = __webpack_require__(801)('expand-brackets'); var extend = __webpack_require__(738); var Snapdragon = __webpack_require__(768); var toRegex = __webpack_require__(729); @@ -101816,839 +101816,12 @@ exports.createRegex = function(pattern, include) { /* 864 */ /***/ (function(module, exports, __webpack_require__) { -/** - * Detect Electron renderer process, which is node, but we should - * treat as a browser. - */ - -if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = __webpack_require__(865); -} else { - module.exports = __webpack_require__(868); -} - - -/***/ }), -/* 865 */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * This is the web browser implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = __webpack_require__(866); -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; -exports.storage = 'undefined' != typeof chrome - && 'undefined' != typeof chrome.storage - ? chrome.storage.local - : localstorage(); - -/** - * Colors. - */ - -exports.colors = [ - 'lightseagreen', - 'forestgreen', - 'goldenrod', - 'dodgerblue', - 'darkorchid', - 'crimson' -]; - -/** - * Currently only WebKit-based Web Inspectors, Firefox >= v31, - * and the Firebug extension (any Firefox version) are known - * to support "%c" CSS customizations. - * - * TODO: add a `localStorage` variable to explicitly enable/disable colors - */ - -function useColors() { - // NB: In an Electron preload script, document will be defined but not fully - // initialized. Since we know we're in Chrome, we'll just detect this case - // explicitly - if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { - return true; - } - - // is webkit? http://stackoverflow.com/a/16459606/376773 - // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 - return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || - // is firebug? http://stackoverflow.com/a/398120/376773 - (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || - // is firefox >= v31? - // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || - // double check webkit in userAgent just in case we are in a worker - (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); -} - -/** - * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. - */ - -exports.formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (err) { - return '[UnexpectedJSONParseError]: ' + err.message; - } -}; - - -/** - * Colorize log arguments if enabled. - * - * @api public - */ - -function formatArgs(args) { - var useColors = this.useColors; - - args[0] = (useColors ? '%c' : '') - + this.namespace - + (useColors ? ' %c' : ' ') - + args[0] - + (useColors ? '%c ' : ' ') - + '+' + exports.humanize(this.diff); - - if (!useColors) return; - - var c = 'color: ' + this.color; - args.splice(1, 0, c, 'color: inherit') - - // the final "%c" is somewhat tricky, because there could be other - // arguments passed either before or after the %c, so we need to - // figure out the correct index to insert the CSS into - var index = 0; - var lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, function(match) { - if ('%%' === match) return; - index++; - if ('%c' === match) { - // we only are interested in the *last* %c - // (the user may have provided their own) - lastC = index; - } - }); - - args.splice(lastC, 0, c); -} - -/** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". - * - * @api public - */ - -function log() { - // this hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return 'object' === typeof console - && console.log - && Function.prototype.apply.call(console.log, console, arguments); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - try { - if (null == namespaces) { - exports.storage.removeItem('debug'); - } else { - exports.storage.debug = namespaces; - } - } catch(e) {} -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - var r; - try { - r = exports.storage.debug; - } catch(e) {} - - // If debug isn't set in LS, and we're in Electron, try to load $DEBUG - if (!r && typeof process !== 'undefined' && 'env' in process) { - r = process.env.DEBUG; - } - - return r; -} - -/** - * Enable namespaces listed in `localStorage.debug` initially. - */ - -exports.enable(load()); - -/** - * Localstorage attempts to return the localstorage. - * - * This is necessary because safari throws - * when a user disables cookies/localstorage - * and you attempt to access it. - * - * @return {LocalStorage} - * @api private - */ - -function localstorage() { - try { - return window.localStorage; - } catch (e) {} -} - - -/***/ }), -/* 866 */ -/***/ (function(module, exports, __webpack_require__) { - - -/** - * This is the common logic for both the Node.js and web browser - * implementations of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; -exports.coerce = coerce; -exports.disable = disable; -exports.enable = enable; -exports.enabled = enabled; -exports.humanize = __webpack_require__(867); - -/** - * The currently active debug mode names, and names to skip. - */ - -exports.names = []; -exports.skips = []; - -/** - * Map of special "%n" handling functions, for the debug "format" argument. - * - * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". - */ - -exports.formatters = {}; - -/** - * Previous log timestamp. - */ - -var prevTime; - -/** - * Select a color. - * @param {String} namespace - * @return {Number} - * @api private - */ - -function selectColor(namespace) { - var hash = 0, i; - - for (i in namespace) { - hash = ((hash << 5) - hash) + namespace.charCodeAt(i); - hash |= 0; // Convert to 32bit integer - } - - return exports.colors[Math.abs(hash) % exports.colors.length]; -} - -/** - * Create a debugger with the given `namespace`. - * - * @param {String} namespace - * @return {Function} - * @api public - */ - -function createDebug(namespace) { - - function debug() { - // disabled? - if (!debug.enabled) return; - - var self = debug; - - // set `diff` timestamp - var curr = +new Date(); - var ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - - // turn the `arguments` into a proper Array - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - args[0] = exports.coerce(args[0]); - - if ('string' !== typeof args[0]) { - // anything else let's inspect with %O - args.unshift('%O'); - } - - // apply any `formatters` transformations - var index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { - // if we encounter an escaped % then don't increase the array index - if (match === '%%') return match; - index++; - var formatter = exports.formatters[format]; - if ('function' === typeof formatter) { - var val = args[index]; - match = formatter.call(self, val); - - // now we need to remove `args[index]` since it's inlined in the `format` - args.splice(index, 1); - index--; - } - return match; - }); - - // apply env-specific formatting (colors, etc.) - exports.formatArgs.call(self, args); - - var logFn = debug.log || exports.log || console.log.bind(console); - logFn.apply(self, args); - } - - debug.namespace = namespace; - debug.enabled = exports.enabled(namespace); - debug.useColors = exports.useColors(); - debug.color = selectColor(namespace); - - // env-specific initialization logic for debug instances - if ('function' === typeof exports.init) { - exports.init(debug); - } - - return debug; -} - -/** - * Enables a debug mode by namespaces. This can include modes - * separated by a colon and wildcards. - * - * @param {String} namespaces - * @api public - */ - -function enable(namespaces) { - exports.save(namespaces); - - exports.names = []; - exports.skips = []; - - var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); - var len = split.length; - - for (var i = 0; i < len; i++) { - if (!split[i]) continue; // ignore empty strings - namespaces = split[i].replace(/\*/g, '.*?'); - if (namespaces[0] === '-') { - exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); - } else { - exports.names.push(new RegExp('^' + namespaces + '$')); - } - } -} - -/** - * Disable debug output. - * - * @api public - */ - -function disable() { - exports.enable(''); -} - -/** - * Returns true if the given mode name is enabled, false otherwise. - * - * @param {String} name - * @return {Boolean} - * @api public - */ - -function enabled(name) { - var i, len; - for (i = 0, len = exports.skips.length; i < len; i++) { - if (exports.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = exports.names.length; i < len; i++) { - if (exports.names[i].test(name)) { - return true; - } - } - return false; -} - -/** - * Coerce `val`. - * - * @param {Mixed} val - * @return {Mixed} - * @api private - */ - -function coerce(val) { - if (val instanceof Error) return val.stack || val.message; - return val; -} - - -/***/ }), -/* 867 */ -/***/ (function(module, exports) { - -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} - - -/***/ }), -/* 868 */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Module dependencies. - */ - -var tty = __webpack_require__(478); -var util = __webpack_require__(29); - -/** - * This is the Node.js implementation of `debug()`. - * - * Expose `debug()` as the module. - */ - -exports = module.exports = __webpack_require__(866); -exports.init = init; -exports.log = log; -exports.formatArgs = formatArgs; -exports.save = save; -exports.load = load; -exports.useColors = useColors; - -/** - * Colors. - */ - -exports.colors = [6, 2, 3, 4, 5, 1]; - -/** - * Build up the default `inspectOpts` object from the environment variables. - * - * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js - */ - -exports.inspectOpts = Object.keys(process.env).filter(function (key) { - return /^debug_/i.test(key); -}).reduce(function (obj, key) { - // camel-case - var prop = key - .substring(6) - .toLowerCase() - .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); - - // coerce string value into JS value - var val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) val = true; - else if (/^(no|off|false|disabled)$/i.test(val)) val = false; - else if (val === 'null') val = null; - else val = Number(val); - - obj[prop] = val; - return obj; -}, {}); - -/** - * The file descriptor to write the `debug()` calls to. - * Set the `DEBUG_FD` env variable to override with another value. i.e.: - * - * $ DEBUG_FD=3 node script.js 3>debug.log - */ - -var fd = parseInt(process.env.DEBUG_FD, 10) || 2; - -if (1 !== fd && 2 !== fd) { - util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() -} - -var stream = 1 === fd ? process.stdout : - 2 === fd ? process.stderr : - createWritableStdioStream(fd); - -/** - * Is stdout a TTY? Colored output is enabled when `true`. - */ - -function useColors() { - return 'colors' in exports.inspectOpts - ? Boolean(exports.inspectOpts.colors) - : tty.isatty(fd); -} - -/** - * Map %o to `util.inspect()`, all on a single line. - */ - -exports.formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts) - .split('\n').map(function(str) { - return str.trim() - }).join(' '); -}; - -/** - * Map %o to `util.inspect()`, allowing multiple lines if needed. - */ - -exports.formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); -}; - -/** - * Adds ANSI color escape codes if enabled. - * - * @api public - */ - -function formatArgs(args) { - var name = this.namespace; - var useColors = this.useColors; - - if (useColors) { - var c = this.color; - var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; - - args[0] = prefix + args[0].split('\n').join('\n' + prefix); - args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); - } else { - args[0] = new Date().toUTCString() - + ' ' + name + ' ' + args[0]; - } -} - -/** - * Invokes `util.format()` with the specified arguments and writes to `stream`. - */ - -function log() { - return stream.write(util.format.apply(util, arguments) + '\n'); -} - -/** - * Save `namespaces`. - * - * @param {String} namespaces - * @api private - */ - -function save(namespaces) { - if (null == namespaces) { - // If you set a process.env field to null or undefined, it gets cast to the - // string 'null' or 'undefined'. Just delete instead. - delete process.env.DEBUG; - } else { - process.env.DEBUG = namespaces; - } -} - -/** - * Load `namespaces`. - * - * @return {String} returns the previously persisted debug modes - * @api private - */ - -function load() { - return process.env.DEBUG; -} - -/** - * Copied from `node/src/node.js`. - * - * XXX: It's lame that node doesn't expose this API out-of-the-box. It also - * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. - */ - -function createWritableStdioStream (fd) { - var stream; - var tty_wrap = process.binding('tty_wrap'); - - // Note stream._type is used for test-module-load-list.js - - switch (tty_wrap.guessHandleType(fd)) { - case 'TTY': - stream = new tty.WriteStream(fd); - stream._type = 'tty'; - - // Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - case 'FILE': - var fs = __webpack_require__(23); - stream = new fs.SyncWriteStream(fd, { autoClose: false }); - stream._type = 'fs'; - break; - - case 'PIPE': - case 'TCP': - var net = __webpack_require__(806); - stream = new net.Socket({ - fd: fd, - readable: false, - writable: true - }); - - // FIXME Should probably have an option in net.Socket to create a - // stream from an existing fd which is writable only. But for now - // we'll just add this hack and set the `readable` member to false. - // Test: ./node test/fixtures/echo.js < /etc/passwd - stream.readable = false; - stream.read = null; - stream._type = 'pipe'; - - // FIXME Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - default: - // Probably an error on in uv_guess_handle() - throw new Error('Implement me. Unknown stream file type!'); - } - - // For supporting legacy API we put the FD here. - stream.fd = fd; - - stream._isStdio = true; - - return stream; -} - -/** - * Init logic for `debug` instances. - * - * Create a new `inspectOpts` object in case `useColors` is set - * differently for a particular `debug` instance. - */ - -function init (debug) { - debug.inspectOpts = {}; - - var keys = Object.keys(exports.inspectOpts); - for (var i = 0; i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; - } -} - -/** - * Enable namespaces listed in `process.env.DEBUG` initially. - */ - -exports.enable(load()); - - -/***/ }), -/* 869 */ -/***/ (function(module, exports, __webpack_require__) { - "use strict"; var brackets = __webpack_require__(859); -var define = __webpack_require__(870); -var utils = __webpack_require__(871); +var define = __webpack_require__(865); +var utils = __webpack_require__(866); /** * Characters to use in text regex (we want to "not" match @@ -102803,7 +101976,7 @@ module.exports = parsers; /***/ }), -/* 870 */ +/* 865 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102841,7 +102014,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 871 */ +/* 866 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102917,7 +102090,7 @@ utils.createRegex = function(str) { /***/ }), -/* 872 */ +/* 867 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -102928,7 +102101,7 @@ utils.createRegex = function(str) { */ var Snapdragon = __webpack_require__(768); -var define = __webpack_require__(870); +var define = __webpack_require__(865); var extend = __webpack_require__(738); /** @@ -102936,7 +102109,7 @@ var extend = __webpack_require__(738); */ var compilers = __webpack_require__(858); -var parsers = __webpack_require__(869); +var parsers = __webpack_require__(864); /** * Customize Snapdragon parser and renderer @@ -103002,7 +102175,7 @@ module.exports = Extglob; /***/ }), -/* 873 */ +/* 868 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103092,14 +102265,14 @@ function textRegex(pattern) { /***/ }), -/* 874 */ +/* 869 */ /***/ (function(module, exports, __webpack_require__) { module.exports = new (__webpack_require__(850))(); /***/ }), -/* 875 */ +/* 870 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103117,7 +102290,7 @@ utils.define = __webpack_require__(837); utils.diff = __webpack_require__(854); utils.extend = __webpack_require__(838); utils.pick = __webpack_require__(855); -utils.typeOf = __webpack_require__(876); +utils.typeOf = __webpack_require__(871); utils.unique = __webpack_require__(741); /** @@ -103415,7 +102588,7 @@ utils.unixify = function(options) { /***/ }), -/* 876 */ +/* 871 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -103550,7 +102723,7 @@ function isBuffer(val) { /***/ }), -/* 877 */ +/* 872 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103569,9 +102742,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(878); -var reader_1 = __webpack_require__(891); -var fs_stream_1 = __webpack_require__(895); +var readdir = __webpack_require__(873); +var reader_1 = __webpack_require__(886); +var fs_stream_1 = __webpack_require__(890); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -103632,15 +102805,15 @@ exports.default = ReaderAsync; /***/ }), -/* 878 */ +/* 873 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(879); -const readdirAsync = __webpack_require__(887); -const readdirStream = __webpack_require__(890); +const readdirSync = __webpack_require__(874); +const readdirAsync = __webpack_require__(882); +const readdirStream = __webpack_require__(885); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -103724,7 +102897,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 879 */ +/* 874 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103732,11 +102905,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(880); +const DirectoryReader = __webpack_require__(875); let syncFacade = { - fs: __webpack_require__(885), - forEach: __webpack_require__(886), + fs: __webpack_require__(880), + forEach: __webpack_require__(881), sync: true }; @@ -103765,7 +102938,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 880 */ +/* 875 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -103774,9 +102947,9 @@ function readdirSync (dir, options, internalOptions) { const Readable = __webpack_require__(27).Readable; const EventEmitter = __webpack_require__(379).EventEmitter; const path = __webpack_require__(16); -const normalizeOptions = __webpack_require__(881); -const stat = __webpack_require__(883); -const call = __webpack_require__(884); +const normalizeOptions = __webpack_require__(876); +const stat = __webpack_require__(878); +const call = __webpack_require__(879); /** * Asynchronously reads the contents of a directory and streams the results @@ -104152,14 +103325,14 @@ module.exports = DirectoryReader; /***/ }), -/* 881 */ +/* 876 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); -const globToRegExp = __webpack_require__(882); +const globToRegExp = __webpack_require__(877); module.exports = normalizeOptions; @@ -104336,7 +103509,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 882 */ +/* 877 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -104473,13 +103646,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 883 */ +/* 878 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(884); +const call = __webpack_require__(879); module.exports = stat; @@ -104554,7 +103727,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 884 */ +/* 879 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104615,14 +103788,14 @@ function callOnce (fn) { /***/ }), -/* 885 */ +/* 880 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(23); -const call = __webpack_require__(884); +const call = __webpack_require__(879); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -104686,7 +103859,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 886 */ +/* 881 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104715,7 +103888,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 887 */ +/* 882 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104723,12 +103896,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(888); -const DirectoryReader = __webpack_require__(880); +const maybe = __webpack_require__(883); +const DirectoryReader = __webpack_require__(875); let asyncFacade = { fs: __webpack_require__(23), - forEach: __webpack_require__(889), + forEach: __webpack_require__(884), async: true }; @@ -104770,7 +103943,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 888 */ +/* 883 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104797,7 +103970,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 889 */ +/* 884 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104833,7 +104006,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 890 */ +/* 885 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -104841,11 +104014,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(880); +const DirectoryReader = __webpack_require__(875); let streamFacade = { fs: __webpack_require__(23), - forEach: __webpack_require__(889), + forEach: __webpack_require__(884), async: true }; @@ -104865,16 +104038,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 891 */ +/* 886 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(16); -var deep_1 = __webpack_require__(892); -var entry_1 = __webpack_require__(894); -var pathUtil = __webpack_require__(893); +var deep_1 = __webpack_require__(887); +var entry_1 = __webpack_require__(889); +var pathUtil = __webpack_require__(888); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -104940,13 +104113,13 @@ exports.default = Reader; /***/ }), -/* 892 */ +/* 887 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(893); +var pathUtils = __webpack_require__(888); var patternUtils = __webpack_require__(722); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { @@ -105030,7 +104203,7 @@ exports.default = DeepFilter; /***/ }), -/* 893 */ +/* 888 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105061,13 +104234,13 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 894 */ +/* 889 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(893); +var pathUtils = __webpack_require__(888); var patternUtils = __webpack_require__(722); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { @@ -105153,7 +104326,7 @@ exports.default = EntryFilter; /***/ }), -/* 895 */ +/* 890 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105173,8 +104346,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(27); -var fsStat = __webpack_require__(896); -var fs_1 = __webpack_require__(900); +var fsStat = __webpack_require__(891); +var fs_1 = __webpack_require__(895); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -105224,14 +104397,14 @@ exports.default = FileSystemStream; /***/ }), -/* 896 */ +/* 891 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(897); -const statProvider = __webpack_require__(899); +const optionsManager = __webpack_require__(892); +const statProvider = __webpack_require__(894); /** * Asynchronous API. */ @@ -105262,13 +104435,13 @@ exports.statSync = statSync; /***/ }), -/* 897 */ +/* 892 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(898); +const fsAdapter = __webpack_require__(893); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -105281,7 +104454,7 @@ exports.prepare = prepare; /***/ }), -/* 898 */ +/* 893 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105304,7 +104477,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 899 */ +/* 894 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105356,7 +104529,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 900 */ +/* 895 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105387,7 +104560,7 @@ exports.default = FileSystem; /***/ }), -/* 901 */ +/* 896 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105407,9 +104580,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(27); -var readdir = __webpack_require__(878); -var reader_1 = __webpack_require__(891); -var fs_stream_1 = __webpack_require__(895); +var readdir = __webpack_require__(873); +var reader_1 = __webpack_require__(886); +var fs_stream_1 = __webpack_require__(890); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -105477,7 +104650,7 @@ exports.default = ReaderStream; /***/ }), -/* 902 */ +/* 897 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105496,9 +104669,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(878); -var reader_1 = __webpack_require__(891); -var fs_sync_1 = __webpack_require__(903); +var readdir = __webpack_require__(873); +var reader_1 = __webpack_require__(886); +var fs_sync_1 = __webpack_require__(898); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -105558,7 +104731,7 @@ exports.default = ReaderSync; /***/ }), -/* 903 */ +/* 898 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105577,8 +104750,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(896); -var fs_1 = __webpack_require__(900); +var fsStat = __webpack_require__(891); +var fs_1 = __webpack_require__(895); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -105624,7 +104797,7 @@ exports.default = FileSystemSync; /***/ }), -/* 904 */ +/* 899 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105640,7 +104813,7 @@ exports.flatten = flatten; /***/ }), -/* 905 */ +/* 900 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105661,13 +104834,13 @@ exports.merge = merge; /***/ }), -/* 906 */ +/* 901 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); -const pathType = __webpack_require__(907); +const pathType = __webpack_require__(902); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -105733,13 +104906,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 907 */ +/* 902 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(23); -const pify = __webpack_require__(908); +const pify = __webpack_require__(903); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -105782,7 +104955,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 908 */ +/* 903 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105873,7 +105046,7 @@ module.exports = (obj, opts) => { /***/ }), -/* 909 */ +/* 904 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -105881,9 +105054,9 @@ module.exports = (obj, opts) => { const fs = __webpack_require__(23); const path = __webpack_require__(16); const fastGlob = __webpack_require__(718); -const gitIgnore = __webpack_require__(910); -const pify = __webpack_require__(911); -const slash = __webpack_require__(912); +const gitIgnore = __webpack_require__(905); +const pify = __webpack_require__(906); +const slash = __webpack_require__(907); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -105981,7 +105154,7 @@ module.exports.sync = options => { /***/ }), -/* 910 */ +/* 905 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -106450,7 +105623,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 911 */ +/* 906 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -106525,7 +105698,7 @@ module.exports = (input, options) => { /***/ }), -/* 912 */ +/* 907 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -106543,17 +105716,17 @@ module.exports = input => { /***/ }), -/* 913 */ +/* 908 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(16); const {constants: fsConstants} = __webpack_require__(23); -const pEvent = __webpack_require__(914); -const CpFileError = __webpack_require__(917); -const fs = __webpack_require__(921); -const ProgressEmitter = __webpack_require__(924); +const pEvent = __webpack_require__(909); +const CpFileError = __webpack_require__(912); +const fs = __webpack_require__(916); +const ProgressEmitter = __webpack_require__(919); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -106667,12 +105840,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 914 */ +/* 909 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(915); +const pTimeout = __webpack_require__(910); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -106963,12 +106136,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 915 */ +/* 910 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(916); +const pFinally = __webpack_require__(911); class TimeoutError extends Error { constructor(message) { @@ -107014,7 +106187,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 916 */ +/* 911 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -107036,12 +106209,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 917 */ +/* 912 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(918); +const NestedError = __webpack_require__(913); class CpFileError extends NestedError { constructor(message, nested) { @@ -107055,10 +106228,10 @@ module.exports = CpFileError; /***/ }), -/* 918 */ +/* 913 */ /***/ (function(module, exports, __webpack_require__) { -var inherits = __webpack_require__(919); +var inherits = __webpack_require__(914); var NestedError = function (message, nested) { this.nested = nested; @@ -107109,7 +106282,7 @@ module.exports = NestedError; /***/ }), -/* 919 */ +/* 914 */ /***/ (function(module, exports, __webpack_require__) { try { @@ -107117,12 +106290,12 @@ try { if (typeof util.inherits !== 'function') throw ''; module.exports = util.inherits; } catch (e) { - module.exports = __webpack_require__(920); + module.exports = __webpack_require__(915); } /***/ }), -/* 920 */ +/* 915 */ /***/ (function(module, exports) { if (typeof Object.create === 'function') { @@ -107151,16 +106324,16 @@ if (typeof Object.create === 'function') { /***/ }), -/* 921 */ +/* 916 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(29); const fs = __webpack_require__(22); -const makeDir = __webpack_require__(922); -const pEvent = __webpack_require__(914); -const CpFileError = __webpack_require__(917); +const makeDir = __webpack_require__(917); +const pEvent = __webpack_require__(909); +const CpFileError = __webpack_require__(912); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -107257,7 +106430,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 922 */ +/* 917 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -107265,7 +106438,7 @@ exports.copyFileSync = (source, destination, flags) => { const fs = __webpack_require__(23); const path = __webpack_require__(16); const {promisify} = __webpack_require__(29); -const semver = __webpack_require__(923); +const semver = __webpack_require__(918); const defaults = { mode: 0o777 & (~process.umask()), @@ -107414,7 +106587,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 923 */ +/* 918 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -109016,7 +108189,7 @@ function coerce (version, options) { /***/ }), -/* 924 */ +/* 919 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -109057,7 +108230,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 925 */ +/* 920 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -109103,12 +108276,12 @@ exports.default = module.exports; /***/ }), -/* 926 */ +/* 921 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(927); +const NestedError = __webpack_require__(922); class CpyError extends NestedError { constructor(message, nested) { @@ -109122,7 +108295,7 @@ module.exports = CpyError; /***/ }), -/* 927 */ +/* 922 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(29).inherits; @@ -109178,7 +108351,7 @@ module.exports = NestedError; /***/ }), -/* 928 */ +/* 923 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; diff --git a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts index 66f17ab579ec39..f4b91d154cbb88 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/config/schema.ts @@ -136,7 +136,7 @@ export const schema = Joi.object() browser: Joi.object() .keys({ type: Joi.string() - .valid('chrome', 'firefox', 'ie') + .valid('chrome', 'firefox', 'ie', 'msedge') .default('chrome'), logPollingMs: Joi.number().default(100), diff --git a/test/functional/config.edge.js b/test/functional/config.edge.js new file mode 100644 index 00000000000000..ed68b41e8c89ab --- /dev/null +++ b/test/functional/config.edge.js @@ -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. + */ + +export default async function({ readConfigFile }) { + const defaultConfig = await readConfigFile(require.resolve('./config')); + + return { + ...defaultConfig.getAll(), + + browser: { + type: 'msedge', + }, + + junit: { + reportName: 'MS Chromium Edge UI Functional Tests', + }, + }; +} diff --git a/test/functional/services/browser.ts b/test/functional/services/browser.ts index 5017947e95d03b..13d2365c07191b 100644 --- a/test/functional/services/browser.ts +++ b/test/functional/services/browser.ts @@ -47,7 +47,9 @@ export async function BrowserProvider({ getService }: FtrProviderContext) { */ public readonly browserType: string = browserType; - public readonly isChrome: boolean = browserType === Browsers.Chrome; + public readonly isChromium: boolean = [Browsers.Chrome, Browsers.ChromiumEdge].includes( + browserType + ); public readonly isFirefox: boolean = browserType === Browsers.Firefox; diff --git a/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts b/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts index 157918df874c82..8b57ecd3c82350 100644 --- a/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts +++ b/test/functional/services/lib/web_element_wrapper/web_element_wrapper.ts @@ -55,6 +55,7 @@ export class WebElementWrapper { private driver: WebDriver = this.webDriver.driver; private Keys = Key; public isW3CEnabled: boolean = (this.webDriver.driver as any).executor_.w3c === true; + public isChromium: boolean = [Browsers.Chrome, Browsers.ChromiumEdge].includes(this.browserType); public static create( webElement: WebElement | WebElementWrapper, @@ -63,7 +64,7 @@ export class WebElementWrapper { timeout: number, fixedHeaderHeight: number, logger: ToolingLog, - browserType: string + browserType: Browsers ): WebElementWrapper { if (webElement instanceof WebElementWrapper) { return webElement; @@ -87,7 +88,7 @@ export class WebElementWrapper { private timeout: number, private fixedHeaderHeight: number, private logger: ToolingLog, - private browserType: string + private browserType: Browsers ) {} private async _findWithCustomTimeout( @@ -243,7 +244,7 @@ export class WebElementWrapper { return this.clearValueWithKeyboard(); } await this.retryCall(async function clearValue(wrapper) { - if (wrapper.browserType === Browsers.Chrome || options.withJS) { + if (wrapper.isChromium || options.withJS) { // https://bugs.chromium.org/p/chromedriver/issues/detail?id=2702 await wrapper.driver.executeScript(`arguments[0].value=''`, wrapper._webElement); } else { @@ -275,7 +276,7 @@ export class WebElementWrapper { await delay(100); } } else { - if (this.browserType === Browsers.Chrome) { + if (this.isChromium) { // https://bugs.chromium.org/p/chromedriver/issues/detail?id=30 await this.retryCall(async function clearValueWithKeyboard(wrapper) { await wrapper.driver.executeScript(`arguments[0].select();`, wrapper._webElement); diff --git a/test/functional/services/remote/browsers.ts b/test/functional/services/remote/browsers.ts index 46d81f1737a55f..aa6e364d0a09d0 100644 --- a/test/functional/services/remote/browsers.ts +++ b/test/functional/services/remote/browsers.ts @@ -21,4 +21,5 @@ export enum Browsers { Chrome = 'chrome', Firefox = 'firefox', InternetExplorer = 'ie', + ChromiumEdge = 'msedge', } diff --git a/test/functional/services/remote/remote.ts b/test/functional/services/remote/remote.ts index e571a1a7e55512..b0724488cb5db8 100644 --- a/test/functional/services/remote/remote.ts +++ b/test/functional/services/remote/remote.ts @@ -64,18 +64,23 @@ export async function RemoteProvider({ getService }: FtrProviderContext) { lifecycle, config.get('browser.logPollingMs') ); + const isW3CEnabled = (driver as any).executor_.w3c; const caps = await driver.getCapabilities(); - const browserVersion = caps.get(isW3CEnabled ? 'browserVersion' : 'version'); + const browserVersion = caps.get( + isW3CEnabled || browserType === Browsers.ChromiumEdge ? 'browserVersion' : 'version' + ); - log.info(`Remote initialized: ${caps.get('browserName')} ${browserVersion}`); + log.info( + `Remote initialized: ${caps.get( + 'browserName' + )} ${browserVersion}, w3c compliance=${isW3CEnabled}, collectingCoverage=${collectCoverage}` + ); - if (browserType === Browsers.Chrome) { + if ([Browsers.Chrome, Browsers.ChromiumEdge].includes(browserType)) { log.info( - `Chromedriver version: ${ - caps.get('chrome').chromedriverVersion - }, w3c=${isW3CEnabled}, codeCoverage=${collectCoverage}` + `${browserType}driver version: ${caps.get(browserType)[`${browserType}driverVersion`]}` ); } diff --git a/test/functional/services/remote/webdriver.ts b/test/functional/services/remote/webdriver.ts index 3bf5b865aa7ba5..fc0b5bbb787c81 100644 --- a/test/functional/services/remote/webdriver.ts +++ b/test/functional/services/remote/webdriver.ts @@ -31,10 +31,12 @@ import { Builder, Capabilities, By, logging, until } from 'selenium-webdriver'; import chrome from 'selenium-webdriver/chrome'; import firefox from 'selenium-webdriver/firefox'; // @ts-ignore internal modules are not typed +import edge from 'selenium-webdriver/edge'; +import { installDriver } from 'ms-chromium-edge-driver'; +// @ts-ignore internal modules are not typed import { Executor } from 'selenium-webdriver/lib/http'; // @ts-ignore internal modules are not typed import { getLogger } from 'selenium-webdriver/lib/logging'; - import { pollForLogEntry$ } from './poll_for_log_entry'; import { createStdoutSocket } from './create_stdout_stream'; import { preventParallelCalls } from './prevent_parallel_calls'; @@ -63,6 +65,7 @@ Executor.prototype.execute = preventParallelCalls( ); let attemptCounter = 0; +let edgePaths: { driverPath: string | undefined; browserPath: string | undefined }; async function attemptToCreateCommand( log: ToolingLog, browserType: Browsers, @@ -74,6 +77,46 @@ async function attemptToCreateCommand( const buildDriverInstance = async () => { switch (browserType) { + case 'msedge': { + if (edgePaths && edgePaths.browserPath && edgePaths.driverPath) { + const edgeOptions = new edge.Options(); + if (headlessBrowser === '1') { + // @ts-ignore internal modules are not typed + edgeOptions.headless(); + } + // @ts-ignore internal modules are not typed + edgeOptions.setEdgeChromium(true); + // @ts-ignore internal modules are not typed + edgeOptions.setBinaryPath(edgePaths.browserPath); + const session = await new Builder() + .forBrowser('MicrosoftEdge') + .setEdgeOptions(edgeOptions) + .setEdgeService(new edge.ServiceBuilder(edgePaths.driverPath)) + .build(); + return { + session, + consoleLog$: pollForLogEntry$( + session, + logging.Type.BROWSER, + logPollingMs, + lifecycle.cleanup.after$ + ).pipe( + takeUntil(lifecycle.cleanup.after$), + map(({ message, level: { name: level } }) => ({ + message: message.replace(/\\n/g, '\n'), + level, + })) + ), + }; + } else { + throw new Error( + `Chromium Edge session requires browser or driver path to be defined: ${JSON.stringify( + edgePaths + )}` + ); + } + } + case 'chrome': { const chromeCapabilities = Capabilities.chrome(); const chromeOptions = [ @@ -265,6 +308,11 @@ export async function initWebDriver( log.verbose(entry.message); }); + // download Edge driver only in case of usage + if (browserType === Browsers.ChromiumEdge) { + edgePaths = await installDriver(); + } + return await Promise.race([ (async () => { await delay(2 * MINUTE); diff --git a/x-pack/test/functional/config.edge.js b/x-pack/test/functional/config.edge.js new file mode 100644 index 00000000000000..882fb6fea36861 --- /dev/null +++ b/x-pack/test/functional/config.edge.js @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export default async function({ readConfigFile }) { + const chromeConfig = await readConfigFile(require.resolve('./config')); + + return { + ...chromeConfig.getAll(), + + browser: { + type: 'msedge', + }, + + junit: { + reportName: 'MS Chromium Edge XPack UI Functional Tests', + }, + }; +} diff --git a/yarn.lock b/yarn.lock index 77ab69c715573c..3f04b2d26a0139 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2499,6 +2499,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@sindresorhus/is@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.0.tgz#6ad4ca610f696098e92954ab431ff83bea0ce13f" + integrity sha512-lXKXfypKo644k4Da4yXkPCrwcvn6SlUW2X2zFbuflKHNjf0w9htru01bo26uMhleMXsDmnZ12eJLdrAZa9MANg== + "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393" @@ -3398,6 +3403,13 @@ "@svgr/plugin-svgo" "^4.2.0" loader-utils "^1.2.3" +"@szmarczak/http-timer@^4.0.0": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" + integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + dependencies: + defer-to-connect "^2.0.0" + "@testim/chrome-version@^1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@testim/chrome-version/-/chrome-version-1.0.7.tgz#0cd915785ec4190f08a3a6acc9b61fc38fb5f1a9" @@ -3646,6 +3658,16 @@ resolved "https://registry.yarnpkg.com/@types/browserslist-useragent/-/browserslist-useragent-3.0.0.tgz#d425c9818182ce71ce53866798cee9c7d41d6e53" integrity sha512-ZBvKzg3yyWNYEkwxAzdmUzp27sFvw+1m080/+2lwrt+eltNefn1f4fnpMyrjOla31p8zLleCYqQXw+3EETfn0w== +"@types/cacheable-request@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" + integrity sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + "@types/caseless@*": version "0.12.2" resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" @@ -4015,6 +4037,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/http-cache-semantics@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" + integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A== + "@types/indent-string@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/indent-string/-/indent-string-3.0.0.tgz#9ebb391ceda548926f5819ad16405349641b999f" @@ -4146,6 +4173,13 @@ dependencies: "@types/node" "*" +"@types/keyv@*": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" + integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== + dependencies: + "@types/node" "*" + "@types/license-checker@15.0.0": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/license-checker/-/license-checker-15.0.0.tgz#685d69e2cf61ffd862320434601f51c85e28bba1" @@ -4617,6 +4651,13 @@ "@types/tough-cookie" "*" form-data "^2.5.0" +"@types/responselike@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + "@types/retry@^0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -4632,10 +4673,10 @@ resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" integrity sha512-SMA+fUwULwK7sd/ZJicUztiPs8F1yCPwF3O23Z9uQ32ME5Ha0NmDK9+QTsYE4O2tHXChzXomSWWeIhCnoN1LqA== -"@types/selenium-webdriver@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.5.tgz#23041a4948c82daf2df9836e4d2358fec10d3e24" - integrity sha512-ma1aL1znI3ptEbSQgbywgadrRCJouPIACSfOl/bPwu/TPNSyyE/+o9jZ6+bpDVTtIdksZuVKpq4SR1ip3DRduw== +"@types/selenium-webdriver@4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.9.tgz#12621e55b2ef8f6c98bd17fe23fa720c6cba16bd" + integrity sha512-HopIwBE7GUXsscmt/J0DhnFXLSmO04AfxT6b8HAprknwka7pqEWquWDMXxCjd+NUHK9MkCe1SDKKsMiNmCItbQ== "@types/semver@^5.5.0": version "5.5.0" @@ -7358,13 +7399,18 @@ binaryextensions@2: resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" integrity sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA== -bindings@^1.5.0: +bindings@1, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" +bindings@~1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" + integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= + bit-twiddle@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" @@ -7898,7 +7944,7 @@ buffer@^5.1.0, buffer@^5.2.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= @@ -8045,6 +8091,13 @@ cache-loader@^4.1.0: neo-async "^2.6.1" schema-utils "^2.0.0" +cacheable-lookup@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.0.tgz#33b1e56f17507f5cf9bb46075112d65473fb7713" + integrity sha512-s2piO6LvA7xnL1AR03wuEdSx3BZT3tIJpZ56/lcJwzO/6DTJZlTs7X3lrvPxk6d1PlDe6PrVe2TjlUIZNFglAQ== + dependencies: + keyv "^4.0.0" + cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" @@ -8058,6 +8111,19 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +cacheable-request@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" + integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^2.0.0" + cachedir@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -8886,7 +8952,7 @@ clone-regexp@^1.0.0: is-regexp "^1.0.0" is-supported-regexp-flag "^1.0.0" -clone-response@1.0.2: +clone-response@1.0.2, clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= @@ -9150,16 +9216,16 @@ commander@4.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== +commander@^2.12.1, commander@^2.20.0, commander@^2.7.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^2.13.0, commander@^2.15.1, commander@^2.16.0, commander@^2.19.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^2.20.0, commander@^2.7.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^2.8.1: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -10575,7 +10641,7 @@ debug-fabulous@1.X: memoizee "0.4.X" object-assign "4.X" -debug@2.6.9, debug@^2.0.0, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2, debug@2.6.9, debug@^2.0.0, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -10647,6 +10713,13 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" +decompress-response@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" + integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== + dependencies: + mimic-response "^2.0.0" + decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" @@ -10798,6 +10871,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +defer-to-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" + integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -13239,6 +13317,17 @@ fetch-mock@^7.3.9: path-to-regexp "^2.2.1" whatwg-url "^6.5.0" +ffi@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ffi/-/ffi-2.3.0.tgz#fa1a7b3d85c0fa8c83d96947a64b5192bc47f858" + integrity sha512-vkPA9Hf9CVuQ5HeMZykYvrZF2QNJ/iKGLkyDkisBnoOOFeFXZQhUPxBARPBIZMJVulvBI2R+jgofW03gyPpJcQ== + dependencies: + bindings "~1.2.0" + debug "2" + nan "2" + ref "1" + ref-struct "1" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -14716,6 +14805,27 @@ got@5.6.0: unzip-response "^1.0.0" url-parse-lax "^1.0.0" +got@^10.6.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-10.6.0.tgz#ac3876261a4d8e5fc4f81186f79955ce7b0501dc" + integrity sha512-3LIdJNTdCFbbJc+h/EH0V5lpNpbJ6Bfwykk21lcQvQsEcrzdi/ltCyQehFHLzJ/ka0UMH4Slg0hkYvAZN9qUDg== + dependencies: + "@sindresorhus/is" "^2.0.0" + "@szmarczak/http-timer" "^4.0.0" + "@types/cacheable-request" "^6.0.1" + cacheable-lookup "^2.0.0" + cacheable-request "^7.0.1" + decompress-response "^5.0.0" + duplexer3 "^0.1.4" + get-stream "^5.0.0" + lowercase-keys "^2.0.0" + mimic-response "^2.1.0" + p-cancelable "^2.0.0" + p-event "^4.0.0" + responselike "^2.0.0" + to-readable-stream "^2.0.0" + type-fest "^0.10.0" + got@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca" @@ -15816,6 +15926,11 @@ http-cache-semantics@3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -16854,6 +16969,11 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + integrity sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw== + is-glob@4.0.0, is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" @@ -18124,6 +18244,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -18359,7 +18484,7 @@ jsx-to-string@^1.4.0: json-stringify-pretty-compact "^1.0.1" react "^0.14.0" -jszip@^3.1.5: +jszip@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== @@ -18535,6 +18660,13 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.0.tgz#2d1dab694926b2d427e4c74804a10850be44c12f" + integrity sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog== + dependencies: + json-buffer "3.0.1" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -19503,6 +19635,11 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lowlight@~1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.1.tgz#ed7c3dffc36f8c1f263735c0fe0c907847c11250" @@ -20163,6 +20300,11 @@ mimic-response@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== +mimic-response@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + mimos@4.x.x: version "4.0.0" resolved "https://registry.yarnpkg.com/mimos/-/mimos-4.0.0.tgz#76e3d27128431cb6482fd15b20475719ad626a5a" @@ -20591,6 +20733,19 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +ms-chromium-edge-driver@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ms-chromium-edge-driver/-/ms-chromium-edge-driver-0.2.0.tgz#0e0c6fd9fd1d1d36db97b2b3d7e9d4ba4d2de456" + integrity sha512-RkDsBPnMLjRna7q4LlvtLb+CHPei9gZapnlxm3ayWKk3Ab6HmDsz/17xG2eyqkKX5UcKeo04YlLZ345tO7OolA== + dependencies: + extract-zip "^1.6.7" + got "^10.6.0" + lodash "4.17.15" + tslint "^6.1.0" + tslint-config-prettier "^1.18.0" + util "^0.12.2" + windows-registry "^0.1.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -20703,7 +20858,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1, nan@^2.13.2: +nan@2, nan@^2.12.1, nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -21206,6 +21361,11 @@ normalize-url@^3.3.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + now-and-later@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" @@ -21891,6 +22051,11 @@ p-cancelable@^0.4.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== +p-cancelable@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" + integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -21903,7 +22068,7 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-event@^4.1.0: +p-event@^4.0.0, p-event@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.1.0.tgz#e92bb866d7e8e5b732293b1c8269d38e9982bf8e" integrity sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA== @@ -24952,6 +25117,31 @@ redux@^4.0.5: loose-envify "^1.4.0" symbol-observable "^1.2.0" +ref-struct@1, ref-struct@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ref-struct/-/ref-struct-1.1.0.tgz#5d5ee65ad41cefc3a5c5feb40587261e479edc13" + integrity sha1-XV7mWtQc78Olxf60BYcmHkee3BM= + dependencies: + debug "2" + ref "1" + +ref-union@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ref-union/-/ref-union-1.0.1.tgz#3a2397f862f1e75171d687268f43b3f17729f120" + integrity sha1-OiOX+GLx51Fx1ocmj0Oz8Xcp8SA= + dependencies: + debug "2" + ref "1" + +ref@1, ref@^1.2.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ref/-/ref-1.3.5.tgz#0e33f080cdb94a3d95312b2b3b1fd0f82044ca0f" + integrity sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA== + dependencies: + bindings "1" + debug "2" + nan "2" + reflect.ownkeys@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" @@ -25691,6 +25881,13 @@ responselike@1.0.2: dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -26249,15 +26446,14 @@ select@^1.1.2: resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= -selenium-webdriver@^4.0.0-alpha.5: - version "4.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.5.tgz#e4683b3dbf827d70df09a7e43bf02ebad20fa7c1" - integrity sha512-hktl3DSrhzM59yLhWzDGHIX9o56DvA+cVK7Dw6FcJR6qQ4CGzkaHeXQPcdrslkWMTeq0Ci9AmCxq0EMOvm2Rkg== +selenium-webdriver@^4.0.0-alpha.7: + version "4.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz#e3879d8457fd7ad8e4424094b7dc0540d99e6797" + integrity sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw== dependencies: - jszip "^3.1.5" - rimraf "^2.6.3" + jszip "^3.2.2" + rimraf "^2.7.1" tmp "0.0.30" - xml2js "^0.4.19" selfsigned@^1.10.7: version "1.10.7" @@ -28648,6 +28844,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" + integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -28927,6 +29128,37 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +tslint@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" + integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.10.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -29431,6 +29663,11 @@ type-detect@^1.0.0: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" integrity sha1-diIXzAbbJY7EiQihKY6LlRIejqI= +type-fest@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" + integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== + type-fest@^0.3.0, type-fest@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -30121,6 +30358,16 @@ util@^0.11.0: dependencies: inherits "2.0.3" +util@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" + integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + safe-buffer "^5.1.2" + utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -31277,6 +31524,17 @@ window-size@^0.2.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= +windows-registry@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/windows-registry/-/windows-registry-0.1.5.tgz#92c25c960884b0d215e69395f52d8dfaa0ba4ad0" + integrity sha512-gMN3ets1fbdP+TApEbbX2TIfBK3MIH5+p9GMvIFS3CNLr7U0Khe5mRj/T5zvwo/pKdhJgDrCLYyaNSs7HYiBCw== + dependencies: + debug "^2.2.0" + ffi "^2.0.0" + ref "^1.2.0" + ref-struct "^1.0.2" + ref-union "^1.0.0" + windows-release@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" @@ -31575,14 +31833,6 @@ xml-parse-from-string@^1.0.0: resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= -xml2js@^0.4.19, xml2js@^0.4.5: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - xml2js@^0.4.22: version "0.4.22" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" @@ -31592,6 +31842,14 @@ xml2js@^0.4.22: util.promisify "~1.0.0" xmlbuilder "~11.0.0" +xml2js@^0.4.5: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" From e3bd04fcb078a8fd01d315bbde68781bdd8a3cfd Mon Sep 17 00:00:00 2001 From: Gidi Meir Morris Date: Wed, 8 Apr 2020 22:36:33 +0100 Subject: [PATCH 48/52] [Alerting] Displays warning when a permanent encryption key is missing and hides alerting UI appropriately (#62772) Removes the Security flyout and instead replaces the Alerting List, Connectors List and Alert Flyout with suitable messaging. Verifies that a permanent Encryption Key has been configured and if it hasn't displays a suitable warning in place, or along side the TLS warning, as needed. --- x-pack/plugins/alerting/common/index.ts | 1 + x-pack/plugins/alerting/server/plugin.ts | 2 +- .../alerting/server/routes/health.test.ts | 58 +++++- .../plugins/alerting/server/routes/health.ts | 8 +- .../translations/translations/ja-JP.json | 17 +- .../translations/translations/zh-CN.json | 17 +- .../alert_action_security_call_out.test.tsx | 78 ------- .../alert_action_security_call_out.tsx | 78 ------- .../application/components/health_check.scss | 13 ++ .../components/health_check.test.tsx | 131 ++++++++++++ .../application/components/health_check.tsx | 197 ++++++++++++++++++ .../prompts/empty_connectors_prompt.scss | 3 + .../prompts/empty_connectors_prompt.tsx | 55 +++++ .../components/prompts/empty_prompt.tsx | 47 +++++ .../components/security_call_out.test.tsx | 72 ------- .../components/security_call_out.tsx | 75 ------- .../public/application/home.tsx | 25 ++- .../components/actions_connectors_list.scss | 4 - .../components/actions_connectors_list.tsx | 53 +---- .../sections/alert_form/alert_add.test.tsx | 5 +- .../sections/alert_form/alert_add.tsx | 104 +++++---- .../sections/alert_form/alert_edit.test.tsx | 5 +- .../sections/alert_form/alert_edit.tsx | 134 ++++++------ .../alerts_list/components/alerts_list.tsx | 42 +--- 24 files changed, 662 insertions(+), 562 deletions(-) delete mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.test.tsx delete mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/health_check.scss create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/health_check.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/health_check.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.scss create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx delete mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.test.tsx delete mode 100644 x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.tsx diff --git a/x-pack/plugins/alerting/common/index.ts b/x-pack/plugins/alerting/common/index.ts index 9d4ea69a636090..2574e73dd4f9ae 100644 --- a/x-pack/plugins/alerting/common/index.ts +++ b/x-pack/plugins/alerting/common/index.ts @@ -17,6 +17,7 @@ export interface ActionGroup { export interface AlertingFrameworkHealth { isSufficientlySecure: boolean; + hasPermanentEncryptionKey: boolean; } export const BASE_ALERT_API_PATH = '/api/alert'; diff --git a/x-pack/plugins/alerting/server/plugin.ts b/x-pack/plugins/alerting/server/plugin.ts index 172a1062263453..fdca6c0a9b503c 100644 --- a/x-pack/plugins/alerting/server/plugin.ts +++ b/x-pack/plugins/alerting/server/plugin.ts @@ -190,7 +190,7 @@ export class AlertingPlugin { unmuteAllAlertRoute(router, this.licenseState); muteAlertInstanceRoute(router, this.licenseState); unmuteAlertInstanceRoute(router, this.licenseState); - healthRoute(router, this.licenseState); + healthRoute(router, this.licenseState, plugins.encryptedSavedObjects); return { registerType: alertTypeRegistry.register.bind(alertTypeRegistry), diff --git a/x-pack/plugins/alerting/server/routes/health.test.ts b/x-pack/plugins/alerting/server/routes/health.test.ts index 9efe020bc10c4b..42c83a7c04deba 100644 --- a/x-pack/plugins/alerting/server/routes/health.test.ts +++ b/x-pack/plugins/alerting/server/routes/health.test.ts @@ -10,6 +10,7 @@ import { mockHandlerArguments } from './_mock_handler_arguments'; import { elasticsearchServiceMock } from '../../../../../src/core/server/mocks'; import { verifyApiAccess } from '../lib/license_api_access'; import { mockLicenseState } from '../lib/license_state.mock'; +import { encryptedSavedObjectsMock } from '../../../encrypted_saved_objects/server/mocks'; jest.mock('../lib/license_api_access.ts', () => ({ verifyApiAccess: jest.fn(), @@ -24,7 +25,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [config] = router.get.mock.calls[0]; @@ -35,7 +38,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -58,11 +63,37 @@ describe('healthRoute', () => { `); }); + it('evaluates whether Encrypted Saved Objects is using an ephemeral encryption key', async () => { + const router: RouterMock = mockRouter.create(); + + const licenseState = mockLicenseState(); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = true; + healthRoute(router, licenseState, encryptedSavedObjects); + const [, handler] = router.get.mock.calls[0]; + + const elasticsearch = elasticsearchServiceMock.createSetup(); + elasticsearch.adminClient.callAsInternalUser.mockReturnValue(Promise.resolve({})); + + const [context, req, res] = mockHandlerArguments({ elasticsearch }, {}, ['ok']); + + expect(await handler(context, req, res)).toMatchInlineSnapshot(` + Object { + "body": Object { + "hasPermanentEncryptionKey": false, + "isSufficientlySecure": true, + }, + } + `); + }); + it('evaluates missing security info from the usage api to mean that the security plugin is disbled', async () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -73,6 +104,7 @@ describe('healthRoute', () => { expect(await handler(context, req, res)).toMatchInlineSnapshot(` Object { "body": Object { + "hasPermanentEncryptionKey": true, "isSufficientlySecure": true, }, } @@ -83,7 +115,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -94,6 +128,7 @@ describe('healthRoute', () => { expect(await handler(context, req, res)).toMatchInlineSnapshot(` Object { "body": Object { + "hasPermanentEncryptionKey": true, "isSufficientlySecure": true, }, } @@ -104,7 +139,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -117,6 +154,7 @@ describe('healthRoute', () => { expect(await handler(context, req, res)).toMatchInlineSnapshot(` Object { "body": Object { + "hasPermanentEncryptionKey": true, "isSufficientlySecure": false, }, } @@ -127,7 +165,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -140,6 +180,7 @@ describe('healthRoute', () => { expect(await handler(context, req, res)).toMatchInlineSnapshot(` Object { "body": Object { + "hasPermanentEncryptionKey": true, "isSufficientlySecure": false, }, } @@ -150,7 +191,9 @@ describe('healthRoute', () => { const router: RouterMock = mockRouter.create(); const licenseState = mockLicenseState(); - healthRoute(router, licenseState); + const encryptedSavedObjects = encryptedSavedObjectsMock.createSetup(); + encryptedSavedObjects.usingEphemeralEncryptionKey = false; + healthRoute(router, licenseState, encryptedSavedObjects); const [, handler] = router.get.mock.calls[0]; const elasticsearch = elasticsearchServiceMock.createSetup(); @@ -163,6 +206,7 @@ describe('healthRoute', () => { expect(await handler(context, req, res)).toMatchInlineSnapshot(` Object { "body": Object { + "hasPermanentEncryptionKey": true, "isSufficientlySecure": true, }, } diff --git a/x-pack/plugins/alerting/server/routes/health.ts b/x-pack/plugins/alerting/server/routes/health.ts index 29c2f3c5730f4c..fa2358a1f181ce 100644 --- a/x-pack/plugins/alerting/server/routes/health.ts +++ b/x-pack/plugins/alerting/server/routes/health.ts @@ -14,6 +14,7 @@ import { import { LicenseState } from '../lib/license_state'; import { verifyApiAccess } from '../lib/license_api_access'; import { AlertingFrameworkHealth } from '../types'; +import { EncryptedSavedObjectsPluginSetup } from '../../../encrypted_saved_objects/server'; interface XPackUsageSecurity { security?: { @@ -26,7 +27,11 @@ interface XPackUsageSecurity { }; } -export function healthRoute(router: IRouter, licenseState: LicenseState) { +export function healthRoute( + router: IRouter, + licenseState: LicenseState, + encryptedSavedObjects: EncryptedSavedObjectsPluginSetup +) { router.get( { path: '/api/alert/_health', @@ -54,6 +59,7 @@ export function healthRoute(router: IRouter, licenseState: LicenseState) { const frameworkHealth: AlertingFrameworkHealth = { isSufficientlySecure: !isSecurityEnabled || (isSecurityEnabled && isTLSEnabled), + hasPermanentEncryptionKey: !encryptedSavedObjects.usingEphemeralEncryptionKey, }; return res.ok({ diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 00ac5b77d00f3b..e63e1c8ad2c916 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -15864,8 +15864,6 @@ "xpack.triggersActionsUI.common.expressionItems.threshold.andLabel": "AND", "xpack.triggersActionsUI.common.expressionItems.threshold.descriptionLabel": "タイミング", "xpack.triggersActionsUI.common.expressionItems.threshold.popoverTitle": "タイミング", - "xpack.triggersActionsUI.components.alertActionSecurityCallOut.enableTlsCta": "TLS を有効にする", - "xpack.triggersActionsUI.components.alertActionSecurityCallOut.tlsDisabledTitle": "アラート {action} を実行するには Elasticsearch と Kibana の間に TLS が必要です。", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.actionTypeTitle": "メールに送信", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.addVariablePopoverButton": "変数を追加", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.selectMessageText": "サーバーからメールを送信します。", @@ -15960,9 +15958,6 @@ "xpack.triggersActionsUI.components.builtinActionTypes.webhookAction.viewHeadersSwitch": "HTTP ヘッダーを追加", "xpack.triggersActionsUI.components.deleteSelectedIdsErrorNotification.descriptionText": "{numErrors, number} {numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}を削除できませんでした", "xpack.triggersActionsUI.components.deleteSelectedIdsSuccessNotification.descriptionText": "{numSuccesses, number} {numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}}を削除しました", - "xpack.triggersActionsUI.components.securityCallOut.enableTlsCta": "TLS を有効にする", - "xpack.triggersActionsUI.components.securityCallOut.tlsDisabledDescription": "アラートは API キー に依存し、キーを使用するには Elasticsearch と Kibana の間に TLS が必要です。", - "xpack.triggersActionsUI.components.securityCallOut.tlsDisabledTitle": "トランスポートレイヤーセキュリティを有効にする", "xpack.triggersActionsUI.connectors.breadcrumbTitle": "コネクター", "xpack.triggersActionsUI.deleteSelectedIdsConfirmModal.cancelButtonLabel": "キャンセル", "xpack.triggersActionsUI.deleteSelectedIdsConfirmModal.deleteButtonLabel": "{numIdsToDelete, plural, one {{singleTitle}} other {# {multipleTitle}}}を削除 ", @@ -15986,8 +15981,8 @@ "xpack.triggersActionsUI.sections.actionConnectorForm.error.requiredNameText": "名前が必要です。", "xpack.triggersActionsUI.sections.actionForm.getMoreActionsTitle": "さらにアクションを表示", "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionButtonLabel": "コネクターを作成", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionEmptyBody": "Kibana でトリガーできるメール、Slack, Elasticsearch、およびサードパーティサービスを構成します。", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionEmptyTitle": "初めてのコネクターを作成する", + "xpack.triggersActionsUI.components.emptyConnectorsPrompt.addActionEmptyBody": "Kibana でトリガーできるメール、Slack, Elasticsearch、およびサードパーティサービスを構成します。", + "xpack.triggersActionsUI.components.emptyConnectorsPrompt.addActionEmptyTitle": "初めてのコネクターを作成する", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle": "コネクターを削除できません", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteLabel": "{count} 件を削除", "xpack.triggersActionsUI.sections.actionsConnectorsList.connectorsListTable.columns.actions.deleteActionDescription": "このコネクターを削除", @@ -16037,7 +16032,6 @@ "xpack.triggersActionsUI.sections.alertAdd.saveButtonLabel": "保存", "xpack.triggersActionsUI.sections.alertAdd.saveErrorNotificationText": "アラートを作成できません。", "xpack.triggersActionsUI.sections.alertAdd.saveSuccessNotificationText": "「{alertName}」 を保存しました", - "xpack.triggersActionsUI.sections.alertAdd.securityCalloutAction": "作成", "xpack.triggersActionsUI.sections.alertAdd.selectIndex": "インデックスを選択してください。", "xpack.triggersActionsUI.sections.alertAdd.threshold.closeIndexPopoverLabel": "閉じる", "xpack.triggersActionsUI.sections.alertAdd.threshold.fixErrorInExpressionBelowValidationMessage": "下の表現のエラーを修正してください。", @@ -16074,7 +16068,6 @@ "xpack.triggersActionsUI.sections.alertEdit.saveButtonLabel": "保存", "xpack.triggersActionsUI.sections.alertEdit.saveErrorNotificationText": "アラートを更新できません。", "xpack.triggersActionsUI.sections.alertEdit.saveSuccessNotificationText": "「{alertName}」 を更新しました", - "xpack.triggersActionsUI.sections.alertEdit.securityCalloutAction": "編集中", "xpack.triggersActionsUI.sections.alertForm.accordion.deleteIconAriaLabel": "削除", "xpack.triggersActionsUI.sections.alertForm.actionDisabledTitle": "このアクションは無効です", "xpack.triggersActionsUI.sections.alertForm.actionIdLabel": "{connectorInstance} コネクター", @@ -16126,9 +16119,9 @@ "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.enableTitle": "有効にする", "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.muteTitle": "ミュート", "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.popoverButtonTitle": "アクション", - "xpack.triggersActionsUI.sections.alertsList.emptyButton": "アラートの作成", - "xpack.triggersActionsUI.sections.alertsList.emptyDesc": "トリガーが起きたときにメール、Slack、または別のコネクターを通してアラートを受信します。", - "xpack.triggersActionsUI.sections.alertsList.emptyTitle": "初めてのアラートを作成する", + "xpack.triggersActionsUI.components.emptyPrompt.emptyButton": "アラートの作成", + "xpack.triggersActionsUI.components.emptyPrompt.emptyDesc": "トリガーが起きたときにメール、Slack、または別のコネクターを通してアラートを受信します。", + "xpack.triggersActionsUI.components.emptyPrompt.emptyTitle": "初めてのアラートを作成する", "xpack.triggersActionsUI.sections.alertsList.multipleTitle": "アラート", "xpack.triggersActionsUI.sections.alertsList.searchPlaceholderTitle": "検索", "xpack.triggersActionsUI.sections.alertsList.singleTitle": "アラート", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f6d84431bef7fb..cc75ceb988d972 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -15868,8 +15868,6 @@ "xpack.triggersActionsUI.common.expressionItems.threshold.andLabel": "且", "xpack.triggersActionsUI.common.expressionItems.threshold.descriptionLabel": "当", "xpack.triggersActionsUI.common.expressionItems.threshold.popoverTitle": "当", - "xpack.triggersActionsUI.components.alertActionSecurityCallOut.enableTlsCta": "启用 TLS", - "xpack.triggersActionsUI.components.alertActionSecurityCallOut.tlsDisabledTitle": "告警 {action} 在 Elasticsearch 和 Kibana 之间需要 TLS。", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.actionTypeTitle": "发送到电子邮件", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.addVariablePopoverButton": "添加变量", "xpack.triggersActionsUI.components.builtinActionTypes.emailAction.selectMessageText": "从您的服务器发送电子邮件。", @@ -15964,9 +15962,6 @@ "xpack.triggersActionsUI.components.builtinActionTypes.webhookAction.viewHeadersSwitch": "添加 HTTP 标头", "xpack.triggersActionsUI.components.deleteSelectedIdsErrorNotification.descriptionText": "无法删除 {numErrors, number} 个{numErrors, plural, one {{singleTitle}} other {{multipleTitle}}}", "xpack.triggersActionsUI.components.deleteSelectedIdsSuccessNotification.descriptionText": "已删除 {numSuccesses, number} 个{numSuccesses, plural, one {{singleTitle}} other {{multipleTitle}}}", - "xpack.triggersActionsUI.components.securityCallOut.enableTlsCta": "启用 TLS", - "xpack.triggersActionsUI.components.securityCallOut.tlsDisabledDescription": "Alerting 依赖于在 Elasticsearch 和 Kibana 之间需要 TLS 的 API 密钥。", - "xpack.triggersActionsUI.components.securityCallOut.tlsDisabledTitle": "启用传输层安全", "xpack.triggersActionsUI.connectors.breadcrumbTitle": "连接器", "xpack.triggersActionsUI.deleteSelectedIdsConfirmModal.cancelButtonLabel": "取消", "xpack.triggersActionsUI.deleteSelectedIdsConfirmModal.deleteButtonLabel": "删除{numIdsToDelete, plural, one {{singleTitle}} other { # 个{multipleTitle}}} ", @@ -15991,8 +15986,8 @@ "xpack.triggersActionsUI.sections.actionConnectorForm.error.requiredNameText": "名称必填。", "xpack.triggersActionsUI.sections.actionForm.getMoreActionsTitle": "获取更多的操作", "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionButtonLabel": "创建连接器", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionEmptyBody": "配置电子邮件、Slack、Elasticsearch 和 Kibana 可以触发的第三方服务。", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionEmptyTitle": "创建您的首个连接器", + "xpack.triggersActionsUI.components.emptyConnectorsPrompt.addActionEmptyBody": "配置电子邮件、Slack、Elasticsearch 和 Kibana 可以触发的第三方服务。", + "xpack.triggersActionsUI.components.emptyConnectorsPrompt.addActionEmptyTitle": "创建您的首个连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle": "无法删除连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteLabel": "删除 {count} 个", "xpack.triggersActionsUI.sections.actionsConnectorsList.connectorsListTable.columns.actions.deleteActionDescription": "删除此连接器", @@ -16042,7 +16037,6 @@ "xpack.triggersActionsUI.sections.alertAdd.saveButtonLabel": "保存", "xpack.triggersActionsUI.sections.alertAdd.saveErrorNotificationText": "无法创建告警。", "xpack.triggersActionsUI.sections.alertAdd.saveSuccessNotificationText": "已保存“{alertName}”", - "xpack.triggersActionsUI.sections.alertAdd.securityCalloutAction": "创建", "xpack.triggersActionsUI.sections.alertAdd.selectIndex": "选择索引。", "xpack.triggersActionsUI.sections.alertAdd.threshold.closeIndexPopoverLabel": "关闭", "xpack.triggersActionsUI.sections.alertAdd.threshold.fixErrorInExpressionBelowValidationMessage": "表达式包含错误。", @@ -16079,7 +16073,6 @@ "xpack.triggersActionsUI.sections.alertEdit.saveButtonLabel": "保存", "xpack.triggersActionsUI.sections.alertEdit.saveErrorNotificationText": "无法更新告警。", "xpack.triggersActionsUI.sections.alertEdit.saveSuccessNotificationText": "已更新“{alertName}”", - "xpack.triggersActionsUI.sections.alertEdit.securityCalloutAction": "正在编辑", "xpack.triggersActionsUI.sections.alertForm.accordion.deleteIconAriaLabel": "删除", "xpack.triggersActionsUI.sections.alertForm.actionDisabledTitle": "此操作已禁用", "xpack.triggersActionsUI.sections.alertForm.actionIdLabel": "{connectorInstance} 连接器", @@ -16131,9 +16124,9 @@ "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.enableTitle": "启用", "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.muteTitle": "静音", "xpack.triggersActionsUI.sections.alertsList.collapsedItemActons.popoverButtonTitle": "操作", - "xpack.triggersActionsUI.sections.alertsList.emptyButton": "创建告警", - "xpack.triggersActionsUI.sections.alertsList.emptyDesc": "触发条件满足时通过电子邮件、Slack 或其他连接器接收告警。", - "xpack.triggersActionsUI.sections.alertsList.emptyTitle": "创建您的首个告警", + "xpack.triggersActionsUI.components.emptyPrompt.emptyButton": "创建告警", + "xpack.triggersActionsUI.components.emptyPrompt.emptyDesc": "触发条件满足时通过电子邮件、Slack 或其他连接器接收告警。", + "xpack.triggersActionsUI.components.emptyPrompt.emptyTitle": "创建您的首个告警", "xpack.triggersActionsUI.sections.alertsList.multipleTitle": "告警", "xpack.triggersActionsUI.sections.alertsList.searchPlaceholderTitle": "搜索", "xpack.triggersActionsUI.sections.alertsList.singleTitle": "告警", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.test.tsx deleted file mode 100644 index 85699cfbd750f0..00000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.test.tsx +++ /dev/null @@ -1,78 +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, { Fragment } from 'react'; -import { shallow, ShallowWrapper } from 'enzyme'; -import { AlertActionSecurityCallOut } from './alert_action_security_call_out'; - -import { EuiCallOut, EuiButton } from '@elastic/eui'; -import { act } from 'react-dom/test-utils'; -import { httpServiceMock } from '../../../../../../src/core/public/mocks'; - -const docLinks = { ELASTIC_WEBSITE_URL: 'elastic.co/', DOC_LINK_VERSION: 'current' }; - -const http = httpServiceMock.createStartContract(); - -describe('alert action security call out', () => { - let useEffect: any; - - const mockUseEffect = () => { - // make react execute useEffects despite shallow rendering - useEffect.mockImplementationOnce((f: Function) => f()); - }; - - beforeEach(() => { - jest.resetAllMocks(); - useEffect = jest.spyOn(React, 'useEffect'); - mockUseEffect(); - }); - - test('renders nothing while health is loading', async () => { - http.get.mockImplementationOnce(() => new Promise(() => {})); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow( - - ); - }); - - expect(component?.is(Fragment)).toBeTruthy(); - expect(component?.html()).toBe(''); - }); - - test('renders nothing if keys are enabled', async () => { - http.get.mockResolvedValue({ isSufficientlySecure: true }); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow( - - ); - }); - - expect(component?.is(Fragment)).toBeTruthy(); - expect(component?.html()).toBe(''); - }); - - test('renders the callout if keys are disabled', async () => { - http.get.mockResolvedValue({ isSufficientlySecure: false }); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow( - - ); - }); - - expect(component?.find(EuiCallOut).prop('title')).toMatchInlineSnapshot( - `"Alert creation requires TLS between Elasticsearch and Kibana."` - ); - - expect(component?.find(EuiButton).prop('href')).toMatchInlineSnapshot( - `"elastic.co/guide/en/kibana/current/configuring-tls.html"` - ); - }); -}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.tsx deleted file mode 100644 index f7a80202dff89a..00000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/alert_action_security_call_out.tsx +++ /dev/null @@ -1,78 +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, { Fragment } from 'react'; -import { Option, none, some, fold, filter } from 'fp-ts/lib/Option'; -import { pipe } from 'fp-ts/lib/pipeable'; - -import { EuiCallOut, EuiButton, EuiSpacer } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; - -import { DocLinksStart, HttpSetup } from 'kibana/public'; -import { AlertingFrameworkHealth } from '../../types'; -import { health } from '../lib/alert_api'; - -interface Props { - docLinks: Pick; - action: string; - http: HttpSetup; -} - -export const AlertActionSecurityCallOut: React.FunctionComponent = ({ - http, - action, - docLinks, -}) => { - const { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } = docLinks; - - const [alertingHealth, setAlertingHealth] = React.useState>(none); - - React.useEffect(() => { - async function fetchSecurityConfigured() { - setAlertingHealth(some(await health({ http }))); - } - - fetchSecurityConfigured(); - }, [http]); - - return pipe( - alertingHealth, - filter(healthCheck => !healthCheck.isSufficientlySecure), - fold( - () => , - () => ( - - - - - - - - - ) - ) - ); -}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.scss b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.scss new file mode 100644 index 00000000000000..c4d12221e3a01e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.scss @@ -0,0 +1,13 @@ +@mixin padBannerWith($size) { + padding-left: $size; + padding-right: $size; +} + +.alertingHealthCheck__body { + @include padBannerWith(2 * $euiSize); +} + +.alertingFlyoutHealthCheck__body { + @include padBannerWith(2 * $euiSize); + margin-top: $euiSize; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.test.tsx new file mode 100644 index 00000000000000..5156a6146f3a12 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.test.tsx @@ -0,0 +1,131 @@ +/* + * 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 '@testing-library/react'; + +import { HealthCheck } from './health_check'; + +import { act } from 'react-dom/test-utils'; +import { httpServiceMock } from '../../../../../../src/core/public/mocks'; + +const docLinks = { ELASTIC_WEBSITE_URL: 'elastic.co/', DOC_LINK_VERSION: 'current' }; + +const http = httpServiceMock.createStartContract(); + +describe('health check', () => { + test('renders spinner while health is loading', async () => { + http.get.mockImplementationOnce(() => new Promise(() => {})); + + const { queryByText, container } = render( + +

{'shouldnt render'}

+
+ ); + await act(async () => { + // wait for useEffect to run + }); + + expect(container.getElementsByClassName('euiLoadingSpinner').length).toBe(1); + expect(queryByText('shouldnt render')).not.toBeInTheDocument(); + }); + + it('renders children if keys are enabled', async () => { + http.get.mockResolvedValue({ isSufficientlySecure: true, hasPermanentEncryptionKey: true }); + + const { queryByText } = render( + +

{'should render'}

+
+ ); + await act(async () => { + // wait for useEffect to run + }); + expect(queryByText('should render')).toBeInTheDocument(); + }); + + test('renders warning if keys are disabled', async () => { + http.get.mockImplementationOnce(async () => ({ + isSufficientlySecure: false, + hasPermanentEncryptionKey: true, + })); + + const { queryAllByText } = render( + +

{'should render'}

+
+ ); + await act(async () => { + // wait for useEffect to run + }); + + const [description, action] = queryAllByText(/TLS/i); + + expect(description.textContent).toMatchInlineSnapshot( + `"Alerting relies on API keys, which require TLS between Elasticsearch and Kibana. Learn how to enable TLS."` + ); + + expect(action.textContent).toMatchInlineSnapshot(`"Learn how to enable TLS."`); + + expect(action.getAttribute('href')).toMatchInlineSnapshot( + `"elastic.co/guide/en/kibana/current/configuring-tls.html"` + ); + }); + + test('renders warning if encryption key is ephemeral', async () => { + http.get.mockImplementationOnce(async () => ({ + isSufficientlySecure: true, + hasPermanentEncryptionKey: false, + })); + + const { queryByText, queryByRole } = render( + +

{'should render'}

+
+ ); + await act(async () => { + // wait for useEffect to run + }); + + const description = queryByRole(/banner/i); + expect(description!.textContent).toMatchInlineSnapshot( + `"To create an alert, set a value for xpack.encrypted_saved_objects.encryptionKey in your kibana.yml file. Learn how."` + ); + + const action = queryByText(/Learn/i); + expect(action!.textContent).toMatchInlineSnapshot(`"Learn how."`); + expect(action!.getAttribute('href')).toMatchInlineSnapshot( + `"elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#general-alert-action-settings"` + ); + }); + + test('renders warning if encryption key is ephemeral and keys are disabled', async () => { + http.get.mockImplementationOnce(async () => ({ + isSufficientlySecure: false, + hasPermanentEncryptionKey: false, + })); + + const { queryByText } = render( + +

{'should render'}

+
+ ); + await act(async () => { + // wait for useEffect to run + }); + + const description = queryByText(/Transport Layer Security/i); + + expect(description!.textContent).toMatchInlineSnapshot( + `"You must enable Transport Layer Security between Kibana and Elasticsearch and configure an encryption key in your kibana.yml file. Learn how"` + ); + + const action = queryByText(/Learn/i); + expect(action!.textContent).toMatchInlineSnapshot(`"Learn how"`); + expect(action!.getAttribute('href')).toMatchInlineSnapshot( + `"elastic.co/guide/en/kibana/current/alerting-getting-started.html#alerting-setup-prerequisites"` + ); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.tsx new file mode 100644 index 00000000000000..c967cf5de0771c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/health_check.tsx @@ -0,0 +1,197 @@ +/* + * 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, { Fragment } from 'react'; +import { Option, none, some, fold } from 'fp-ts/lib/Option'; +import { pipe } from 'fp-ts/lib/pipeable'; +import { FormattedMessage } from '@kbn/i18n/react'; + +import { EuiLink, EuiLoadingSpinner } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { DocLinksStart, HttpSetup } from 'kibana/public'; + +import { EuiEmptyPrompt, EuiCode } from '@elastic/eui'; +import { AlertingFrameworkHealth } from '../../types'; +import { health } from '../lib/alert_api'; +import './health_check.scss'; + +interface Props { + docLinks: Pick; + http: HttpSetup; + inFlyout?: boolean; +} + +export const HealthCheck: React.FunctionComponent = ({ + docLinks, + http, + children, + inFlyout = false, +}) => { + const [alertingHealth, setAlertingHealth] = React.useState>(none); + + React.useEffect(() => { + (async function() { + setAlertingHealth(some(await health({ http }))); + })(); + }, [http]); + + const className = inFlyout ? 'alertingFlyoutHealthCheck' : 'alertingHealthCheck'; + + return pipe( + alertingHealth, + fold( + () => , + healthCheck => { + return healthCheck?.isSufficientlySecure && healthCheck?.hasPermanentEncryptionKey ? ( + {children} + ) : !healthCheck.isSufficientlySecure && !healthCheck.hasPermanentEncryptionKey ? ( + + ) : !healthCheck.hasPermanentEncryptionKey ? ( + + ) : ( + + ); + } + ) + ); +}; + +type PromptErrorProps = Pick & { + className?: string; +}; + +const TlsAndEncryptionError = ({ + docLinks: { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION }, + className, +}: PromptErrorProps) => ( + + + + } + body={ +
+

+ {i18n.translate('xpack.triggersActionsUI.components.healthCheck.tlsAndEncryptionError', { + defaultMessage: + 'You must enable Transport Layer Security between Kibana and Elasticsearch and configure an encryption key in your kibana.yml file. ', + })} + + {i18n.translate( + 'xpack.triggersActionsUI.components.healthCheck.tlsAndEncryptionErrorAction', + { + defaultMessage: 'Learn how', + } + )} + +

+
+ } + /> +); + +const EncryptionError = ({ + docLinks: { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION }, + className, +}: PromptErrorProps) => ( + + + + } + body={ +
+

+ {i18n.translate( + 'xpack.triggersActionsUI.components.healthCheck.encryptionErrorBeforeKey', + { + defaultMessage: 'To create an alert, set a value for ', + } + )} + {'xpack.encrypted_saved_objects.encryptionKey'} + {i18n.translate( + 'xpack.triggersActionsUI.components.healthCheck.encryptionErrorAfterKey', + { + defaultMessage: ' in your kibana.yml file. ', + } + )} + + {i18n.translate( + 'xpack.triggersActionsUI.components.healthCheck.encryptionErrorAction', + { + defaultMessage: 'Learn how.', + } + )} + +

+
+ } + /> +); + +const TlsError = ({ + docLinks: { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION }, + className, +}: PromptErrorProps) => ( + + + + } + body={ +
+

+ {i18n.translate('xpack.triggersActionsUI.components.healthCheck.tlsError', { + defaultMessage: + 'Alerting relies on API keys, which require TLS between Elasticsearch and Kibana. ', + })} + + {i18n.translate('xpack.triggersActionsUI.components.healthCheck.tlsErrorAction', { + defaultMessage: 'Learn how to enable TLS.', + })} + +

+
+ } + /> +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.scss b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.scss new file mode 100644 index 00000000000000..fe001ce294ef4f --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.scss @@ -0,0 +1,3 @@ +.actEmptyConnectorsPrompt__logo + .actEmptyConnectorsPrompt__logo { + margin-left: $euiSize; +} \ No newline at end of file diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.tsx new file mode 100644 index 00000000000000..0e956ea56faa9c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_connectors_prompt.tsx @@ -0,0 +1,55 @@ +/* + * 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 { FormattedMessage } from '@kbn/i18n/react'; +import React, { Fragment } from 'react'; +import { EuiButton, EuiEmptyPrompt, EuiIcon, EuiSpacer, EuiTitle } from '@elastic/eui'; +import './empty_connectors_prompt.scss'; + +export const EmptyConnectorsPrompt = ({ onCTAClicked }: { onCTAClicked: () => void }) => ( + + + + + + +

+ +

+
+
+ } + body={ +

+ +

+ } + actions={ + + + + } + /> +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx new file mode 100644 index 00000000000000..df593d587de3fb --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/prompts/empty_prompt.tsx @@ -0,0 +1,47 @@ +/* + * 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 { FormattedMessage } from '@kbn/i18n/react'; +import React from 'react'; +import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; + +export const EmptyPrompt = ({ onCTAClicked }: { onCTAClicked: () => void }) => ( + + + + } + body={ +

+ +

+ } + actions={ + + + + } + /> +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.test.tsx deleted file mode 100644 index 28bc02ec3392f2..00000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.test.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import React, { Fragment } from 'react'; -import { shallow, ShallowWrapper } from 'enzyme'; -import { SecurityEnabledCallOut } from './security_call_out'; - -import { EuiCallOut, EuiButton } from '@elastic/eui'; -import { act } from 'react-dom/test-utils'; -import { httpServiceMock } from '../../../../../../src/core/public/mocks'; - -const docLinks = { ELASTIC_WEBSITE_URL: 'elastic.co/', DOC_LINK_VERSION: 'current' }; - -const http = httpServiceMock.createStartContract(); - -describe('security call out', () => { - let useEffect: any; - - const mockUseEffect = () => { - // make react execute useEffects despite shallow rendering - useEffect.mockImplementationOnce((f: Function) => f()); - }; - - beforeEach(() => { - jest.resetAllMocks(); - useEffect = jest.spyOn(React, 'useEffect'); - mockUseEffect(); - }); - - test('renders nothing while health is loading', async () => { - http.get.mockImplementationOnce(() => new Promise(() => {})); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow(); - }); - - expect(component?.is(Fragment)).toBeTruthy(); - expect(component?.html()).toBe(''); - }); - - test('renders nothing if keys are enabled', async () => { - http.get.mockResolvedValue({ isSufficientlySecure: true }); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow(); - }); - - expect(component?.is(Fragment)).toBeTruthy(); - expect(component?.html()).toBe(''); - }); - - test('renders the callout if keys are disabled', async () => { - http.get.mockImplementationOnce(async () => ({ isSufficientlySecure: false })); - - let component: ShallowWrapper | undefined; - await act(async () => { - component = shallow(); - }); - - expect(component?.find(EuiCallOut).prop('title')).toMatchInlineSnapshot( - `"Enable Transport Layer Security"` - ); - - expect(component?.find(EuiButton).prop('href')).toMatchInlineSnapshot( - `"elastic.co/guide/en/kibana/current/configuring-tls.html"` - ); - }); -}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.tsx deleted file mode 100644 index 9874a3a0697d2c..00000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/security_call_out.tsx +++ /dev/null @@ -1,75 +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, { Fragment } from 'react'; -import { Option, none, some, fold, filter } from 'fp-ts/lib/Option'; -import { pipe } from 'fp-ts/lib/pipeable'; - -import { EuiCallOut, EuiButton, EuiSpacer } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; - -import { DocLinksStart, HttpSetup } from 'kibana/public'; - -import { AlertingFrameworkHealth } from '../../types'; -import { health } from '../lib/alert_api'; - -interface Props { - docLinks: Pick; - http: HttpSetup; -} - -export const SecurityEnabledCallOut: React.FunctionComponent = ({ docLinks, http }) => { - const { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } = docLinks; - - const [alertingHealth, setAlertingHealth] = React.useState>(none); - - React.useEffect(() => { - async function fetchSecurityConfigured() { - setAlertingHealth(some(await health({ http }))); - } - - fetchSecurityConfigured(); - }, [http]); - - return pipe( - alertingHealth, - filter(healthCheck => !healthCheck?.isSufficientlySecure), - fold( - () => , - () => ( - - -

- -

- - - -
- -
- ) - ) - ); -}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/home.tsx b/x-pack/plugins/triggers_actions_ui/public/application/home.tsx index 7c8d798984bf27..4d0a9980f2231f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/home.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/home.tsx @@ -29,8 +29,8 @@ import { hasShowActionsCapability, hasShowAlertsCapability } from './lib/capabil import { ActionsConnectorsList } from './sections/actions_connectors_list/components/actions_connectors_list'; import { AlertsList } from './sections/alerts_list/components/alerts_list'; -import { SecurityEnabledCallOut } from './components/security_call_out'; import { PLUGIN } from './constants/plugin'; +import { HealthCheck } from './components/health_check'; interface MatchParams { section: Section; @@ -88,7 +88,6 @@ export const TriggersActionsUIHome: React.FunctionComponent - @@ -142,9 +141,27 @@ export const TriggersActionsUIHome: React.FunctionComponent {canShowActions && ( - + ( + + + + )} + /> + )} + {canShowAlerts && ( + ( + + + + )} + /> )} - {canShowAlerts && } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.scss b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.scss index 3d65b8a799b1b1..70ad1cae6c1d14 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.scss +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.scss @@ -1,7 +1,3 @@ -.actConnectorsList__logo + .actConnectorsList__logo { - margin-left: $euiSize; -} - .actConnectorsList__tableRowDisabled { background-color: $euiColorLightestShade; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index 81693e1d2d9d14..47e058f4739463 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -10,9 +10,6 @@ import { EuiInMemoryTable, EuiSpacer, EuiButton, - EuiIcon, - EuiEmptyPrompt, - EuiTitle, EuiLink, EuiLoadingSpinner, EuiIconTip, @@ -30,6 +27,7 @@ import { ActionsConnectorsContextProvider } from '../../../context/actions_conne import { checkActionTypeEnabled } from '../../../lib/check_action_type_enabled'; import './actions_connectors_list.scss'; import { ActionConnector, ActionConnectorTableItem, ActionTypeIndex } from '../../../../types'; +import { EmptyConnectorsPrompt } from '../../../components/prompts/empty_connectors_prompt'; export const ActionsConnectorsList: React.FunctionComponent = () => { const { http, toastNotifications, capabilities, actionTypeRegistry } = useAppDependencies(); @@ -324,51 +322,6 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { /> ); - const emptyPrompt = ( - - - - - - -

- -

-
-
- } - body={ -

- -

- } - actions={ - setAddFlyoutVisibility(true)} - > - - - } - /> - ); - const noPermissionPrompt = (

{ )} {data.length !== 0 && table} - {data.length === 0 && canSave && !isLoadingActions && !isLoadingActionTypes && emptyPrompt} + {data.length === 0 && canSave && !isLoadingActions && !isLoadingActionTypes && ( + setAddFlyoutVisibility(true)} /> + )} {data.length === 0 && !canSave && noPermissionPrompt} { docLinks: { ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' }, }; - mockes.http.get.mockResolvedValue({ isSufficientlySecure: true }); + mockes.http.get.mockResolvedValue({ + isSufficientlySecure: true, + hasPermanentEncryptionKey: true, + }); const alertType = { id: 'my-alert-type', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx index e025248fad52e6..0620ced6365a96 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_add.tsx @@ -25,7 +25,7 @@ import { Alert, AlertAction, IErrorObject } from '../../../types'; import { AlertForm, validateBaseProperties } from './alert_form'; import { alertReducer } from './alert_reducer'; import { createAlert } from '../../lib/alert_api'; -import { AlertActionSecurityCallOut } from '../../components/alert_action_security_call_out'; +import { HealthCheck } from '../../components/health_check'; import { PLUGIN } from '../../constants/plugin'; interface AlertAddProps { @@ -154,62 +154,54 @@ export const AlertAdd = ({

- - - - - - - - - {i18n.translate('xpack.triggersActionsUI.sections.alertAdd.cancelButtonLabel', { - defaultMessage: 'Cancel', - })} - - - - { - setIsSaving(true); - const savedAlert = await onSaveAlert(); - setIsSaving(false); - if (savedAlert) { - closeFlyout(); - if (reloadAlerts) { - reloadAlerts(); + + + + + + + + + {i18n.translate('xpack.triggersActionsUI.sections.alertAdd.cancelButtonLabel', { + defaultMessage: 'Cancel', + })} + + + + { + setIsSaving(true); + const savedAlert = await onSaveAlert(); + setIsSaving(false); + if (savedAlert) { + closeFlyout(); + if (reloadAlerts) { + reloadAlerts(); + } } - } - }} - > - - - - - + }} + > + + + + + + ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.test.tsx index 6fcfb463c4c778..916ba368e07320 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.test.tsx @@ -36,7 +36,10 @@ describe('alert_edit', () => { docLinks: { ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' }, }; - mockedCoreSetup.http.get.mockResolvedValue({ isSufficientlySecure: true }); + mockedCoreSetup.http.get.mockResolvedValue({ + isSufficientlySecure: true, + hasPermanentEncryptionKey: true, + }); const alertType = { id: 'my-alert-type', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.tsx index 3f27a7860bafa0..4255eca83be473 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_edit.tsx @@ -26,7 +26,7 @@ import { Alert, AlertAction, IErrorObject } from '../../../types'; import { AlertForm, validateBaseProperties } from './alert_form'; import { alertReducer } from './alert_reducer'; import { updateAlert } from '../../lib/alert_api'; -import { AlertActionSecurityCallOut } from '../../components/alert_action_security_call_out'; +import { HealthCheck } from '../../components/health_check'; import { PLUGIN } from '../../constants/plugin'; interface AlertEditProps { @@ -137,77 +137,69 @@ export const AlertEdit = ({ - - - {hasActionsDisabled && ( - - - - - )} - - - - - - - {i18n.translate('xpack.triggersActionsUI.sections.alertEdit.cancelButtonLabel', { - defaultMessage: 'Cancel', - })} - - - - { - setIsSaving(true); - const savedAlert = await onSaveAlert(); - setIsSaving(false); - if (savedAlert) { - closeFlyout(); - if (reloadAlerts) { - reloadAlerts(); - } - } - }} - > - + + {hasActionsDisabled && ( + + - - - - + + + )} + + + + + + + {i18n.translate('xpack.triggersActionsUI.sections.alertEdit.cancelButtonLabel', { + defaultMessage: 'Cancel', + })} + + + + { + setIsSaving(true); + const savedAlert = await onSaveAlert(); + setIsSaving(false); + if (savedAlert) { + closeFlyout(); + if (reloadAlerts) { + reloadAlerts(); + } + } + }} + > + + + + + + ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx index afd3299f0c2bbc..5d59180ff572b0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_list/components/alerts_list.tsx @@ -15,7 +15,6 @@ import { EuiFlexItem, EuiIcon, EuiSpacer, - EuiEmptyPrompt, EuiLink, EuiLoadingSpinner, } from '@elastic/eui'; @@ -36,6 +35,7 @@ import { loadActionTypes } from '../../../lib/action_connector_api'; import { hasDeleteAlertsCapability, hasSaveAlertsCapability } from '../../../lib/capabilities'; import { routeToAlertDetails, DEFAULT_SEARCH_PAGE_SIZE } from '../../../constants'; import { DeleteModalConfirmation } from '../../../components/delete_modal_confirmation'; +import { EmptyPrompt } from '../../../components/prompts/empty_prompt'; const ENTER_KEY = 13; @@ -292,44 +292,6 @@ export const AlertsList: React.FunctionComponent = () => { ); } - const emptyPrompt = ( - - - - } - body={ -

- -

- } - actions={ - setAlertFlyoutVisibility(true)} - > - - - } - /> - ); - const table = ( @@ -473,7 +435,7 @@ export const AlertsList: React.FunctionComponent = () => { ) : ( - emptyPrompt + setAlertFlyoutVisibility(true)} /> )} Date: Thu, 9 Apr 2020 00:56:52 +0300 Subject: [PATCH 49/52] [APM] Agent remote configuration: changes in Java property descriptions (#62282) * [APM] Agent remote configuration: changes in Java property descriptions * Removing newlines * Update snapshot Co-authored-by: Elastic Machine Co-authored-by: Brandon Morelli Co-authored-by: Nathan L Smith --- .../__snapshots__/index.test.ts.snap | 5 +++-- .../setting_definitions/java_settings.ts | 12 ++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap index bc435179762a28..49840d2157af76 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/__snapshots__/index.test.ts.snap @@ -153,8 +153,9 @@ Array [ }, Object { "key": "stress_monitor_gc_stress_threshold", - "type": "boolean", - "validationName": "(\\"true\\" | \\"false\\")", + "type": "float", + "validationError": "Must be a number between 0.000 and 1", + "validationName": "numberFloatRt", }, Object { "key": "stress_monitor_system_cpu_relief_threshold", diff --git a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/java_settings.ts b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/java_settings.ts index bb050076b9f9a9..2e10c743785494 100644 --- a/x-pack/plugins/apm/common/agent_configuration/setting_definitions/java_settings.ts +++ b/x-pack/plugins/apm/common/agent_configuration/setting_definitions/java_settings.ts @@ -20,7 +20,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.enableLogCorrelation.description', { defaultMessage: - "A boolean specifying if the agent should integrate into SLF4J's MDC to enable trace-log correlation. If set to `true`, the agent will set the `trace.id` and `transaction.id` for the currently active spans and transactions to the MDC. While it's allowed to enable this setting at runtime, you can't disable it without a restart." + "A boolean specifying if the agent should integrate into SLF4J's MDC to enable trace-log correlation. If set to `true`, the agent will set the `trace.id` and `transaction.id` for the currently active spans and transactions to the MDC. Since Java agent version 1.16.0, the agent also adds `error.id` of captured error to the MDC just before the error message is logged. NOTE: While it's allowed to enable this setting at runtime, you can't disable it without a restart." } ), includeAgents: ['java'] @@ -41,7 +41,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.circuitBreakerEnabled.description', { defaultMessage: - 'A boolean specifying whether the circuit breaker should be enabled or not. When enabled, the agent periodically polls stress monitors to detect system/process/JVM stress state. If ANY of the monitors detects a stress indication, the agent will become inactive, as if the `active` configuration option has been set to `false`, thus reducing resource consumption to a minimum. When inactive, the agent continues polling the same monitors in order to detect whether the stress state has been relieved. If ALL monitors approve that the system/process/JVM is not under stress anymore, the agent will resume and become fully functional.' + 'A boolean specifying whether the circuit breaker should be enabled or not. When enabled, the agent periodically polls stress monitors to detect system/process/JVM stress state. If ANY of the monitors detects a stress indication, the agent will pause, as if the `recording` configuration option has been set to `false`, thus reducing resource consumption to a minimum. When paused, the agent continues polling the same monitors in order to detect whether the stress state has been relieved. If ALL monitors approve that the system/process/JVM is not under stress anymore, the agent will resume and become fully functional.' } ), includeAgents: ['java'] @@ -52,7 +52,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.stressMonitorGcStressThreshold.label', { defaultMessage: 'Stress monitor gc stress threshold' } ), - type: 'boolean', + type: 'float', category: 'Circuit-Breaker', defaultValue: '0.95', description: i18n.translate( @@ -155,7 +155,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.profilingInferredSpansEnabled.description', { defaultMessage: - 'Set to `true` to make the agent create spans for method executions based on async-profiler, a sampling aka statistical profiler. Due to the nature of how sampling profilers work, the duration of the inferred spans are not exact, but only estimations. The `profiling_inferred_spans_sampling_interval` lets you fine tune the trade-off between accuracy and overhead. The inferred spans are created after a profiling session has ended. This means there is a delay between the regular and the inferred spans being visible in the UI. This feature is not available on Windows' + 'Set to `true` to make the agent create spans for method executions based on async-profiler, a sampling aka statistical profiler. Due to the nature of how sampling profilers work, the duration of the inferred spans are not exact, but only estimations. The `profiling_inferred_spans_sampling_interval` lets you fine tune the trade-off between accuracy and overhead. The inferred spans are created after a profiling session has ended. This means there is a delay between the regular and the inferred spans being visible in the UI. NOTE: This feature is not available on Windows.' } ), includeAgents: ['java'] @@ -209,7 +209,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.profilingInferredSpansIncludedClasses.description', { defaultMessage: - 'If set, the agent will only create inferred spans for methods which match this list. Setting a value may slightly increase performance and can reduce clutter by only creating spans for the classes you are interested in. Example: `org.example.myapp.*` This option supports the wildcard `*`, which matches zero or more characters. Examples: `/foo/*/bar/*/baz*`, `*foo*`. Matching is case insensitive by default. Prepending an element with `(?-i)` makes the matching case sensitive.' + 'If set, the agent will only create inferred spans for methods which match this list. Setting a value may slightly reduce overhead and can reduce clutter by only creating spans for the classes you are interested in. This option supports the wildcard `*`, which matches zero or more characters. Example: `org.example.myapp.*`. Matching is case insensitive by default. Prepending an element with `(?-i)` makes the matching case sensitive.' } ), includeAgents: ['java'] @@ -228,7 +228,7 @@ export const javaSettings: RawSettingDefinition[] = [ 'xpack.apm.agentConfig.profilingInferredSpansExcludedClasses.description', { defaultMessage: - 'Excludes classes for which no profiler-inferred spans should be created. This option supports the wildcard `*`, which matches zero or more characters. Examples: `/foo/*/bar/*/baz*`, `*foo*`. Matching is case insensitive by default. Prepending an element with `(?-i)` makes the matching case sensitive.' + 'Excludes classes for which no profiler-inferred spans should be created. This option supports the wildcard `*`, which matches zero or more characters. Matching is case insensitive by default. Prepending an element with `(?-i)` makes the matching case sensitive.' } ), includeAgents: ['java'] From 0c35762f2702c813dfb74c37bae4364eecfc95c4 Mon Sep 17 00:00:00 2001 From: Brittany Joiner Date: Wed, 8 Apr 2020 18:08:13 -0500 Subject: [PATCH 50/52] Add Error Exception Type Column (#59596) * start of error exception type * width and link * removed extra line * updated snapshot * updated snapshots * updated snapshots * Update snapshots Co-authored-by: Elastic Machine Co-authored-by: Nathan L Smith --- .../__test__/__snapshots__/List.test.tsx.snap | 287 ++++++++++++++++-- .../app/ErrorGroupOverview/List/index.tsx | 36 ++- .../elasticsearch_fieldnames.test.ts.snap | 6 + .../apm/common/elasticsearch_fieldnames.ts | 1 + .../errors/__snapshots__/queries.test.ts.snap | 2 + .../apm/server/lib/errors/get_error_groups.ts | 6 +- 6 files changed, 306 insertions(+), 32 deletions(-) diff --git a/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/__snapshots__/List.test.tsx.snap b/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/__snapshots__/List.test.tsx.snap index 205a303bcf47b0..afa0cb51cd1083 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/__snapshots__/List.test.tsx.snap +++ b/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/__test__/__snapshots__/List.test.tsx.snap @@ -11,6 +11,12 @@ exports[`ErrorGroupOverview -> List should render empty state 1`] = ` "sortable": false, "width": "96px", }, + Object { + "field": "type", + "name": "Type", + "render": [Function], + "sortable": false, + }, Object { "field": "message", "name": "Error message and culprit", @@ -142,7 +148,28 @@ exports[`ErrorGroupOverview -> List should render empty state 1`] = ` +
+ + Type + +
+ + List should render empty state 1`] = ` List should render empty state 1`] = ` aria-live="polite" aria-sort="descending" className="euiTableHeaderCell" - data-test-subj="tableHeaderCell_occurrenceCount_3" + data-test-subj="tableHeaderCell_occurrenceCount_4" role="columnheader" scope="col" style={ @@ -225,7 +252,7 @@ exports[`ErrorGroupOverview -> List should render empty state 1`] = ` aria-live="polite" aria-sort="none" className="euiTableHeaderCell" - data-test-subj="tableHeaderCell_latestOccurrenceAt_4" + data-test-subj="tableHeaderCell_latestOccurrenceAt_5" role="columnheader" scope="col" style={ @@ -264,7 +291,7 @@ exports[`ErrorGroupOverview -> List should render empty state 1`] = ` > List should render with data 1`] = ` font-family: "Roboto Mono",Consolas,Menlo,Courier,monospace; } +.c2 { + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + .c1 { max-width: 100%; white-space: nowrap; @@ -301,7 +335,7 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = ` text-overflow: ellipsis; } -.c2 { +.c3 { font-family: "Roboto Mono",Consolas,Menlo,Courier,monospace; font-size: 16px; max-width: 100%; @@ -310,7 +344,7 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = ` text-overflow: ellipsis; } -.c3 { +.c4 { font-family: "Roboto Mono",Consolas,Menlo,Courier,monospace; } @@ -324,6 +358,12 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = ` "sortable": false, "width": "96px", }, + Object { + "field": "type", + "name": "Type", + "render": [Function], + "sortable": false, + }, Object { "field": "message", "name": "Error message and culprit", @@ -486,7 +526,28 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = ` +
+ + Type + +
+ + List should render with data 1`] = ` List should render with data 1`] = ` aria-live="polite" aria-sort="descending" className="euiTableHeaderCell" - data-test-subj="tableHeaderCell_occurrenceCount_3" + data-test-subj="tableHeaderCell_occurrenceCount_4" role="columnheader" scope="col" style={ @@ -569,7 +630,7 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = ` aria-live="polite" aria-sort="none" className="euiTableHeaderCell" - data-test-subj="tableHeaderCell_latestOccurrenceAt_4" + data-test-subj="tableHeaderCell_latestOccurrenceAt_5" role="columnheader" scope="col" style={ @@ -642,6 +703,49 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = `
+ +
+ Type +
+ + List should render with data 1`] = ` className="" >
List should render with data 1`] = ` serviceName="opbeans-python" > List should render with data 1`] = ` onFocus={[Function]} >
@@ -812,6 +916,49 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = `
+ +
+ Type +
+
+ List should render with data 1`] = ` className="" >
List should render with data 1`] = ` serviceName="opbeans-python" > List should render with data 1`] = ` onFocus={[Function]} >
@@ -982,6 +1129,49 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = `
+ +
+ Type +
+
+ List should render with data 1`] = ` className="" >
List should render with data 1`] = ` serviceName="opbeans-python" > List should render with data 1`] = ` onFocus={[Function]} >
@@ -1152,6 +1342,49 @@ exports[`ErrorGroupOverview -> List should render with data 1`] = `
+ +
+ Type +
+
+ List should render with data 1`] = ` className="" >
List should render with data 1`] = ` serviceName="opbeans-python" > List should render with data 1`] = ` onFocus={[Function]} >
diff --git a/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx b/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx index b26833c02fe22c..250b9a5d188d0e 100644 --- a/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx +++ b/x-pack/legacy/plugins/apm/public/components/app/ErrorGroupOverview/List/index.tsx @@ -23,6 +23,8 @@ import { useUrlParams } from '../../../../hooks/useUrlParams'; import { ManagedTable } from '../../../shared/ManagedTable'; import { ErrorDetailLink } from '../../../shared/Links/apm/ErrorDetailLink'; import { TimestampTooltip } from '../../../shared/TimestampTooltip'; +import { ErrorOverviewLink } from '../../../shared/Links/apm/ErrorOverviewLink'; +import { APMQueryParams } from '../../../shared/Links/url_helpers'; const GroupIdLink = styled(ErrorDetailLink)` font-family: ${fontFamilyCode}; @@ -32,6 +34,10 @@ const MessageAndCulpritCell = styled.div` ${truncate('100%')}; `; +const ErrorLink = styled(ErrorOverviewLink)` + ${truncate('100%')}; +`; + const MessageLink = styled(ErrorDetailLink)` font-family: ${fontFamilyCode}; font-size: ${fontSizes.large}; @@ -48,9 +54,8 @@ interface Props { const ErrorGroupList: React.FC = props => { const { items } = props; - const { - urlParams: { serviceName } - } = useUrlParams(); + const { urlParams } = useUrlParams(); + const { serviceName } = urlParams; if (!serviceName) { throw new Error('Service name is required'); @@ -73,6 +78,29 @@ const ErrorGroupList: React.FC = props => { ); } }, + { + name: i18n.translate('xpack.apm.errorsTable.typeColumnLabel', { + defaultMessage: 'Type' + }), + field: 'type', + sortable: false, + render: (type: string, item: ErrorGroupListAPIResponse[0]) => { + return ( + + {type} + + ); + } + }, { name: i18n.translate( 'xpack.apm.errorsTable.errorMessageAndCulpritColumnLabel', @@ -150,7 +178,7 @@ const ErrorGroupList: React.FC = props => { ) } ], - [serviceName] + [serviceName, urlParams] ); return ( diff --git a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap index 5de82a9ee8788e..54dd4704edfc0a 100644 --- a/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/elasticsearch_fieldnames.test.ts.snap @@ -16,6 +16,8 @@ exports[`Error ERROR_EXC_HANDLED 1`] = `undefined`; exports[`Error ERROR_EXC_MESSAGE 1`] = `undefined`; +exports[`Error ERROR_EXC_TYPE 1`] = `undefined`; + exports[`Error ERROR_GROUP_ID 1`] = `"grouping key"`; exports[`Error ERROR_LOG_LEVEL 1`] = `undefined`; @@ -144,6 +146,8 @@ exports[`Span ERROR_EXC_HANDLED 1`] = `undefined`; exports[`Span ERROR_EXC_MESSAGE 1`] = `undefined`; +exports[`Span ERROR_EXC_TYPE 1`] = `undefined`; + exports[`Span ERROR_GROUP_ID 1`] = `undefined`; exports[`Span ERROR_LOG_LEVEL 1`] = `undefined`; @@ -272,6 +276,8 @@ exports[`Transaction ERROR_EXC_HANDLED 1`] = `undefined`; exports[`Transaction ERROR_EXC_MESSAGE 1`] = `undefined`; +exports[`Transaction ERROR_EXC_TYPE 1`] = `undefined`; + exports[`Transaction ERROR_GROUP_ID 1`] = `undefined`; exports[`Transaction ERROR_LOG_LEVEL 1`] = `undefined`; diff --git a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts index bc1b346f50da78..d5c3f91eb92470 100644 --- a/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts +++ b/x-pack/plugins/apm/common/elasticsearch_fieldnames.ts @@ -60,6 +60,7 @@ export const ERROR_LOG_LEVEL = 'error.log.level'; export const ERROR_LOG_MESSAGE = 'error.log.message'; export const ERROR_EXC_MESSAGE = 'error.exception.message'; // only to be used in es queries, since error.exception is now an array export const ERROR_EXC_HANDLED = 'error.exception.handled'; // only to be used in es queries, since error.exception is now an array +export const ERROR_EXC_TYPE = 'error.exception.type'; export const ERROR_PAGE_URL = 'error.page.url'; // METRICS diff --git a/x-pack/plugins/apm/server/lib/errors/__snapshots__/queries.test.ts.snap b/x-pack/plugins/apm/server/lib/errors/__snapshots__/queries.test.ts.snap index b9ac9d5431700d..982ad558dc91d5 100644 --- a/x-pack/plugins/apm/server/lib/errors/__snapshots__/queries.test.ts.snap +++ b/x-pack/plugins/apm/server/lib/errors/__snapshots__/queries.test.ts.snap @@ -73,6 +73,7 @@ Object { "error.log.message", "error.exception.message", "error.exception.handled", + "error.exception.type", "error.culprit", "error.grouping_key", "@timestamp", @@ -148,6 +149,7 @@ Object { "error.log.message", "error.exception.message", "error.exception.handled", + "error.exception.type", "error.culprit", "error.grouping_key", "@timestamp", diff --git a/x-pack/plugins/apm/server/lib/errors/get_error_groups.ts b/x-pack/plugins/apm/server/lib/errors/get_error_groups.ts index 8ea6df5a9898af..5221d737866f48 100644 --- a/x-pack/plugins/apm/server/lib/errors/get_error_groups.ts +++ b/x-pack/plugins/apm/server/lib/errors/get_error_groups.ts @@ -8,6 +8,7 @@ import { ERROR_CULPRIT, ERROR_EXC_HANDLED, ERROR_EXC_MESSAGE, + ERROR_EXC_TYPE, ERROR_GROUP_ID, ERROR_LOG_MESSAGE } from '../../../common/elasticsearch_fieldnames'; @@ -67,6 +68,7 @@ export async function getErrorGroups({ ERROR_LOG_MESSAGE, ERROR_EXC_MESSAGE, ERROR_EXC_HANDLED, + ERROR_EXC_TYPE, ERROR_CULPRIT, ERROR_GROUP_ID, '@timestamp' @@ -99,6 +101,7 @@ export async function getErrorGroups({ exception?: Array<{ handled?: boolean; message?: string; + type?: string; }>; culprit: APMError['error']['culprit']; grouping_key: APMError['error']['grouping_key']; @@ -120,7 +123,8 @@ export async function getErrorGroups({ culprit: source.error.culprit, groupId: source.error.grouping_key, latestOccurrenceAt: source['@timestamp'], - handled: source.error.exception?.[0].handled + handled: source.error.exception?.[0].handled, + type: source.error.exception?.[0].type }; }); From c643148f3613df41565a25e49b0f8c88fb17876a Mon Sep 17 00:00:00 2001 From: Frank Hassanabad Date: Wed, 8 Apr 2020 17:36:20 -0600 Subject: [PATCH 51/52] [SIEM][Detection Engine] Fix rule notification critical bugs ## Summary Fixes critical bugs found during testing of the rule notification. * Fixes a bug where when you turn on rules quickly such as ML rules you would see these message below. This message can also be seen when you first create a rule with an action notification. This is a race condition with how we update rules multiple times when we really should only update it once and do it before enabling a rule ``` server log [12:18:35.986] [error][alerting][alerting][plugins][plugins] Executing Alert "63b828b5-24b9-4d55-83ee-8a8201fe2d76" has resulted in Error: [security_exception] missing authentication credentials for REST request [/_security/user/_has_privileges], with { header={ WWW-Authenticate={ 0="Bearer realm=\"security\"" & 1="ApiKey" & 2="Basic realm=\"security\" charset=\"UTF-8\"" } } ``` * Fixes a bug where we were using `ruleParams.interval` when we should have been using `ruleAlertSavedObject.attributes.schedule.interval`. When changing rule notifications to run daily, weekly, etc.. you would see this exception being thrown: ``` server log [21:23:08.028] [error][alerting][alerting][plugins][plugins] Executing Alert "fedcccc0-7c69-4e2f-83f8-d8ee88ab5484" has resulted in Error: "from" or "to" was not provided to signals count query ``` * Fixes misc typing issues found * Fixes it to where we no longer make multiple DB calls but rather pass down objects we already have. * Changes the work flow to where we only update, create, or patch the alerting object once which fixes the race condition and improves the backend performance. * Removes left over unused code * Applied https://en.wikipedia.org/wiki/Single-entry_single-exit to functions where it made sense and easier to read. ### Checklist - [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 --- .../legacy/plugins/siem/common/constants.ts | 2 - .../notifications/add_tags.ts | 2 +- .../create_notifications.test.ts | 2 - .../notifications/create_notifications.ts | 5 +- .../rules_notification_alert_type.ts | 4 +- .../detection_engine/notifications/types.ts | 9 ++-- .../update_notifications.test.ts | 9 +--- .../notifications/update_notifications.ts | 27 ++++------ .../routes/rules/create_rules_bulk_route.ts | 1 + .../routes/rules/create_rules_route.ts | 1 + .../routes/rules/import_rules_route.ts | 1 + .../routes/rules/update_rules_bulk_route.ts | 1 + .../routes/rules/update_rules_route.ts | 1 + .../create_rule_actions_saved_object.ts | 8 +-- .../delete_rule_actions_saved_object.ts | 9 ++-- .../get_rule_actions_saved_object.ts | 16 +++--- ...ate_or_create_rule_actions_saved_object.ts | 11 ++-- .../update_rule_actions_saved_object.ts | 15 ++---- .../rules/create_rules.test.ts | 1 + .../detection_engine/rules/create_rules.ts | 4 +- .../rules/install_prepacked_rules.ts | 1 + .../lib/detection_engine/rules/patch_rules.ts | 2 +- .../lib/detection_engine/rules/types.ts | 6 +-- .../rules/update_rule_actions.ts | 54 ------------------- .../rules/update_rules.test.ts | 3 ++ .../detection_engine/rules/update_rules.ts | 6 ++- .../rules/update_rules_notifications.ts | 9 +--- .../lib/detection_engine/signals/types.ts | 7 ++- 28 files changed, 75 insertions(+), 142 deletions(-) delete mode 100644 x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts diff --git a/x-pack/legacy/plugins/siem/common/constants.ts b/x-pack/legacy/plugins/siem/common/constants.ts index 662fb8fb8ef68e..22f1b3beffa35d 100644 --- a/x-pack/legacy/plugins/siem/common/constants.ts +++ b/x-pack/legacy/plugins/siem/common/constants.ts @@ -65,8 +65,6 @@ export const INTERNAL_IDENTIFIER = '__internal'; export const INTERNAL_RULE_ID_KEY = `${INTERNAL_IDENTIFIER}_rule_id`; export const INTERNAL_RULE_ALERT_ID_KEY = `${INTERNAL_IDENTIFIER}_rule_alert_id`; export const INTERNAL_IMMUTABLE_KEY = `${INTERNAL_IDENTIFIER}_immutable`; -export const INTERNAL_NOTIFICATION_ID_KEY = `${INTERNAL_IDENTIFIER}_notification_id`; -export const INTERNAL_NOTIFICATION_RULE_ID_KEY = `${INTERNAL_IDENTIFIER}_notification_rule_id`; /** * Detection engine routes diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/add_tags.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/add_tags.ts index 6955e57d099be3..14b2e1ae9e366c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/add_tags.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/add_tags.ts @@ -6,5 +6,5 @@ import { INTERNAL_RULE_ALERT_ID_KEY } from '../../../../common/constants'; -export const addTags = (tags: string[] = [], ruleAlertId: string): string[] => +export const addTags = (tags: string[], ruleAlertId: string): string[] => Array.from(new Set([...tags, `${INTERNAL_RULE_ALERT_ID_KEY}:${ruleAlertId}`])); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.test.ts index 073251b68f414c..3878f5dae88898 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.test.ts @@ -24,7 +24,6 @@ describe('createNotifications', () => { enabled: true, interval: '', name: '', - tags: [], }); expect(alertsClient.create).toHaveBeenCalledWith( @@ -52,7 +51,6 @@ describe('createNotifications', () => { enabled: true, interval: '', name: '', - tags: [], }); expect(alertsClient.create).toHaveBeenCalledWith( diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.ts index 3a1697f1c8afc6..ccd7576255d83d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/create_notifications.ts @@ -17,12 +17,11 @@ export const createNotifications = async ({ ruleAlertId, interval, name, - tags, }: CreateNotificationParams): Promise => alertsClient.create({ data: { name, - tags: addTags(tags, ruleAlertId), + tags: addTags([], ruleAlertId), alertTypeId: NOTIFICATIONS_ID, consumer: APP_ID, params: { @@ -30,7 +29,7 @@ export const createNotifications = async ({ }, schedule: { interval }, enabled, - actions: actions?.map(transformRuleToAlertAction), + actions: actions.map(transformRuleToAlertAction), throttle: null, }, }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts index ced81098c9f8e5..e4ad53de742d61 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts @@ -45,7 +45,9 @@ export const rulesNotificationAlertType = ({ const ruleParams = { ...ruleAlertParams, name: ruleName, id: ruleAlertSavedObject.id }; const fromInMs = parseScheduleDates( - previousStartedAt ? previousStartedAt.toISOString() : `now-${ruleParams.interval}` + previousStartedAt + ? previousStartedAt.toISOString() + : `now-${ruleAlertSavedObject.attributes.schedule.interval}` )?.format('x'); const toInMs = parseScheduleDates(startedAt.toISOString())?.format('x'); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/types.ts index 128a7965cd7dc5..32a8737adc7c9c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/types.ts @@ -45,10 +45,11 @@ export interface Clients { alertsClient: AlertsClient; } -export type UpdateNotificationParams = Omit & { +export type UpdateNotificationParams = Omit< + NotificationAlertParams, + 'interval' | 'actions' | 'tags' +> & { actions: RuleAlertAction[]; - id?: string; - tags?: string[]; interval: string | null | undefined; ruleAlertId: string; } & Clients; @@ -64,8 +65,6 @@ export interface NotificationAlertParams { ruleAlertId: string; interval: string; name: string; - tags?: string[]; - throttle?: null; } export type CreateNotificationParams = NotificationAlertParams & Clients; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.test.ts index 4c077dd9fc1fb0..e1f7526438c31a 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.test.ts @@ -9,6 +9,7 @@ import { updateNotifications } from './update_notifications'; import { readNotifications } from './read_notifications'; import { createNotifications } from './create_notifications'; import { getNotificationResult } from '../routes/__mocks__/request_responses'; +import { UpdateNotificationParams } from './types'; jest.mock('./read_notifications'); jest.mock('./create_notifications'); @@ -30,7 +31,6 @@ describe('updateNotifications', () => { enabled: true, interval: '10m', name: '', - tags: [], }); expect(alertsClient.update).toHaveBeenCalledWith( @@ -48,14 +48,13 @@ describe('updateNotifications', () => { it('should create a new notification if did not exist', async () => { (readNotifications as jest.Mock).mockResolvedValue(null); - const params = { + const params: UpdateNotificationParams = { alertsClient, actions: [], ruleAlertId: 'new-rule-id', enabled: true, interval: '10m', name: '', - tags: [], }; await updateNotifications(params); @@ -73,7 +72,6 @@ describe('updateNotifications', () => { enabled: true, interval: null, name: '', - tags: [], }); expect(alertsClient.delete).toHaveBeenCalledWith( @@ -98,7 +96,6 @@ describe('updateNotifications', () => { enabled: true, interval: '10m', name: '', - tags: [], }); expect(alertsClient.update).toHaveBeenCalledWith( @@ -125,10 +122,8 @@ describe('updateNotifications', () => { alertsClient, actions: [], enabled: true, - id: notification.id, ruleAlertId, name: notification.name, - tags: notification.tags, interval: null, }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.ts index 3197d21c0e95a7..ac0de406aceb29 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/update_notifications.ts @@ -15,50 +15,41 @@ export const updateNotifications = async ({ alertsClient, actions, enabled, - id, ruleAlertId, name, - tags, interval, }: UpdateNotificationParams): Promise => { - const notification = await readNotifications({ alertsClient, id, ruleAlertId }); + const notification = await readNotifications({ alertsClient, id: undefined, ruleAlertId }); if (interval && notification) { - const result = await alertsClient.update({ + return alertsClient.update({ id: notification.id, data: { - tags: addTags(tags, ruleAlertId), + tags: addTags([], ruleAlertId), name, schedule: { interval, }, - actions: actions?.map(transformRuleToAlertAction), + actions: actions.map(transformRuleToAlertAction), params: { ruleAlertId, }, throttle: null, }, }); - return result; - } - - if (interval && !notification) { - const result = await createNotifications({ + } else if (interval && !notification) { + return createNotifications({ alertsClient, enabled, - tags, name, interval, actions, ruleAlertId, }); - return result; - } - - if (!interval && notification) { + } else if (!interval && notification) { await alertsClient.delete({ id: notification.id }); return null; + } else { + return null; } - - return null; }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_bulk_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_bulk_route.ts index d0e36515946a89..5377e9039785e8 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_bulk_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_bulk_route.ts @@ -144,6 +144,7 @@ export const createRulesBulkRoute = (router: IRouter) => { note, version, lists, + actions: throttle === 'rule' ? actions : [], // Only enable actions if throttle is set to rule, otherwise we are a notification and should not enable it, }); const ruleActions = await updateRulesNotifications({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_route.ts index 6038ad2095323a..9a329b78b8f129 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/create_rules_route.ts @@ -132,6 +132,7 @@ export const createRulesRoute = (router: IRouter): void => { note, version: 1, lists, + actions: throttle === 'rule' ? actions : [], // Only enable actions if throttle is rule, otherwise we are a notification and should not enable it, }); const ruleActions = await updateRulesNotifications({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/import_rules_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/import_rules_route.ts index 43e970702ba72e..29ae5056a3ae8f 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/import_rules_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/import_rules_route.ts @@ -196,6 +196,7 @@ export const importRulesRoute = (router: IRouter, config: LegacyServices['config note, version, lists, + actions: [], // Actions are not imported nor exported at this time }); resolve({ rule_id: ruleId, status_code: 200 }); } else if (rule != null && request.query.overwrite) { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_bulk_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_bulk_route.ts index 9916972f418433..36e15780f5cb3f 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_bulk_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_bulk_route.ts @@ -122,6 +122,7 @@ export const updateRulesBulkRoute = (router: IRouter) => { note, version, lists, + actions, }); if (rule != null) { const ruleActions = await updateRulesNotifications({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_route.ts index 21dd2a4429cca5..0444c757a9b316 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/update_rules_route.ts @@ -118,6 +118,7 @@ export const updateRulesRoute = (router: IRouter) => { note, version, lists, + actions: throttle === 'rule' ? actions : [], // Only enable actions if throttle is rule, otherwise we are a notification and should not enable it }); if (rule != null) { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts index 97cfc1d2d9ea79..991690d901d8ae 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts @@ -9,6 +9,7 @@ import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { ruleActionsSavedObjectType } from './saved_object_mappings'; import { IRuleActionsAttributesSavedObjectAttributes } from './types'; import { getThrottleOptions, getRuleActionsFromSavedObject } from './utils'; +import { RulesActionsSavedObject } from './get_rule_actions_saved_object'; interface CreateRuleActionsSavedObject { ruleAlertId: string; @@ -22,12 +23,7 @@ export const createRuleActionsSavedObject = async ({ savedObjectsClient, actions = [], throttle, -}: CreateRuleActionsSavedObject): Promise<{ - id: string; - actions: RuleAlertAction[]; - alertThrottle: string | null; - ruleThrottle: string; -}> => { +}: CreateRuleActionsSavedObject): Promise => { const ruleActionsSavedObject = await savedObjectsClient.create< IRuleActionsAttributesSavedObjectAttributes >(ruleActionsSavedObjectType, { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts index 864281da5bafd2..91489334940bd1 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts @@ -18,8 +18,9 @@ export const deleteRuleActionsSavedObject = async ({ savedObjectsClient, }: DeleteRuleActionsSavedObject): Promise<{} | null> => { const ruleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); - - if (!ruleActions) return null; - - return savedObjectsClient.delete(ruleActionsSavedObjectType, ruleActions.id); + if (ruleActions != null) { + return savedObjectsClient.delete(ruleActionsSavedObjectType, ruleActions.id); + } else { + return null; + } }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts index 61b544db5a18a4..dad35f6cb1f96e 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts @@ -15,15 +15,17 @@ interface GetRuleActionsSavedObject { savedObjectsClient: AlertServices['savedObjectsClient']; } -export const getRuleActionsSavedObject = async ({ - ruleAlertId, - savedObjectsClient, -}: GetRuleActionsSavedObject): Promise<{ +export interface RulesActionsSavedObject { id: string; actions: RuleAlertAction[]; alertThrottle: string | null; ruleThrottle: string; -} | null> => { +} + +export const getRuleActionsSavedObject = async ({ + ruleAlertId, + savedObjectsClient, +}: GetRuleActionsSavedObject): Promise => { const { saved_objects } = await savedObjectsClient.find< IRuleActionsAttributesSavedObjectAttributes >({ @@ -35,7 +37,7 @@ export const getRuleActionsSavedObject = async ({ if (!saved_objects[0]) { return null; + } else { + return getRuleActionsFromSavedObject(saved_objects[0]); } - - return getRuleActionsFromSavedObject(saved_objects[0]); }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts index adc87150f89a75..d79c61f6200e3d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts @@ -24,16 +24,17 @@ export const updateOrCreateRuleActionsSavedObject = async ({ actions, throttle, }: UpdateOrCreateRuleActionsSavedObject): Promise => { - const currentRuleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); + const ruleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); - if (currentRuleActions) { + if (ruleActions != null) { return updateRuleActionsSavedObject({ ruleAlertId, savedObjectsClient, actions, throttle, - }) as Promise; + ruleActions, + }); + } else { + return createRuleActionsSavedObject({ ruleAlertId, savedObjectsClient, actions, throttle }); } - - return createRuleActionsSavedObject({ ruleAlertId, savedObjectsClient, actions, throttle }); }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts index a15005110c56b1..2a2c84838ed93c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts @@ -6,7 +6,7 @@ import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { ruleActionsSavedObjectType } from './saved_object_mappings'; -import { getRuleActionsSavedObject } from './get_rule_actions_saved_object'; +import { RulesActionsSavedObject } from './get_rule_actions_saved_object'; import { RuleAlertAction } from '../../../../common/detection_engine/types'; import { getThrottleOptions } from './utils'; import { IRuleActionsAttributesSavedObjectAttributes } from './types'; @@ -16,6 +16,7 @@ interface DeleteRuleActionsSavedObject { savedObjectsClient: AlertServices['savedObjectsClient']; actions: RuleAlertAction[] | undefined; throttle: string | null | undefined; + ruleActions: RulesActionsSavedObject; } export const updateRuleActionsSavedObject = async ({ @@ -23,16 +24,8 @@ export const updateRuleActionsSavedObject = async ({ savedObjectsClient, actions, throttle, -}: DeleteRuleActionsSavedObject): Promise<{ - ruleThrottle: string; - alertThrottle: string | null; - actions: RuleAlertAction[]; - id: string; -} | null> => { - const ruleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); - - if (!ruleActions) return null; - + ruleActions, +}: DeleteRuleActionsSavedObject): Promise => { const throttleOptions = throttle ? getThrottleOptions(throttle) : { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.test.ts index 4c8d0f51f251bd..a60f1d41779782 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.test.ts @@ -34,6 +34,7 @@ describe('createRules', () => { interval: '', name: '', tags: [], + actions: [], }); expect(alertsClient.create).toHaveBeenCalledWith( diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.ts index bebf4f350483b6..91effb4741b8b0 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/create_rules.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { transformRuleToAlertAction } from '../../../../common/detection_engine/transform_actions'; import { Alert } from '../../../../../../../plugins/alerting/common'; import { APP_ID, SIGNALS_ID } from '../../../../common/constants'; import { CreateRuleParams } from './types'; @@ -42,6 +43,7 @@ export const createRules = async ({ note, version, lists, + actions, }: CreateRuleParams): Promise => { // TODO: Remove this and use regular lists once the feature is stable for a release const listsParam = hasListsFeature() ? { lists } : {}; @@ -81,7 +83,7 @@ export const createRules = async ({ }, schedule: { interval }, enabled, - actions: [], + actions: actions.map(transformRuleToAlertAction), throttle: null, }, }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/install_prepacked_rules.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/install_prepacked_rules.ts index bcbe460fb6a66c..6d4bacb9cc243c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/install_prepacked_rules.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/install_prepacked_rules.ts @@ -83,6 +83,7 @@ export const installPrepackagedRules = ( note, version, lists, + actions: [], // At this time there is no pre-packaged actions }), ]; }, []); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/patch_rules.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/patch_rules.ts index d7655a15499eb7..5c4889ec5fd683 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/patch_rules.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/patch_rules.ts @@ -120,7 +120,7 @@ export const patchRules = async ({ id: rule.id, data: { tags: addTags(tags ?? rule.tags, rule.params.ruleId, immutable ?? rule.params.immutable), - throttle: rule.throttle, + throttle: null, name: calculateName({ updatedName: name, originalName: rule.name }), schedule: { interval: calculateInterval(interval, rule.schedule.interval), diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/types.ts index 38b1097a845f8b..b1bed5d7161556 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/types.ts @@ -142,12 +142,12 @@ export interface Clients { actionsClient: ActionsClient; } -export type PatchRuleParams = Partial> & { +export type PatchRuleParams = Partial> & { id: string | undefined | null; savedObjectsClient: SavedObjectsClientContract; } & Clients; -export type UpdateRuleParams = Omit & { +export type UpdateRuleParams = Omit & { id: string | undefined | null; savedObjectsClient: SavedObjectsClientContract; } & Clients; @@ -157,7 +157,7 @@ export type DeleteRuleParams = Clients & { ruleId: string | undefined | null; }; -export type CreateRuleParams = Omit & { +export type CreateRuleParams = Omit & { ruleId: string; } & Clients; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts deleted file mode 100644 index e6ee1e6a297643..00000000000000 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts +++ /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 { - AlertsClient, - AlertServices, - PartialAlert, -} from '../../../../../../../plugins/alerting/server'; -import { getRuleActionsSavedObject } from '../rule_actions/get_rule_actions_saved_object'; -import { readRules } from './read_rules'; -import { transformRuleToAlertAction } from '../../../../common/detection_engine/transform_actions'; - -interface UpdateRuleActions { - alertsClient: AlertsClient; - savedObjectsClient: AlertServices['savedObjectsClient']; - ruleAlertId: string; -} - -export const updateRuleActions = async ({ - alertsClient, - savedObjectsClient, - ruleAlertId, -}: UpdateRuleActions): Promise => { - const rule = await readRules({ alertsClient, id: ruleAlertId }); - if (rule == null) { - return null; - } - - const ruleActions = await getRuleActionsSavedObject({ - savedObjectsClient, - ruleAlertId, - }); - - if (!ruleActions) { - return null; - } - - return alertsClient.update({ - id: ruleAlertId, - data: { - actions: !ruleActions.alertThrottle - ? ruleActions.actions.map(transformRuleToAlertAction) - : [], - throttle: null, - name: rule.name, - tags: rule.tags, - schedule: rule.schedule, - params: rule.params, - }, - }); -}; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.test.ts index ca299db6ace50e..72f4cbcbe68e80 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.test.ts @@ -35,6 +35,7 @@ describe('updateRules', () => { interval: '', name: '', tags: [], + actions: [], }); expect(alertsClient.disable).toHaveBeenCalledWith( @@ -61,6 +62,7 @@ describe('updateRules', () => { interval: '', name: '', tags: [], + actions: [], }); expect(alertsClient.enable).toHaveBeenCalledWith( @@ -89,6 +91,7 @@ describe('updateRules', () => { interval: '', name: '', tags: [], + actions: [], }); expect(alertsClient.update).toHaveBeenCalledWith( diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.ts index 0e70e05f4de78c..99326768ed33b9 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { transformRuleToAlertAction } from '../../../../common/detection_engine/transform_actions'; import { PartialAlert } from '../../../../../../../plugins/alerting/server'; import { readRules } from './read_rules'; import { IRuleSavedAttributesSavedObjectAttributes, UpdateRuleParams } from './types'; @@ -46,6 +47,7 @@ export const updateRules = async ({ lists, anomalyThreshold, machineLearningJobId, + actions, }: UpdateRuleParams): Promise => { const rule = await readRules({ alertsClient, ruleId, id }); if (rule == null) { @@ -90,8 +92,8 @@ export const updateRules = async ({ tags: addTags(tags, rule.params.ruleId, rule.params.immutable), name, schedule: { interval }, - actions: rule.actions, - throttle: rule.throttle, + actions: actions.map(transformRuleToAlertAction), + throttle: null, params: { description, ruleId: rule.params.ruleId, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts index bb66a5ee1342f7..994a54048b71a3 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts @@ -8,7 +8,6 @@ import { RuleAlertAction } from '../../../../common/detection_engine/types'; import { AlertsClient, AlertServices } from '../../../../../../../plugins/alerting/server'; import { updateOrCreateRuleActionsSavedObject } from '../rule_actions/update_or_create_rule_actions_saved_object'; import { updateNotifications } from '../notifications/update_notifications'; -import { updateRuleActions } from './update_rule_actions'; import { RuleActions } from '../rule_actions/types'; interface UpdateRulesNotifications { @@ -37,19 +36,13 @@ export const updateRulesNotifications = async ({ throttle, }); - await updateRuleActions({ - alertsClient, - savedObjectsClient, - ruleAlertId, - }); - await updateNotifications({ alertsClient, ruleAlertId, enabled, name, actions: ruleActions.actions, - interval: ruleActions?.alertThrottle, + interval: ruleActions.alertThrottle, }); return ruleActions; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts index d4469351de5442..040e32aa0d360d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts @@ -162,5 +162,10 @@ export interface AlertAttributes { } export interface RuleAlertAttributes extends AlertAttributes { - params: Omit & { ruleId: string }; + params: Omit< + RuleAlertParams, + 'ruleId' | 'name' | 'enabled' | 'interval' | 'tags' | 'actions' | 'throttle' + > & { + ruleId: string; + }; } From 274cb805e1ed5138b0e0cd285aa9d420be5ce2b4 Mon Sep 17 00:00:00 2001 From: "Devin W. Hurley" Date: Wed, 8 Apr 2020 19:58:50 -0400 Subject: [PATCH 52/52] =?UTF-8?q?[SIEM]=20[Detection=20Engine]=20Fixes=20b?= =?UTF-8?q?ug=20when=20notification=20doesn't=E2=80=A6=20(#63013)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Set refresh on bulk create to 'wait_for' when actions are present, so we do not respond until the newly indexed signals are searchable. * set refresh on bulk create to 'wait_for' when actions are present, so we do not respond until the newly indexed signals are searchable * fix types in tests --- .../signals/bulk_create_ml_signals.ts | 3 +- .../signals/search_after_bulk_create.test.ts | 8 +++++ .../signals/search_after_bulk_create.ts | 6 +++- .../signals/signal_rule_alert_type.test.ts | 32 +++++++++++++++++++ .../signals/signal_rule_alert_type.ts | 3 ++ .../signals/single_bulk_create.test.ts | 6 ++++ .../signals/single_bulk_create.ts | 6 ++-- .../siem/server/lib/detection_engine/types.ts | 2 ++ 8 files changed, 62 insertions(+), 4 deletions(-) diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/bulk_create_ml_signals.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/bulk_create_ml_signals.ts index 355041d9efbdb5..ba8938f116fc6b 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/bulk_create_ml_signals.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/bulk_create_ml_signals.ts @@ -10,7 +10,7 @@ import { SearchResponse } from 'elasticsearch'; import { Logger } from '../../../../../../../../src/core/server'; import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { RuleAlertAction } from '../../../../common/detection_engine/types'; -import { RuleTypeParams } from '../types'; +import { RuleTypeParams, RefreshTypes } from '../types'; import { singleBulkCreate, SingleBulkCreateResponse } from './single_bulk_create'; import { AnomalyResults, Anomaly } from '../../machine_learning'; @@ -29,6 +29,7 @@ interface BulkCreateMlSignalsParams { updatedBy: string; interval: string; enabled: boolean; + refresh: RefreshTypes; tags: string[]; throttle: string; } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts index 414270ffcdd5c8..81600b0b8dd9b6 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.test.ts @@ -52,6 +52,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -126,6 +127,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -156,6 +158,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -198,6 +201,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -240,6 +244,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -284,6 +289,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -328,6 +334,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -374,6 +381,7 @@ describe('searchAfterAndBulkCreate', () => { enabled: true, pageSize: 1, filter: undefined, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts index ff81730bc4a72b..3a964cb91fbdb7 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/search_after_bulk_create.ts @@ -6,7 +6,7 @@ import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { RuleAlertAction } from '../../../../common/detection_engine/types'; -import { RuleTypeParams } from '../types'; +import { RuleTypeParams, RefreshTypes } from '../types'; import { Logger } from '../../../../../../../../src/core/server'; import { singleSearchAfter } from './single_search_after'; import { singleBulkCreate } from './single_bulk_create'; @@ -30,6 +30,7 @@ interface SearchAfterAndBulkCreateParams { enabled: boolean; pageSize: number; filter: unknown; + refresh: RefreshTypes; tags: string[]; throttle: string; } @@ -61,6 +62,7 @@ export const searchAfterAndBulkCreate = async ({ interval, enabled, pageSize, + refresh, tags, throttle, }: SearchAfterAndBulkCreateParams): Promise => { @@ -92,6 +94,7 @@ export const searchAfterAndBulkCreate = async ({ updatedBy, interval, enabled, + refresh, tags, throttle, }); @@ -179,6 +182,7 @@ export const searchAfterAndBulkCreate = async ({ updatedBy, interval, enabled, + refresh, tags, throttle, }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts index 3d6f443ce60d61..03fb5832fdf42e 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts @@ -105,6 +105,7 @@ describe('rules_notification_alert_type', () => { }; (ruleStatusServiceFactory as jest.Mock).mockReturnValue(ruleStatusService); (getGapBetweenRuns as jest.Mock).mockReturnValue(moment.duration(0)); + (searchAfterAndBulkCreate as jest.Mock).mockClear(); (searchAfterAndBulkCreate as jest.Mock).mockResolvedValue({ success: true, searchAfterTimes: [], @@ -149,6 +150,37 @@ describe('rules_notification_alert_type', () => { }); }); + it("should set refresh to 'wait_for' when actions are present", async () => { + const ruleAlert = getResult(); + ruleAlert.actions = [ + { + actionTypeId: '.slack', + params: { + message: + 'Rule generated {{state.signals_count}} signals\n\n{{context.rule.name}}\n{{{context.results_link}}}', + }, + group: 'default', + id: '99403909-ca9b-49ba-9d7a-7e5320e68d05', + }, + ]; + + savedObjectsClient.get.mockResolvedValue({ + id: 'id', + type: 'type', + references: [], + attributes: ruleAlert, + }); + await alert.executor(payload); + expect((searchAfterAndBulkCreate as jest.Mock).mock.calls[0][0].refresh).toEqual('wait_for'); + (searchAfterAndBulkCreate as jest.Mock).mockClear(); + }); + + it('should set refresh to false when actions are not present', async () => { + await alert.executor(payload); + expect((searchAfterAndBulkCreate as jest.Mock).mock.calls[0][0].refresh).toEqual(false); + (searchAfterAndBulkCreate as jest.Mock).mockClear(); + }); + it('should call scheduleActions if signalsCount was greater than 0 and rule has actions defined', async () => { const ruleAlert = getResult(); ruleAlert.actions = [ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts index faac4a547fc176..0357f906f8035a 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts @@ -98,6 +98,7 @@ export const signalRulesAlertType = ({ params: ruleParams, } = savedObject.attributes; const updatedAt = savedObject.updated_at ?? ''; + const refresh = actions.length ? 'wait_for' : false; const buildRuleMessage = buildRuleMessageFactory({ id: alertId, ruleId, @@ -181,6 +182,7 @@ export const signalRulesAlertType = ({ updatedAt, interval, enabled, + refresh, tags, }); result.success = success; @@ -241,6 +243,7 @@ export const signalRulesAlertType = ({ interval, enabled, pageSize: searchAfterSize, + refresh, tags, throttle, }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts index 56f061cdfa3ca9..45365b446cbf0e 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.test.ts @@ -159,6 +159,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -192,6 +193,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -217,6 +219,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -243,6 +246,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -271,6 +275,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); @@ -365,6 +370,7 @@ describe('singleBulkCreate', () => { updatedBy: 'elastic', interval: '5m', enabled: true, + refresh: false, tags: ['some fake tag 1', 'some fake tag 2'], throttle: 'no_actions', }); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.ts index 6dd8823b57e4de..fc33d0e15e43fe 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/single_bulk_create.ts @@ -9,7 +9,7 @@ import { performance } from 'perf_hooks'; import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { SignalSearchResponse, BulkResponse } from './types'; import { RuleAlertAction } from '../../../../common/detection_engine/types'; -import { RuleTypeParams } from '../types'; +import { RuleTypeParams, RefreshTypes } from '../types'; import { generateId, makeFloatString } from './utils'; import { buildBulkBody } from './build_bulk_body'; import { Logger } from '../../../../../../../../src/core/server'; @@ -31,6 +31,7 @@ interface SingleBulkCreateParams { enabled: boolean; tags: string[]; throttle: string; + refresh: RefreshTypes; } /** @@ -77,6 +78,7 @@ export const singleBulkCreate = async ({ updatedBy, interval, enabled, + refresh, tags, throttle, }: SingleBulkCreateParams): Promise => { @@ -124,7 +126,7 @@ export const singleBulkCreate = async ({ const start = performance.now(); const response: BulkResponse = await services.callCluster('bulk', { index: signalsIndex, - refresh: false, + refresh, body: bulkBody, }); const end = performance.now(); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts index d3fa98fd73d3a3..035f1b10ff8b2c 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts @@ -149,3 +149,5 @@ export type CallWithRequest, V> = ( params: T, options?: CallAPIOptions ) => Promise; + +export type RefreshTypes = false | 'wait_for';

&%3;cZTYaU}5&3LV*?qDac`_MRlIDB- z0s-nBn181txF5r`G&8bXY5JgX4N3o5mT>Y>x7qyJC6Sx01~t76#R_a+l!0t}FZ&4! zPh}tAYi@PR1mALc7e`fsU*AZ9VxZRjk^~XnM4^cke9A!jt23;J2*~B1dT&{9mX%X1 zsl3En*^QZat|ZU{)td>6rcu85$eA!>#Qtb4$EIbduT|#Q48F2o=F`)nrcYwXB5cUfoVm3Q zY!(NCqOSAlYCp)E2>Ed5M0HcWEnh2)6KFrsOI9i#wRmud9m8~}58fC}Yy@c!CM9Y} z&wF}JzBasn+gyZHNN8xji%%dH&@~!&-2E=Jsryw6-T-*KJiymQU0$#_S2`5h9o zc68`ayDlTS`P?G;-tB(H6HMgR$3yEiYlEQq?(W!--WzNqM3*n{%&6VF;2hFR^mFp= zKca$`2b3bUwG-Gg7pF_8Q#{1PIVS*VL zSERXu*nmfWB#_XMitY5WHfKN0N9+Odhd9XQlU34-CZ~e#ipt8TK@-C6Lu3U6tH9bA z*%KS~`v&_igKOUyvz?CK_?L03M~C+fOtkn2wo5srSo?yKE0(#LB%^Ql!_(AjTGL-> z|HuZtE@%lP;LrgRlat(X@vr-uax%)5bV~}{3O%MQVbDYhk}FE`5Rz2Hx}#r&19V*L zoYdR{$>ovCqi0j2^NEE5!dWKw>J@;n`VE0e`}DXt+U7LW;Qg!h-ZvxaKnZN5@G`!r zwayo%Uqmf>cjtOqe`z!by*yV8^;VQ7l-FM{h6rpF&MhoFZ(MFD#l2TFcOVtnGg3@( z?c(=8tOT*m0eS?7%_qL|e!Er0-1OvnBK6Pw?x$>hQEa@LAmQHUTIb3(X|-E~OUc!I zRNj>`_6lhV>rTM{0rK?nL)wFhY3C3J)V-YUu4!9tK;?9XLPv?^*AXA!$F~fS_=JGR z*q2%=oFW-ykM`r{MWZcCs@x1_zRE5_F%H%fy(Dqc2?L^aCTxZ~Pv%MxYc?U#eRv9O znzb8T_2PGZW`ugJ#NQ6->4L0L%foq+(U}Rjkn{csG%R@1 zF&5UnD~*xcKu+Rpy>Myse(K>)SrQRXe8#X2)PdnAR=!0@^>m3VSJyDACA`59J)JEXr`!kcb^ma+`* zU5JUN*^c^YUA}j0TQe30+wN|QqkTFAA}Giukm+lyB}Z?1{0|JgfM%8s9px3;t4Q5>Ld&7-Jr>DQF zpKNrO&i7Ob?sOY2+)!0kj-nQi=fe2mgAg*x-on&U>j$u1)Z)i%v;{@AsasErBPDsY zz)#J++pd;%t53b!fG$o?+e^;An|&sQ_dIONJ|}Aq@%jddAgRtG4tymrlQcRZsk?|z z>;pesTdzGr8_eO2bw**dl~$T3+bsA4{td|eN;!>G<0Y|GEcTYTb2Enq=%}HAfIj1R zB+nxqkwdj-_!uGXy*sExumXt5Y&)Bd6bGnrh#^aE|a`GI|xZk(x&zP zQ*D~suLrB8i)3{nR5EN2%6#6hFD)YR+xT(+#SptOYm|AE?9K!Q6?av@iFhrA?|WwE z->l5*Sa~>w7$9YdkTa=xP?L;KQY$ZA2TSwA(Qsox33V<~kqt`oIE-J+HBWT77UD$c zlXidzSAc6=dPA`!!6$Ps&2|zdOoF;;ByIc&*Z9l?%o5Uf`+*?$X&P*TdPVl+naVui zWw1{<3L{awPU?H64QEF;Dk@xR4J)5W-4lKmljJ*gYUjA?NpyKXZ-N1uquR)5YHp9V z->JYdxBekv_U^g2-#wQ^C6GmLji3LvgI{SN;=?JPiV7iAtYvpskPsc5s#ihnjkpb_ zHr)2lye80Y8qmm3ITVv{ZCv)-_U-LKc~cQj6Fy}4eW0{iSPWr<^DOOQ>o;!K=Z^?_5lK2Y=xf4xZo6w)5|8J1fanV&!&+J7;9 z42c_?-&(TJfKLreGjSaEg_uO;_PzCp}YLf*&td-rJ zfYC^Opkt$#BXL2=ks<7<=^ywF!ey}|8e%-@l^l)|9D0uDWeiH%1ZXmCRtfUk*#o$ znHk5yNs*B3y$NMxZ%3)@oq3LPWX~h>#4&zP*Y&=xdcQx_@49{a>!ote>-Bm*AJ50U z-|ynXMF_NrL3N&`>QWgsA&uIEwF(oT-(gD@Hf*43e}S)Nu4tmKMX0OQLTmKF26G!b zZQ5MtHvS^xIbJ0tU6eKD_FgjCaqQZOF*Eb1klrmO zZN@%d?fM?#(_Qz}$QHEL>aIy~ccd^Ck?s5J`W_rOZ@BxiifmS;bcUi2Q#XfWXCk=d zL06~ok6j(stIpU1(hyD#W!Zb*1HOoeZPpbQMBhoMI^dCTO(WWMkTPYM|K!0rm4cnp z4*wpEDdIE!!tlLeRTjF->k1KhjH(g9SP|yILLkbAA1v*9dOD&CtI++P5e?~&`-5A8 zX(kTVI2+z?`ceelpA9*LS@C~(IE!fN@9)1FE^`oVBxBuu9$QYb=eN0*>v52FxEr4A z`*8kJwHb7u*P!A}ef+>{&a7EWs;ZCj)Qjq1*8px5{^qEZ&9Ba944yji;B>vd$9U75aqI3X77>1QHidX zTi-4G&b0fRLQ1owau6AXDISWj#x`OZ8%WWYJ5C<%xoJj+Zn@F1d}U>|XPzBz7!?s+ z+GTcZXy$`{%RqE^AUk7tE5ApSy@3@K6hvZ-VGTx}69o9$fig(ps+RuK*8U>8!D7VP z8ONjyt$F9Ki4wQUI_++?H2WP^UBri^?YQgPnuZ%`Dl4A+ugho}Icbk@SoOr-Hm`nWaGJkq zv%T=*#a*3SujYo1Yt3J=0wSnj26wSabqTN$30Gm`v%*i(piGxY-qmq`*XSI5;Oe=< z;MB+)bnsmsr)--B@zBA|fQJ5w0tgfQHf^u`H*!DsO4Q>hfQDx5lJCK7-W6NhS+;#Z ztSL*0MfF5R=3wWp<5Bhln!AhMg^N{UYJ|xQ8fY&Z(FP{e>puQ%vC}IsXN)*3dTIiH zM#T$^_Xc9`qV#_s`5%b}`0>=8iB&(pkH$|oAW=*6%dc|O@q(<<0pzcda zEOqMcExJL9AS7nG-BO3t5|hsrmH3Gt2Ch3H_Dz}at9$8<$=iwf>Uh}F3Xr_PxpwW6 zCQPg{C$Ox?aEurUXUVNi3v0QK4q74@+A?W%w685_NX*izj4m6~k9=!?>(olh?7Qr^ zUGJ*pnd^R;pI_e*KSkj(Btbj6>)I)p{H-HPN%-~K_u#gsyXy`oA@Ah&%W15zL#`-U zu`%aLDHxCndqL9tHtn?0Ve=XCt}deDV8~rFB(+1Sm#NFzj>~(cIAqa*PfNr4pgso3 zvSZl>UZ3wc1CbNeMMPQoI#jjn{s?syX|5y+srBnX10a~kOXCFYo1GiQ)$kQ2?a<|S zgsDpK4+$s+t)5!OE^Vtt8>GpRRLe8l4R$b)II9r+DFw{ zZsUyQ6*pPpJCj_!QG|Es-2*}C>bU2)fiI}TR0bblT^xCaUWA5jHr*ZH+1Y^lE!D=z z(nzh=2kgxuw8s*0=tET|ze!t$Y3#tq6ra7|TofkRk)7s5Xhf6tX_=9i*XNSeA1QB= zS4bHcBnUZS^{`%X|2p*7dq^GLJvPU0zdT*@g~zjfb3s>$nf3Pehy$(HbYF|Z@NWHK zBQ)3-tr&Ce95)c)+3)A;?_1wQkS-OAv)<8Nq`;&s7at#W*H96ys72>-Ka2~yCbwhQ%+EqN#BZa^Gc)|wj4I7F1R%_RYAC|v zo}1$GWN!&`Sn~e6zNx!Ot1N%beEln0kt$IGBtK&Fdd)28st7JZ+3rYm8c$PnCSunf zPxqT0-YnW5*Yt?-+uOL^r()hmp8rxaniz2!zM|N*`hbw_r5x6#<`5pVGIk1{CUAAhKi!Lsw!*Xt)W8 zdq_W*KBqqFpw46<4iwMFC)HG-yyjq~!>M&@IuA0JoRN!j=3u-bZ>}8U znIrqUwj|dfh9n=c*UpeBeo|W$;Tgwo zb_t{o-^7vp;WA?jA7t&s9&$FB^pJwa4U*%EN6|i`-hCk%KcHu#W7_z^Ddm>%u91dQ z_Q4EUL)LS~jSk(FE5;0t0_qR#mH<6#qnjV6R;ux}bYDe>5J}=dBYBm&y3NRqnf{LA zg{q~(S^G;zb-0}#3p5pZs^8ahJKvhMEty?qxnyKC6B84c=e--#l1w^x$QvG6WxtRa zwvzP=+TW!0pxMQQf)&44IkKlxS|Xtx6(4;C5cxfW>V}pvt1x=S&s#@4k-tXJUH)v~ zKHZ<3mD)s#C%S5B95%;n)xj&aRCR_Cy$4ht0WIimHl{LbbfVU-_$=&{ejkr}V!|G9 zz>(ktMikiB9O=St+J4F;*f2cU?;+hq8Q)iE+}oYpm_e0k(>6?)8Qitvf1s5nt2z0= zLa`{9mO;)NahOEm(s^qGRxxlXizsf~b-1v!wo(ts%dnL|kWnYe+2rK-r)7!t9#S@% znw!*=_A>?W4PRQ=`o2qkc9`c|Pp98UNGU&;!PUe<*WL2`%&cQJ61e4o<>v11du2Ni zpaK)nGx;j2HoR`N5~yO`z68iP#|oa&Z!*!&b!~fr0zED4)=z<_zWG~T@iL4;N@3$> zds6qbf9jmv#uJ8#B1|6+2^IHR4z?yO=L@5ZpC_bmYTVK@YE@zOgPggm!ZeT+22(Mr zJ5tT6+_LdnMxc{?MY+pJ@`JAK8sWN;PUjm8#;TSZk=^SRZOhou&Ky|%Ui;GaSELq^ z6_}8j=_qboE8I>(yG4af2QC#whVU%_Y3)Tjrx&t59l)#1T#RxsC35CE5lTxSqmr3* z$)?HMZ)VT6hjM|ckBY3^M!sf)?xeA2__${TH$U?Zt`^F&* zp04`BLf_R|1Sd-DYbSGLp1))psMa7L=eZ;SiN__tNUF}1BQh#GI$Pi2(+Nn4C>%X2 zb4ciczTSyl5CPPHB+S|bHe|oLd(e-2NrS@H`BcAlZ*}gv`WiXv+&t>&jCbDB{%NW< zfOf<^cLfzwTU$H5f|GTdBNZy?MA?i1;IUYW-4m~r{-GhPMj$9;@o=5caDxkL%Z;v5 zrkES%>NsgMe*fS)^P0hL=^)iJc1QMba-Maj&rjxx#+Gx21j z2V|Jn#D_?+(Z1V!wcjq*tnI#Csfliyk(6`Yr*i?F(bkG#CgVg1xa}!oUj4m+=<@lx&~z^ z?KilVJ=ds3j(2Et;&2wePg@%XGa9wsZz*)+L~WzV4!!GM^w`?hmDhQmTP^usoTa|v zJ&R#N4tdrjY#(4Cuu7Aqdf^htIM&fb#m^z}Frm$HLt8t}V~EuRl5kMm(TQ{ORL_-_ zl++L_;oCr#>y8Z*E83U29~yLM2GLa7H*^(kj}Vsm21!jcxzCzxb0hZxFzB<6q6jNR zgO*|<$Pc5Wyx{MD5I8S}IPUA!?nPvyNkdF|feem7xrfX@zf13@L}vtFT%;GiK73X9 zx_-qx#psTg*LL9S_wU~cR^yBC`#AFK!a~j0n!K@@lU$082}WhAadG@{+uI&$>grK+ zvm}oQACm6rd>3^)K*OpY=M<(%@aju*TpQg%N%Z(~3kp9Z1mNq^524@mEo1{0AeQxn z!a}BSIuj=zvp5geRJTv-Ck<*I#)yblse-AA9jEI>^R4jc_hdc|<~1hw1L$^^HZgV9 zseYo%@Kr>Q%(etCDyi)ClO6|^#Ps)5 zyBDYm<`Dg5Tb?~hC^k3O`>;HAu>mi1K5h1iAjUc`oi4(Aa2jo zH;}e{Tgj2B(QNKrUF!>xN~JTKTgi*EX%#8wO~U^McBavv$bdRA>XUkQ23v=}-M?@B zpCyC4oA@8Yx$mE|Jp3(_1m%SwLeO(#1yucs$u46x0b^1oJzTECN$mWvotk9t!xXJS z|5SIGAIao@10H=#f!;(DmvgC;&u!`BH%OG%G6= zvI3!VhkREA(#JbSLce{9CfEpFdN8fVeeY zmcaDJX@dWh*iNv59Pq-$^M61=fEEO3^Gv_t=BFELw;O8zE9b9R42b#d`x)Ye&%4`s zk~UT`GBReK`R!}?$6NWwk4?3g1TGPwfP1mBT@b?e+WxQ(M z3`>tbO+Bz^o5nsA00g-|ui5|jfk&T3HNkWNCF}68gj*IEl1)<`#Kp|8R->HvN67hq zhbaED>;JPMetK&2J+e^bF`Ng@b5jE|&Kc1`9i5t+zV}L`vs0a%>mYW+6CUBY;sJG9 zb}1w^RaKsp(@Z)Mf0(WP(^oAY_hx%+~+S z$S$Z6&`cL)@ZFyEgRa(u*q47Th(OW9e%!pqE%?iqe0@#Z=VIJT?UlmHJ>72J)Tz&A zYZ+Zl6swmcjCv0Jytp;Ayb@N(EA~!?pBJWD*M~;)@$&LUrplIY1(n~{`)OhRxPhME zgI`HIl}PWLt;VP=wQ$Yr;M4H*!klU7J=)V3;eF@7L%yDL%?hsRx*_-cEQnyJ2)Zs5 zhR@qL@y#4(k6|rklvFwfH-#63vZ<+smSF^8haZ*3Fm;0D&Q1dFR}4j<(9Xoe?^})1 z``Ydv9ye`m6Xspr+(JRxwTYnS{pZH|=@k0=UEfnD;A~P&6P@Shc&)NMW?`LBb8u>B zFN8nG$LkqSao(%XpI=v?sNb^s%VP+MD{&6Z)Wm_h{yk&P5Bq5e;emSm?>NK`-IULmu&BRqLpFRV0@MJpP z{J0-{RbK?JzbTx{oc(mfM(t&I#AfydsZ-bG-oCr=xApz)GsII8CU)tm--#xZej%3N z0L}a~wFYueB^_fCgW9^f93!O7EK*cuxu6UZ%SlW*58(3=mYQ`oG|RcccT#R4`8IYI z`+E%atE!&)PNTGq>x}?g^Z@ zmQ%c&Q{tv?Zu$F_K6(_EQAPowBDwT*3ehO?6(4`DK2;DNnGG)N8Ncq2Tb*S=hq=8XulmY z%rTy8O{y_*nlBZ1FWkY?2H%@$=I7>)19YQm-`c(vneBD7w`W%rcD=?7Pi&8j zJn}k0wPm^}B+hu}ONF|fb=7q4r?ABm{rIo-B3XWZ?4M~YFzRG$Yj$Ye-MP5G1(m;d z+@~~~+FFYUDg`;dX|obIP^KrWiqVaWj_3tAiynK`ip-!ZJ5MNc?}80k_Z*cVusK1r12@ayoh2qsF ztjD%q$m#E}er0?w`0}a0_=C@QuKu0~lKqAB6KHuO8cRD_S3&wsYdJgg5NiqZW-tJC zT_dR4CGAT3G|mu`k8|B}OG;AbQC+nb?)SN7N*t)zgeMb{NszPHO(=Vhon^M3rnY9- zO%bN zpC-&G2nYMEnRR0SV?w$SgT0+Bbau+hX+mf`NzNUujZEx8f3uG;rF?El02ck^wfD;h z7(vznNN47&I9~23WtwtXt93RtP0h7|VOr&Yk&d|HSAfvOpt1e~-!MO@m1;&#Pk&3O zLXIIF@PH-&;hR9m2!9j!@)6?%_DXb2ocaTu%#WV}naG-K#hKDl_-CgcVMf3i_1m-V zzyEMqt%>YLzr}WvSi)b^-JRoJuuAu#zPZnV%2G*@k;_J1n^(x(JhoI#)aT-fYjWe0*iVw5 z9A_Pr5|)yZRKi#v@lrKtxp}&SR}^-3n)dsk@bCMdKf*b1bxN;^?79n4lty}_uJ}l! zP53dw_k@jPm$F1Zz%+xGzsae%vFYjPh`B)1%JgP>ZcZ(P@hjNtNyJJB}t90pWTx zMTqj9^!!3Q4MLPfrUe^d)HxjKw14>UO@qV(FujDZ08s8^r^g#$h0^=0eGc26Yn2c8GyOn2teVl0@^4T@5wjC`3Afu9IY~d z@=cmUAXP|=u#j=wqU@`Hk*1p3IYx=}nwn9E!Lj~DEmG~xk6W&^ zU9yc-a_8~TNsvIR6lCcQCL-PvjjQpkz>iMO zA7e-`q9@5IZ$2T3i!AvIo3zO-@S19ZJ|1ZUR@48UusvsD`qv6BdVgbw-Tuh9xH2)5 z60G4#H@Ad4b5rkb94C%w`TRK$)zRI3+Mu@l3;zYQZ63i~7$o`_tiYI#`_rdSV$Ns- zEFRU{%aYR(tLCX6=TwnWxi6CF+i9`$;+&Af;vF?HamY2LfYlW9$GP2JL-Jm^Zf=i> zR^3g@n)Si1xq9_#@+aS(+Em%a#YHv=_D}X@)tF;2#Oe6oH)Z}Fc>ULqLE(k?_@1tE z_(b4!_mo$Z{Gg-A!KR-LIBl+5y*XWBnpgYsr4|=2FHINF<4Cxan4kE>zgWJGjMz!& z{d6NhBJ_Ce{!5$k)(=LZ0ML<*K0Hib+)>dBqA<4`spdhGxh}p-`LgTZra&Z zhpxlzj`#3$n+#byL(T0ft_UjZof;F2OzisWNdt{-u{&h@lpv={ULXVDG z5q-h8-(x(T2bz+x(L6DyqYRA7n&#%_p4oMm-llvW7EJ%F@RSb?FK<`rmwFXKbw@`> z`McrKF~>3XU)LV9v9cj%c1fb2M)%%Y6`7&?mEQn; zR2y4c!MS$5ksvMIKOMPnXTnrxauo{$09(=E@gTw4U*qNK|aWc17mc4G5O+*XO@vBBGY)aPipscAST1?l>_T(2*W zprrcJ4cat^+;ZokN7hE@l-%pT#WmYNO>4b9n)_vNP~Ad4){_D#NqI$nydkyP!jvz# zTH_+T=&$Rx2?x|B8|bc*y8r@xnm&SspWmsgixxfMH+}$G_j{$4;vypPIG6An35S}g z%P@XBGb^iuVr_u+?w!lZ=eicM2ZsNg9CzotbmVON*>=7LG4E{`9uXn-=Sl^A5dKBo zr0E*fy@uMMR3tTY+x5H0&7QW|X-jpta@<8zKt*{CJ|{W$x`oEBr|)#j`3fh^(-}(m zqM|pkwz|15IIPlty^H=j_cMq;OE;N#-sI0adrmU~i1?_5)!69T^10m6A6C72^936x z=jf@SM~^uC$D)Bj*g84IL82B^0^shZ&Ckj-oc&)?>Fj;Oj3yxli8_7I&r z=vYD0AVq)$;RtmaCI5=U%J%*n__mjaB^=$kJ(jyo6Te_Wv`#Y_Q1-EoVbS7xz%r4# zeZirMu@gO4sv(bNm?kv?gB??9I?G{`Z2YgdXfH6pYj-8{#mVRbrJ78_IRMRVB=D$k z+y3YDuCjU|BpG&X?d|1i7wTOV535SwT(z0G>Ut1&499Z*>L0eMd6>W7=F)|->7--k z6gI^L1+jWG(?(8&Fjvx1;W@ctCqU%t;n{Fhe+p@ZJTUVDgQQ~F*N>r*& z7o? z3mFK_%*DLNO&3aq+5owmrEA%9$g|&U{Hcp)|@JrHa*lMq6KTEZgk3EwCp`Cu1&i4fU>F}fxr zjHGyt6(GQra7;kUUqIN0ap6vVfBtlw$tk>RvS`(6{0t*pzO39%e$P2}dV0cUmm>;h7wmN-sdGh)TmM1i z{xVzQvawbZ-Wf{-`(?p*g8NleltXuO%#I#lKzWIg7XI7$`L~FN#oxcUshZr`(?ct$ z#XYdqeep5VA>mpum(HswThH>AQ#QtZV{8&@YLOR&C7ncJJsJr@?8JA%zYGnwmFm!Z z!Rorn+InP?-3-T(`+FwZ2-M1w7}gVD(VI)&dvERZIspIh0(Oz!hE~xr?$s-E;ck6B zJ(8^q|*llRO{KK1XZXo-P2b85tNe!7R zH!YvMhKo*2yei1?RiU~cv+lff8e-t>T`O~V$D%uG;kISMZK?sC0g{2^4lTDPmX3F{ zI4{}L|8Bj_tB;GNO4wG{U5q$T=3IPy!y`qjB}v{#=ZyycRcB8-ccZs%iI<+gMH*V( zjD*}}?vP)+l9Vs==3cf4OKU@Z{wPT`Zj;#B((??&pJrSJ9TJw3!dPml*7nZYcGXGz z*@#6-N`3Q^n27Y|P+UyR zC>wdBI;ZB+VhFRj%@gk&Ce3bLIFq5mU0faVM;Q zZUH-Snf?nBMvOKK|IXu{}(*2#!M5qpVu$r2hk+woA z&rYs)cXTY_9;B~sPfj(ABJ~p|)`o`kFiIYVWd%#0q#bh4bgef!zyFZ#VW*qX5(z}7 zz9;u;pc+0;vg7YZZj=rTor+l=4OyeowI5LYkxsw90)5Dlo&O_txh zMS#_kuO09(?~wt5eN)4C@Sreq`edw=t?infxUsNzGT`~%&VW5sE}D&nIAYEioLIa@`qaJYO$)Cc1j{_4Rqwc_3$vjmmd0W9L`ufUaP&l(0-f5J#4(#`7v< zf1^8o*G4>8TBJ?I-Z(j%jXhzZ*9a>XEW0fEx~F=ix;HHEC+(hp26}Mc<0qU~iTxvh3h_G?H6Z3LmWN^3cI<9UNSPPw zhyuK-c{ZgO4lo#%-Og5@SM)|q{Fs}1kc8Ydt5QD(#JNAk)$pT{xuBW*U*(BKs%uAy z?+%wIh29*8$0gOvl)HPL&VEZ}mqj}TB6Uk8C8b_5>MkX&TuVzxYx|3s?g9}J5mlg4 zXK8I+=PudjAk@##Yw%D=x?*?GseVnF`W$2O2d+E4(A+kU3Ky%@%00>T1hT<2lFxV( zViEn3^Ly`_ta)AK;BDEWc0&c}At8N&c4_17PKupBPR$=z8rKLkv)@@h3N{mZev8!L z?p>>%I?Xg$Udtyzx0Xgi7YN8jGMeAqjhQWJ=OKf=>@!dj&ROyjWmJ09umvf&`>Jjr zcLRk+-w)Uowe!h~OkPfdHD+Yoj!p94(<;*j8T}7~_{Y@+CeQ&6Y7xxzUJ#>AlJu_4 z=_0nNidT8-wMjLMt(}+5x-Ig2zizd00~rmuby8nQSa|%CL4pAw3z>p<@9E};sPWo`f0q^Kxe4d%Xn0G?^M1>rlp ztuOM{#~fI6MD&-l!D5Q6v}ezbgajEF7;I;z4(Np&A#-wblQgiw9)1k;4B17M-L?H``bgopVRcZK7h|5cCYtt-0IN$ya6y+TZ3%&4J1`@@s`wy4KM+vsyfRy z>ay{L?PR3+(8}9Fl5V@w(8imFhEB6yjQfv1y*Qw`w>e1rw`Q*YdMXm;BP6#5NOV z*f|q^PR?PI0)?5Fm>8^26=S!=HE2DOrSmCCx=K<;Y{eN&zfGy4Ef_l}BfutFnU?A8 zoM$971TayB`wG>ccz(rB{ahZtyNh2C)_koX3TveF#@|B zWPwX!q7u(q?9BqYx1{4pV(_t*l^(8I_7&5!yWvgqNQl4yeC~W!Ru(&lnDUq*l3kQt zX;V5K5r3e?(R=8cUZ0Mbf2ExG5+eJA!pYl)c7~i?W))C7~UelTX zg=a-KBt%2(4Rvn&Y7Hn?n9i%Ks=lHVhO|z83fYgviDuzVjE(I}+wo`KqV%DQKe|dk z_Qz#)ma)(q*GAc%x3;!^lX9l87(fh{5`1smvJ)=M;+#!#rv7WwzjGp3F(`3!mriu-mRE_ z_ZhAoIu9M#gXx-{_C>61tb)~q4d;FmDHNMg2yn~SF!n0}=>Y}aF>MKwHf@XAC z@J!N7b|s?S#mC(S2pFH3Y9!0TY8SGgU5%UZUlU{$6c%fpyahFhM!;Z1&cL##wRPP1 z++&)F;`hH<*bihjuRQa>xEdpci?(XsSLg>c4?@e>jW3uA0&Tc7*vX zZ5Szc`Xv-d02~Ey=EKZqR<9XW+JtBwYHJM?V|$bHo54n#)1N44$Z3~FxyD7 z!^!00jbg@B2^mKQ5sZo_y@nZv^5R6QMQM8w{qfRp$GqQ96&-^M9C_#W_xr}kEkClW zJ~-u6RuPx|Ye6JsZF813rt1}CF<}je1}#7uN$xzn4Pdm}83~iR13H?O-=E%BXQ6WR z6S=Kaoyp2h5_>IbOGZ*M@fc42!tAe(gnu6n7c!4Uv?xBcsQ5;hSR>PHN%xxGXDaAh15GMYM3y4N9|XBN$0ovRIV z&UyP**yhpoy$PWqQg``3Ay~hYZTiK0D3%aDvB^InNDFtFq-jH;<<9-OY5V*!0maoc zN%uF=v9ULyP-q$x0L1A48W{K4OXHV;69tN`)45{A-0+)?g zd?XWFE5FW@UZG?>$Ns2KFp`>q+lx$1h@I=%#5TcL->F|GXE%VvisfwQ7Q48(K1rmE zX_v?n9@HE)Z}~XS;`&5Z7U;SPOL%|(%^Z!#=un&ocGBsr$*GaD=^now!BD;~FI+== zb~;HVRYY7|-NGUZR^()}?CP45k|MT&_g>PByAt)>A{!tkY08704dw#qb^kQxvwxCu z0?kiF@xxL4<4ReVg^NpVGb0C?t?K095ChVU{5Nk-kA+oMirGGV2uRY9_4-9pQh3wjv#OeEv29T&E!(57CzS1QfOfc-GNuG z+^^olE;qip_`4VQ?(~T}`uZL1G2HvxB1ig0E-rhEK0q1fNg1=ZbV;M8vYVu+=-oH^ z!@CYy85s)HlT$|(^5WFL#gfl2!gFQ@`)!_#RaoY5s^4^}-$|k5E=i4VRhUqvy1))E zrsb(J8hbpOeS7S3(!Wdk09}ykv&$|VX&apE(a*2!lr`n7Zt2V%#DB8x>EGkU|28;o zJdyYIb{5+_$9*-ss8M$MD-fnvS9<0rUoWPis(ND7m+fj)WF(v5$L*`!+&O)gV;Mi6 z{_@jgHlIBx9K*xHA~HW{aCNH3eVHbHf@EDSY@!N(BHwexK0x!|zaTI~Xy#YPGAUdW z^&VD$d1lZ2Ya6C~ehdCMYD=0+LM<^Vai92RT zR7N*ggowX~Dt%t+y#3M)u8sI^czH{ih7i@VijS1}RXBc>WpUK|Lms6GT6njz;G9W| z6=nf}0!`P1?0I%x-n%bCLT&^s|HSM7WSkQS={JY_hwh(|WtWf@qPq5wSlI*&a+nYu zB)8 z(|Toq8}y^QF_LNFCeEx6!T-8(oSr_({xITu)yrczDwtiL#D7k^pZ4&-U4Z##PykA!1BY$6`NPnFDv*(pvW?3kVJNkJ9wk5bIW^dVY%_>a9%ryg|Uk zn7?x8W&b8a@_Fkp;EpWVCs6a}Y!$G57RS3iejf$>qa<)|7+}k?+#L|3X2cv%C*XOkMc*UOK@_X^T-Hb3U^HF{k?7v;3cPPl53E?S94U$iKBI0`;4G=R`0vtc8Hy z!?yTZ%m1p#4CXzrPzdy^X0?V0)0fh5|L|F-Zp$NF6IWBWrRFK??$PSAHo;7M21l%a zV;BFYBv*2d)#&(FQK#n#jeQylLk7q#)}Mz z*(Ld(*q~vN+1bPZ0uo`X^h~I*`qt!w8hi2c#b=Pes<2-0BTVLE@GB;R{?2#&`(S_f zl3b*!yq(sJKibLfN<>i+Ha#o}TjkBeMWBhPb@i=XPPtEx&(6x_9mn@N zqp(~F9T5q?dPZveFNZ&x@&N0L?87hiCw_OTfx9IbJ%}3~qh6#8^Z%MQ-m-bxWOI_o*m#zt%1OZW4aFUhu^) zgG+TlnPKc0ex3>#8{5aW-GSWAI=-J`)hEY+s^l~l%Ir*g(RbvM5OhexQx^3Ry6ShO zxPCX#p>#tF+3`}!er|Ygm*LP{d2!)vcnd2+a#aJrd{jgGoX|83=t#ol*6xfn+|*Eg zRbOumIK~WSyO2lvr5`HI;%NEqy;D8dpZ8n2WMA_MQi^GW7Ip+RH-@vqy^NeL;g@To z#BD0TXBQ4^L z?DuQa^z_GGnZ4rN;W%O59h(GH25K2X_dbLa-$TA4mGp17E2?$tB!U8!z)nq?VRb09 zj;wX$=4lC=LxSa!0h=)V1_#EwgiL9pZl+p%>ztHu&p#w7dO=917mg)0#al zl45pzum(5-YUvgh6bP{4`<{(;y9>FgSAgW_Q5YYp0tb;G3b!ebTRjB$*JPJnIgxf*=0>QQLSPHw7OIm$z2wM%cG@qIypFdMh< zxLA^*bPZybN5%XDIk2CvW)J?$F8_aH1Na(i`ui2m6rV~8M-ZtbqTE}UEsJ5k(&>yo z6a1b)N?Sq&TQ{d287o%$9zl;fSm!Q2V{<6dx}QxGey;0SRZ+~dkl0h- zuPHJj@9LXUzwy4aB+|4$I%isr{E~D=S*mG2ss}+c9t3b9qmXWnOW`oJg_HUB?pnmb z@Xb1)lWhIWVb-3fqh0@|g>Hz?`X^i|Udu=#rcz*ZxS>2_Q7CRb$4od*3&nOL?5W0RKwK z(geG9cHvLttt4#Ua^=Q(+11ro-p%>d;CdpHlSR_Ez>GH}5Cz3KtZ!s#zhY-spBa)H z=ZZ7){^~z$h71&btsPZeeGjRruU{1n@W7y{=2(^Hvs;twvnb&L0OjpH;gZIgnVBf7 zDcJS0DJKCaq}NeQM68Bx8^rqA)mPj|O7imN)7@F~Gjl35MIM`&ZH#*+vkD4k$Z*h3 zSFeU}MY$+adr1qHB2T+o9*{%IpX78{A!GH_Zfcwujr{=#0sN;&j1WM9a_{^+Zo3NO zrM*1@qeXZ_D4&bKrG*JcHN}mmJVzK)QcBw`MfruZ3S@RiqC5;4ct9)kvs|Cw++@a5l)T!?@=Go&;y$Zy8&u=>v?egm74jz{8iELFK2k0CeOfx8?ZFJ zAfpbCO7intNq>S&Nznjeub8BewH7A7MCrp19WL7mxi24|_q0ZOj_;5HWj<$!LnXEy z49o!9bd>8V(fW)&X2hxr?UDO2$wGSXog%7o3O3mS7{Yf?@N{VSH)jOxrxl{1#pBb% zv}w#EPrX>v;q!(rWx{MN(z{nj4HjJH38auX6&D?h!qSeHL1bJM*V{LG>T0&n>_wo4 zW+pmdi14q_ijpNAA#pv%Iu!;#hPx&3MJd`JeXa3pU>RO|metQY9_7~Ius*$K?ZCj; zx13G$G6pmmwrft415Fqw0x%Dm4BO?O8Dnr-t)o&uQUQ>k-=w;f^k)#?DU*r5Luoz` zvXQFR_n2ZWz-7wj^W~Hx3{3H z(3xWW-~l-g-x^8v+#F;Jnr=X6OU+k3zRpl{ zKErMzSL^u)2Sxu?OQ7U=1*XjAQlNp13S9=fi%U+DQTwu0RaH17goUC!Ej2Y2E<%BX zRBv-GE8lxAFGm=4a>J^4+;cH^aEw>$=1t?e(>_B(8z#YIFiiC7fXK3CK?^I>MmmeY z9RjqBVvL2%?+<^<3(-xSX+Dm~)$%Ei07L#eQ;e0EAxmdJCE4A1U5SJ0EJabe!P*N^ z5lc^}{4Q0vyRWaR9N1Ou_nIAE0$Lik)9`C6o^q{#0f(alOd7*r0f0>O?vRmR?Q+8$ zHZn1BvdT1yu6-9s(UiOEa%i7SVl)l#IM}W78?6K+Bte~>*x?<49yd?Vj=EJ}mQ~od z2)aq%nuh%QrK5Aq4z&@>H7$;r1T_0Gv$5yB`Yh3V;00Ojte*rb8Z;{w_?6kV`Whp3 zH@7=}CQprv2(+1fzL)qMHWTh_BUf`ODl|`$lUtTCJMchPD(ZlQW1w*{qCIhNt5VI> z5z_iP&1bE_XBV-$AG^}9WXzSSGoe2xWr5$-%dUOhU6uG_(ixOZSCdxL!SPc04Dtr; zhiI6|&rORvVpb@G?hFpklI!=;2+fH3xn~MMZ@%DokF+vb*1P0h?n9ULsYx=GGBa zNu8W9L}STSF8TP%?CV{9jiH^Ew8vw6SfhDtPppw6-x2NiN{elWFd-{f`W&;QloY#Q zAHx;j-UDc>wV4ll%-v?!th-tsuP+`PQbTiM*IJwJ|(jI>%$<4lclah1&} zc4<4Fn-nos+BL~kv(ABJnA`oGUc55;ua$6WJ#jJ{sJH8VxoAWS0OtnCGlOz7jzIBGvM8sDo7(TjR5ou7 zr%{zo6;_RkTEg;ff|(znj&k+Oq~KdAY0bd;TRyzU}t9^HCV>&jV(E~$sO$E z6-uo{)9l5DZE83;q#XH*(#LASfFncoD=QDZhV6?VYCG*uiu}(JN@T!yRYr9pkfxD1LH&sd3y3XEvSYS7+AWuM-f9)9<^_ zXK2UO+Ob%iUssQ?e7a-zWJap47Ulj^=yHO80?&v~C&CGfD=T;S;#X!!s_j_#2(Vu% z3|{!3)JPR-dzM$Qc@XQ#J)}_&1Wy1r5D>FlS{(w!IIXfwP@hI)pRZmX(`8LtDLeRs zb^RKADrvF-Vh)f)uJ<+{mWP8_?9LHE9Ac(X_}sa-)0<`8aZUa{<7si4y>+q&xS8S7 z@yZP!eG7Ux6;&_Qi36V=vzfgzt@8JC^!~ov3yA2BqFUR+swxb+uKfVNe7-bo{iaVQS6Po~wJ5h5ZRJbP&Oh!IKO#{+H#Ds@v-&WN)1e}hZ82)$g#Y6)8 zbfqfjh<5lIxnr8RC%44+^nH8C;}z?e8iJ`>21h!ZINy~A50cd#GlV;OM(rz;A8#tS zbVlH7mli%@o!PIpBds?R=bRl3eu!zYc-Fn4b^g?b~%S8F$3YQ=P&DjdxKB`r$R z^dZjgA~NH0^LK}RwkpJrI?r95yGFfS^y$8{qqHNp%abKBb358Hv}aMK#?qe-NWLT` z!8&I2P3@k{%54_9}a~Gu|^&!U$Fk2+OW6RwU{5x6F558Z4aW+ zOlMn7@4ey-N^l6es-_m~(ls-8{CJg}8C-lt`)X&LSqjW0&oNJtMYW0Mj^dwsHY@^! zgx>Gp78NPFRl8!=`|!m(-KT9NA89g^k)bnENz41Mh$c$7!aUW_ojYh&kP|$lOY+iU z=!}=ubgVwOnjls&;&Aw7pr>sR(a_gz212jWnb@QR@~7y~N$6@r9SS7d9;4*^jnqP} zH$B=b_7uA;vBxrl?J99Z8nl=CEJuI8N4_ z=(}h~8pK6gG@&Uua}?7fjlVALiU*i>9ywug@@tBQpz@sLfMNj}SVc$i^LpKqVXbIfOYrHQ%8X2Hu`349}szvEpq+DmcJ!HZ7 z2wG$Z$YhP|&~|w)IJ2ItNfCg{6O;RV@8iVwX(!&9&{}#*61C(coU4&)e1-O4(SFpY zOw+-+j-5QU8|m173X-Si|1d`?^n43l#dsrIz`|u7x;Uab;i6iYTJyj@XzD zQA&jp(X=0IXK=ks95cEjH||?S=9^Xrv0WWtcB*S;T+^`Yxwg+HWf<@>@O92>NX6d4 zEOOaN*3qSeZBO_n;i0!%qkZj~eVc$^NcnR0_|W=$l{B@s{!)cig-3mCqh2izsIA)0 z=T3(yhxPRbvv|jGRH4}a$KIRAL)o_f;}N1F-I9={6qQ0*Gucu^S<1eX-PpIWjU`1z zgpfVivJBamF_wgcu?z-dW{75NGb7tzEZ?io=X)>D^W69S+`qqm|9t=OdKqS3b6(eV zoX2sT$MHVi@1#67rSX1b%XdP?TM|^v3c7~C2z#Cf=&6`$T7Qhuenvi@NDLKc>v+?% z6^mUH15qS&2uf=Q%h)5~XYIGUe-MKxsqhP_M;VxNRp${9y1VSoFQuG^Rqn9gJ=Lxx z$gGxM$~>&fe62=#{w^~E{W*j=1+j}KVlyTt;Mme&NN_#gNE`%$Dpq%pNc%WP%f!M$ zLbw5tu*M%ITYhNYCt8JQwHQ~8l;1Dy%z|n6B5=1w^Z7g z<-T8N`~9^0C%;AM3(AUgmxuMI*GA%yJREalDXAHtdB11Dj5zUwjhL_^XU-qIp%gf$ z-@~ChjcekvN1kH*T7=@|^u^$F^zi3~-eHTy#LP~6fU1YgwRa33q<-a!DApMnZaCzV zUJh=U1bFIPBk7wI6zag`Eq$!@OL7RljRhrz3BwXJvA4xcOy?G7K*sXHt<9%$6|AgZ zazch#073NBA?snk)|O!ylM)1X%>AuZ5q0FWnE9Oce(^;7n^R%k%&f-d4xi5OxU>Rv zOZKHOhsL!{KS6P{(a<1ELA0s1hXz@S6}mo>>G$1^*1|w>wk-S|-}~I@qEiu{pPhB` zgese2TbdmqLxkt(PlX)M2qFRDba)Xt!Uq{ga@WLDr)cjm5puF3X5^MN!(ggdkvDuF zTfOIx`J#HF&#SZ%{9(7aXfF)E`0}eL5YF7{>y}3BDGekYGQQbAe_Op{4Q)lcPb@|p zQ`K-zqnRJ^#ZKA)?8O3*vdo~>_|Gi$OIrZgp>d`j{pDn|z_-3GA^HwsPfQlIG1m*B zh*VfR_2LyN%$Hh|6z9`HXj-Ext{W>iSac((?M17pa0*(bKFjyh5ZUuX#KA7rByhPW zkQ}-gBHp~)#99ODop14w!dm64bn8g+>B-=nN+e?%`CF4RJTio00G%icBLlxzQ=TY3 z|8&XO2pZ|6=PUWyz&mZCg9oLb;ZlFl7WzX;`~SAMlm!^qkJ-CfU1hP5E{QKq?2Kux zsg_?_Uh?j^ZUq1i;oLAya!oxKf_VI=Pr8KLo?>yB9=DD2RXv0k1Gs}V;#QxIWgUHk z<0dE^B+`6y5LD0T=%6;NyPq+{%KJ3^mm-syfA`)_sp@d&?Hqv=3?|@9 zoq4cUcmQp=qqyzsHF!4_TK@- z`*IUd8pC!aUbKRDY!|LJN1-G4%8VN|y&teEW2(gHsC!fl#zNgl9f6gqev_6Q|*DuS-S{3br@i*K; zEm(z2)FXf4$@H9LmBpRsvhYrJ;tYY62*epmox_(qbe8x%GO*zFPOc;zGcQ`8TIQM> zXl0d|BXHW;ciI$Aam@bKmNA-s#RajvwW z3RO;H++A+!j_@8C68VxwG(V%uVgU`MWmu(YqV`*D6=}=IsFX{r9|tBMukmyLq^*Yl zd%Fbm-bXo-lqA9!<$zdo9oN0u*?E!tp**Y`v7K@dXVD!(dCp&YJDxXHJeuG89bAlw z{ft<|ws?z!eBvp12F9T@t!lI^yFvisAo+0#31Tqx2%A>I^VekR@rwH+IOMidHS!)9j4t(2PaN3U7h*J*z+=f@?pK5fcJsFwtzcdS)02LPs^Dac`*i9i0cIN6fw=jf`d&A}8$3<`Z@0O-)QgY}Y26EL$fd`kZ;Sa?TU8{a&s~&D*9F zy=#Bd!x4$>xW{l7;9K?-FD|c|*_87secks)A7qXh7qqV(P0V~N$lY@pdHu&9=wE)d zlK&f74$+^y^g1U;V=^@}1F-W$7IV)#PSnvs_$sGsW#_hL<7y2W3CQ4f zWS*6LkZ2107~70;;N1cXnw(EuFnGemgnV^lgVn#GvUrHE=-fUooj;Fhig(92!omXz zon=M$Ncs?a^5PX244cp-r)ZYF#=W@Ko@-%EDw~r&^*9*;-=?S$fnbLSeSO29ouSL{ zWw}yJ$bM5aR=80Jx9wS}uRr=${FSYJg~eVw1j6(O*;aaned+{}ZZu0eoCc7&Gxg=^ zG)2(?jIOz7{pVG%1X~7rTZ=Z9lAw6hc7}Ghn@vd--iwygoP?bj9`=S9ix%Uz(XH?S z+KrDm{f}Z-R`E6}pbu9AHv9tp$svKkLvX0c-L_jiZ>eNjO|c$5u)7}VvKvRpkKc+_ zwZ6o#PWC$pUFN@1l*4miG52|m zrTSs#O5xtpoO(Ge)h(Q0i=^U69#yhhcTGaEiBaut8=_yoc6gZjHyy6|3r% zEQnO}*gXR%A02f*l+S1VFP%o-ooRq4RKn(4XO+ta&vs|0QBNk^J$Y-Z1!^$_aGAF@ z%xjvsxo2f2Cp(w)WN~?^V@F0#u@_FbgTjywSRLNDY%w_&Whq^8*v!Um~A`-9bPw%6)I z6{B%iOFYmPZVcIYMcJZGxPdh87qsc=URC?8b82!SMk8#TSM?BGdeu z(LZbrtbKgcVbT0=QKS{Zluzp}cFIc&!)0|fVSp>_vKcac!mWisAh^%&NPdDhN4a?H z&gKAg+JtB3&!T2F%FWiS0xr(q+M(vw2OjLN#yOsexOdWcovdE9woJ0?>Ow7xIghR> zKr*fYU53zj_!$A>!E#w+K|yz5){9pJ$ty+9B0HY-cl6!{Nx&*{j<7lKUIjHV?pEwD zE5_CNTb)R_$gi$zF{7viBrpV2`*tNOp zfz!S5p&?D?e&0K*5F*U{$LIH`N{JcnE&WkBwdvbgVT~qT@#4%fOV8ti0YyaYqSw#k zHtRPKNXp&3Me-7i5VPBp^m2;0$31w|NyFHVe@$=Z$7-PP#1U_To|j@?G%-!m(}Q++4$K%l?iTL~gt-NG}29%pnp7VWMrw z^)Re%5MM{0czp~B>SemgzmLxI=c~9H09B@gSOg?3B;~hHneJwtINh6AAZj-{`FJ8M zo-hBSV14(VS$(el>E`W(5!tOP6BPO2`x8!+ZI%KG?$2NRxlE9f!wqp} z&g2gSk~z7L2rUC@ii-AUfVu02CCZ5&f%4YjDcArP`@sw~{xy(%=6COXC@J?ZB5uwg zA@V*EMT589+zg_S+6IR&W9+i9?juu&u#*M(7vNS>z8ROlJZJKOF1i`iI2)YBU%R_oe}Sdy zUj4&bfEEs6Dy;X#9!stSrdnL-IZb z;Xjq6qX;e?Wb7NFJn^Q})Z^t^W4UgQaQv@reY`R_f3lCmkw zeZGO;U!5o@FIUM9w8^zgBXS&Fv%9U5{UGzTM@#GcYd_wvc2KW0Xj#c7G`pPb$Z~Do zgY+|jS+YSlU4?%m>JmEtaRqjl4ujZC7p2cW66~ECs6%cRf&M69^j_>yIx53E%l`aI z#QM4v4KkJE-iYO=cIWI4>_Y3l>}J)0!&QNrE3G*<*G4xiqjjyELJ6^$0W#*x=>5f` zLwn3)z)}0jtGd~v$GUqUS&*ZsZk+sJg?Xd=T+`d|Hcw_LY3W`Cs?vESr8PVF&Alli z7jdtqTPrnryMnI&$3}s@y?sM<@`;DtYzU4>y%z}VQ!H251TAZCD(f*o*~I{aErqeE z^6Mhkw7$B4?e03iuq({hjA4O;+Z4KX#YJEq^()JrPkQpql{*FjCQ;#7z5u};frqRb zAQk7m6A*`}10`I9PyBAR;o79T+Xl8)uxEYv<@GF(TDjlz&6?rDdM&>z3+wh_rhPEo z_0&pK4N65*Gt9kU@|=Oe=%#9@g*tfYp1hoT`>fNc!8kD_Ebx~;So!R?-TK4)uev)F zf4kGa`UU_(c31iE;)$u?)M9q(hbf0E9SFoc_H{JjDMq|;D+K7v*-q*DeqoFXd=eVB zQ-71%MCXj%rN%300w|a6aD|D-1VYu&y0c8%-m=e{eLdDcow6Nv)eCuO}ujg#+Vn(~|TD_rYnJ@B)t*Ie0=2blFmmc4l%;Dad&^kXNN zHHt6Kc`u*P1`KEQN0`4EWl7f(eDj;o5`}cZGFRxD`XyEm;$!Q zU*h}$T47O_P*bxXlEUxe7W>;Q@O#zi#z66gBSD{Sj`W_4rtXIZ>_t6Z+uu`!Pe~3S zg{H|zZ?Kc-gNi;L;oqsp(9Mlu4qW8(D5qXmzm*0T_SXD7(uG33;vq(;DZ{MGhUsbC zZ%2oJ1aUDIIjbiP&TMMRwvqcN&?y_Z8+M_hwNf`uf$-&Z4)1(R9~60jXQc$4QL~m~ zlw#f=63OY^#Ox?WUXp<9p}Tqti`Bf!dr^U%$YQpEO8Pv2M`gcaB1_Y(oEhTd#)duy$ zR<$h&!cU?Qxke&(Y!nuZbjgS_zXc$M?& z%B`@V!@ zXw5mU%rO7@YYSL0kG-{5?hQL7rD3+EAYyv11NN#w-Vbnm0FiTGwkSq_K0K>d0=mw zy9%|;H?{3&4ICR%bN1Fxfy$fTKMLKc_JQ>nS&7#s?^6&5HjOLqMX~n#lob4ZZT~vj zt&wnCw&lQ!x}Y`gnY#{nAOLfN%Qt!Y4kprw@E8jC%8{r%XWhNQJxGEO+oVMuK1k9m zSpg)94QW3sVp?nwEs~)N*G2{UT7DwUymsXKznhl*8vSI#L;S!^(sbkrPp06ITb>6{ z?1E`e;190*Q^ezf?EUlrk+pYwpkpIL5Y&n2>cQ){-!f@KbHhHA#fD^n&blgt>?mP_ z54{(41`>`41bxoByJp^abH9}cApNJDEskUd5*o|%=(B@CisC^;Xy9sbBOMB%lN|zJ zg(;6H0Z}Ib=4Bdx(1XPXGnPdQM7!Kcc~shG5amQ`*wbzEbCUDRJv|!UT{@w2+9(iX z=zgaWdCimUs`=cB3Gg7ah;Q!zI^UGFfD-QYGqSo+k6Q;f?x)AtXTWy(9GZ~5J`DQS z`WHGdlapFHAC1#qX9)!^a6dwiT&gTA@eA^-W@dabV}ZQy2Sv= zH1sSlh9$e`@!icZL|qoGcoQ<<<};PXedd=40^u}f?Q7#j4G-Sp1xLY_`i<*+e;&Kp z&yhtelgd3;q$7vq&(ulniPe%L@l`y5xo{b|G6sQ2iN=dZSe=;8evbQNp~u{$#8}Y zscA1Dyxs|O`rV7qa0YxIMPoS^u}}v}Ll&*MC;})9_MSF#CAWxVddR0EZwxpy3krGz zQa)b+iHBZ)X2W8Z?ae^1t9nT?2Q0U&NNw|R+TA~#vNfWNo-xI zf-zS}F5;~-+?rlks2vOmQuu?HuK>NKW9&9=Otg>y&Q^lxwk?cCi>$N!BGZ6`=1|Q7wL6ihjt$Yo0j>_NiD9JmR zo>wJ_fkhJTi``P)_w2RU6k|bpUATDh>qV|i8_*bNHmGEs+$TBM{mdgwP@OOI-35`0 z69$>y-zpO`GO(~jc+?MZIid*Ji}0PmuuN61AMmy{6a03V9E5rHUDWVidZ3W0v9Wb& ztw>iYo%aKH`ZDDrqYAKIb?B<-4Mt~O>Sns3T4MMX*H!3tN>kV`0{ zHZShhNXY4&3kMCJvO1bG#XF~%=3vM`jC&0)>oM?nwmoRTH zw-U%;$IKr32fO|ExVwZ9~In3$-JmLFr+9J0Zj@f8WF8$se>@G}r%7 z>hpTs!up5oPXknL-9$fmaJ*KGn~NhDaqKOs=5ez>eNN+cp^Vw)kD{DLbjZV@r;0GN z30FMx@d5zQ0iFYdxDue7leOsn=A9i(6$XikG1NpC=2Y+gs5kn$D7~cRM-8F{_SvoN zY!c3umVoD4b&yMb*uz;WYpK*J>hnyXALh@w(}+xnCW{{-!=q27zR}S0scy`}1`NIL z#MMojWAInaX81ZK=&=mv6{pMVIfmbXgM(r7q-()Vtg7{Swx8c}4PL?X7@|`W6HiG^ zkuw%)vOOVN*$LTVqgkWvwI#v+hAU=MHFdR`Fc!P|nwln+fIVAbY3a^&&(*MZ6pL15 z#lgck+1%}`sHJ-chjD}BPNH34Cs2EHuBH?se;9?j(6u{&DFM4I*QNKbYNJ+K){cqv zyBZzdnRNZwS~AJzXqTTx>da^hjU34sY#~=5YMuQZlsSVF*n%^FcAzjQ-k*O6Bm|6s zXf$nq>YRwPSYY4NGcxkl0&U~oGZK&WqOI3qRCtqh)l+$EilW6E6 zn-cDAWDdDiX7ByIfxyHC?3h!W7OCbt!7lB9jj7e=S<9xcqDA!P3JPs@`|%TL-FR!* z`>NqSj17L;N&P(5(3S``JUBEc%XOLHN4#3Gw9${U+s90~TFFkX=~R^BkW0$t#pT`Q z=wLKSB;B@80sa;3_JPw-lNT=^e89S~>G)NPWSEwpX&|qB|U986Sef zDlx-DBF6~*rO9uJL>zJ^to42RPPRm&Hl;-V59ot&6|`-``W7Ar$3$zr@})P9pOCLa^Ld>(sVn5XlX5>NF%2fk>Nd- z(RH7`>`jCEgI-bbgcz|~=%|an`1R^t06lop;pnrk0l#iG!P|@}q1Amb2^jnXMTv&0 z>6p`!#XE2fX(vNNP$#f*8-cv3F(So>+zHa;r=F2BQpR+Nza1=_8)aOd}h0+!lus zwSFzi%~736S`rNn+^R#kxxAd1@hxfTbthv-0zAW`?HN_QCD~RqfzXPd03q#A3HQ(Snqhn(kFEuU`Se3QWckLyJ zy(SaZbrnm4ZCgQW7vp80!e%#W-?N#daS!8$$k`sSa1Z0A8n(5I4;!J-Adzvw`apz% zQAXU^!j8zOy~AeF8$(_$ur+Ye$)W`x1S%ps@(1C*kb>-z>?w?LGlU-@R^t;L+IXrY z@3V5nWhhC$VxzCm*GDVaq`Dk~244{u?~eMB<=kY2tU}5`uhrJ=l=DfWtrh$;EAKlR))(t5o6#JQ1^u(Otl+4wnYOKWp zg+m7rUfBH%Eze4=Xx=^V!$-0cZ4Ubh2a%$*T^7j^{MqWh=DNgJ(UE?=asE?I@5tq( z?;bwn+KIyQwao2m)ZB=k&YNDb)~>8mB@)Gku3!*d$`8u;R*VgEbS5lesY)pa zw-jXs9lu*xq07=CraB$DoA>MM9Y{epXBvd;C*Nq0y#mk$CM{^L7SVxQ)WrVWz@qE1 z$`TQ0IE8au2?Bm^HubSLy-ul)tMb^3{=gY_`PU+7A@llk}tz}mjr|A&ksrLGF4mQL@kJ@qccqkltc44@mJjVkzy|KHPcUJg zs%$x%khaH*aCfMevYdJ2`uND;O|GWbQF+xjBoC(u^lcAwvij3Z4ZL~{h5b0mcYtZ6+v+u>H1+5#l-;VD>=o<2o;OwwFUW1_Lk5W z(x+SH^h@WR_R)2GHx7K?9!S@3$h33 zEli6Pj&$7l(Es4a9zN9F+6Xp~MTb92Si1;ebx6OgZ@s_pk@13je*Xj1!Ga?v-%exB zzHew(M88Zj2uUC%FK~lu1-=E3gKMXoBNOddon$Y#{Ix80E*F2Dle`q|t zw32!1wd!J^fZs$#i>XU>B&tw5p-1>ahSTb~!_MgiCV=W^&zw|7pKhV6oxB_cP@JDcio zRa&4vs9&BpTp&$>XU`0=M_5wZpumX)@%bMY&W3&oRVh+`zzAWjuP{Y)wI*eYU#j`$ z@1fN}D(yX7YA^fNO1Jc@ru`%LmV6O)%P)v}+s8oz^tg`=E!U5#qhzJE+0D>JS)z{~ zNv)8Ah03zTHT!vQ?0Mf8RV^wiNVn9*DK~_PucyKd`!@}rkGYIAHK*CB_VegN=)X5+ zan6^Pl)81gS?HCs3{p4MwCXto1RSZOc-4okA*iu)1%&<_cb$yQ@nKCWi?Am}%7fja z<2!O+4%PAF16^3rOE^=abTbK$Zo4+}_TaSKHH8i?Pe?WdI)eEi*Y3e;2R^ZMf#dUL zcEvYj+@T%(+j2SxWoIY2#do6J-3tEzG~=%jJ!x~hV_VzD@)+{E{463qNS0n?s(i+c z^mMv*bRn70A5(V}~O?APUA)w z*u2gK>HgQy#yMUZhX$>)C03En>b3;^rdhC;bFY-m<}2BBhcI8`3?|=TuxX=(nVR=Y zSA7ZG{`^N7$8_i?C0n&N-kn#noJAc&Ql85-UfVqG=;`Lx)S{>f={uyFuUGI($Uri5 zWN{Yf3DilBF5^65QDH|gO;L%^C7;ckT~DEsZuV}lqvhRmK&!sFNr@+RY;5Gz?wGLu zH^Bq1az~3-QRR`f4jdo+uXuycC@CTZKA(^Y3koX9Pt#^Db-&crwG+2l@30fVV$W7;u=deVFx8ge6c-_(8 z*QGy<9@IMPA_@Tk1Z{B%&Rs~z*<#|I*Xew|?X!&GtGJp15RQf^88(#drhsPEZ}!G9?qFvt~= zjmm?XsJxN;YCP3AZqwN3_hl?)tv+-^w4@|QV3H|;=c5o9`$yX}Nye#D43BX&R` zqcX;6W1(FJ=0t+M#ri>cl*e+i({WGKMXkZ}lf`pb)b8Q5!YoFqrzHK>fu2pH8UHaN zt5x)>4`H1;3NC3oA3RMn@8Y zXf;|^s4Ro|=%w`Gy|F<=i+_ig*3ItDKfA;K0WkQ(jyT?`{Fz~Dk2B&()bufn^mXBD zE(|s4H7NN97nj=W3LU~$WC8pqLxif45yY~B=fmigNgUK`Q%HY&+$_1d=;b$LP*Ctl z$=Dv4ukfpXDGPo5gv3Xt4TM1jC|}6wd1DxcSq2gdQv;|Dz)!wBE=>(CO@jE=+*geh zUx(Q&o#H6uzgL~>;^WFwGv>3%nz*!mbo7&7%T5#2W6&J*;HgWKRZv`{U!l|L6rD10 zi6mXxE#RuqM6#aohwBK-k!$1zq=~Vp?lV3unFLNYsx)T_N4UFL>DCh16r}ryMDGtN zUrrmcwW$UujFKttWK>AsU(PT~1TpSp#PU@Mjh2jW2u}f1_g7}SzGF!9AM47>9;C_H zH1n}-=)7kMmw5{ibo$lC_V!g(FMO2AQsWJ#$0=7C3JAEO7Qbtk!eFun)lkmjEU#RC zvj=yV^Yhyz>NvtrG{q_%JL|iu8#`iK3M;L)@nEHk*T1iGpM$jlTv`mPjes~>xhyTZ ztyts~0W5Q2G^T>~EqOgw1oCPH@qP4hcy+OReB@25!`M(bk&S_cW&g?o)*l)BTozKm zeEI>k#i94>l_%FG-7-D6StF?Z^_ZhO*FV9-A`ykY)i^;Y8aw~vtbbM-@eda9CqD8& z{>xrTe==zo32@TyjDmsLpRxUb&ei@JoT+6{VVRhCa(WjNZ8poQXs9bY+|bqER8LP& z*?5v0pVJ*jXBg@(aPNJS5=iDtAnz+JXJ?ba>H5>eu@&FaVt?}4F5Rx|TD{v<#eKN( zal2ACFrznV>OHKm5UDU6yRHvuD57K4^|&OKpv!mGH&{D)FMCXK&^dCVWfq1ZUv9vn zT3FZF4mG*y*lcFYT>s!~yOGXw>gcgQX&NyzaK5_{tb6)*aKXP_=flhF*XgK0qb}`M z@x8BrDhR*}KB;9uXc(7smZlpkxuTbhs4fZqQ2i!5^J%4I zNp7@7?@{7~I-k}c%&T8GrXZh4JmYoU4kZgBZ*AAIQqP!8Ae!G-)f=!n?O4|dcpjnG zGq3{jJaviFLNB!V)r=1T%*tK;_=UWsW*o7@fE04oQqNL7>Nn8euLuAC9K8R1TLFND zUHV*(WM59J^p?0)%crNf-u^9s$D*6ZPNa`K|7uU2bwN182RCT_i6lH% zZnMxA8*6!@xxA%aEKf2>bs6`r$uL{{xz4Tpm$0{LNWQ*tp{7J8hiOK*iKZPT=eruTh@sj@ff+JRruEVB00_rD- zwHHN1G_s4yuHG3{4kT0Fr=+z{eP=l7xwF|$8W>0qpFPjKZ0&T(gu*;s^FU8)%2`7= z0A|ouJ32O+HrU*<`lP<8X$NTy4PN2?Bvse(G~)=WncunivPuWZbi1W-Lf{=6bR=>j zsm;FjB^(84Crq&&F-lZjBCMK4!6BYFiJ~cH305!NUUuWc1Z{KbXbi3HJ zwzzaZav11|Fj7}vYD$hM95*+z@+eA92OTRjfh*46YKn`fYcLM8rwCUML^|VU!EWGV zRV8db(NA9r&PMy|o4S<1Bf=L+-1{K82Fa&q?%i848b4t$(_C05BiJnP*x)da!Z>MZ z)zrW$qXjqSF^G1UzBxP{tkdpiVOcr@Mu9Ayx?`+i&CSEU%O4WHeY3^6w(&pZLkhU!Dt$40n9|$aJAdC&Q&gvRe~g++u+lywvXo z`-O``v`08IbD5=)t%LmW1@oydJ;ip0jH9+iZSq?Pydc!r-f| zt?dO_SvY2Bj$juPRZuGr0p>+b%1vs%!lM$T1pz#J1bTG)@cKgClaK(A<$Tt$%);C` zfGhKbG+L#EWmV)eO%;p0rJx{B=aN;_)HG&Xlg1ua^*KXxVKLVRT5(@z=_pYOk*%k7 zH&EI?ebY)qXYB|+>qjpCMl0*&_Fbw~*vtExBzeEgY$eu^V6=dX!eKsvI8uD?Kr(A* zfq&S>RGCG6JJXmSmd79R@)hP_pAkk75MrEN)sk!ZY#5H#=ALX9>X)1JakcDaCA6lw z%+&Pt9e4CJ<`RzQsHBi03C7 zmT=&P>UM@#MyaWqW~r|o4PDY7d_gY!5KNP+V|@I;G5W`|+5G&PDHyUW*VDt^vm%`7 z-I~_NakIA54U z^`Ks-=$D_Kcop&lR7qZ$ekiH}o;OzQA)Sn3&Uq%^3x#4S9Yk&|jGY7D^| zvDTHUzi;Hd-H;KrltoZrb2NW^`+adNg<_kRyc$`X9h>yP7(VFhJ~%r+>3b74EZ~B$ zAPRh0^K`Yc^576TrI|fp1aqmV(1U%eu<=!py? z8`s?7OP(LsI9bs8DaGbFNlBcZeDheIKlB&>ExiBvOLi0beP3rgl2IGZX>>D1#)^^f zsqE@d328Es;}<&%`)4E4(wc?E`wvtFFW#Imv?I^YzaFcTS&*pUV@10pFYVU=Z8i=$ zWb#y||Iih(n}bEV3|i2yIn5!P!2-MW>B+lUgpl->Lg4Tn$_Mujc^!A{x;%`$te0Fh?_#K&wJgHH=I7lIGe)Y94@r-P<2O@3WCB-*-;LViB+l5G27uckuD zkuWW;prI*c6Nb8;hd}hVIAHq0N@`X#!dVb;!sOXOC3UT|8;t>98*Q$8B(kxKpN_E9 zn;^7q@1V? z4P0n1ca##N==7n;j z0OF56FXbajtt#(seHH+2{&R!;!%;c>@@InRTO%|4Q>H(>*@pA2T&_gf60ephZ^(-! z8@b7+4FNAC&u!Li`kR%QbfA|9p}^jZorS<#s)BnR-c)b%-zCgt@U45c8ETbLjq4LEV!U)VxRRUBWL~1 zg`RsN9XI6kQ-0@0@nopOI;1=g9N>QC2EZOSKA&>1@11<Tg_oDq2&hCR+3D@c-Hd2+tZ6pBsm;*!UKyC2{;BTrI@rgj+N=@)&()qk zcMhlTr}L&S)^~{bdyD$Fc=hjDCBW45kxnSdNA{ri-u*XSg%^rp9*N0IUoVP-v>s_m zQ{Ut>tRXzipDs(le`l(cFlCU*s!Uj}rj~Ca3j1roM|v-T^Mt3%iFZ4e87A|VIls=F zXJ@4E>FE)kBg3_Tbl3g+k}ao#0_^?tDWB*6?U_nMG1Pb$!oIo3X&hFsB;-t$ozej6 zU8^NQmrKj4m2Br<-#o>jrr*|x^A(xIU@nRw(Oz~vRjfiyR<36woY)7K27+1DIJAG*ggE_5WU&R?UUf4gVTUFk%u z^W%fm$qfx`8d`CwPq%!XUEPz%>e%!~5qBpiCxvLr;~)mL1m*S7a=yDF(H4BO^mA!l zTP%bXHDf`5)v${zHtEOgF}vPtGD*dHFZ+UfjcNRPc(A;ZP;*8{OCUYDLmSETPftH; z)!};mGQz@!j~|0B)Cn1Wo0X12xs5qp;4la9z5V*W9uWD&w=w-;ovg&{s%s2gDdE=!C(@iD<#66|L?3_t zzV@0WWH*l2jF_Frtr!uG_nNdBCP^&>>lE`{vVAN)<&M)yFQf=%*++SZtNY()m{K3h zf&JOZ_diksz=Ox$pbKmJ(81)MbqY{~s_*VfZ-cR5UD$he@w-l(kP>`cm0llNEjFBK z=fRf&^V>n#g*=Vjw6MO;Q35a8Ms4ynEUD(zTd1Qt`l52Uur zTTxO07#p(rCrZP^kkE+@=9A33d_=hD>k4nU|9n+elYH30-7jn>mfYDr1q|I~exKm~ zga7-JI3sbIA@k)jPtz;Ob|o$PN%nVvIQJ_};BSVd8sI~NirmMJ^j{a0=%bg>1(yo} zwM@4RPq?LH9mk6(R}83cqY%x#uxXf;=Qi{%KTv<2DM35g} z!0ngE(6h0fj5x=>;x{#n_aoEp`D86f6OYw{Ws{KLe)E{2G3Ew!3^y_0pV|!5wRi1G zBKlxea;4Ys$-HDYzh<>bl9CL=8E8Vj%32jYLs@u~(}v6NT#ltW&kic%{MM5?VLNbn zqa5qrO>`zwTlG+c$}zbJv%P18(r@JuZFY_(=~OfLg8Ac|?Fud08(^UGofUnH=$EUH zLtiaO7quc?qsx(?R5?+U*U&hy+*uRi+kd{?>8DfBb|Kgex7%S^$@$O|EzHyJWIrEe zf9_AmK}H4SupUkicY_yC@pIYAC;QIFQ{=0&G~Z)i%&H4M09Juy!K8x+%pK|ur<$~G z8xW5*KrDl8CNGq#2)<+tnek`z{IncFxt^C46&~!H4T<|pg`MBr!2gbP3m&J}X4f#{ zlyJSGg}GyWrmh{(muh2n`ht+uSeqUaOpe!~)fcX8JnS7bXQhu!TIB5Xn4- zkN_ANpd1S>UZZCCAQnvh5~BDNDiH{FXj_gzu>U7cRJK{?93=Vk|Ill=B=F>y+oL1 zX;7z$hR^=f3IucMq4xZb-c>gk%9KAYX?EXiSAP3H)fXHv^>}vwTBRDpd!ul$=vE^z z8Z-5*^6#$TKep6KF=YvfPde=I|J6=tJH)U{b>VLNboK9uqyO$3lp7eB8=~(gZv2_k z`3HYHt{EOqd$(o$59O5qebisjoStE-<6=+HzvTx1^d-|puPXW%N7g>MC2>Rbw)zxx{bEx&x)G=dOwu~-!lTfbA7>v_)iV! zU)~one^PLoUxAn|^f!u2zb^Gp?&*2c@bLe4@&E71|C?3*_m}^_oBi|nY}N1g{(9^G zo3Wpf2T1l$7ni%ejw(FuETsetm#fxaANyY~+$O=YyHNpQMWu`%rymk|oscbjm!rEk zUxULg+O7W0<)oPRC(eC2$>Dk8$)~@ea{ZT`Nyo4wq-$y^%KNp1R?WQj+rTOFoknFX zx2&t%J7%=C)hEw>GR?e++{BB1HMj$Kg1!5P4*f$%0?3w>8S4qxZfN;)HkvpmW~W@} z(O^kr7m$5BT6LA4nc<{yvoDMf1n&AQsK@>6e}Y2W{ON!o^8MBR`rhwE$Lt$TC+uDa z3xK|SH#z$^UgBRaEaC&_CD@1B89=r{F74Jib>UNX8fvCDW;Q=S?|M$FULL&uM${4e zzv1c5^R{o|sb6C%noph!mb?L1X@lBLOmHK43!%btdbyl3ILB$A2vV{rZfpzc5IxqX$PGqjR!Tr0g&@oy>yM zoGVAB-0o758c#hDYR84x`RRx}KKvckhGRfP-2*gd9iSurg!fN^!z?fN{ZsaE_6>TT zO;k=7GCbJ((e06pL*Z?@N9E9&jmz|Aj`q~Hgj>K7;3JFYt7oqgInPP3M*s?L6V%M1 z@u8>TG-b={SN~9C`;hc1r_ajKt6rOax+8@lA77Gj8^`X> zn#Zdm1j+;=oH#zBQyROP{I0%`VUFX9IC<(rF|67wz6;br=5A4X&0GuBR2W zPP!Q!+cwYne4%d1qPG!}5pfb&&uO~y+K&=dzc4UeVuw*cEDa}C7&{*S(*$ZrWEv*O z2UQ<9DI`%vUzoD~g?z~De^YDgrws2&3YX}pCxZa$53jHT>JoFV>I*%# z^}k+U#E_6R-Y1=!Jv8=n&>w-Y(CqzsJDWG_w3`CQ?Z*;y|8RQ(_VifFI$tAizL%Rd z?Xu|ac^>n*ca)p`!8$a4sn1t!y?jIR1@yJFU_W_LuEAi5IjLNL(5B|s{Hphwz|{Af z_4S%}YZAZw!>|2mIl7+|T;G)aPFpVcG@NA24OI{ol9|R$P6{uL!ICDMcGw-Sde$&a z8^J7vxVaZ@w0zVBDAnm5rzhS48#fft9@IB9oUr@?P)8)DrCqM9%=@NxC{i)h@L$r{ zfBNuLMcESocut*+Nu_szlx+RI$G4vV4D#z5D#X#36hK52P&YsIB1UKqC(>Z);Ns-; z`fCZGr+$6k87=ygMnRY;j8Pdt?2(^;Cr!ppGe@B)JuoRLak)ygPu|y}CW7UI zMd00MS848z3$7nEOG--I8Wb*He+ba3F2}Rg*F(mg`@b3)8M_xPlCLC@HE*nW&8XbiS^m|?TOV_KEi*IP z*u(|-r*gm3DgV06|B0jXG0Ffrc^}T+YJ2~L&O+}pKx-L4zJ1_@SB0h@s4FRAk*&Z; zXAZ$p_^);Wz@GfP;V2oP;29p7y87Y;OWo06S695`){nx+w2|T@t-+vY7SZM4Pfvd& zK$*_FP~-uP7?qMMTD6;#rn1cCAH8gt2{6srPjLSApXgM$--+y0I^P-S~ z#ZRg9YX+rF-3`6RN0kAUB%qh5z1SBDaU%(r;UAOf-$jtT*Y0X2E-*aQ*S{mZTCQu6 zy%b2AEYadT0Q$;ed7!3S0y}G1`^a1W-;?PxLI5k2r-!u4+!c;@uU@@K&=3xv%JGEz zDEg+ofB&LtNyQv1RM@B}DXgxC{(b2-i`h5WXF>c))g`J&^B785zjJ_m6-2fx@-@mL^ z_!io`xb*m;td*&0I-rilbQa>`;?lNuRIf4&5KX0^xIMH4Ba*4R(&g;XnK|!nP*?E<=8L~%wxQc z3|{^E1WmdcOsR$coSmnuKA0&y;OL+H+}+(UV=H10lEn;6om}4~}ay8DLcwO@T z{jeeHK;MYw%!|Y3G55T^69G~o%*T+s_62jq@2mk9w$OHIFj~{?Rq+@u@LiAa$86`@ zBoo5f^&;DFrf(>%QU5(>Nj}aJt-DlBJr>K-AE|Fr(%$)|0{AkjHSh`V@dpO{NO;dF<|NsAA zj+IcU6p2zwIUi#&B}5LDoDGE`hdIufq>_Xphhd129CK!7q;j6KIc+0nv(0ISVc%z; z&-?ZMe15;n=l!3*Y-Z2L<9@i^uD6WP5hH^)(uLBM@!tZKPN&pebab2puJ_@wm=z@Q ziGt0s-*YHXAQo}0iyTh#ukpV2>fEUBZ|#KinVX{^KfOn9>(9k%Y#zDyq#51RMCdGV z`og_?+_}%Ps0D{Z_?`0PT`Cm*;o8;FQIj;1n8+c#HDVV6vUp-afR5~>c(w^6 zM(k|It2Mr#o3=9G@1y^5v~(^4M>M}K-Bi_Feans+>QJV}TBO>*$0@TqVnuDQpeA?C zr}qF;mqVBqsfx{X$8{h@U~Kp=btU2QK7;b5rpB<8i5CW}s)XZ{XN(tJVvoiENF6QE z!OIP7LSk4* z|9wy1%V{?5z0F^4)!Q3x5$4s>>)zk};wbR+M`W|`GD(jD>1f_rm_J_oT3q(s_xG~> zBYO1h02gv?5?y`!3mt&~;sP3u{{7UefBAzrN-ke424u@5yWGgQ2XZEp)wG4Pym!n_ zUlrxzx*L9CXSiY5^l9bM#Fx)E6(GTDXU?7-e-YgGnp5R*(a+#?QvqVYOf0~~4(EIU zn3DMjy*0ygn0>f~MmxGwf+$C-$u1uWd}=}kS9E*^a9 z)|Qfw)g$ijoRk#UWS@JA;(uC1~{d|!i_Q|X;2P5QHv+>~OmJ#x7p zTd2U6W09S0mod55M&vl*+*CUHM9~%<6nlGXdk}8!)Q81jn5~lDGu$|i?p{8&6N{+k zc%xh6dt_$y(DTnw0hS}14@7cUD2C_ME<}vq5*#|?qKJ9nVsEU$ItJ;5L800jb@<>} zFE3yrnFY9oi`U}LlFdKYejtx;j#QYKnAEU@0=FSb5~(aHX;4vV;7pi=exo-BNA0ki zT$`Jl+iE4v&qGm#pFW+|Rjd^qZaZE{T!S(jYD|hu+1b|p(u0n-jPKG&c{L+uA8iXr zkmJAOg<(!6MUGt|NtPLofEmh7T_(Od$@E5#S50m8m@dKsAs0B{;Nt8oQ`-z#==NaU z8O%3O?E2ZYex|F$$}AkYGXcYpk9Wr4&Cr=KF)?`BqDDmFN&@2Jc^Pcrvp>vrnJ+L%hkCpQ@UVk` z2p0XG3g?~8Xe=ka+e0( z9N|Wlj~-onHG$-7|3{^MuSz3E+FmXJZz?AtwW>L6BFAE3AEK(1<5P z_NRQ0G&=)y{pZRh9a4~j(HTBIKJUyX{Uf-8O-HNlNR8_e(R|0|viIo;{I-FjLlTh} zv(nO@sSYqI-bO+YHvS#Dx&wCaSa|cV{%lKsTzk6k;`^sn(t?iwU0O-b;c)=Dz&C3k zFjVjLqjqin@@MWR*_t<&_s+EV-D-Ox#cy1B`;?`%TSlnpOol7|T1l17)#~>9L?URiK%w3aiT`mArn*-r?gzvs+J{ya4$q>8=c;|0zvybs8#vQ_9vMRb z*!6$fF37xN^JtorUSFA9a9@i%FR!HJAG2q8F<_Ah^hq~xw)C#Iw-R`a4Q30mH{d~0 zSX-OGXhF~L-Lb$>o;ugm@PoaSxeb6)Sxp*wkgzl08AYy5isT(PI@Tj36Ire5bCaY( zpM(L7@3iY}`%{Z{m1AB45yP>7 znWY@|#4P}3Vf^(fR^Fd}2V&D|5OWso6mJ_d>{dN@Hb>}e&FHfY3fHFBdsDjqH~@th zu>Wd5;a;1d$*a;A0=K!w*UgXroEC&x{c*EmJ4V`(JWiY6*isk+-kZY~&qNn|!X57} zTf)N}nV_bDijwOF=hc;MO^dA^vq&oH%k7$ZWgAO(2|kz|sQgM8=q8is6f>8^UN%v% zkm1)Lo;fH6MDQR&Hv0?a&#u@;n}%mS-J*XL<>f&m!sU}dV-PSBEa0*uAwT9)tKK9i+`#q|e(1&(T0gd5ZrG^lLLu%{$E_?N08 z;=A-J7Db%^%`JX>p10h}3mV-+$`YGk!(P(T0S0kkin-8V5cH9Vp--n(R{A1mr^D5r zFPPVR`@L1s`euM#b{Q<3b=>f80T}OOS^S#Y6>IVKUin1OYz>H-2q;v&*Q47yixFa+V~G0UUZdwd3y-AH>-iD^ z`{aj3$IfAJfMHgKnVG-s-oV&-Pce2hNxDtnV+myDGTHy$?LnvBe%4S1I^o$6j^Nq&yqlIi z4KMjos&=OOalI7DU7$Ei#V4Qf;0H)@vbE(0xgoY`@~#=)k64|O3%{|dgq+{Z^j)d! ziTX`=fx?#A{&rqPyB5h|x*JOhzR?IfU(enX`-cT^?ti9B|9jjX(GNs(yK>h$L7|;9 z@#@at0trdUMBxkJ-)@7MSAi=4%p=fnks>Pe(^u( zM&2>&0A>QglO+Ir<(^d2=5u;ikkdSXzrM+=qh8wSa&KBrzy>Tl!YCtP5*f#W1mZ@@ zeaiDq=9n~U+sc=$to_Ot79)tM)xR78R>EPvZaxSlGg$c3--g6Gphe|yB5lJ9nQwsU z?UxpVZSVIS-jMjq^l4`!4bP_8LM}z;AJQuapk0~CV1ln}t*()p8ZK@yRGs#TkBrww zVZS`xmhWxqW1C6g)PD?i7iex;eix(3F|6!%Jvl~dC-10!h+uhRW(q@iFU2}=N9*tm zW8+Hw#sgQ#yzxe!pOFDrhgvf8rip-6V-9$fol!Fi$1EIH0U8K5$6sDsTrR{BUlg|9 zzlMoey8jtG?t7lQj_#)p`5jD&zrFVX*kMNrhyC#|0zs?;`jh6dHF%6uKkgT`6r&C8 zCD@pamAE)XXYH*_dbE8LI=R_UN9$GY1S;b4r~GPdK)taW`YQ{DHvS7h^dOC#^q*AG zIas5E99#z@Uj8GNvA41#Y)Ch7enqZ4v$vlsZ{_i3r3n1IIz>4p`$FS>M2;>W-o?^Q z!Q2XH|GitJOBa=NnI6L!UfROiwJh0iC&;9|j`P0N2H;R9)m#+%4((B$*nxnWnOn+c z=@@0+BdS?()|e)9EPCqHhO(}mh%J4=kuL}*Og@bQsDM${oB&=o<;8(y=t2hPTml!i z+(LE#!qnel3bSi4+RuL+^V+8ORq9h z7a5b#y=^b=U6*UAaZfD{Z!A+Ea(@eFE^0c~Lf{_+JsMiWv`@$wFYxWZUtaF&t=#ZO zmNLF%K{DX$Ufz9&gF7JM;q4(!XHrkDG#u|e`7nYqm#EXHRfKc~LNG3F+C1?$jTo_# z?z_wNGmYu_oV4gnRWf!&mjy9q8@+PC<2Ojl4Lu7;f_u*S>Eeko)AB$L)l$!pr+qSY zZ%V5lcbeITO4^1M+TJRbJxmf1?4!C^0m1bH9+b;d?f_${_RM(9yLbA-Yq}Ln`RVV< zI_txwN_Gi$H)3uXfbFOPizAr^mT2hj_vh!i;tDHv=F@dOK1|s7aj$?#7v8m*8~@Ud z*VUv|LIK2Ws+&WY7maX9Lvr&RV0c84M`k+`$qLBKq&Y@jfvujO`}2`%MMcH&zDEDQ zT{K<%KXB`1IM|b=ZJ)+Jr>gn;#CXo8OE+yPn3Pw$c-}rWzQ=C^_n(=H+^TKm6rN>z z@4rs5@hadH?CTtHV(#U>O?ET%LMiuq0reQt6ZIyRPH^=Xmou3| z<_|JAvf7XZhvO|334lPWGpu0`n0qW?={OYiBk_O|Pw{cm(Ckiuco_ib|9xK~lA2oO zO)mtiwQ&e$%w@CzDQqfpRh2Bj*|-mIhsaXQsPqHr<~EBO>3ASQ%iD>u8J;zPJx_TX z#u0Rp&c=7^*()9+)X>pKZTV;1|s#;~|xBW+*}AUZ?a3M)%Bt!x)6<>_l#5A@r( z0oQGPU-R2aNr*M;)s!?JGvgTsr32NuzJ5%F$)7?Gfb9MGQ{-miPxU5D-z;rV0{-%{ z2WX!N9O*B|EruG9V*ihL1<>?CUvH`<4DzV<(QN{VXu7ZVSZAN5P#W+It8qOE`cYtb z(1!X6piGVcZ3F0*N_f`Np1?yO%cM(Rk(NjJg`Wmu-6D_ z&YSdrIeeqYH3^CF;KsobrgwW7kaAO#hqK-6w|aASw&OFD*z)f8qK*Hr9if*K)v@_6 z%)6gLPoubc)zr-8B{Z`mHA14Ux_U-H<3`>~3@cVEncw<#+`r;RUQG?wnyu&zHy-Q3 zRSrpl=R6hU_VkcN)TO6e>1Wr4heyqyWrlwl5?vL(14$m&)u^f|$*a6{$30K#;9Y!7 zEn<*g%6jyY%(#o5e5`9<-GTFmdJcWkhg2`96|7$)M2Pa+ii7u}+snEM@a&>08KK}d zDii#9I33;C?M7;Z`l*(`KM&G=oG@WKC@cFNdcTJy(Y`l}7huDG-!`KU7;dLJi2 zLqFQA$MK>FD=VrcNY0;4#-YL7@TZ{Bs9C}-?eYIxR1=|iZEDiZW-?g_uX5^IIizf< zbSX!fo{w3pQ9G_i;5HaIA!+DYZ8H(-KA!H~soTccbGvlH*1y#qF1Vj(QDvmER98d# zqT1k&w)VmIgdJA#n5&6KZ;kgrD@Vp^otpR+e2^U4ps@zU=77=i&mQu;>F)ys4wY)L z4!|0wZ&>&vtI2*aNWR6Q;w|g07-=+AzJ3Dn!uF==>9IqH@q~`I_-7RH#?^tF-i%Md zZe$cS^ga)0)6R#xL9Or|h0(~xoUVa)8Q|K19G*oibFZt+gY(6bm=*nKn=l#r6PKQ& zJgM-jr?DR3Y<1Q<87Uog3DJE#L~r7}=vNs{^z8!Am4ZCr6C=^Vl;HNB7iD*NQf#;U z6Nla0({&9dvUa;SY7EPd&xUcoPVIM{{##Hl*1OiPFAF-(gDT&*-l_O?HvM(Cv+!t! z%}wxx!yR7=zqKd9;x9z5p*4*k5$s}ysKM+l3o=3u81?*fskx!b#nm&f4+65fTAAK& zFL;+Txi{~V*e_bu1@?Rk2U3RKL8tzr5!7q~`p?uDM`Xq~mHOV}C|KNpPiv*bH04)a z2xwOKu4t0he<>QHppUE4dwXH zRBAW7xtQ*R(#bnqG1FG&xKLRk=N^R_1G=FFr?lPyfmaWJiC`a#ZOBeF%6n8Mmg*uc zpdZ%bM@A+@@e1GIhXj z@#N3eDWngVuv$Jy+#hRmldk4RM-(FKmFw`euQ|HfI_@X-Ytd)+98$yk%yc?r`S;N+ zWHh>WWyK8xQApFjL*QX)kn59FQ-hqkd;BR0cTWEQ-m3PMv5!EU8sA@#wN@ZiL(gI8 zO;O}rj@zyxTd%lBtY#JpG>bsE2*q1!N~VJ=Z|mQjmu8SrDaa8)I&ps?7$me!N;JZh zkCphEO$4(35#a)Yj7>o=t_ z?Nn7X;l3JmQhstje0^!bBO9ZX({eoRe4n`T_|(A~1*otn;gjEWw%Kh#eyH_;sx`*O zCC<9^#SLFdU`jh2wBo{AZyPq}=acm;52Zf(bAt(_`C9gi9EkETD}nb-^E0PTz)%DS zvkizphLp*vMGY@rs>nO~2e;6CRHT2VpXaO@B=CE%GX}fggB*#D*Vhg&(0l_|t-DX; zcW)s#5a>;H1445eDeTF;7-!zbN8vC})QH+y>cUsud?MWC{z-S; zH*RJGQeV8lFcP=M@oI%GWte(BSzQlSeG!>vc0zzp{zSdGkzY)YG7U7NBOE@yA686! zaIukU2zr;8SPwk(?lnulPssiB0!cwu4g zb#d3RERAO`%NF#}9Uo4bdmB82!=E?&MCi|WiMiGrErS{Wf7-EHO=&;xFfPKe zuzp(|7>;FwBlxqC8^=cswY3+sY5Ml6zKaj(POI515mEg&H(FRI!HzoavCveWYY{>x zZm22iZ2m#fclvrNCZw?Rd9Qw@|6As?$sLjI(Wtkn`Ul|LUokS+uMHjga!VN!?wEC} zSy^A(t6=3j@Eg8_PWr?{@PXHkOhEdSJ}=CD>SB6*wuRnws<$DjPuJyUjAh4j2D}_W z9{)rD&~>yp5DExeM-8fe-?E%>JBtce+xTkG^ryDM{dc-#IH7S%FrLtms~ua_a*W`J z-2_6}N&4@gRQNj%rYk3hWSWJ#`ENByK??^R?}M7OXAx{XylVsQ`N@By5ZiH0sHkT& zXY3GieeD`~tos1^vbxUfC_?R2F>37T1tj6F=+AKJ2X;M6G*wcWYdj*${2QUZaw_3KbUymCid7;4s zezDxJXCJ;Oj|cvFHKU1nnV7W zS~YA~;uvV3PO`Gzoja@N)b=lCBjLy#3p`p2BdESN1(72sg?Gstfmd)xC#_(ciyz^q zWt|Yv5A@`*%7wa0`?k0mVlbXP^XPsP{P%34+Jn@4cC;hKGD7%*-qbmYgrcIBq000T zfAxf;E7PR)g+2MJgvR_@!SZxXr3NG+f$kk>qS6?tq@%1Si5tXYJH;TT! z_bYKobsIals=Z!WL5^p76Rj<*Jh$6h>fsU4z_P+3(nFIh9Z7MhEgG^Z-1L6)I777c zr!U<3!}_{+A|mgnVKANetYTlEa%IOI@SwrLY)Xktx#5)!f#x#sM$djJuYUQj3yFo3M^|xV#Y)tHweNJj_vmLb zVhGS5;aA8&87Udwoh9t;A7u1HJnfKPr22?Mf3VNzcLc_uM#Z0JO#K+l!T815G9j6} zNs_gT+i9N5hNWSTMTuBE5fBUwp2~(R41IKH)M90= zmY>^HhK~M9`>Z;;U`SQc7nM1|9=1cY9($g?WjKyR&iLW1DRFlBeoO{2Yp{ ze8SMze>%k0kH5;`xRB+Ex^|cirfiw+UT`b7NM%DfbgxieoKv{YHi|k!(Ubp-Y@laW zMKvnsqJ8T8)dr7jCO5xF2)Cb2_i!ln*?BexMEr%0IsXV+Ckls0JEu(OPfnH@@5~sf z3Byqf`r2FMTKoVWS|C)D%x~~!%g(X?8S~^e3+YKJ31rwtdl_O|{1xz%`;B;u%`un< zD~6ouedma0w0`}ml7)BQ-FRyz4 z^7qQS@@USp1@7GWws@_mD?n&=wXor4PPt9@NHe?uSPsSplE38T`MXpda$@kryQ^Jb zO(C%dzUyfBP}L7$oupNN7UHU6)zH#(%vJZXZbc1sb@fg1`5wCxWp2fDx6J$RT}DwV za=U|=n!y)T$G;}}?V~L!@djH2P@O#lg6=->j62E}hVvEMCUEO}D!;e8OC5W4Lsbt} z{`m3ZWvPqmlMY{(o_V?XRf@)|tK^iR?~re*MGWT}aO`?IzEWvw?tVGF9A%{p-MpTj zWGlbns&lkQVtb%#@Lr@|)npI@BIo=tj$D_$k(Wm{%nDyiy5KdW+fX-{Lm#LidXNlB zH0Wzjdcevu09#?jp)O5?YErFa?$5 za<2ek?pym`8QK3jQkt7jJG;0fnc1XMGAEnzE1k+K=wI;oL;ga6x*$RA0dZh}DxqnY z&80v2oJ)lXbAm5Up^MA=)MyR693Yl-lt}xl#1acLmx2{2U+tM27w_An4pK4ABUX(L z(d73fqA@_-Ll=>(mA;{XtU=1bSI#-f&CaOK;4U|-ec`zoWIR>M$oe2y+Rzuun-Q`% z?cI^29Ai_oRDA2sv}GAk{sFtP8TPkLo?MV}u{X$f7DBl>SVB%7Gw8V*w;sJ5{* zzs|bvxwGAa@jlQu1hC&WtVoz-(D=|uE^$@A;pkgfoyeX_w~d;)DZN!7t3g* zP;#ZAbO=aI>*cV$g-*n2`B!-yc{qdw$)LyJlrV1X>Sx4QbunltJ+Re5&&cp&XM?5J zh%3@}FtZkj9Z3s+L0VCNtiPWrA&^mOVVRM0z9VshWee#@j+agFkQ^YD8#j7mJ`CxMupX z#2&mA0QN^${&T1Q&!PWcKWTtZ_g(4*Gxlx<&!)}(3CCd1aI^86Wg<2ro*+n_x?+8d zpGY{DnMqhW9mOp$qL&3kvRtTRs(V1cl?%eX=Bk!p^;WkKwRrYBVhVx|b}vwgPo>c0 z-_JhuOlqyoPqroj`FmYJ);Q8aIOO`@zQy2=+=-;-68_+NpxUtTXMOlO$Y z^?TFQWIR^P1LwyU<`Rv-{z~7=<_ddnU)%NBExgvLd+j1AC3K*q{U5r(rfUS1$%wSo zxy9YQkKwmj@-&QSc`?4`1LTjcJd9^Qa@;qD8{f;r!4rIk?^Nuos;2?#0nijOt;E1p;x{b;5}jT6IHf zMiCtyu6Tqf_?BpquGxJ(=rr4pqrUHCXR8PBHxjHILyk8SDue!^tpTE=g zpz_Tpgqw`!o8!@`xgsE)Q{VpN{balD+5t2TV}(m$6Di5b6NlyGE9LeNWH*Yc-pOle zY2~xtV?>F$LtD9(kE62e_`&Jp2N7|~;W8{SP&jXmft?yPq#XF{#{~cv{hFyy0f|J) zYm$7>B=tTvx*9;Sk@s1%H)8YYCgnNG(cdPtWslS}l}W_NBH4%TWPu764N6`GFw+&k zi?tfPS^A*ye=9j74sK>gOT~enR&-P;^=94!qz@N-CSAN2vv@znFb`_WuWkM0q;}4# zZShz+bqditeR?soBlXk2C+3K~=@CWg1FF9b|Ac__(H zx6EupbAc9kLfC)h@mH|AT#)4oqWZ*331iN5VM$>0w64S zt_zE|5G3@6(ZUjq&!&HjXp0q`>4pbLh>MfTi?8uJ*HrQWLMdoJ4$F}yX+u2&BqAVQ z$&i(c=|um8jDSC~C&{XlvCD4-%r%n~S{vYB&8q@*M@9S6$ygHT$uG&;(I=Za)WH4K zR-<(w`K%K(Pg`-L_lX*%GGw{E=WUIS4zqRrO9z>qb!>6*9%21wVsDU>rlC=|J;!0n zB|mf7hwN4Mm0>U*3E-~#a(jKz82&ws^I*Cy%dzz+iPKabkt?VwLF#0oZtbct^Q{iV z%M60$9ry%}V}Kegm1;y~FUdW;PB+{BXGG@>sg5S`kQn(mu#9@l#{O!B! z39gI?iywXnK5JxJ!nevWt%85bU)nAiv{_1Dw& ziUuUK2)_g7S6A&VcCNFdTsTAgarxs>&~)6XbJk^dR$^nhp@BKZcy&|LUDfm3lGd8? z0RG#$L#}lph;{Pj%^L=9!kN4&LAj#88=J2GhZ$5jd%pTcBezFycl!s3KmL)z*PRXN zreuEGAOj$0v@Bb>Q&i0gJyzO64&wGBMO&q1Pw59z_j%{&#D%V*LS}NJ(J}A^?=Ou0 zAbBEU&J++x=vKsz*?yJly3lG2Wm*zsCxrZFpLz_l$R8`=7=Qi-^~|TooV7DD>6iPR z<(3hZuFbT~J7RD5ZJA*$97I>oRTQ;}TAYlgkGCS>V!m}GY0U0#?DG%XgGRTVPfbB_^4yo0k)Tp?l{E=vV&}jzt)Wh2P}uWZZq9dp(&aMXXe9T%wD~!?W^`WOuQ-J% zH(XL%ifteyS%T&#cWZvJ^_Sp~aIp|~g@46T*>y{CQJv!{7mP#>I{!RFNsQL8I*xt) z*y{cQ1z+x4xca2#moTcY;~w50(DyQOsbh3#PjXjj9X0{IGosHj$=MkbwejDJ`fLLY z@Iuq(dX>rg_IeS_(PG;ByyXXs-bCd|7FOM1(Y z_uHq2W4?*tj=Yo%YBzlM>vyQAPMjxc>7cQNoHl6+a)S+xoCFa=;^C_0{AbQ|;fNs% z9whxm`rq_BDXTi?@4Bnwgt5uOh0vi}D!`Hccq&3Czq1EtbJ_64w(UV z{xzr}GOL)wz926z?f8^p4*vti6R2zNc>KQczpQreQ5_h(I(i}}hF>~4dE~55|E)G? zn%7og%hs>?0Mp{d)HA;Y^-BifA-+YMQiGB2Pe}@}{nG>e|3%;jk}~%B(lLMd;_=eC+B+V0 z;O)Md^-(_KxmaZ)#q?9gZ5H@#fe zv?UfC{&d3qTIbO=AxC=oKHLfwmR1iVhHf2iSh&o0{os2?HXv6@-)4`3eg6f$%nN>6 z+mAg7BG(~_w4j3TD#GC-E*zl+9#gq-rrEtEXSpjzMCcE-U@WdRAqBH@yV|3}Q?c%~ zi0i7ynhWOZkMM8q+a~5&gW}x2@8l;4%{Mf_zrFo(&r&*}=5k487Z&s`%{6c@+G%#Y zh_=kzJ zuWg5I%i0wpnV4CxC=0vIAKpOU1M@rg^OUru_vW8w%YlffsrA4)(C(f1033o~x_MRo4R_KAuBd?1~(y+S*3kwUK z!r>C-U7KE&2FhDj!nZ0tr~fo-b&Hl;vM-Yafi$3;^Hk=^Q(u~0u7NA_2v7=4aK(3@~s@q^kU$(x-~k@XGF9r9-PGUjn5cp zCUxnb^`}0RDf%{GSMlD}YCOLNFL-r~tq0VyMA%A6Tag4a*JF03)}tgWtJ)pFJDOp; zkEGY7=%$r}2n2!xE^iP~F0-%M3f!3Qc%0~!*Vx#7u(;Vs+y{p1Rxm2&j!NX-_%Ll) z%rlHKSzqBcCKoJ$IoK_7H^T+SDBrq$_3AHFr=javx^4H4ixqf(b3=g30~dMp>*Ua$x=&~OJ~yKz2miyB0A@>;l2kx^J>~fG?NiF(cwtO3QcA(% z6v{Y*+*U?*HJY#lwvFzI4_Fi8eVxETnwX!~q>&1el-Tv#`oP>={Caz3#IR}!qJ9C3 zEC4nSB4x%GL-$;EC}5@^6t4r>D(>jKsB009_S0{R_*k>d%Bwzqap8braI9fxu?Apa zKbFUH-W(*RPICxyS`m?sX(m*=#OPk}T7&wc*8L+ryM8kOB3A=mO@|Ily4NC+26KR- zuOfm-d0BJRpxAr*msvZIpDq=3A?UrWn32$cP37U|{WS&ZjF1UaGOw1{BP>Mh!SuJ} zXe;+=4^#dFZBo%ks<_s1DlUB`nkz5OH6jde$MFm7z;^GeBtb;4L zw|T3n#)crB1CLC)YZ+$v{o_^lsOM=@E*%4o@cJeW4ql$Dp6{Bh68{o>MW{<=Bb|^H zS?9%{V?wX_?fR_VVW_0HSK)vK3qnI=oZa_}40X}UpAd?1Uj0_94~&68j4tMU+U#ec z#Mp*2-LE`sA3a(ECRTp+^bHhT;i%B0%{)iBzjM39XvmN!zw<@pI`TCpSpmVIcD+k46B|UQ5U6Gm-X=4gBQWq5!bCU zQ$Ji!^J^T=sO8Bj+%6lg* z8X_O*Y8P0ZGr=vaJ_$1kvTQi|gzl)jR(f3tK?Xzt4&lC*6ZEq^gv_Te=a4z)?`Q|S z8S+Y2R#NKhOuFeV76{|;aS9C!Yw9>Rs9ydO+Sgwbd8X$wRgDK`7gD~9{;n@w*OunP zEn$*mGT-X*8szq9YPYz!xLJ$RD7_6qX+Qk`IJN(Mqhy1*fKyUT=|$l0i6(uDK-DhX zYM$0(@Oz2!sYf5~A(?iysj#ra&?sHKRsFdVDf5PaC+T!g>P6i#C+b%BAH%c3cn@F* z9d;hyt42M=*RA%8qNq2pKTm(plqV~d83t<_-dZZ#Qh#Ap7{fQ=j;an08<+j_ z#Tfeu5S#a~8FhbvVfG17PBb+_XHHt@f^;Q#Z`6IiEYS#F;CB~foZ-3G4<8F}V&36l zbb0+X@pSQm58NgK_d1+b>Q&F01Iq-M{_DUP_)>u!Us>{GdD4QMSPMw|pe~*~@df83Wc-~>1WrA)5Yi%P! zft`d`ueH2N6zRmGsRK*I^%H&6*uPqa;QZZ#0DMT+TJq$jNIX@o!5SnIb#weuaIG3| zc@{M*b2r1v1e2?R{NVSr?onYrg6cZmX_!fkQ$00uv&@j!Vn4~umiK(`X>U&h@z+36AP$nVgTu2u9u-(Q{aR0M*%W>71~cxyjBo-B`WJ+0ZX6#nPG(S zO&3&Bu&o)-LAOQ&&+N06)Q{dY$Au1Lt&KR&#;eJ#@lkLTqPd}4G@FI|u`1vmT7&Z8 zQVx2^_sDz4*RSQ=7W+)(ET9!L&VstS(a^VTgr1k5Tc&`m$j4t|Ky2V8<%GzQY%gvP z|2J)`9>y|N&1~*%oyX*hovr{0<`C_80r!ew1~a1Le(wia``>S&3h`eS*A`c+fo;Sa zZb4{eKSc{$h29*^c8W{De29_=0M8qmS6yWOvl|F*{D>amOfK6;dbVckHDu;Ja_GQ!=ORm z{`o{B*=U21=(}QB@C0<`H|0s%ZXv;!w{flX@Vb`PO#?9$OchVG5qrTXMG1S7TzowyY4TzXRUt0YkQy&iQ=%_t4j0 z{ym;O89?11qjW4fy^*YaTU=QLSI65$(k8JV<@MV}jzTj5$Ij)y(dV~mn-~WQ3}Y3? z*}dROzMYYl@MqmQY7!WEV6i~)$Hx%bp7c2we>x;jenJkZ9l*9@+g%$zbF6z{_LZQg zU)Q>U#v?2+R25L89ThIxd17I%&`MjJ5E&YXqZ*M)K!m1Vr0VYWpRO`L*C8pG zmA+^nAB&`>I4{_npfs3yw5~RX5m8_7foGYlPE9v*@E#pATC-_(q?g@`W>=ux=0`J4Iwno0a zKC9WlZ3tgpd;7vHd*5UQ(&_u;*djPcwCCaXjRol{&DKTEH+zkZQWg@n-+!=KnCWJ? zyVmV+7ScJ7-q+Jht{xG%mLz5z-2W~o`_3R%*ZE1gK zSLoN1wf}35s>>&HBDHSrCtuuI?w4Rv24-TnMO&u&=6Kj#+H}$1BxYsOP7`Bg4uXGb z841rs?!L7S9Of2c=~DcibuG41$YqZ?E!soM@=D$x;sG zMsE%%I6dmSr$Xrz;oBV#ql~oyy`|Gz=#8PN&1ShUa`inT*WcZD{Zcw#-8j~@ybUac zZf2W|{}2wQKZ}A7Ed!>KBp`~qO7leY;MB<|<`_JnZlNg(e|(;ps=pp_bs#8Wf;PL? zFt6TjHE8<*L2ZJu_H5cDT9(!lRC5q(iVqyV<{*|lFtnh+E!*C%!QR`%>CimH%3nRN z${eu7VC#DIJaO({EkGZb%_g`+t!U#8CuJfJLt`L%vDihhs=&~glTq@|SFaAd{#>}q zg1(-;X1|cJZzliz6E(Onte~HIW!z#^+{$S3E|01w7<4K{YEXpcPfT~$nI7P|@*qX3 zl4xv}dP@qXvh-?8$#>^xNsTA#q@S;(5JVr8Lh`SLsJ&^BSgE~+K{VrEL6%InMk)q(yC92( zb+k~vgD$dIX4fd({Q*O)$!CqIjT%q(=GaqDw)s4{nY# zyB%Ui6mfID7L^tS%q71DQ=k2E-SF;eOnyFe17D>p(0wGuvWDPo&uEwaxWjc;FHSe; zq^=!9-bejIFjPOKBX~vf8l}prAmq%vHbmE@@cntUZ-Wh?g?A$Zd;Sj4ukaMsAb#s0 zNXr8E%Nz6z+)MVLa_hsm;q;S6QF?bG&f^toNVq_oZNKzOK`0vyu(591j;4bJhMbWWIQgd5g=9jaF;^ zxRq!kQz%(v@r5yv{!8_4i{9WHg3&^>)v?_S3cpV^J5ypV?zQHn)EXKTWLf@A;=k=+*%K_gLU(75hV6vb zySx6_ev0=<1V>f%Co(?lbu}*hI73z_W%y_x3SNu=0eB0LjZgo_PQZfn z&C?(n8pKTRPzne1expIEox?&^x@u^Y;I(J3D?Tf^b|N_kL-2koXQ7bpZt36acw#FCPqQ z^Noxi__YN|KP6ZHE?Jj#Zmv5h*85JE*SEuP(CN_rIH6s>z^^84x&7U)qWWjO_brBV zBCZqcK0PG=*Y~oh!kQ{=5IV22)Af|os>se=!o0k_r&}GEtC!z^BcL8Dr6%pa|2@eI z)tj1$2m8hAfCrbHwIJe}-A7~z{U6l#7VUwJh`4x2o6i0P!CL~xW?Kdjw%y3)F{eza zzs;7~5Wj7hfgzZ7&))_dZ0p@0I3HS-)U$d3ge%vR8u@?;=qtcNekma(g#>XcprNn; zmE%&bPVA?si(!qe?IxB>RmO%NfEU+02txKC$ZYyh8v(84IfrRZ#(%T~#WO0x?xc{dDd@nsOIs_Qh zSp^>CE!D`|l*6kcJHCB-*p|nzs;GJxcgrpOyuEfV*T~ve!WDLe+Jettk+XY;w&~oF zQL!|(T`dl}ZL(C{qKXA<^zGYa+H1W~l}OYKka_I%CKmFnB3t=E@zT<*(U3aad&+mQ zhgJ__bVHw5J{AK^NlL*V!#vNcJPSyXkH5v3@v`GmP*NQ4HrZ7bR~-BF?p+Al1zCyh z?pDzJU0R>6g7sPj?ECv#*~4lNL5^WA^S9;dP!j)YTmKtXp#eVS%zR_dGYALi z0|!!sC}WjUi<@?+w3dD6M0UfjPxeO1FN?SI&5)G0$Bu}U|7JgnU_5ln3jQe6qaj~O z3~4oyQxJIpc<1%7s&wl5pb=(t2EF>S()~rZ062i>zdAUPW%i8sH4dKfyD2P(itaSm z$9;}>@U-QgDk|p^;(lHqm+x@OCjZNo2Vpjux?j_9dAH>7Tj9*~n>4ZWMet9;E-xLb zeYU@SI+ZwNqVxYaJMXZjvhD9n7ZE`b7(kjJC{?;hS3yvUqBN1B^p3R91EL_(1Vnm~ zj+D>?gsLdLOHJsV0HK$J@@{7C+$ndQ*XQ>SPe@LZlXLc7d+k*|Ull7rL`a+xS}}h@ z|3GcA%4c&o^z5o0T$fQdm|k32A=dbtAIW@7@CtRY`MSDL#MG1sy=+oKf^o#n;P;br zI4?`fw{%{189bsbA4Er>{Suvb$)1FfmIvy)8b~yH!H)&gQVKtMc ziv5!#&Qe5w-V147ZFi^F8HD;=GcLFR*|0e zJZ{CY>Lx{XQPIPtrKOjv>V8PFGaG&dMy&sADu3OIp0)N(PiL>(oz}^l$Io@EfZLBCZT^@0@#8mxUnj*T>*LXNqZinge?9I8ugZ!Mowmntu*Cle3iS8) z-N}*#efU!A{@*ee2q*IX2;aG@u&_zx500#&$*CsB29sGsDgI_Te)MmO+8OpMd-y0c z12~mPHA<4-kgH%uZW;MbemR3(?}1>tN$oL7%(_2)nmMu#>Mx}>KgD6MQcslr=``;f z4s{=lSypwyLB=8(`u2wG|4hk$wtk?*1n?&5q)exdb%rJM5HZJNAt1j zI~-SF@%jJWWZ9JZT8|YjP}V>#kSs3JJnBtMo+s=xPioIxuf~`4dn5Ya@7~{sNH<6h zHS0xMe2Y02?7eVBN<@i1KF(ya_`)?|-&Jakcn>2ZNB-p)jz6v+SaWVpH??$1*ci!J zjS#MmGzhld^L(GkpY^jmRiAn;vPM@ybIbaNdHW()x#cfVO{J$-E4*#{w9>_e@gYAi zTd!6hUsRrvAwM-WwTw0JHdxgPqXUE|H$1Onw{btII+7=MPG~ez5adIbQ8x)3T^}(V zuF>6<()0MVeORVhyyMT32p7tIsDO$I&;sI^DA!ProW8;;t+zxUm!4Cpv9!dHQCXRR z#HE6vyGDA)VD(9o8zJ_stP@fH4z+VAn>%4|uX+Xxzt)*E8^&MA2cmk?{NuYm6zvFQ zdJi~xr`~OZWD){F3Zc&Ze^?9u@#Z+)uWvDBprYayD9XQpq~~5=r}ytO2Av^6rm?Cj zZ>b}9G!s&un#J3$#DtuGa~TiLri2u4iZiUc(f6^D){=p(BcHd|dd!Mf_3njDQ!8kb z{P~MnZ)GXSV(gz-c%%hx)*>c9)gfyZ#)UDs(7G2=!D@~V*(P?yR3((F5;?q*uayy) zDCZHwes;?3niHSCili%zN^P2j%`;gq|CBLu-uZ0hr=zA_oTL>d{X00on( zep&X-y8RxWRpYvq^RD!PxA4dpgyg*G?W{_MmXJz*hwbsX!|=R*9=Ke&YP!uut{1JR zw<=_HgMkW4ahWeX(=U*?7CkOZUTq`77QH4`(9~~neTnek_}jh$(T0ib;5ohWM_S17 zy6iLoPGuhtVQF-N(0?b)ucfI!{38n|ObA}4cVaNZKNj{MCB}=}r-|&*W3v^BFC{)T z5^K8>0W8xvAdw7lN98^YrCvDFOV18ScqW6ypqq40yY$7XO$SymRA-=EM9)( zAiQrv*Q+j8Ea@n)1cUg6>g6XW8U$Ahx$xsY>dD-~y1yUl3ZL`J#E2W%BXn%<37gst zZgSM?QU4$U`wwfGlbkHUaYD)yh8ZRX&U}HmVa;eOMZ}@Wmm|+fB|YsC{VLQ zdHLRrGZ`T~EHjDNk=na;3Q@yGf0FGMp6L2z$WWHb5cymX-t;v_^-4Z=+9Nq!{^p1Q zdjeGL%-+}wj@1ETBtZST#Sfo*YRWmMmdIaUvr;n{iOb*xu<3eQRKffzVF?cUEm)Nr zI8~c&^M6{P{>dHs<2iTPdeS?+nFpCF91w={Lj<@KQbNk>`1IyTniByN>%<9}zOqK* zIwN54rML|x-p6nx?#4-vNcMJm^hm0M&>IQiR?YXF-43@pi`<)x9VbhG_l`K^2TQ=; z=FBNyrt|hM-=XT+sj_Ey(BX{0pL)nQVQi`8uN`7<$KAttG=FvNjcga$4Giz0?%a`0 z-{{(I{(O;zz$c=FI=jw!g?WKb58GR)CYV-Wr#hK`dae?kR$h9jN`Jfl455d?q9EsW zN`RsTmKKBSlo;LgNR>a)Fxk~yn@>8mJHf~Evv&2@HFRMbpOAQGo%79?-$Gr6)Py5V zmO8IPh6#W2{Ql=MC0zjCVivmv$^Y#GQgng02nh-c`C~=+QGTTw9|ZryrmoSrpoQP zD!I61k~={L#KScD`%|}t6{VzE_3zzlP0-kRxVu7FVO8(-LMcaz$?nRiKEV_>cP_ga zq>!ESikp^D$X`$7-*3!sugWIVoKCt|rN%5s5+I8qH80=({F&OjVTF`q2ow|!6PDtN z%i*P^t*ukNDI^copR9rf6v-afzS3DvAER%%^my<);ix`sd8sgt2yRu6Fb(c%R)oNH z9+vj1(&mVVyr2d<(%F2nePMrfq`=HE1(CL zc-A;}!ofi1ou+{Aip}sa8qIJ=s30pVqmo2hN8?I=e{KDCMTK??qoDSM3l|OsqN6m1 z+{hi&lm=4vL%oy}4uNK{qJn8vW6W{mvhH%4B9Md>78V|H5l)ffhrH>)+S0}tP)9|n z>+4&*MCxXwmn!?8Wtz#GI{&{m_y0GsKqX(dKvlUKv+X>|pz%v6dTB}JorCUshxzyi z1bA90nVAELot>>tpwjaraU2EHd$yLAz|@9$fV;HS>o`~?gjtpE98^CA4gC2r;Yqge zJ_|1|P0*rh+#O+oj}+>V_H0;r@-v|(h;6(P3U!Z&0<8LhFG9Yy`_ zz_Xu~YWuVKsJ+^qC0H@|{kx*Pe1^HpG8XF|>02cq5fRBQaz$QUxxRq-bW>v~3HD}+ zXnc7~Qa;|7IA7f$&HI9Q&Emtu5s8Vjk7v*O7UI(jYKeR3VgcMrD6$zl9t$s+xiKpy6uO! zC-g~7xV#I&J;G5M>2GRpXKj7vsmZ*vSA~~F6M5Exm1m9{g*i*D3n6Ly-0Jt~|H}|M z0#SAXl*o10qXQxiU60(BJBgS5h$#ept8zH%2cwk`m6h_Ja&t{gUKD+g&0DQIE|T@9 z;4Un`AI(ck?l71#28^GQnp%lmt*C27j*_K{i`A%VN!3X=EGXJCd5NOJecAjhP{8V2 zTKYIgl#O&D`_z-tP5BouauP$s!b)KL`Bco9$Au4C;$a z>jx(E4}0o&skz^#HyZmGn7>3d1=G!%`d|u$XjlvhHylWi5AnFTbFJ4Z{CdBC=b<)@ zJvz(uo;N24Fjo8I(!M6Hw!R7#Hqw-y`?>Xc*C!^W=N~Zwg8R!v_-F zV?Op?UQRp$JKNceeDv}3Hln*#Rqi=LYbLm#afBvrLf*ceOEC zE3lZ$@aeKP!X|JO55)~%+;b>i2y?lZBbLSh#?xk5S(%G4Vg3^x4VzH7hJ!;fLAf!_ zzy7*E8IeDZ^R2yB_zfS$&BYB`vCneG@qE`Kt?%~%W%b>;86^`g{BCk`Nq|zUR7Q%m zv9=b}K@AS&cu)i_+Ma0yD@o}f@V$I6opIj>6CX`Yf2linVT$Sw6tr_&f7mJBaENEr zgTo4PoC#1hO&@QQEr{mkn%mcyM#AZ49gCN*l4NAey6lQ@Ow@2=VExYR%RjS4@b$g= zKzHyewMLn`?zs7dei3ZQB^k=DXvbf@u{Y;@aTqAeP1W}$cMQo-1HYkV?HQ5a^Tr3m zo{{7x-xVWV(S4LUaf|w{pDmT`3qRzwxAVcJJ@>BnBp1+h>=lq!v?+5yTI(ql?C42aiH1@Xo^{n%_`x8&?wrhZZTVUWiQp53nP-C2lZ`&bPY;16_la9{Q z=LCL^jsb)PrnSsxK!WD})2Dfd>e&sb*RQ$nBqJLMkL#VK%IK*s>Oburt7HYs{?v1% zP`%ZJ>$7L!8r{)D-7h`+TyXAsABT? zWiaGS{%3Tdy<2z(2h7Hj*xk;)hR;d>Ln1}Xi%oh%af1Z$5`;2-!fEO@!YBK1@qQGk z<)GkI?hf{>`w=tjj3Q$)t0_$`inmYSDXI^1j2&^!J2cif##r&x>pk%r&Lt2shqYR0ejj*4Y8Sm+T3Q%yMQqD!gE*%f9d&q@ z1=4JI;!+X1z(7p83OZ(L=WQhvzAO?; zHHpwnFj*Db-cK8PKl%OrWD$>lBJwwOOC2UU!{#5q>Fv$Ij^d{Msr*7gXf4}w45U4PY3 zr}lY9KCEGR%*Vx!EjD&h)P4-X)4QlFbitPxX(j4Lo(ap#E0^&_aaTe zlx%oH;Si4vG0x(sJ~jUzzYc{<>@T`MT~=|ka!aW&-C!-y#_{I zhM0gR1Yb%lYLHPz6)ed;+aVyCuZfUv_jaS$$yGws^$cjs zbKKQ-mJ6wMhB1V~ICnYk0=g;g{w*W>n}U1E3JHskKjMvpo$48SR6!Zll!&%8oOiSG zc;{x8&CHB(%Yqkz+QEAgD90}Q@#q0W5Kieom@mz<&y6_03=2vi`^0I?Hj>a zySmUYFc_6o&Bt#(p#8Z_(pI$(@u9}!eTA3I@1qp#J-Vp+F5?&YP*HsEonl^C<$-Vu zf<2)WSG`BxU2%)EzIJmuL9wZk!U;HljoI_4cM$WomM9ajDc}CJNsJ0@MX& z2F`07t~UzbYiJ>Ygd;tks4pZH&d$~{mE>GIOEjBGouIGw|Q}eSiDQ=ZGY3ZVKWpi>dzxcWxGUhwlp31uqH~Q@*0eCD{*2MkjgC-5|v{CLAu=-ATs<*f+W6`qTzbP=QmTDgWZ$c zOSWu5dn>PRcgxO1aR+5oRNN^pF19vBKR{gjbQP}FJ%sYCOJtYqCGZ;8V>Ib!6_X%;1F_g!NXD1r!O zH^pd`nkEi1|J=>ZW5VMcf)()AONj^Kc5?3~)!fPTsh#(f!Ncb;ZO=Qc-3(+Bw_;9V zikQ;USqU}e4O=2iY>9Wx(d{OwkU`}ho<91SB+%4e{3Jm7EV-fGbvg7l$BmlmOetLi zQ<+e*ghsXiF=$)y4Q7hb$XJtzk^K=F8b^8h)OZ#Qe22wrfPWr+0{2N7< zCo&NKP@b?i`5sZ9iOQ|oW<^ALhfwTF>!cB}5nLU-yy{OE$y{LtFfnx86#+hd^$S#2 zSou_YBO+}0YlN8^7qH^*sU4kKv1W5?Wb1v69-_+UpAQ37LKPd=liFe zy)5j^f|)86%2vj2XDJk`Ic>$`hx=swfZ1BGGP?iqeU;la8sF=8hqRA>IV{@@*x`K^ zO8ggx>c?RM!wJ$mIy4==yMzu3zn`V73}xXpR2s}I1M1|;3{85jLNNp|1G`sC`g&0o z96vn={`#$0xNPz{dw#xa;h@%5<{7!ATCm!?#tK&@73B@xEa&_8?jL>-_*ps1zd1{w zgnSCO^z6g?_pNWKxj_T#t#83hSBi>OiuQ5dmNH5YxH;?X0vnP8UWh{94+M9HzTmnRl4-TC=S#1*yexEf=7=M(*la-+{ z52MEzafT;_^SyZSLe$V}eJZ1OWMqlynWcKfOnL@lvq}|h4w|qdKP1f+7~%iR4Z~*E zzn55z5*v>jwy;Mq)ezTP>5cmTX@LCU_MAMrZcl`@Cf;p)MMx*&@CtO*KLE{K#*4kT z=%hWfamtO2jTL<--~9o|M8Pxu#qpFKr`g+^?pnr^-l|V59?oP4kQxGQF{&KNFOodh zX9u65i+%^v{&pp=ay_|5A+_;}?8VSWl9noTFl7FViYIoMc4I7WxV%+W!j@CQx-Q>f zJKnD5HVBxqOH1qXNgi9{7PNfn2(dBsVKRr8Vbxgop|pESsvoMWpMs*q3T5H6tc-N_ zfc)`ft2=5fZI_xTBqrYq}9(JrfRpsp=fH04V4GYerT|7G4L zCbu`B*Qi(Xc&`sOJGwi6r|Q}^y#UOlEHX0E_|<+|rFqZuob0^!uTlwH+8C#H z@8oGeG#<35$2Et4SrPT7j`_Egg7mcqk94iVa={idzZCSs4^_?1Qt!NQK6D3-z_amo z$3~IMPhSknTg^z{0g%_H&}o~U_Yl-G-C>Vjrd;$EqAXb}tA;fhdZf`U3PdxFyHn(V zR>#$Hq>B}u)Chz?%-n=#=WRXcj^yUAk?bf>jElP*t>^yHD-mL1CN$=)WeVLZ8Z}<% z#uuN@>q8WaJO7?O^3|v6?m9t}^w}8r_3&3NNJ6AhjTk78J-nl{b%}Cf)ziOMwDSO+ z6A>QHR3JXU3d$)z@NzpD^o29E3*0@F=ScRB000*GDy6y{II5B1=CL%G6d+4vmsD8` zO=0t=-TMkZ+AcMkUBw|Kbe&y@(ZS4|eh$UfWuV#sqM5jT`mC$3G~+}87R1v8fh?&` zm2vC>^Tm$Nq{I~uDuCNjDx!;c>{uCgeR%ZIBX!~fs&Aw}4%u9PK*XW%{jB>D?f{GQ z<1=6+6R9`^Q?w9K1xh>z6@5Hz8~J&h{o+rZ7uvTP?ggfo5p6+(#A=m+%eakM<<3$Y zJL|`JJH5jroM+Cbg7O9=s9u+u`Dp&33xwWQu+HCLH3~`ScO-*k+<@V+uzRrJSlBV3 zD_@-j25(DwL`|EB~%J)KFl9)zY1m$`=)xgjlbj0NYtraH5ptlxosE?TW1M`aIVYX zDrd6$2b*8Jnr@#PtAn`Q$^CUPdC0c5*>xNVlzniCFqiDO&GoEuqm1!0rj&04eI_%>4rB+T#$N`We0Od~&7kZ_u9t5QI z8M<_g*&f0BZvT>65GJjAiRMS^&WZg8AI8e6Up{J@DtV-cQyGiJw4bTLvvSv)03ZKrkapsb@Uk{HUno^&r!Gy@B&S?9UCfzYoO@R2_MYr4Lma=yYPk`ND?KxF zOB*L3AP^CefLhtPFg1N;?BD^VwuZ0w?h+u=@OPMMzmJL0?y>kc&;RUM-@s^tU$*XG zElqdD#uBcbfRs%cWq@>FdUNnC+zR|S+^)UrV4uunIi^SO*=KhE;*(Qh0QoxUqZy(7hp=Hh8lqwf|sXkHe(Q=72b3G_&`?aHnnMSJPs^M3KmKpAnFeQ3C+X z2m8B@{P&bBV$IjK3ZLDUD6R3_KjVg8ftd89esw7w2SH+8wJw`J710kvL%%@cO@+AD z4k@I$R8%_V#N*7OL9(Nn5i*Jy5C@c?6~zW%@KtEyM4{Fack|bpjntI%^$YS5py{kF zGybS$v@;ecYe&Jyz16%A7R?;nUq>V*aah5mRLfDGB`Mp^66D$L*w}e%DjY^k>CDDv z$L4m1=SIuC;4a)v&=#eA(u-$2^JcO)62?CtBjMq>o}o4SYC4Q&#gnq2TG~sYqF-)s z(aO9tLCvIR>dKBtfl~f};5=eJ2{E#JuQ0^D*HB{zb1AYGE-lz}v}k59w5u6esZ|Le zSk0Xh7#6^kQ9J2#|8@1p8mP(W2w%Oby?+7)7~LHcgH2vhfB4X%%Ok(6sa4-&nS+jQ zu|afk?WT62VL09X1j9aPmtFC2KOsLsxy$W^FzBMg-GJm7B&PNly0eO37{X>Xu_si* z7?9ZbQB=vpM3D}L%5*iE;}#Nf#6_{LP-9xP{NL}lwyVUKDqT_#!o`bies6vTqk^ywYIm50K=w2DxSaY-m=tQ=`3-e8YTm?jv zFW1TJK&s5wpSx|en5}q>w#+#eAwmPr@rLIg*S==#TIgXrMBI5=091kD$^-kLeL~3_ z*jzhFD_BjYbybUhdGZ?x^+4GKBB#$$-qL;Jdgj9>S^2YQJLvT~iML&Ma*qz*n!rXO z5k*D{v0ZC)97&>U66d8>zsqEScF&s2CUX$#9-!2~#7|)3ut-xm8%ko_iQ0GQKJsYh z;tpGX*}Gk0Z=z9Fy*@y)vE#84KT|u*fsQvkQpxD{{N`Lo)+fNLUwlX3d)sFJAh*72 z+I%{d39n9ed0cg0cPC}``#LOM)DwT08=(5+A=k9)Q|MEVF(cWzhm+S-NBj!!kdH(j~k zI=f(`D(ag9^)KBYZ%Q6 zQ!1|79b^}|n0!`6B2VpVg*3p&4<|mYq>Ug_8|EhQR_S@X0Q|^Rj<#S$0^`lHJGT4I zx~88-6#a25amYZp0vRG#bFwV;1QHhG_kEEK z&@zJH!ex7zSMH9Hte{O0Ht=Hf5%hpKw_rm|96JDN=m17zP#@yh?9E5HRxYs`o)#wg_?)<_OiO$FS&Plt=yBKi zS|Fd<(vp?L*7t91MANw(%|nw`8bLLhE>N`VDPO(fdqbNx(VpXUxYdP3Q(#@50)X zq_je17M(V|g@suRn$j@w+xI!MmJ%DUo_2!!jQLK422!*wax$9ub%~rhoSCMGCgZF5 z*cLGM0>NvNwQ|f<#GF`IAcvWcJ+(t2ja6oXV!yswdD~7n11EAI(<8fz zjk?*T;_b>`D6&-A)^YIIe<#=Wlm6m|6glPG{?=F4aa4;y(}4T(OH&)x%n}_RD%vBY&FCxgU}{>zLg{Vi7MBjf z5=9o4*0=W&6RF(bM~Y-azmR|PfJxQZj(N{Z9or*$#@z;MSQ}Qbp6EnM)OI?a80}N1 z*VVYO0Gl0WYD@dKZYmZpaEQUW0Sm*P*R%!}e#kQYrUj@9+RS zl3m@VcjJUhV)ZgK`4ip}XOd@TOQy8=6rO?WdcP?6HPR2qyO!qJpgp??`p3*U3!}y7 z#Fvw8fKU^~ZmsTapVACud=sXq_aHzPMI;=F4FI_MZC&eCbRyh#yphQz^CyaqO!w|)CFBrmMuaVb7tn|nrCT~ z2Ef~J=4Wv=&F>=Q9KN+22Y)AbK3#hL%@ISEs7lTc*NKxCrZ^uwetb2~?PDR<561l z^Ug5aurgD!!B#Y^21R_cLKkI4`Q-&?f~_A;L=iG}KqShoT}4_|3&dEgWwPQ@3`aBN zXbL(dd~|LcRirI{l8HRhF-zb{yBoG8R?q$;=ggMd=imakvRzKu|1XO=2hv1+`QqW80f`oK8NW7ddgd6 z;?M6`H0mAVtx2d2HJF+N4|P9Q71sHsUoJ@Xr~=y>WP%!^ULhpR?>hxebp0rg>sMaw zxo38^%KZS@zMVt2Qnt|Ox7jJ)Vfl8@Ey z#NDr%*G20C7FFf)TeQ=|g4#I+(5xs@jlnDL-3_Zh)K#}8h`Y2f zN+X=22J5#fr~(sat?7M^!`OcGuvL1Vb*AUeaCC7C2ZMW!WlFd{TLJ0?l6(hOgovs( zeKe>fI#TD&+|xqpzU!+fk6|equk~ns(R69iq-YRhWR~Fkk(B-5i@q3ElG$Ye&jr$< z4Kp|zY>@WAupW`phKJt%PoS`e@F22NSax7EQBmgh0wEV9I&#ne+NOM!kujfP2{f0S z22{c5q%ZGS{c23~y1Sm;bnA`!c>DexncIu=dWWbCOw{&f25~wXr^p+v?-C+;Fd>zi z-2XK8<~F~hR&Kq=v;02v&c^*tirB4Oyp8$T-D+Eh!rHsz_I}$>X~zJ$ZftQhQJGuq z#*w)P+<$qQ2WdL_Sw1!L(YBOON{#UR@==4Bzte~kQsE} zA#fk9-EH99*m8uqH>@CSYATnjr!~hgm7?RuUT%}KV(A5ZPE%U~cP~*o!1>9Sq1)S# z*(?JNWUa970cq2v%OHc8k)18;l3188dEAShy#0*Pm(urD`vj8%ao)cLFK?a66Z2-2 zSTzcj(D-IoXwuGallFDRNXxxjrsW@*{rliQ&(JBoJip$7u}x&yDx zlE}t5+`FL5Tyf+`A~<@7m1AMAHW0q_{CleJF|3+?&o6~|<*8GHj=o{;>igK(YgtL2 z3FhA%c1U_><;A=yq(Y7e#Xla*AS`V2C3c*zi6_p9kpmg);${kk55}R;m1c zN8aE#s(gf+oMT|!YM{mnR{OYo$dl>?SfUh43X|N0?Y-sJ*QRDOw5b2RCA zr~`R`+T?d@J9>TX(NQUtdZ{X>!k!Q-7FlVMSooq@4mT`u0p+q;X1eiN8T+He{lldpN<@-RE0zTEN$$>fxwtZ0VIB)h3qcVi$bg3xrYS3uxc)Q zoE!Pt;KU2D*andSCH$L}@|+{*iwTJT(d*!W8jU=!uzM$Ek=tT`a2va&I-WYp>VQ1vW4(+B@mU zZQRgT+Qb!+Lz@lEm>}72`HMzfSs^(@aa-p{9aH$YEl_#YcU_N)fsCxv7yHOYoT)x& zMUSytUeN{|$y@9vUanm)%)6ix7aG69=!2TS=LO444q$dOPu$%`D`Z|ba zm^5yra@7OJI~V{23u}nG3|!XTs?39S(lGsp@@UkIb^f>+OloV5oB%<5d&U3U*QhOQHrHh zt#c@`J-6}Pv%0QRi?p*jW(Moua^ejH*_wZucx8_m-k3-cQB zFLaO=bv?yyINV}$u_;}jvZuQT5VVo}jCAIwTEOtrFV`M>dkoi~CeIFijNM*AYd|1t z%b*9{A}mAh5)MNvj&!wE4P8G+EQNMc;G!Q|PVT163CTq-pxagk!<)9h!B&X!WHwRv zfq>1R>F&JB^%(BsAtPG&FWWD^QY#<_yV8zp)$ZL7khc~yl!d~iJuke0H}E)pOW|%h zUPue8`I7ts8z@@%Eq9G~q4B->ER-2KXLEDw-QjHxJ6DGGm!>?B2HCh5Qcu>+^dUC> zvGs0R{uKOWc(b;nQla!By}Ye?!;aM^I2h~}@|QgHApuum5k!O$in20c*g7Zm zf?Bl$tW`&q_v@z)!~IGA#4)hCF;_c1WbKCKL`k0Jm@6P5xUR|CA)s>O1WS#ES||@S zcmc$rPw4}{BrfIvHyNm|ej)DKSXp0J+EGhcoZOhfm!e}BT$8ZzVQ>#z2k{PuwNfoOwa8a(2rQ@`;|22R7Abp>=A+p#w)-(S*uca&nRikSWmS*VSz z<<7{Vh)o=PnMT-kZ&ph`(oO{$7t$3az+J#X5_4*^;DZf(e3WdWzgD=!*|kS@2LK&e zs;fGxZgwV!>w+i|_oL&3`}$C+y}MH*BO{_K(;5$TbY@NLn2iM6)DAbhvi0Ka&)XrL zgo;>u34Ilv$5fw@F?xBuUKuOUAm16X8<(2>po=N)>Ox|w%{Zef60IyPYl4H~LOe&E z2VCNBZe`2$mzWYI)s1`OMok|$Grk(1L-nJLs?Uyi9OOWWVUczD)e+FEtZg?*&lWEazJg9o6E@y~A~L@pBYV z?re-|skL6BSH5WF>E7nfOHY|SXqetY_a#mFdH12yOTSfwp`3ZS%BaF`X)zWieAxaN zRY4K~LmHW1ZPcRWdRn<fl_P$`dBZt9u@NHt^md z>gu_1uj3N4e!W*pgc9+uJw2IiId5x3X#&aH%x;5)}2&R%GU3iH8?Rz;a9<#&7f-ORsYfzY=~z z%pK&}HJp{~#R^0?ToIwz!P3RzmTwHD77W+=oZ}TTQ-xqK#lzAp+bl+S8Q$v1PGD9N zIjKDq1gL9dBfNIU*w~w|XpYB`9@Xs1yjSAD9cpo~8Rrekm3mh_?;f7+67$_F0Fsd? zUIoufqSlIyry%5+klF7-osK~Q%pw!npdmTL&c({dtvwN0)N_n@44rEuVLAv~(DG;v zUNqT&pY~NA79V~H2^-uE&n7V>I7ws3s*^2rb($qZTZD!znpUb!jz6D6+N}^()NL%G z9R}z)?}Mm!9cddVSmP=@a!0pXWL@G<`y$BG6(@xh`jnp=9l+$)4mQ3M#Ug0Yn)sNp z4(^e85I`2bL22eT2*L1u&5#vQoP2-9Th$hA;&S@0;_^7c+*M)C6H(&leX;Uak zDBPWBxI4?*CGhtE%bU9TJ@WF>MDL>(iFHhMz?Qa_)_e%NjLf)hXz9D~r1Lo=0~QK1 zp)?&#%sD5uK}QX}+c`QPfvhV{jzs`knB^uiTK;B-F&Y0VvI(W{;nPA``(a_Fm@UfR zUjgittd#Aybi+l1OfN8-)(THNy>EHXve9KdJFg&T@v&I{97SuOx-i2&Ar<9L1Zv|B z)9);RmN|fzuX{tR3lp{tW;~(-gx|z(C-Q&1O;5U6)~D4ZZ)YkW3OyHEL5vvtC!2EM zIo(}sUEdBpT`<#l8Z{u=^Aeu>>C;nMMt5s#>v!$#vfsAOtqe7MOY~CF(txZ!S(sQe z|BbUDiy*4S9R<8w?xgp@rN`#c>VNjbbH1SOF+TWe_v=mkKpsj9{2bh+?D>pHI=i}U z?3=6`(4$*0eNNcei}{){cMlrVt|TkzrYKhx=a+BCq?W!$bF>^wAAQfY!@MMJ$2HZK zw&aZ1Axe`9UWaw3J(VYrCx<7S9C8dt@f+@7%MIRwcQU! zybIe)_^6;WWND)P=xiZ*4B>ooHB4^rNcJFOdw3i*9R5<42Q)z%Ef$jhCt!9#QT7Xx zAfxiD@r`?=1qgShzu#|A)s%F(JL~FRK#NSKa)>w&bZ%|UpMFA5Q?!rRecYwZc`}}@ zz)YSr!E0^u?rnSmVeQGJK#JxZPG;Jobs3%9IhwbgPb`oAa!#U9&#Mv3=76}V4J0M=p}^1!OS95)PwG=o9Q@5MIlRbVKBQ#gW+e6kLVwJY?q0(Z1PuMC?g~H zH?Zlid+o`$B{p!%4GQ{DHetoVvSCzvpdiHfaNVjUhFW2y$YNkqMU0-G`2e#SW2B-+ z=8qi^6K=FdiwosA)aUTTNfLCgO(J{f6JvlpEh4}Um($7tRgNG zi=Eg3^-W5%epa6)RuR0+DAgCb8m&k-9u(x)Fjl8>#KxhLcWSSJqgfZ| zv{@;(7-B>R1tfwC*LP(yo4t#Ak}D!lI{H&H=j*H(*gd}9uIuSZ61?jHoftf>;;e8d|I$DgKk>f0RbpN@_}w?u*P z&J&l>D-J#gRl@xp1hZb>yCyt>m%bAr9IjbeHKqr?OZ{^nHl=JlS!4dQGpCf7h0dWp zK6G9@q?57Qxpa+AGFu2yLV;g%&+yo5H{w_l`+fnZ%L^ZKfh$+zK8VgQ9P=Os;&K5o zJYgVHrSweAw5El{8s9T_NvJ)-n`YE`FtL5Ut3F*@EJp{V^Xz;*_xr_css_#u-HaUw z@fg{nn@TnxF(r9aWd5QF^NJ>id5Ll%uU>Cg`tsmYm(WT_Ef!f%3{?3Y#(VFIDdc{u zpAHhYL&~A@rmRnPym6(qb#Gix6-o?``Gqn1>*1`DU7JB)>vQsJ#z@I=M%G)Rg)e1u zPvNarU%c?d@Y?~G#hLiPc~wQK-OP+k#j04Z_sNlbZaP?pL7(QmXd>z|bsee-jSQw- z138xiid$j74w@dKC)1;kI(82;GifY@@m6o*-t(;Xv<&@kMOT{^OP}$>LF<-e@157= z?8h^G{KkIUNK>@|nTyicp}vPC2(ZArLT8e0X>Idk&Pkfkx5C0N63es&s}u~reWzi#B3nk@r}Rs zEU~yST=*_yEU~1ye|>3bhS^qbL5@XVm}$_s`Iqfk=r>^RrK4qz<2V52#ja14yY_gJ zGgio~phI*#D-r4%I@IIv3FUzqoo&svExZezYB8%$q4HwV+(+J9q3_?KYml+D+urTC zOboZWoBT`L>Qz0dqf7?7t8kQiG-I4;3F;XxUu8|sH2$NdY$91E>3H_w-smpME;kwM zle4Mh=@}UE*T*%PIH!Y)Ov?>uOrkV2H(vTWUHAf!yXV(0IrGF>7;s+As~!0S8Ug!l zz66;L+mNIi{aQx)igs@;E$nvZW^DMQybrXr_;;oDDlS2` zDJy;oeOgtA|iV^D66W9drlSf_Dr=jtxI3yxkIU-w#G4Q?||*;F5mHKR}xb^ zU%t~k@#CRR&wQ5O%JTTWjU&z}unOMO&_G_D?I$lTOjXV7$d70dYRhOKlyte9BiiIJ zot=H?f@HkJRU$jvv2Ero6XxjCzVN-7V0UpAT;?SZmI z)*<98_aeAW)~BwFRq47euV>kC*ua^ND*82bT{Q+r?SsgxcDSCWB9TzaVK2Ql^O!A&R&RYOsMv772FqR>7=1~s znQY%1>j1Jrt)fT_M;xO}PiwiZ-6HvZk_YqJhZFv=otp(2n?H$=kZSCPS>qh2uuuZT z$jCRyswcz!(_z0nw8ZGAOn0BEm{z@^H`ie>L4KbzS#tfmkOO*U*VTEF465sPg-*&c zJ>R=0A(uGtF4stt$lzh}CC?!NhojfgcP)E)o#_kfHeapSjJwmm0Xw-tReVyJA&{{( zH0WwdcJ;T0PcxlIzQXi{Z+}j`1=|mk`P%tpLBtsESD(RG^Vhs}Nlf9ii{P`Ym1t}k z&X%g$3q-M~?P5U$K+jMtQp#(h9*^k@2` zRGz>f5AEeS3RVPEgJ<3*k$XFpFTa&cNgFDVzU;?J(U_E1FuD3UZ#?)|ygbX{St&h2*Snt=6ayPmDw)`BisY=~v=?zoUjN}VcwHw^3V|E>>26%8M} ziZdTr1tG+z2eI|XwX>!U3#=qVhqZ^RB*Ru1KY7m62W!(^8z2VKa!7H6bVmq;7(i@v zUcByMZBlwg?Uh(Tdd{}`34B|#p&p{eyzHt?JjF9u5|vS?wmX8M(sN%G;jNT8wmuzbk!CCYx<#s#@HnQ^`; z7m`rDpP5^OR^*g=>bcl2nho8+JeuiOvTK%)erjS6R^Vq3(Hhqa<4jyr^DrY>F@OdA zKgzB;uE~CVOG=80fPkb5BBi8&lqeykNJxy3W(<&;FlwS0pmaA9(w!qk1*CJpV1RUO z2qVYf_wb%K&w1Z-{Qc)Xb3EVY{?;AWeO;}g(kIR~0ZO-JnOuc#!IHvXPT|2P;@O1zngYbEX}0 zeFxRenpB}{ zFH$`+!U-iXPy3z0Inni;`E!~5ydLLVq-OhDnGdg{oh%pGKTQ0%KBvmXKlAEMZ9jO; z**bQcqjCm9wjbW2?b@m<=u5I)xbt()g!V;bia zYRyT$n1MIdy}+)yo_`z@GN>J~B~;U;Z-2Zy1%pil8c+VaT0ej&AfjB0kn@?!2^#1Fldu z+j5nexutKK?ud!z4s`wd_TJ2KV;IPDT)C{g%rW*fw&@ja9i_q(UwRNsKAY;kW`XwF zSv9^S;^c1}bIt__xk~eA&cR6;+Qpj8dwP59L=TQ$8tPP~8GXwqi3iFQ&Jf>nE8Cz( zE{F2V0HhYUIw&uPJy9Nia(t8e!0xDDa*K~=y4l(pd6x8V@TPr(q(CL0Luq%)y8PuU z+xS68Pupa#w~n=6vP}bE%HF7{z*VXB+ZLzkeUdCm&WWA9UB6a8xa0b|qrRZ!cF{@M z_WSc%@r%YJ8m+9LK&`DCcP%kU;@ZVE+u+XS|qmBCD&dVt+B)o(KMqwIFg_IH=- z)sVg@=M&fctWXhil+mJx$5!X8Rbx}mvro@BSJ%f5`ob?SH_H1Up4u;X`ES&c*Qi`y zUhY4h_y~V;>@{avyY!uZ9?#)NH3mvWx%J9v>U3d$Opv||BY*n%P1}!cDWAD?*cymI z4!@?(mndbtx#?;(AN{ps@5gF;9D|DRwidPJ*8)yDd6()5eDN#DsRw(x_SwfubYo^C zq6Cj@tHe`5J2vS<0XrKRk%mr9>*Tdl6AUxFLE)0U2g= zq@V_m2cb*KZ9xFfti#KU@0@u>j_>nM4p}3f@Hqbwy=?!178%K)fAK2dO_f4%eEf;? zSnls-emu1shvjn{mqT}}I9&HiGoaH(URkAO&w!f7_yk|KrUSEd#b*saQ|~5ITLI3# zcf^C)fLs8F54W*n)r?N)W)JK*^4*A;vDl+JMgnj=%`dixl#THqV3kW()^)ZHc8+hG z=$LW=(E4vWc#LCUb~aBf7Tz}h!tzWhXbG#~iMHS$v+2~d!qk)L7?=sS2GKZ)TKEOk zlKZD_8rafx`l)e;Jt-SFi>Ic`&$%rAjcC`AAfnap&zg&bEl2p`WYzs(!cVBw@fNCf~`_+2S zbP;-12K-eQdta!Sp2|rwbF_O606y!U{K|0R=z|he8xvlMeU*A9) zmRrp>Y|hxmBhRgc?pP_Fu(TH3hnC5}ZVoxZ*v=t@-rmqTS9ZJCUIdUi1dG;Jh+VmC z21n%fG`%E&5;0W@H z66W3g8%D-&^>{#gKO z4_)UchnUGmousIyhwmBp?YcuJ{VWqHzaDt408)$LD&68t`AeUTWm6KxV7(y8&T()h zAvqX*b7jp<`2BFSUH0yyuE|a-bZ?lVvifVk_wd`WsBlq^`XJm}; zU^AFH0K%1*DyA?y(8~{H z942od578@mtC(r6IQ76yNYi$Zdc@`;2p2^qcZuDRg2nKGDbq+r2l*h_ zT1!6xAi$9n!J3_)Bc2y4B0`?&G(F@u9U9)|0(W#h{(! z0Dt4pjXsdePP^BYU{uGbXK$U$R|ou##AvtskLSTF+dag@>*v}f{U2YF^wfYQe03BB zYVG~SXnisMRGZF`;vU9^d%NxDT4U=Frh_am8Y(h~np-tI!Gw&@jD2d1`NdWD*OVt~ zDn;9n9a=#AlM%v($S9~{9VycyK`Mf2|t{N+RvTq^)S?P zn2wTv=3vMcJNt`UbtR@*g~NA^_VHBpaZfu3NqV@hj0updF zKee1*=f|&As(hxL02b;{WN75MR`vOmH@oV4lcg1@zhIVcLS>}43aA^LL^CEJilSA= zKo#C~iV)h4XhcA3*#Nu>zv#l?Tyax&?REBZOE-zDC!RK)L?EUCHRSCo*NyzYR91Hs z(N{%xOB$MS6S@XE2te;a*@4+*w%(mdur0Ga=9#U(GmB>c zz{BH(ZPlKC89Q~ORQ8ZuJml3d1)wz$8c-&X*FMe8F~4Kug8ZPFQu~?uY;Uhx?7-1J znlquRV1*6fZ^4_R@TBt0o?2c0+F2d&k z?>u5fU}*dH2BjV5w{O9$x;BDwp7OrPeiEl;Q4J-cKBhh$A(L3r3>PqC4b#7e?MQ z)0#F$n14_vb6DNNB0WSR9wnZZGVqjWcMA}gV5>G}gwY7Iaksvry&3r;7--IMjhC~` zKHNu!%(E!4$K3*5S5hZWM7Yk!A!vGHnXStmPaT%sSboqPH@zx z#IyUf0-Vf;M^chvGTtZAY`nq`_sH#rj5TKh3Z>dI~S*hU)n? z(wL}0eooMh5qW-^J>v`Df?o*@(4wL85gu|I@w&s3X1=+&EYDIjEr?IJN=Ik=_AgD% zI0+)c#ZmP6e8|R!Ov2$3b|5zJlRnDHh<~!`LgWZ2w!3&Gb4*~#HFNFmkzXWa|Jc;e z6ul=G_ho(9xv`>!!eGtK{O((f6UUD<-IE5>bEG1oqSjf_U&jF+tUm9qr#WxQONt#= z$j@9de-2&fP%o~x3ACBOykcY7hb5wVF8?Vd)u6}84xM2(#}uTQ{kY~EjDPL-@a)n$ z;PLfdAgrimRaI&E9nC}W!;xRVJU*|T=6kO04b(K`B9V4lc4I$jmH}+FZo0R*ag;O+ zDM|WBZdk zTlosJl+2uwIL-rU)Vue#C6rH~{uFL4*t*hN@{bM{PTNX2RPE42Zu^ecUl+B!saGaC z_*^lml>CbXuujtqs74=`?2qhpvn`0bsM+}4|@x;u_aYHB9 zOg||QmaBG%z%fv5pJoX!Aa1|g^r^EiU1=^MUno5K>pRM+&(eRg?eA5!U+6nYSr9l4 z_!m8ojFz<`JN>O7WjFBj$l5}YDM^bstd9SPW_j73PozY<3NK_ZpC287jz`NWt)bV?b54BQiT%>wI&QPcRF9T%G}TST!;* zN%nR3I8rIU)INbexaf63%{VdLQ0|Vi4)b6J0@Zf=7AsKwg;Nj%y`UupwF@hoK;aa? zsT{6ZJ95a?>wbN2sQ5KLZAW%@RBv-@i+fFz;qMG%OZxm_WAa#{@7X0q;&+;Y3nNu6 zr*>79Iz`|sStNJ-TOJ!v&4~|pVG=y}bO1_op=MC^svomdDaizZXtyqu{OhVgW`^M; z=te#H0wN+Ynnyj4Wc3}-$0H=OdS+x^nRsxP`|bgCnxq`xc? zB2w>H3LB5i7JGR23~#!36u#WSI!uCR|lEOq? ziRO!RNTxqT7vTELbREcdv!a8(_R0Hq$C*`DfYv-|t)SNCsh9YQ?a!KVKQlBjbZ)B9 z%w{%tXqt@^Z08=GO#cCB7g4;R*bAh)(mF8gjlcWc!4{+{c!u!GIkXBhB`hnbr!T-46;GX?l~)A` z0%$MSebEs{hPsBlm&q3r1E7ATEZx!Gz+UDQE0lZ+(UTH0<-5=F5B^ z>DNOp3KPo_buVFhgNnv_!7Hr3f>*Ar!tQAX4h2Ez#GJyVf*tPcbaohdpRJYuP>-oE z$&kyWs~)f-9_(b)?Wn&ho?+SNA(-In_f#*r%h2TVpk`X5jmvIq0Zxp0KoV)jV13A? z`S?G|b^qI#X)06zb;IRUMsfyiqVDe);qq4E;ovP%LL!8-mOKVA@I$K%+yx22btKlX2hbIhA((2&U2$t>w34} zj3rWnr2;GLHO73T7xSM$m;X6J)r)Z43uZo&dufrxfM=0mHtYdc*cd+H@Uzn^?4b38KS$$i(pZE?` z-FqW`R6M_aXV9E@*~5e<2+eO)Y&j4C8DG9-;?h9gVt^Dp$NJgHGp_)GD{BD5Ac+>w zSAL$c=l2~%aV6tac*&c+f}0CxsPFcCXAilKjf}lYpe|QB7*5;V0J_yUIpl6MfyPiE z+Y>enhX;*7hkVWTT(Dil7rkvAYvLh7%Q{PvoTEYt5LMsr_P+08z#7o>c@6QI6d@T; zgDuKTG(WW9i969Q{>PpC4__!`0F$5cvG>w!74cCs_VJa3n+-Q4TfqZ%A~|3QcYo#w zQGzTK#qjUp_kp7_WJqB<>yp^Of;)Xpks^ky@#bD=Ivyw7714i{EW(NSI{~o0rv5d) z3$lKh8St$-P1KSXAT;p*-O^`Ob>X=zwKUn9l_B<;Icc-U5k;mGmeHRh0cu{M@ ze3|0+<*NX+(nsjSp(ASeA-C_Pq+)3%O?4k?nsGf=#>jwYv{6Xmzez9y&d|RQo zfNCPIK@QVTH~OSfzW-fj3MU6oS0dkSjC5FJ{vzHCDhE|B!Pn*2FDYs}*_?L(Ye8tQ zXX6CmsX4+JLy{GX4~DfBg!pyXXdm;L|9H$FOZ4}D0h#gSXf8eRZ5=}pFPYaErKl76 z9}ail7Fkdf&B}h@TK2iGSMODlS4m2qbXz)N1zXmsoO@MWrxCQ7^5gams-L+!A~Y2&tsT?C)yU(cqlE~;Th>Pz_v6K#-(+2D z=Z%DwHSpXr`|a;=qKRc7yHGwh{qw4~Qxcw>_vAI8af=nH;Z=7*!1|W~32?42dMA>H ze|e>U`WWUzEYaNlxi;~bYE$H@yren{OQO|y!AlVoX~>#0+aPjTi-r%FH0UnE=L4`to#<M7HfTLuSM*LtrW)xtgmF7IF z`aH=8UdhIp!AJa*Y1A{ndk$;t=s0CLKD{$?c?s5Mbv^lv%Wl(CRh}EN2C}Q!fMV?E)`|_m`Q#QlM}5s^%q;|mWoIwgfgXecj3XB~KUW2s zi>Yur5qB`?vPw!w-$_d*_VTI~c{Y8D`S!E4f`jU(B2V@nY@tPl8{39<6EOM7liLY4 zd_0d4kL2-*9@SdwW7KO#wo{(-8UUYdcd%A@%W8Mt1a;rkW%&z-ECPSn|4%CxNJ!uD z>t+Em5x0KLL^Ls;`7fCWEE2Ghu-p|Fp>({Ryr=w@b1-Ce$|;8A7-hv%1qMN>3-J*diw5QxQ`QHoylmzLp~NGx!TERktLxg#1DTg zwFd2G-=cwDYRzuVoh`VZvYn%2MQ4Jw^jYH%sqDmG)(7!ow=R>`sVL0mRn%O|)1_aF zwc&}X8RywbZ&E83mkj@G;@HAp1p9ionBq!cz*o^a>Ru4kz7YB0NMp+kdKjV}WI(z& z%0|p3KijpP1tq1@NYIGJ;oJdCs3OKb*Ir`eaohCH^7|jS&vG)!Et9a_N&4PAL|f)m z^rTDJ70}po%ZXWP3n6}2_sTd#MGS96J(ussLV_G|)9f471D@GxbeVbGy zj`Y0UO(I{OkDysdxBS618<5gi7T*Kplk1SMLIN*b>s>l`UnChWL3CFAX5@Xx=|aki z;btfyK3lOyaG~ewVaRHSHm9XJ4ZJV)sZjHz+zQ)scO8S(-losDQup4MZ4qI9u$^xB zuZ&55n4f|(>;|#WWd!-8Ly+b>(h9`@n}*si1z;D%k;)w8)9oCZibcxN03$cHv1w1X z6iO%LYL^ywKc}%3ODo_US6DN#_vG?+Ohlf+6HbKtH0FxU`B*7of>a#$ z@{TQtIF(09#axOij=xijr}UTW+iQM*9gvYw5;04ua_y~0mg!#hUbv;5EOSbsIR zI|z_py7PSE(O~A)d!i@@U(OoPyD)M3==C_V<5%44n%tf~ec;j$?bCaZw- ziFjQr1c z0v482$z&ppFyuTtQA8{hCySG{aUBQTprl?I+n?2}ID49i>2)UPr9h&_pal1gGi_ZRT2>S~~ zlIz3AjUs1M)M|t%T(oO)LWq8P0bEx~6Ec>_oYQ2Du91^+$ndN>^tk6@b?GKmPEauh75$w(kS!Kj_i7EEvh>> zBwS!%xZmXG3*k_DMH?P(U7lH%_l>+ZHs(y^T0wz??}PuQIh0N;ua&}V)WY&lqXyc^ z3PfyF?}YdR;Eih4;Hd5-`*J{GCZ{8e3qI``t*)jP4m4Vf6=$jKEDx&S`0MS`>UX59 zS9I+G<$@NBsP)iNxWt}pz2NHKzxn^%44nq%z@x#Z4*Iy1fKn;5#3|pMwJ{x_Vbmbp zFk2g-RoA2?MXcWZZ*lTjW6p;n`=8~gtN!uIx{{!xyY{-2FXKkMCm(dI{PUaTj7pxYag}juijfjZgE@u?J0Et9N ziZz2+cd*D_zuM#s>-SL9Z)zxT^yLSSrmm^ytpGXHhb##RSy@@TNvyWdo68t)I3uoJ z7S!7;>;61cuhG$Ag5kItBTm%zQcE{Tat~Z(|_T#{s~*aGnrI1 zNr}1{bF;o2GBtc2XY>`W`gLLzu=H^f#Szmx=-moeWm$mdb7I@*!%xrpS#9_W3YXsd zy(Nn#AOqyW1PG+BY?BE2ZQTGUZM%h?JR{6ngir5n+xpvpD>Ddw|I_&=g?iF~+2Mz_ z`2Fqb4o_rP2o0ZrK$sulpmI6S*$=KOTo741uYRJN<_drSS!tb84IVnh;uq$t$F%tY z;0mYux6Z6|xI*=7g8&cOM{WZclR)Ew@ro45zd)<1UXCpc>2OC!q?yi+T}zLI5Gx zx@!0&VOKuCLL1!1lTkP9 z)e%0=K5Ysp?TLQ-cCxIfs5i4dmfUd4xOeZK4$!)bANkXT(kDYkk-whY%WoTfi`XRa z&6decou8Y)G+ydV;og=?)nK5%Q9U8i_=>EoCOIAZrQI1CfZ=?F?-3xNWB9GB6mVwv z_!i`U-Z}bl;bSf&Z1WpSZZ0^?Xe;Z-^Fz2@GNYS#(5WNBm0qZLoeF}uP#(E+v)nP8P!bjsbG@~zl)@=gRrTt>+>|%M3I|J{ z{m)1R0=OJ-m{;Z-!X=TDBGlhb4P1z_%j_|q8)FnSm(KGK<_1+EI3OFeKVL1shD>z! zzlP8nRj!(JD4)CY+NG)!$aJkV*a`61bO7WWK+~DkMOtlu98xthN;ugq1zj4&Y}Eg} zAph;G{H!!xTt)_@MQsr)#!qV)Hi@V^c8-#_+w z!1sf%LtJ3WL2Av9bp)=G1ZQ#zCrXBXb_{aLyNM~q z5U-u9LRz!x;^yk=7zVq4|1H3#yw0*#6hB$nSd!M90x+ukCW?aX>`FWg;|;6UfhH0O zOT z1&pDrrb6MaoL1l%D0MaVnDYqWx-AhEGm6?k)LE-<}ttB*M5$m$oh%lWSU%sUO z!_oO~<^f<9aE1GCJEqapJ%Nw@n9-$v;vLx>FKoOcpyq7_`zrN&J>!2&I$Vo7(=H%f zndPck(!-qY(LXdHfwJpC%3%F&1y)gJ>>f8pIRM5j2M%HWj}iU-$j$eu!an)#AGo>y zHuId!q!Bn-ULs7##`lFwKfN6Pcu8PSkOK0=vP3CYf_}FC@_P{Ti_NbDDtL<|U0MA7 z*8;+Dzn6vsyuyzL26ayKTy?q>a6O8e-GVwGB1uUvg9TsfZ6hIXK zlDV1zN1h8=@s!GcjQhVW163Nh*6AAXvjCgV>R<2J-4&5rO%nZ=wC%< z#kt@pE?>=sAFAb6+-pjIMnt{g3|nI!S?o>}9v&7K0az!wZ-drZEIl;e9d0j*F-tlX zG`N8fo*6)1_V>%OQ$blU>9$nAaG>Gv=E6tUvT|#n5BG#$p`hvLSw~05 z`!Tt2Nv)K_S0^3AI~PVw!L(yfUqR^i-7muE&Oi1)G%6!VB#xZ}2HgIxT0;!F?c}&i zK{xJ9$1Hn&1NI?Q?nnpiv)Jm1RaYYQ{%|t+fP1g5j-_cf8mHF`>lk=3`YT7uCRNDA zH~?#r?pz9lx7H8uH4F_&ChTf+@7uuMQ||0kcYafiELEbi-t5|Z&72Zx5GAU@SxUAb zP!#@>!Gnu8JyP~<_h-fi%$Kf|!a`>eqIJ!(k0PT*^>r;n2JIhP$Rh5C!CrIl|6w}{ z0d=?xwoyA~qQ`ZVfsU11C9vt-qH&;H=&5nYQA0R*HHFFqo@P zedk7aeBMZZX!P)%!Y0KFWiyYBdhs6au_qI61ed3SUo8B~3Rl8`eotl9zPglykbS)j zc;1l?L_`$aA<EEa^$s%oVf4r27q8V70KLng5_&K^6E=h;*z@h zLM;rJ?RBE~2a0c~+jQkej0f?+zHYzk7IA)BNOQeM?Ez8HpGp%7A5Z9jXbN9%jRRaW z^o#8G}hyk``a^~7u&7S5n_rM zmascJJ7*eIe9^~o75f``MeK7D5##+jUs)TaOlRq^lH=alrNe9Z zbt%o{q`s6z&hb)do#L_j*h*iOuPVm8eNT96YQ%jBMGwx`kANDEA2!j2up~M2)at%T zq$uyR@<2B4;zqFNj&>liB&prsx8v`b*@C*+ot3R##b@NMARgc_7C)qmg=hjne;m#c z56rvXe#oljyFoeZe=w+_zq_*HV4PL$f;FCKYZ?;@y?CxBtDz`ExFwZow*2>sdNuElUAG*X1yKUoSp2==cEv}bI01SQ?erXw8;TJw*-wQ;T6=u@` zzR*aZA3*bZK5>(Z!*NOlAnPVXR>N;rMp}zf5Mt8%viiF+7zO=OWGeG{A1SCBq-)yq z7*ozT(!N3DWvVyzT%cdt06-syY0%?}=8L7GB}{Y!m&-NCpBaeN7?G@q&z3jYnMvG| z5FZW^F1bf?k2S%_DusDABG21@>tiQDGoWxMdSO+CRWg3ofnz*Y2(Rv>Uq{1n@s_ZE zn4_O(P=PK>O<_!xaH5$YgLt|j1|YMBP(LeE1X4OQ5@Tf`eP2j%c2lna z-I!jlt$C^=3O%Kd&vkYzW1oq~D@iXkzt!@-IK z_L9`PNO83fwLK;$xVgmk?3+}ZOw0mu0I#Q5aNH76=H)v~EwA!2pW^G7OL4LSk3D% zXC&b`ajiR1yig6GLjNO!KjaF36WK`P^Y>(fiWuwG^OLqthH4MJ1Jw zqZgkm(&L9r+w@XxMf-iwE6tQ*l;xQ!9nL1nr@CGBuX>7tJEa)zg|@g=T?=WWI;u=l zp|Vex3Yrk4(4eW5!y+=wk&JA#&!d%r#r8KD)LR(Qg0QyNTfvWwmC|;w6&VaTXGz*O z4yt~s3-%d$)2-sP9~>xdx4uyGkgq2!N!PK_rh^#{rl|(&w0rzc?_xEoLv3oO^&jFn zCY(2F$~o#9hB6<6Gg{G%V%J%2O*QFxKb)3#G2HH_rZW=PI@fT6YqS&PY#)TO$$WbR z6gP^ih1vA6%3n=)@9nFDCdA&4yxTChr-Mxk8f<7fUA4%-Xl&3r8$4n)cKt^! zPbP-8di9gEe_`$3OtCoXZMU2B;B?IqreB6(2^-3=THP5`z(&-hUhx*@bfjfiYJn&a zgYT(o#)9gc64zDu`($Q3K`PZ*Jp7vS`I7T-dv)@M922%FwW?M#c>;)IZ%Jz22@LK7 zljqVs-n!!R>8aCx%zxs9HFu^S0@RwtXFS_PgoI*T5P?8p`8O9pq4MmtYuBQ*RYKi% z=Nn;8Zm)9uWgba5P0YO)1#XouWasJW=K%6y>Y7JmQN>MsjplKD`}B{LSW)QZXv&8G5n877Pjk&Y;dv+@Xf2Nn}SXp_Lt zWNMbV(H$)H!_7V)*W11hg^%!jTnCxr2mA8;qNZt|uU3f(6sPOb);gf<@09nrY&6~) z^pJ9<&~M{+IIb)%s~CCrNJ*&isd0)7NNEF-aKTI~ROR^mj?pqW!!p>L3o?1;GL4-A z8eiwiI85h?!#d^U8nDtoH>+^~E8G~1@0~@TYybAc|Cxb&mV0z>11yh8;syA?+c+g2 zBv4ZXkn@9;u-p&aS;kM{%eo*7w~^FBhsBB0jpFX6=69B~2B|Hnx|7{%+d{=Jy#g5w&{}a$>TPP=FvBXJo4|P#p*Ap~ zXsJ7i`ms5G!n!<|Bon*4HFAtDM~v;hu$&JIq;rLOP3);{E`GW8*-@ zQ_m4Zy$V`RMLtLSu_913N16Awk(%aqA*x|@W+1CGJ>{x8`_OLAWiv0Oie8c(?6sUE zpC|3n?nhT1DZ2HTOi9q6|DI*t$>^$EoU%|;hvHUB*QfC`Y_j;!l|slrbo7f60tv07 zDxi2Py?$d0ZwP2rS>CMB*$y}&SgqO8uTS+#Ki!Nfo6}Qg_(2Id=^F+aMLk3cl{@dQG zJbXkmJ0_3Ryc%-dlag2Si3?jiXnP%MK#4`E59J?mj)Dj;ytlfWa{m=7~^lc#Sr%QB5%63K_ugYs}T&wJ@IK+K{NLKI#HI58i!$)6KSmV z-oDeAm`MCKZ5)=(5Fzo1eA1E2k z^Ii_YNiR5@mfij3#8&f$EZX$gudO2>GL&vC6b;c3yo~xvTwVvds+APM zUvB@{JBzYL+Crx=WbH*yq(<{NWyGqS-8J8iI!DQgqCxkuCXFoXRc>>h?4Q7;Ps~ zT_l=;bzgX`51B$Q1U(q++qc;|a5o~^N^ph<)wq0Gmj($3*jpT^z1}h=HKVEclJp4O zxcxjL$exnOkHrdWj$u59UAFD!Irf@fBl#C^;x7l(uyGpxT-%%79JAwc>vodRxB60a zNcR+>51rn~;hFIPK(_PRapS%g>=rY#X6Eig6;)T)GT1W~mKtb#s{~-k(Ayb^ikom~ zj(v3f=^#0wbf>09@9l&qGdo4u-jf!u*w+f2nwFY69Q_x2-tL^$?W-GZYppVnEVr^0jY9s1n+l;nrMG^|uq zkMpq=TbuQ=OcdH#eF=4oIseJu`pp=wa5E}NV)CIBg@FGs?QSgH1d`yeM ztCb*oiVO4`yzFngpAi4yBifUG55ArrYcnPb;_20;N2a;eWT)%r*xxWxTAoP=n%f0O zJ7ttKX16@!CC%p=`NBh5oIZw&stMR|aPc<^Z-D1=7HTRLzy_{69Cwz}u~cmbfdlcX zqKalY_I+lpg!F_UltBX3AVeeDCr4a_3sfiuO33E&XlQP>57xJ>g~MzUwrcv<+>{=z zPf|X}x%%ae{%+1XhzR?V6TMi*y_5G|%2M0~oiXFoaT9905i}ZzMeePpYwUhT=JiSXXOF!=j!ycGU}`4T?D&#+jD zhG4jpq;5HRwsgH|{Rd4pyWg(TQ^exN=7ZVY8G4M=U69WlUQ3N(r?=+(QzC_V{25$L zAqgM3ws}*ZJ${cF>|`IQf{eNDHqeddLF40BA&*t~E97_D2?He-B#17v;MjH$RQ_6U ztU$D0zJ4d2{Na^`ZU{0t+t@gwKS1nbtl!EArtspE|gw>OtuYO!ck z@TB0kW#jyH+M8Raao9znt*te)c|e?~47KOW`x=l^VY&Z)w`pb}*1A%5W7=|agjHDGu|U44#;QYv`C#Kl4y)TaC_l6J@gxzG zI9TCGXshuVx_;jikmZAoy_ka4tllC4=s2I}QZ#&Fj$S3Ft$>16HE_P6g{iW)f6R&Q z_=+>t)@ab^!kb|n@57a(*M+yco9>Mt;8ujDdJ_cIV+#egMo<+JOh>y?pFrBd7eZJ> zA2uG@WXlw)RJYE3a_e=;FXuq-o0m73S@qPDVMJO;C@FvJ)F(?rvVCyNq>>ZpV(d*< zqhtDs-Y4&uCm($c!Qa{3Bo^gIn(Wh+%lfC>2_(?-_zG?<2v_*pSMIGA)#{2(6bS+- zf}UI3SC|Q7nbRPPOYl=f{`>U-9U;HxuPLJRn-iBu%%53TP1LvR4b@v9Ay-M0#ZRR= zKhM)r*LwYwd{TuL4C5C?h`uEkt53XuJwAKKIlq#(Fk`n#0AD6}=OvgH18zpz#~WWZ z2siRda z3-&0R7cYN`a;-%&#?BA>jDPI3K{s9HnZZ9wNqM2o1@UHYb{Dgljx3=)_<64lv>(0@ z8(bG_<|AzmTF;RXrzO2L<0)Gt=Ek~&aw0&RxzPSoY)&;G+qJ>;h6$fR4~z)EX8R-x zeQX|;YhL|Hi^Yc^?%J~N@7B65U8**#EOPkfl}1+4foJ@=-o`60U&1`Omhl|#%Pe5) zC0NR~Z(o=|(?KYY1oDuzrxzewst5`jIV13NKJ7zIh2jDr#q`NUP)+bDC^_Syt4F}(+;RbrX-kCi;?N z&o{e8Wh=etc0nnLiL$pS4DmY0cu~McQ&>Y=nGo`f(=$dRCyPeUoVNryCVqBbVGLTs zXl|ob%RUAD*qDG++!yc4f!bLL-XFVa5%5sq3sv%+^io&yHFfTUzQ@H&;I*xu&J=y-RA+)`+yl*G}$Pde72$CgY8` z3{y(xA!P=e6;Y89LO{=UJ}p+j;<8_F4lK+nt(EgM?(?`;ORrQge=iArE76MruYbH= zTHt0%(SA}5m&8<|KpB~q8D}bLy!eYj z%_Di{G?qQuWwrtW`l8_GMELgVnBp`GSZ>R-sNm=cr;FZA17j2Ct zPN?^hpHO3xaBF^XR6HK^O>N&nckLNScCp=>?A7VfN{5Rjh9>mdVEyfF7O%ZsR6?(5 zSaIFAq#6iPXd~_EE)-PGUwM-L^xBE{LePm-_z#1eqm62v1~8F9Cz<*LbC)X1?963t zu7YmHuv$aDefUCwW76%+NxnKuTc|v0e0PJ-l%zVUY(3BOc~^11HdLaAxrnZ?GFkVW zY?yYhlqb}&#RR3Q7EEJ&Wu+R7E}^-R-bYn8NOU*TPprFE4DVZcQh(gdaXiXWafR!g zrH~p}$$dbz!m3AMk1PlFux_55mNf7#;Dm>_)QzC!50RO(vDhZwdeHqSbFrvjsx4CV zk6T@+^Af=p#=QXFpP!wX8MayexZ!3*at{57p#6Ozui1sO%V+ONi^tDOO}9`6&X1$zR3E zN4AxnMS7*@MUc^jypQro{vOL|Zv8Wbn&@;0>T2)g^)qWU9VR83-Yi~qFoolaitN=q z6GgQRBw3*pZ%FowQ?G}c9w5DIHy8!?+F7?xy`-rGwHFvf^8%Jn;sfx0*Gp?`mlO4D zfrxs@BZk_$5no-}T6x-Dz9EL!BZL8cme%(b&?Z31&BFLzPBFtr%opA@Kf?Sd* zy%EmuaNC)Yv`Ua0pVXunQ#&H-dZ_HYXN4`Q=!j(`Zlq{JuM5;t9;;SCZFKhjp~d96 zj#29AIEFI`F_*TT?<#nW&RfncF-#&p59-d&{;b-r+phcudMztMwPyylFt-Fg~G9;c-+f>j!?? zI9t(7QAV@dD>*M?zjOt-)caN3Ye_1XF@kAScGmthIFD(+mp4`LdF3{Hxa?h4gGTfN z-0Uhf6L`Iw>1WuZ1xzj>!=x@x2~S!$jLu*!nxUYV1|8}eYHA;Jc0_Yh20IkQ=4l2r zH%v_fO$yj;B(r|T4hI~_4(pd9dXsC8N~XZ%z{4P?wpJ+GZ-3`_#7w0Dwd%clGx$$+ z%Ob(@qQ^H^det2E2po&2wV!%*j#daZh1U6e_u$drG%3_8EE1~#b8f_1uk zxYRAy$YC~5r_`cTe|Nc<3m|%)(lkQ!55>(U4AnzHme*INeOU>YCfIZXE=KZRpL&Iw zoxD_4J>M7^og@SvC&a7_KX9r4eEiiiadw_D1`nrE9oH$$NwScI^q$XszP}_EduD&M zUIs;5eKfhjn=H0ps@#$DMN$3di?q8jINp~%Srw$BSC<$qOb2LAJB95e_u`xe6CPe((-Ea5LYN zzt@&)ZNdq`mQL+n*4cfkzgYMF(9m^(TXAA*dV#Kc{L5xaIN0MVqrP=ac!>pCtfyF~ zhO^>|)*;5){5TdTdN?GImz@~jpf%(uaA^C~Qj@{Xa$i~(DgRI**opyWZ%{QKEjdvy z2?Cm()cV?(7Kq;2f?iK4Moc(C9{L2YnwYpU*@1l-&Ev6L{6mf?LB2vSA!1L+Ld{ub z{JznnsF1JJMk)REk9SUlrS1th&hBVJZ~Vf;0w28+9$~OYc#oOxx?$oMRkhkOHd&mf3g-!m$pQJdFV5ftesc@_+nW-^l`_cwWFM05cBaUuXM> z>3sDSe^3vkg+a)23Z@tW4uYt(zh@}cGEqQOfq_1t%T=rsi# z`#UPM>>JR%z(#>-)jlJa)p!M6m(@yu1%)6OpxJWb&7rnRxMR zYTm@(kh}V|z8!Bv7|qB<`ZGD?@QYZ|H5ml>ZRmb^nL&TvJk;AAumm~-tG9+PkiaEC z$o)*Ty9KUgL(e~qmv4BXBmZ^t&Q7D@-N*aEAzSQPk5T5k3#TU-&a!rksQif$jJ#Ij zJa$TAqA1=5eMN_8SW%&EFbGU(B^Tm={e;zPU5f3|KD9g07r9exxz>Zz`O zQ8O^kv`ZsSK%$MOB4@o0e0ZnHJuojKKtC&OTTUAb5f;E|XKwrBnX|a!CcHd`1uMww zH>4L7ByXk8l<>!0)aR1xHRMQDQ(X7{sIazSW_kV)$k-L;edND1dW!Ta>s7j^5 z)a#~T%R5Q80x@I?_}3|9V5k77*bI4<`i<8**x~o*#kDc{8czBXnkh- zftf-lpYvz|yJdS^#d3yMSr(UIJNdBz4|s!#Q_%qy#2%p`H^o zRA27f)vVbFjZf%3%f396%U@_veaNW|CksoLLDOy;ju;)g^1e6UHax+k1s?O zW3PUXKO>4nQW#1iA|lX-#`UI|q7E#(-1g6`HcRq|nv`TLE#oJ4dF?rtU^+3mQ?d?I=N?!3=zN}D>oUaG zaJ~dfH66Q2PC3qc{73x~T;_Do(icGIs@CR?7O3$v;m6XFt{Io9iS}G9vaUumYYsYD z>ORmE9hZ8WMO0ns)>YWd)sy75*^8L7x?vOWyf6yi>&hu?wVB9T;ji8!eTAw z_ITdm2$KWq1R7B5bTxt0FFtYZmk@UDqbl{KHvqeE3AQS2x@f9XZg&egDs2v@(J;9g;hmgJn1~)-^AlbSG7d0+$_~>P zbgR^5y>oYR-{?YJp;)}j_=YmYYREEIZIG3m`i>EdeG&iFNoU-h*}KAmq zl&#N-jl!p)1yo8?t6|*Lnk&CLK^jAeUI`V3g&y zJgT%5y&lx32}z%PE{lY;mM>ykr?^zjzjmahiTgP&vmA9 zk6Ek5i@yb`6i1#yrR&7(65>o>^xM&?66CfW;`6)Z7ZGe{M zXJxq6a33=@ii6-=xO6vS^Rr(`nSYd6c<#p;>RfnasGj{X)@Oo+I1BpFEsTGmdHOSJ zyGr))a($PvU~RBV!iXNe9+Ka(?0oYh6by7u`8al}^T6?S-Ny5P3ci|tHv?X74z@fX zD<7}~(a0_ofg3p5T0d_~{dDLJG;H&R7=Ki68z~fV<@?1Z3o?WbdSTl+ zz3q9qCiWXJ{4TM`BPzG|Xf2}$F}QypVE|p2;Jq?x53VK`>W^{0Vw1iop9+?B!@Otu~vEIlBfO+j#d zF)sz%7IIY-sBG>R?nE;r3{`A=?0PcX{56D$az$^LDi-c{W-VJ_;^)2^HiKs_lk->F zx<93@W*@GtXX%kb6BnG~xpUKQIc8fAxMu>Hr6=whasCPw?2hf%$K+CUYH8DL&A%OX zuK5b64LWL=>Qkg+QVLGlnyB}u)Zt(ddMof=j}s!B#)cUz5VJb!gBaq(bX9e3&`p711amolvFpMFIOfJCNpd;B{ zap)*n*q+on_2Sl$$#Ny7{~D+L3oo5Zn%ToOMU$?ymZT4+`PcLlxd4<+tB*+CXUaY# z61xGPl0N}Xznqm1car`McN=hxiWl^}ilm_VV+3PZrNh;wd?v1fX z66#c+4e*$mca6(E+g`!WR7encP;~X3$V3RiA)vi}-|gzYzqBoj>*fQXTSxRTFOx&V zRNgJ&r&Elj6Wy=Yo7rhr#E)V<0}x+fNj{%_-WXtiO-~(x_Z_nvE_sjz1N9q~1MJ&4 zrwll~##%#F&%G|!`OdKNn;WNJGr@OuJZmOv^U>3T8)hrjZ*bM8M6Ji~)Ux5|-qSJ5 zUVh@c))FLisHc8&(XD1P&~_F`L%Uioe_5er-oYMKu8kOuxiLMyr9kT`6f=Z~hORGK zrk*eBm)&(M*e6P?D0IlD1X3Eq_7z8xrb(eDFP0}qnOtwY0gr4DJ@N)L=vZHC+`k_V zGxkj#(*gK!J7TLES&LiXiy{^^=n4QwklL)Rye60J`I zc7$S%8%H@)YBwh5eWLhb{5%Px5~V~s=|s_5P=mAJI*vKxvBkFr8t!up8jK9b>Lsbr zwiXNKIjj^E4~A5Xdb%hS6mG8GM>YGT7xe04e%r=Ri^OzV8K>T~slk!+={vu~h*F+jJHGH`mX)w&vUxBSRD4gpNX{=`)eD=h z5l>7!3H5x`f_SBN;8R)$^eC*H_L@_87n!fSD{e~6$I=sU&s3bgR==t!F%!C9iMza)q*ui_F3TjQuPnX)aP8UGGsCvz`U8_S(U@RQ6dArtEoQR< zl*jmHTzV(@-Mh1%Dr+xade-dv!|oX-kPvg$*j>d1hocOl*AEfw<^j70UDnYDhjx;? z8D@zO2oIWeBn%-nGK8%I$AJ>~0xN^nvD;_Y8Ui^5zWgj5hCigSdSb-ShZ33WJ4rvV zse6^+k(N5MGEQ#LITB&EE%;Eh0N%Bxx8(omqyIhdxs~^GwC}F8QWh(Up^4n|(w*a_ zoC9{u)u^6we_gZt^0L*|Uz}+BP&YR8MNj(lpQ|ef6_SX|6007)E^sMj9pYjdd`EYJ zi761>e@M6TVd`sn;HHPxq-+zVZN-#ZPF7@f#XWGf6Jj)SV7+65kX`dg!M@@-f_nT# z{C258cB5`<(P$w0Bjl6k6*6RuB7QVH-sCECCGM)nhk&vo%wVeTy*kl6%dWS_=If}j z1Z!gr-MD)s?<7hI+VCoy_m}tfhHZ@5C-rk^96kvwC$deU;E9EdUJFLln->)A^@NV} zroc9+TQ9+~Z;tg~&j6NmDQ0uJ&<5XuQb9*ySQXiS2|m~Pd zOjt1P^PPP_&iw(5wgwXK4=4IgO1ex^&EG+mi{cAh==LkUg34{seY%S@7*gmyj+0ck z^iUEvEIW&#=Kq=ExLwt_&`ZqgvP`-mZ)(~BR?oEab}pp%W8E0JT|?Zny;6UISSd7% z`*49Aq9(6cCSeFGL@pSD6|izk`z`!J4a4YcPH&G0k?xy1vaGB5?`17kC}R(1wI#P> zFlmh81;$9_@^{{VtqW#lt)3Ewu}fh9pkA+gMM(1XyY)#@M&7I=irXXE$O0pTy6=H? zWz7@skVN)Hxep&cxZu%MBZvUWcIz*m$n+8T(G?zpO1sFB1|lwL1Bkx}=`^UDNMF{B zC2!X&c$eF6(e^=QUufr86|y+Xmj~(1CaBMA6px{r{FVxi2~rt~Tf#}EMUEN7qpAql zrozW#GwB*%1D0LFvhm|JTE@^rnHpT2s=djcSC4ge0tXKp%0L+9_`dGI$9ga=_6ipl zwViFIWEG=;@%if^XDFXj-Jzfiy8fdARy*8J_ZfmZ?fk!oi+i$aU+B(B@Uk~-j`J}QPzl7D*)R`yGbzMwqKI+}Yj)XdBp$Akb`ZHVFRK^)CbQArk`wik# z5HSm0aIaGvG~mFRt61%sVlxxf5107j0>(hd>NI5T$znL$yw4EIUl&Hu-H|J)APt3n zgi`4l(k0OZl?o(LPq)Uv|=|H@B7MlOirh8GtDoN z`VLG_DiXJKVJj_Fa}axI8+2RB0q=71rzfFZ=;uF*1yZBZTbmo}UuKG*El?0%`{u6L z?-9%bj~jplWQ~P(1bn{~`+kJt!vkgrk{c@r8{MF>$C>xoG^Dd1JiZb|E#x-lpO@?JYx>-dEfSB}3Yq?Uf9>aTcO)v(!ZD;(5glnHUd0Rc1i1 z4&9*tnIpD&)%Zy%NC}pZrIX#>x2e$nv`J-HXVbJJmOB{YmTYXk_}u(VP6avB6BOuj z$DVVg%vYd8o?4eQ)KAoAphsqI%#qbjq1=5I2wJR&%7lq#u;nc(4GP5(>O148>gl8> zcg&s@<(3mebNh%aBt%rZ3C0w9Y*s&ZYWOuB<>FhHx9CCKW2CPMb}Tb|0CqOHx(-^(jY&3m7vyT{aL zZ#@fT8rgY?Nt!Ke9bb?CMkN`!>A zkKXE%XsRcT2^rX-q;MzC6)w{l#cyrFEC3)+G8$A-hTcAYY=kquA!YFORCyG`xn#Un0AFHwr*S@2Ow&r6Su45KmezFIZ@H(^2iTYDHP344sGtmPwt z-8qps@2#b~N408RBhhb!kX5jt%XIiN; zU0wanA0-TJQJ2Pz`+;85>_7a)pODV)SI2}Jp`fO*>i|vWPp$HoE4~LQ4rr7 zw?D|QexF28l1eD~f1AJm_1|*70a*dt1FaUazl`u--c~3A+ilg8P4ZvSSpOXMA6F?~ zfz)*IH;qe2|Lf@fdF;Sn2TqZZ<0_`TX0HB^NB^gQ{|o~DdIe_^l5a$Qm3zhVzrN|e z&W9!lfKQ-8=ijFP`qY1#^c++8@bCr1mxJe@_%OopKT5#9pUu{}ycLJ1o7eyqQ6k#$ zZ=Wd7Q75mEAT*H_tdiM6_}Clq!|27wGa2U79fFPf|YhZ)GGU52$^cTH!8p zUC;CGx1;+pqLirbb#CQR>`!-^I49UJ{y@#+zg)SO=X11F9=@Aety43oY_D8lO^r6= z`$gzyPcQg9;yJS+VJRw3j_chiaP9cF&z?OyjD%DPSv_Mrd)745`Gxjacifi2@tSDW z_mMxR<2e=eCdgR7%0|$XI5!ZEIAj*}Ox2fGZ$zG#t6}*GF8gOu001&E;fVA71!lzP zsIx-3t;Zi~R%=BSk6f`;>yc^Kb``oh{P;L?mg*0c10NMEF=;;KvH~PP8^r9%z{p17 zHhsJItU>|5wdVOZ^Cw?JwdBcXWiydew5!pyc?CFl->Mn7KAVnO-Oe6oexd}Z@Y8F$ z1?URf=+B=&5ASX;7SlWmJwtgq$CFHkR5$NufjM&(Dev~mMiu|*-7)Q8 z`Fr(cmQS2(w+(1@Iq)?4BILt@@@geRO< zY(!FWT5xJ!B=^Sk{#@w4UcKff%Z{^8lyc8hN24Et!A5UF1}~_m=2l+h*Eg4v{CMtl zZ(Ehp^)9L2na>|Cm++9|UR_a291wfjaKZJ~8zCD56%QPS3)ERt*p7}8I}jSk|5!nBsC-n%c^ zRHOBrG)bXuL%bwi+o3o>^A2r%!Tbrm`YlynY7V*ek}Kxb5%S1ODf4Wjs*t5+U}^nGBZH;16U1WWI(-A}6)wbs3l zkVawgeh9vvKRz>Mj%J6L6%oAm=HU~EThS4gf+(QwR6g^>6`s$-uIgCZk>q=5ro^A& zh`%aAO(do0&iqRo`xc}_@Jdm7q`iBs^5`ne?pVn}e!-Iakri5UF?o5#a&K{lFC@DK z4adLpc z7;J4ESW*t#@WzoHD(-?HuU(s$|;ApBC$1R8vV6WkNVY$TLGHOKqVz=UqAe zBO}?k!G5#HnH({4rX7)^W=($FPY~_e4q>@wf_x)|a`nJMX+N|*6+?0B3I4=R*Ub&J z656pi*X{(1ZF0dfgSliWlSbsi_!t7xHgqP3mb|_$g6$2x1>FI2nK+BtNEqA?GSd0z z&pbz7svkjL>5x<7MOE&bSET|~njSNFQ62Q|S_zY^{mMgH`qx3ZoNvC}co%h!zxDWs zdODGg8wg>u42_YkVDdoEO!`AR6E9Y_|?PnY<*V( z822pNh&Msgf{XVjeiozr)u4groN-dPv$wGCdyl_%W5jEq?#RuadyGze70dohHlL6= z&QX$QfoSIk@~)a$ABmNu7u>Jg8yp#I)f{^TCK3#~yk@19s{)Ua5v*WTP6xlw&A?@{ z`OZjsHD-u8dn*?Cn* zK4vT(9+ZH^v^WO5GW!#rJn59?+h&3<2~5b~>zW23#Umg}o2Vo6x(o9`eh@3htUonj z2z}4%LSwE1x;Z((vvxup$~SdgmC8vgfrNl=djR36OA|8Sj_s|G$RrEz(#3RGWn!M| zFPX{zy3X3MM?N<4rCTWe{#W3ZjPUc8Lvxp$sYKvJ%~;4Td6l@|GB4VJzgCafRYFB+ z^GaUc4jp=v3=Cnt+k1ohnht+x{ENTSW`CWGVGv+q6GA~hq7L`ydr}II*VvLA=7v~H z3}{)(B6fg6?)S3IwJa0m82&y6qoaDgXTGIjrA(g655u2Y-Bo{2em#>PwGfevpp+i;vUR zg4YhZH4F>G36Kv*y*!^o8=|Ai?Z9Tv-7~G0|+VD?r`OA^|^A>ph z>yXmvS*M?DIsfB1Dd)&t8H)tJJiPX^WccT@{C1_OMJeTO_khzQ@&rz7%G#9YA0GGD z?fuKgj0(w95k^TYt}p+qVE?un?;odRX|MBcz(4#fUi^<40RV0l=Tn|TDtx_%CI62W zg~R(hSiIY{^X<=k(7%v`A3qt?2PF0Xz5f4A{@;uGPoe+MtN-go&oq5rQ}SQ3IRn$n zr@;YMfj={!zvo~KU%4&^0^{=PLVEwO1a+>geWDT4?Ts2fN#4s79u;?4z(6!Yw=hl> z)pb-gen=pl?$YNo^iFi}Pgnl6rf9od@>Hv`U@S%_O6Sq}AIk?+Ayt|?M(@Ii<}hxJ zSb%%bJ1xQOQ}2VK%L% z@0$2(scl=}SE$Jd$muTKf2;Lvs^xK^%7#EJW1>I|Vw@HWN?mV6(xNOY z8nt89(en&VQvZuY{*c@U{1e(im>Qr(*6W~d*ZEkK=qoniGXVlnsDjqJ8(x=6`GKX*$5An6CF_JlLEKZnOUy_;a3S&-FA& zc4CvZ9eZ3n9?5K|fsiCX`g`HePye^l z{=3LCaR6avYU#Txm;dG3{-@=3nwI=SuTwb7ueh?GBmVtL8wRg?PVR+ASg-E~X1;q+ zT)&C$(>djUuH3`lg#4}LuK5(O_4$L}h5mz{NU0;|7k3C>HikVOau`|h`1Xws+dA94 z9cjClw4!eIw+o-*@jbYY?iNxB_|NhDVkOImoc1JcIE#;CIJk7wr8CM3#%h(ah&NP> zN#3O_J!z3Fke-iXQ#Xh2{<$9CUpKr@zKn7Vk2di_qu;uAOKNRni_<}D)=$18>)Uy? zRxdZRK;LgJqWPbEYxX}>IYC3iB`&V(P_yX0f1%_E=P_*&cnwg*!;>5uQmuFQ&6{^` zdv61gVO|-CM|4KU=hyA1nOGV|A{QQZvyJW3q|vDefM82If-V4BtW5sBbSFYXdKCA- z*cdJ?X_|2^1}1cGOt5~F4`Xo zM7|SXR_lCQJa;JQzBKSQx~NunRLt52OpJYFHcQIVi0t+yrjAmMySliVAH2LP>^gVt z@dwk$0;6c&++5ziQYBZ(_1A2DRrn9$r!`$SoA8TLu6EthgwmDK3e~RNv5S3MYh9C! z7QgmV9lY~oYCghzGv*tP&HBP&=$M0BGbime0hh!>1wx=-$g|& z0gQO^?<rSrqQa39b^2HVGR*$NS>&moH!T6+JYIGKj9hYzK*0QYBMGxB{~ZomYH#52GV^<6_ATYM1bmAPef9k5R)A;h_F2HKy23j5x7k9# z^~$6X&Btm!JbTuBHY=pm?NCZ$M%JDvjaa47UqR>TAi(%2%Vc(5M-m=+B00N=c7#HPU64Z+C6F*W(f6qiU-U3;Sa#>}+RCq&a^p zqk|bbWp(UNYqVmLwDuw&oh73zI6?+CKK3_~`(30<^r+6N9Xm)!Le6wLX0?bF*I(sf z@reO8@?+5nHfDNG*s|AvF}mS~84u;lv2H*dU0S~|-gBjQ0LM{VU`P}6249S_tr-Y) zKtb)3mc*{h(!ctb@(joBCv2Lx6b3VsB*_Tj!uNx@;r_Hs?eL>G_U&+?nIJFv**vTgA2*hhR7$F!;jgcn=s z1}RD#SuTCYRrL52TwET$+A_&jXT5vx{`fQzu#CBe4th>sEk075wBGiC?eEkNu!!2P z8v(K&V59R965Nvv`{r-PesF?k#0vF!ufkHSTA+@V50XO}3cHF{ft-7LtYrd|Gx$6H z6u=YdCqaqki1FsRZ5#?LLX&b6FyZQm&;N(*l zAi1{U2BL#Q2vUA&sF2fsv^=8re=PV28S}c%~lKo`&S$L%X!^D2B0(8D5k2-T5SBfWcFDN}DQqmxu2* z?hKZZ{=TCi$9ISI0l$3Cb9gABVsgll*2+&PA* z7ctw25?F`V@B<};FmZec6C9%f5J(^8?(0ze{#mbQizuI40C5CrU=JEw1T1 ze5gUO^qm}VRheQ*k=<8eF1Dw-A7DMRBA2j~OkeNsZfGgtQEmb1=Frw%jTu5&EfFLy z^(4=gTaw$uvR%*i7tme60bQnZ4S<4bHwv5bJzA;%YYAfNj5E^gh93&-$j0E8q6q`PC;|&-CPES5cdXybzdK?i+lf90tru#hE8}NgC!qrc=I?uM zRaDK)zAXl&lZEB$7QU6h`l5&@p%V_0H6~cUUCi4GTM_dfS_xGr4ikc9>2c(8w_`(h zq_N8OX3^K{^2><*@U9efS)1Q=oHQt7X1++-4Ir&O| z{oyUlzLj0eY~OO`T_2x>MAV;@e~HX}6j6gPMX?-Wm59b$V->f^fB+fB?XDAm3E@Jp zM~%!Fy4JL z$vF=6`BA2qY}BsqPkwPqs!=e{WCrWjjs}Q10fMg>p-qi&;82|Q057u=MuZm8$8S+E zoda0+Y7;rb76gG#1-OSy4;!AY*_XP`tAq8|8UZ4rRsS(M(B>1#xrOxG`!1s@+%0mx zpXR%+{#rS%UE_yYyhBl--j86l2H`G{zNF}1)Q177gwv0o1o8O9C9z%b9u&*=*-~q9 zf&k3<=*;n&Urw&!Q8?18?4)F~9Z35-$4n{#qYeBw zC<8TgXdul?tH#`E@x+~%qv!k6RQ*oidbfOB%YQw7{#>o!|4o}2E=MxF;uw3+PXEhN zZ-76g&v9c`4;Qo)EV4G;TgT^>MB(M^r{5sBdY#buZf=SgUsGHSzEPK&E!rjZ`+p0WiLJGxY+{ zooS`Sx3{<|jBZeLp?H6vp?R>eSm2)YQE^X7t45GX+fYX$56s51!c!eqJANM?1P z!Fli1bmZKipIvsesO|T51Kk&tCY-F2+Mi6M6Cc}Gn(Hu_5Tut54?pclv8t8b`94fG z5#aXP-;z;QUxq#3m+ZcQgtWyto7^!r_LXP+jhPMU37A;>JooqX=Q>TS_WNwUp^RK} zt*VU-yuITRoR{tj?}?C%^u{AE$~SV#Q-SHIU;MqGaA}|;z z6p;w_m9+zzj3!r&YFYHB{Ii8(cqmM~)YUx~*!I(#L>T=^&x<~vQhoFUU{}SRRf`k# z2;jF#dHP~+eIO#N8W3nbM^ZuOGve%Me)0Q$>V#`D5Vwe)!G3&4ZThe>6B23C2;De~`?~)_f^>$xOa6)uh z4VS=y!ZBmX!Mf(GOPYhF|a@)8Z(QSX!23NAaRx-aLZTXQt4A1HmD%J0GyOCeM5uN|>`ajuxGd34>d}NR>>u;Mb zdy(I6d%EXxHBPH#{uNC5spp*2U0eEb=?=0;uZBjtYT?T(S`IP zto91ib^J&=0#wu4?{j7DKT)-Qv1XN-2S z2Ar8*8;$qAb(I2CVNt;+u@IBQ^9O8@rGdq+w7z<%fdLYoIB~IurtSX+S6I7HL)Q>FMa{>5(kPVn@7;Wbiyyd3Gbh4=e6*RVB!l zfw8`^BCrR0HU>#j&`=~zN?ECcp#YC<^n8rGI}fXr&uxr1!7MxG>Fy+t$>Cqey}^Ck-JVoMb+Mm-J~B%6 zn8x?H*6LiM3ER=(#|%zhy4l+fhk1iAgqI`tqbG=di~ViZQnP0D>;)V) zH%7z}9ucW3xWu?g?rfg{wgi#tT+RDt$~mB5GvQXb(6tmt=|&J@ zR!Upb^a3~enI)vYw6?LU>Q?W{$2M^v@onxxJFsspe`)QTr2<=il{ZT%aytI(fZuYG zNiO{#qQ7tjjuM+le9#KWvElL3V4;~xffub4>1mgb_1NT!pUMZT$@>NkHu;VgYas9K zC~qBTS(CLf#W-qp{EX9BovyBU)phVYusAro>v0sX)@bXTRc@J%d89|IL9xc6umAmc z*>*?ewt~uyA_8>^WI3^}%V|DiQ)E(d3*fSFD!mvLOVw>@b^q5^>buv%-@W5YZw>}S zR>!id;t3XAa(EVrMkAp$pP5wn!%^1<`Beg5l%I@Jpa}8xM!9{}7t~t^S1TRH=Ay#B z@U*<{u6JsO3-j{wI&6(rEGr3(pW43o5WijNf%fk8h!=MR{HCf_EUXw{v_(}zDckHs zRui-vd}Vl;-9~aIc`2)p4n9@7b>gJ2V|CqThayhWX*oo%)r{n=6v`UZ?NWtlTz~oU z_FYl1Rtw)^@RE5Lsgtkl;&_!^=KeBDQ0YQrd@Xb+wy zDQ7W?%G9%DDt<@6D$oCDa{6Bn^K&usZuf&*deduga#9f&TU^oB=b3f$-it5qv8zVi zP2PY|jhlXMR$N_0Bl+2({~u@98PMdiv?T%t5d~2ZsY>rEO+cEW^dg{0SLq$8LTCZS z0s_)IsPrx%0YXz$dO{J95{mSa1nHe`Ip-ebcn)6g_wP;M-R#cJ&dkov^Xw*djEGfG zF6T{78`cMQaXItl=nZ0t(7P_87?lm{_R<$Qx7VVO5?3IHn$vgYFKl^LN{fH{rtO^> z>ji7v(}8#;xMU>vQXEG6pnWyHh-hs{`=NuV?Yp+EE34E(X%P51X0^V2Le&d2m*bc?St?m&ahFRIIFSpk`w?wIh zJfHQuq1;Mh#sx+A%locKY@3^#I(JApY_)r}k6O&n`5o-nE@{Vq5~D$))K*4Rt4o!$ zZe@NQFN$mHLE2Vs86ezhHB?_H^5WQ(W8+!hT6KmWKIvg-UA6rw#OIwD&Y!i&)letd z7ctO~Z&=;d5bMQHELzIduxBSn?h66;L@dyB&Z%xsXdS(ETJr8i0^B?M48B6hb5$$$ zr01t2hgbbQ7oU2pwn25PJ=PRJ@cJlzAV=Qcg@lBJdfGvK7-QgPY3Q}23<9cqt-J!K ztJbEJP3FU=2>Q%@Dul1e%DM%NQb0xEM3UQ_*uIib|MbsAMjhH{q?09=<2YZVQ%>6r ziZP>&*|B;^t|pzZsqH2A;hxXc_;&MmHLj6Gz@kH9v>ADQzGKX zrU10$$@8UN8_UghOt}d;dS#7RF171+1o)J!n~wB>c%dj@siUcO52 zJqtf#<9k!)x{QLJo{j5U9Ga#-kH5*#>4qU?>wwa9Ou%UN&480zdU+NTD9kRIby=S% zbpk=#my0)x_-db0+jIIZZxsy;(K7BzQ?suruMK=lfCWLa*9!>y^q5N7*OV zb~3dE#~EwHa}sTj{y6ym9&-O@YT#i^t!0j~Yv^R}ra9FeHmk0ju-CG|@?{PtCi!J# z>#I*SQg$#16VU=xx?qHGUiG!>&538NT&#<1R5Nes3(VS%flgct#CP;QuI7#C?_?%X5|A8$_J zqY<`=EbV=JF-O9FE;(?XknpW_+vTe?e_kd0=VU=|g43Z>t7O=ibcQ9aL!3vphKzdN z7^UkAE^Sadj4X8%T3)Av++|TqQ?l47)59N6v-oD`T_0aYni8%S(2yoHmlGj7ysTyKd~q4T5C!9y;^_e zm^?EU2oVoCLlPr{=X`3vW8IRA){7S}=Fu>_1}6m4H9g@V@NxCUxkZH@YlSMemW}Vb zN+Rwa<#%TzHe+2rK{;Dx{n1cl7CsIoqyqC&N@n$!68=!f?@vGz1nTt}RMuzmI~}%^ zT^paMN=5;So}RuSu^9-DU`QpSU(Z48Lg0AI=)59dsNMDFZ?f$ww!aPPp{_m}(Y-xV(!j|-`5ZCU z8I{y@K5nxqzk&nSe2qA^+zDsQCt9Dy*R`jhnw%3t+5E9kWx6{Zu{aaAv|;Dzz4fkO z*rn*r2=cv4#{0?xqq%4C^65d?P2N)5uAHYc#q;Q!AQ(TIX&~N} ztC-X_)Lr{H*myN3bIF~Gh;8Z->pQ=`l`?`^6&Sv7mn3ezN3uCWvE|YDlw`gb)|q>R zEoIBQHq-2B&C^q@Qgephx}0VumoYfeuKpXUW>=3zdKpy6pk_KTd0m5e-h|%9__Y9E z!6;MZGiC6JUh{8uO}-^9P0#4Yafb!1R&fv8duf|MxONenr!e-c&~8V%O`b*$YRp0& zbMxTdVgEfpvumb_&L&Iu?-JZ^LGa($l8TDTsXlnk_fAx9;X^*93l?K&MI2=4-A6gf z)_ZkFYlE-XyBe_pE8@i{Jm7#>oN_G#*5di0%5`7O9JRArNW0!q0axU^tNxAN#MNw$ z6FlJ{V5xujRAcPjaLdEGJbfTVRQvVoBt1^M{wWEjCp znkVn)1*86l4PMMQvo#~T%u1YQ7FEn*QeWbCk``y3Uv4#TPMH~&D?5LhRyf%q!Kam> zHlQCR!QbV9LvcILboJ<0-Wfhey@h!IHZ1(>$osF7X5^s{eQV~>*BghKWHB!Zk>{_{ zSPN2xJ?Jw4wk=bwDju0Dtno_be%aQzRX-;gt6}-3Dk459ri`@RcUG{qQa`SEM>1tl zb<6$!{A}1tlWzW&VxsptfkoS8tZ&Ss4F?mb@Gf0|{d01D#5ioqLqUCZyVfOTL7R@5 zQ*=7zIa3i`6tBL5f2E`hN(iCk+737cjlaky)hq7MGq1C3IjE`yqWZU&hq_a3`uG#Z zMGU5~2}vGb&$=Sf)u%ZCZFQ+043j%QyTFHpUj|%lE`2gjb^_;7hZ9It>r#w7rVaTT z$%F@4&OA&;#JjdD@?GXxn(n&)jC;=>4C)5Bh0KsfpI49oTjS6aV=~?KoD#n=*$`HZ z&Jmd*hjM}BqloUA#NHb5@t0R6Lz!edAok85m4&x!^(D=49&W>_-J><{{A?4#VlJD+ zCQukOt-Cn^200X`SZ(>rQ9E~nGSqaU#1`7)lvj7)*`m*B&Wf3a)p>oRV_JiY8-ci- zR@N2s2n>RPd+5KVZzA#N2=ur%QQ5V zGWk{zo!C}Mw@-X};)5^!I-U+Se7MTzGo9H?J6lfCWVRrfw2HgMgAUmSKvN#n9Oif* zlFn`KLejp|99^uPz*m)#FLTXg$G6AJ(;bO_T^E$Zy@GL#IuY=cWUSW28X8YdKo(19 zKZtP{ta*&xUY^CU8G5We?{{BV!flHc+Zjo&cnN!{?Kdc$^&Q#HrKdjt9s?enA zR$I*H4)37Kv9w}|;-Y12?-Sc>i?1n}7p<1{rar$(h<8x%>?yH9u5DJ{7P1?#>^57z z%17?K-XJ>~*|&~tS>&}6N8vaDYk8>W#&Xlw!Kl&+k6azW!p{6YYHGs6YIkZswOoXu zu1pQQHHw7Ah`_3xEWOhvm8N1Bd7=4LbJ1lFjN@W3TTdpNvG>PU`ZnB4cWR{9Ocy_J zZ=h@rR-PYwJ#5%m>54H&whk?kqVOCOi5P8{*?yjHBqZucQ|GqoY_|?pN85aZq5<7& z^zb8KahfrL48$Hm{^ayjQlw%orkXVPFU`;G_%{vIKHhZkygTDEKgy!D-kFed#n|{^ zu~lEM#Nsjv)JujYAYB4bK{wx8-sGpb>DDF`lN!kr+w|%YKfl#iM4r)Omy362yI)BY z&2;4=irhQ%wX`^6V)6tql5_MMbA9Ym(q;_|-@d8!n0!L6=n$l-#wLlx3CFhOSTs_Pte1k9U&RC483S zLtHRJM{#Pa;tT!A27?E;J3-0H6&y&8n){kFjrH9yvY`P?Aader?PAOM46) z@7Fc?4Um@dN^)s!mgz`rd4%hEx3IYQyI^(wurnVzkCevIjpHr+2F{$ar;C6-AUan` zH2=ef{__cVUpZyv2(zlSequxvufdhPN&868aE=>SK5fs3De2B{Jf&BU+~}bGYWX?C zw#vtvHC@osy!v4?XQ_CT3cp2ikwZdH)}vyHqEwpxMEQl}?5t=X7qVNe)P4Mc^v6&Na}+7O878Cr5T^fvEoEgLY1_d zAy>(gurrs83cVC_y}xxLOr{q_jx!_;Ay6F5tgH?FYXPH%d=(rZS8zXTD^hg9 z-B!Ke{uZe7sF?qxrj7J^J$V1Y%FB^XkXoK6mlvSQ4I!^rV0^#Xc1bY%dJftfPPiaR z;rK1E@*c~TW=V}!2c3DYl$&AyzR`l8V;NdGq*Lwd7)`*H5K*Q>yirszn7Da($~A0C z0r3VA(K2%k(cV&u^`zc$M?RfEe{r!<=w+=k`ZjpIyBFJx*6iy-4vc#4^z5={=(t?0 zLnzC)*)%V&qm4D1gFhQ%xo?KHh;Bt$H)e8hgr)?4kl~NJT{t=DMcI<;D(Gz9_nvp{ z#aka#uh&2my4PPdrl*(hd{K$jnVp$)Zg)Rx9aktS?Sr56WvGtn%OCWbI3U(;mguFq zz9gPc9vFM}d!5N6St-e@DbZ*MSGP67&$jFQ9CzxYi6^HyATPOwHtDWL$+NOMc9ti& z6g;QV6Nmh~OHXDe0WP;)JpN>yuxY&(hb}6Y>BqGrKZROq#YEBXD$OOU zY3csax$hqSET7uzdn}o^%L8Y{J>(MCr>h+RE4EAXYj2%9Q8s7d&&=16TOQ=rEeUj* z>Tfv8B~)UWK^FY&`};qcA88_}{V|2wUy&PJx&c{PDU(ZF8+Yt+p7Ze#Fv>#qIik%u zJaymRZ!#`qvsVCzUE|47h27D&ero=&k5W()@*(;ws>E0KuiIwSBXUQWvp8pIz9{p~ z3xWEnrCN(vXck2Zp)5G*;)N0T5@-YveJ2^gxp^p+Ix!f z$9KbAhA(BjYrCx|~(yOL< zJTW?2?||4|qKa3%tr>R@P7UO~_RP0nv+pM5uI0Y=xaXTg>0a&l%l?KV`o&J9$2w=FA=%*m+Jf%vBNKuULv?& z9vB!XK!C_p&yp$rAQSb%h(ta#Jf5@eD1Ic5F=#XmQ=XuZI9J8={Jd88T(9@>#HEKH zmFhC$^$D&37(BExh8Dj zzJ%}-m`~REJ4!+yH|5^KIWj}7yQU<`H01^P>sY3kF5CzW4ZXIr92Xsud^O~#jqVo~ z$-PT8d6MK(QugA)6$gdFEsx|R3h?jN24*o`Xo_|C6-j+_hmvm*t6=?TlbBzQU}by8 z*-p4|ErwJfzSnr+rKC1maN^2w@v(k>-s}Nwz#Z_8P$02QQ(h7lWj#0$7(8VFFCWCXvxdn#@Mgv zIC0znocTM}+6IL9>{!K94%tSzKW41Vm|2}Mq!697W;jfM>q&cc_PeS4rI7(kNP@uZ zx(iu(C$*5EKZckf)p@q)~@J6G8rnP|3r?l@VY zpsRL~tNucQxd<+aj9iMb)F;u^z3Q6Gbj)O&ey^+RaYu@%9woy=Ow7GiT}1dtf}oO3 zuO?o5`QGutlPt@gDa3E%98pyLw$sXm6R|=^ie!9X(c;6jyuaCTsR1H^IW%9r_(cVE zCMQ$f+!Z2(6=5yS|UfQYoxE~kZh^G6n!LseRr3`XX&T9$`7cS$YU`Z}-=3XpEf zjyS!qrIRp}y%KQ5BSokSzw3xcwQEQmR*2}QxI0)U@vBPhRgd@x&!fe_s(%mY)3yWQ zWW)jlB^;*X%Nbza<+CI_CSnFIz#krftT7FVjVSf!l9dQfB#Knd66vMEo;xGV`o1~x zc`wWHK_3?R@RjNl#ouw+S&1IDxatFYAc3ddm+$N+jgXRnUV_W@Mi>q>3)nD07Va`Q z0pVPiI%pGo=yNPdDt0aH9d^9^IL&4d1q3>p??e1%<`K()l&)BCu_JFR3kdv{b|W?)r6CHa>;KON>cc?n z>-N>i=r`TgPlJMQ?uKvG%u~PO=G$w}e;Na$DhOUDo(4bve+7?VS`yjPi{^>@%qIGlP96vx^Gh_X^+V68{smxoay2|akzQNfIX3w z_;-WBzlS;}JPAzg`PR`FWcP*B`A7v39d1&R5Ro`9^wU6oe1uwnc8*P@KYsTks{9_d z{f65cW&$zv>g8_QzsRuumzRM*Xy4t;321g>ZBym6YmcQ{rh{x^}lmt_?7I2!T$GoL&}7(}lae(-TnW812Xh$($T0|ya;-~CThI7CQN zu`0!a4QCoByfE6h~I&guo0BO@9ON~vYIxdr-h!~1h5l= zS&>l=CJLwKneMGZAExc@-zRG~?GH_Ml?fVy_`90u5_(=Ye4D(!$_F)C z2jm<+B&r?#U6-9aL?keYuX*{}MHXzDONvUUHVt|XLWViWDJbq9yUfDEQ=`unzdolq zoI%0TD^brapAY1OJdox0SV|iBhu#)5e^hAn}BPs?I!qX-7V5&opg8(<~z{KsU8|@U3 zGKw!1ZrPq_>L99E5IV#So-X;_$P21VU{*3YI(ov2oRaQj$tl`Pppa&WaLK|N8P@ID zd&hO5R)m4nofhygl>W)XK+VfdBD~AP5XNpl*LoMZV(*d5RI|mr{q>F2Z>~A`d$yrw zR{hoMs3#Qc6%Yz)|3oj*l_O*sAnWBpF{IZ-bzM}NF$yxgUKMs=MQ{6k0rmG~`D?2M ztil7ckfYVRJPeo0Af~)iVPXfC|HH!|e;kTfNhT~!N--30`EA|=Igs6Aj=0o!WqtI5 z^wfh%+pXj+jbkUj9QF3NuLfUI2J9w(cVgc^ zvT6BH_p9bf!u~Z+v?t=)XNZ@0YmVSHIls5}&mWS4lZ;MS&k%`ldB6!;FYML2czbw) zm}|o!hNG@4u#aO@O%~v~z_I3wq^Gu-JItC(l*^sP6+uzfX!j;4+hUTJmp@KN$8${F zK1qLFFxf}y2?@7umHKsWVcw1#5!^Sf+%w8n(8KEN;v6`%3uV%~oY}coN5<_Iu-SF^uRdL}#G;?fsz--z~ewpT(&%s446FjTe z(puurCyw1tf`cf$fZ58xBEX0`b0P=O?fQir=t$iima^H6W!P!lspSeekTHRTuP&(Cx7# z@7z$;>mIl~uj!|cQ=O*NZDaNxhdt82Gaqho(R5a3<-EY@tv9kbS5Q#Xm7|Zh)qUx) zc7y;o7<6XFc3=nBmkMwdyDz_FFL0g_T5%Ocjv#TpTw{4+b}x1h30=dkbl7eLCFIqC zV??Mup8#5K@>sD;?(}ipx6i~{k@!*r|B5J=HxbBla%neeiPbajxgkqz6Lh3?Zan|J zNO+C${Kn(5i=c4PR&`==mRBFSik_a#TQnA^8LxlAlo-p{;~j9M0?%89W6&}&FYw;+ zs`l&_Dw;yz^&0kcTsLv{t^60>)${%po9+BwSPpk?j9i^J;qPwr$Oxb2;U_CQfQLBIiJ1Ltjlk@ z&A73QjRJMsh!-eJNwVqgF!c2!O|43PwgL~fmxTSlINMb%oD9@LFqTRc$5h<8v!gqj+C4xr@MJfKsK$8l4o}1n z@%{4&n1s#MuZ(SV4N4l-NyE4Sng@B(I5*`~g@{nD{8AYM?=d$77nuQ?bBY_+BhSH+ zIlm-4Xp+uhvuD=X!y!+f%Fkn>NpN3wmOeAtdf_S_6~b2N5lVo(^5Wre_8WTir8@>~ zQV-Z#q9eA@NKk!_GIi6jl+4V`bep~^jLQEu>c;3q-nDxG6b23vPGv}Es&)JC+*xF!hpCyOVvWc? z1;(*Q88}E+J#Z2RB^%uMUHDj%w|2ZqQuWRo&09N_*Hy$*rPFM@LETtSg_~lU&Fwuo z2dTTKZm*7(7!dAc{1ehV`JCB$FKE%;3vZffaSE^LD6p$3ww5E(8pu@buD zwf)wn;BIYN4Vf|)?sv!}uq?y4H?XJB7DEi%o+@+gwIEBiiQ~s!>;D))b*#Ly=pMex zbAGA&wMiSgx)GEW^)Hm(%01(t5{z@XOm^n8W9%V)R%X^lC;pkuN&KfKVDnt+9LHmL zQWYnHN|KUkiXgiMqy0&;%hN;YQ%SL4a3#fa-U=Tf5u=u=>lldU)Rk8H1 zpdKsYm_M28Gq0wWI7B0WAQc3Ii>lf^h$ZXnDiH;szIjS=NLrpDB!48v)OTR%TV1G0 zd!`W#Z#qiBPEL@(JdC-U)aZB67V&Q4jE_XY4$u5&N4IMJyGa9Pih~R8gtV?oO2uUE z-tP$u&@n4v9&0V7KG?=6F0PNyK7MiT%+`v~wJYz{JAG>)Kex)?GI`yEDv2*av^X-# z0LC_%aI!I+gGW`uA>Rhy{gh)edJ(T9tndA3Q8YdK$krTxPm!zlx@kB?JtKL{OaEUL zQb-LELMOQ=A8{xrUTmSW#T$s*RJrCC^L3|tNMiJpx&v2)rav|->A~Bz6M7YMb*hs6 z@~h~_Q1(`zvw^D$9K-rq3qIVIDZa5M4XXQTB=0_>d*vnKJ|5v%?Q@=pM=0z!<~Y6`r&}V*&eI>{*XG9{E~)$$`i@H` z7eQS=b{(JI5*omJWYc5>*tC8L-s;(N+DMm5UDiEyJyJKwqXBRWc6xp7)!kYRYwbZ* z*BST7=Iy(QJgNzz`U21>aQ^a+$V+E209k0-GHq+Xe@1D$pESSR`K@JVh%EgXcEDJP zND3Cra0X`c331BI$FA5!*!Ib_#js<{qM|%{HzcE~=Gv`nCEW+A=4Qj%i!F>0DhEfC z9;~~;x&?AQHWH30&B4T6E5qEZ>S3nWCp}ee;IQ700fhhQ@sBo`L~+>IuHOx~Q(FJg zgXR;;j?GAHd$pGuU9%~;*F029o*vd91|p)|HVSMiXm*w#i{#+xvcu4AN_ zau*w&dO{+3LWFp>Zx)nS%u-tZwQp?Ypl(ijJ@)z zG;Uta#0eRbLz%&b0Ir$wi|iI0LX}~dpNFYyl-%K*^Bi+NF)q$tct^~VXaFoZJUpD)FqqaxYf8x-4D{&d zK+(OS2PnuR#HNt)%~j7WR18?S8k`ZcePyo32o8B5q)O43I*BvHton*=$BeP_z`i+4 zGH7MpmLBk4;Q__Rm12%C8JUNZW<4MRa-0#!*hF5S+*}8CB){0w%|EvTorOQ*g#jmT zTIO?`3+T(kw&`25{crnttgg=hW*%IZzVpY_U6jrf%Kkhq&YM~6e3f&>Ynxt)eW0w3 zP2tWQvKEtkUtDq*1-OP(M_qNbE5{uc{-Rg6{mqPN%eU_>4uqyrKmsyFw&l3#0E|aL zv({i>*o)U}D@IcB^{BB^jZ9;Wlga!H3;;6XIE?zgDE zZZF5j5x_{+6ZJiU1(m%OsO3Auz zYS&Gd(6?Y+y|o0QKHbDi9Ii#GALDf8XJ(yus5cWU0QSSydm<_7)RU20?ia_Jxo@L# zu-UhEcmM~>O3sqW1WI=jW$cO-j0zwg`wv0tAE_F41qh9>?L3Un!xoM6dfdI16J)Dx z=C%!ZnffnM6TVlLGP}JZvG{5-x38q>>qpU<^?*O{2+U{hfGfLn5ji$&D(eG0)fXlQ zcZ(%-mrVs$J%>D9%WjHhBZc3B!rLP-?}9+Otw)zZ31xg+JT{=2#MZ~Bp z?=W@sleEcubL(5MYR_S|(3y^rR$aCsA`4y)&(uq-sWWv_Lv>Y>dXRS2%`w&No^OF^ zk&s=ia8<{Y>Zo+_qA$RwRYaXupHwX2>QpY&&ey6|0lhw>2o7UR_?S@li5+sRQWfoMzg(?VzaHxq-%R1GfQ``$R5jc=hO4(pfKO zjH~JL%6Pi)lGXBVz~QhS!;Lvs{gXrdt=>v ze!!E`*PBm9MEG9%&R9}*ihf;jKyi`iI0zvcEB#_h^b3v424}G?u|lZgfFjYiuH7@& zdf@5>H7@DcWvo~~GTuUe9gTJz=dq7%WT9GWT3mS0nRRn?a{(10AJ*Z!h*GPk+QK&-?LD+$|pl7A6{Q{-oYO{mylY|5Rd7zd-N zdk>~Qk1HX}a+x_wdzsn&-Ltgm&URj*Hiwbx>67o%BqMX|3kjkgD<9YlN`n zZRn9NkqU&G0O#y=Y>ym%N;*mnr9i_0@Mim4FxMDBM19fzdfj8Q%3MDqm73qn{;_6@ z#|tWRaCiI}L8t0nVEW~6sA-(-Y(vVu(4ptE$an9Bw$h{mwPIMbb3#J*oz@xk8`nCZ*nRHg!p3G)u{t? z4J7v6VtnGjYlm!Z4hx$fhQ>3)0sf-?;LdE)Fa!@4SQ(S(sU*f-L>tec#!E$lGoqDN z+71qdGS{vVS#mx;N*DQdrmOE~v^k+QUeosfhc;hq&Z4&l*Ev^O$F#dRoAQ_1^^`N+ zrYhN<8-8u;16yCv;$w7F_gi;P*+~$-^wFnjeq80DN*1M7M?;|uV={=y3A8hQwbP|M zYmbr43(Xuvhb+wqH`WG=^Vn6cJp(uv5eg(~S>jVr(r8J7nBB`srlOQ0Y130f23eXM zW%JJzH_Ka%@-#DFea^b6(OYcG(bguiad;w&i!Wlr;6dkdCV!j0XQzo!K7XUwRG}iD zQ{i6F6Z=JoH@Eh*fpylQRDx3At`de<|Ad_9Es9iY`MYQ`s(mJkkBP3VE8B&ffBCE@ zvxN%j#uN$zVmf+629<5~#=v7>ZDMTtT%ysH7OuBjNi|KI<9S9tsYb4mdNr$1dD#fu z84z1`cb-|zJ*N5O`BD;GRE=huoE-}HGi6=myB-uVlefI3%+AWH^LNyF$nxJ%=M!AoYujNVn9zCh{(N4QkCugyGL#VpE;*|UHByWE8 zx01@68&QVA7YP=l6s}zH4cv4I#OhSnbW^YHEfqc?2yf6xTcd0L4}83}r=P_BSlU(3 z8z)O<1EXsNFL*RC z4S+FoU%y$BLoh#Zf{yNi%L6-_c_?5I*oz&nZQX+%zx_Atcz|jgwFD<;dnO8D^5&jf zT=Kc}FtO3TnyHLdXv$U>RqR=QwLJmLo>lvoKRg579#oYKuS@b!*^NT=?k_!ekgi@x zF$oxFZ53Am^b2ezL4)dRG7Jb5FFpkjnOqYsv70%;&u!Mc`L0rYW5pB+=UNkJJz-il-Gj#RrmzaoJaO z78maE_ig+;Qk>dh4^sRjSE+NZPU6{M$z>m16elG$1;_pS7F0zu+ZFGyqD7n6#vN@I zI^yIj-JMfn%P#eo)%Kwhkl2a-#f?_#f+b!H(YT5ehEqXL!f`O7vYO}Fvy@5fIKS}TIpE&WGa&axP`Y^ML{S@c=Xxh%_?B>R@)8qX1KRsd;AOf&DD?9jhXMNi|3RycF z)jz;juKFnhRE-*kv)vwl*2EX-VA4cPrvS1`{Rdp>Hl7}_@0J!Jz{N5My60FAR$VO; z0%QwKz(Va2Y(2C&0a1g$o#?iHquL?)ed{raNIEf>-ka{yGk|!8GK1O~`Y^)BKr_$v z3~cN9+2vBIo#n^PF-R$p37?!$D|28$cq~rd$OIv@F3Q4mI9ReQ&IvzoEzxbdEtv`d zHu2pyaS|H2IyZOsJh@$CF}XS^c3-sy3hss(#y}u!I*bw$(h}>Vie(c)GuS-mE56#9YZx!qdQ5>v8a(P7pQn%ZPjgV*>myJn{auq|;Vs5BQ9D#>b^>k3(s z@zbgVVG675eGrZq_mvcrW@An!2HJWL)kv#8=ga<%&BpboB{d}+a7nLp?J1AIJC=5} zY~RgGxY3Ioh?DeKeG-@yvb;lv7X@|!TyaLYvxG>+@fu~{y5NoEn278!1K{irx$V_S z&Qm8gkNWi%Xop?59V&~Y+9^?@T1#|^Msi)sbZ+WMux>SpXgs;~>16R)F7orBykfy> zp97meLcg;tYOmb|%ht1+Mwhe(zhWyqu_RH~ViwtU z$AL{bQM9EYv0!X0N67UU_KW-C?!}p-EZY9X)sL=}R zH3g9MgxjBD2Zt9&N>@~(q|m|lDOr&wE#N4lr?Nn|DWB|2PC&B7x#`c^~k1;w3uN?&bYVzOg8ri0ZRbL5j(%tA}#yZ<`h5Eoe%* zzB}i-5i6J_j})??iZA5~GTRN(%#tb$2i&oS^P3&V4T+?>7=??_hnY2H z6Y)G`sy0LPTdgk{8eY7%ASf;WnntrToR`G!S_Md>tsI8#eA4b^Q;lKW4aG|IZF!k{ zirtEk3B>a*xc)XC@71;^K1oSCD<9?D{(*NsfiYZPY{|HAaTUALp`~$sD1{^?C8b^r zA6&nfcW~gHa;#_*&-Ar($BtHD`j-mAb<<J-V9Vd3U z>%NX)25d{0)kX5PToJRz0;j!eFv0Y)Dv1jPvpWUv+slUwJ|Bnr}g=E{azSNV$fz)9_ z*$V(C9g&eyywa#mR%VzqV0&Qpw&UGt&lL>I$9wk*djprCC*1ZTncqxL^zv10Ubn4W zb6@!afXqx(hM!fdXhz~VJZDSgFWRhIw~1MdbbQ7Qq8k;aY)imCsi(PN_l982d>QI$9hv@Gbv`ORtv~mfV zEnv|vw~X!M3-C7lnz#V6O!c>_ZOuUXP6`g3V$-Y$X)3I{m{h_SYdb!>)}FZ)^NK&! zsvXH#vHsp@{Ob!FQ&m_a-I%<%TXLt}Am7L=C=XT%UofS`1~ZH{kj0BKvS zZ$7t9G_exyh{kb)t!?D$L&8k`qVjNV?e}(6am{6w?k(=sqKBa=yVM<(P?KLQ7f@J{ zK;qf|C%DbR$&B zs*$7g@w&di>g760DwNzkxGqIsw!@owf77GgXTG#o5F#{a#fy93)(Ru&9y1$zCaKkw zo)jDk4wFBiP3L@N` zlhC-SG7S=tP-SUma?^zV$y8z@tQM+OPnf%BXhF<5C55~V1ZCczqh<{PX;K^uy2fup^hp!NqYmDTX zaiO6cwIvlb+VGa7W5u)(al_l)0Key4@Ict%v8F>h%5=MU>^UTZA}C1`^9QtH!uS^R zt$_S09*uPLi`7*^Jg0C{bTqT$1Yf9k66;r42rT&yVBkT9u?zxRUe_80V zb-j9I4tKRKdjyaioDDVS)j4}MBtq(;2uC~WS&mMT#314E<{g>lkNnHeBA^#`l%$(1 z8uCMKDeqH4_$=IKkimTGFzPOGj?=AiOX^wldoLJ35f3V-abZ3U+!D%{>{k#TDOoYu zoWZgtN*eXO<**u1rP(BpI_RLB1dHhhxM_%tvOz~o}GA<09-N^Z_(I}TWjHSS1%JdIT%Zq>tdOY#vMQfC>X#j+( zRl9xWbDjmRK<&mdPK*)I6ukg^ghXT)`Q`{>=q6{efQ3&!_e^K1W@c!iXB{u_M%mT_ zg;<%{Dmk1{eX?2Y{1R`uoJ8C&DCc?sf~2{!?mx+L-r{=g3lelL%cHg?{~zjbU#-A ziwoep>ikfmpPv|w0YF*YIOz;AxL0V8eE&WM&bg5QKcAo9{oXv3a<@1(`fRMUmU^wZ3Iwx_~azJSl+`ADIv5Bem}ARppej{DV(>$4?R*(VvlBG{OwBF zhv`z^P8<5bJRqP}dX1*$#`h9iA~v;b(GwbWO@@10{o@aCJ(85Pv~|ey=2s8CnP;lM z3B;PsptcChCKSS-|8N5Bq>EV0)vuP_eX(#_(G_RrA#eM#3B`B2_T0b2k$O8Yp@R0SDDB`0c;$Pi}vhD--;i5sC| z8uJx=qF|nqq*hz>oA`sJGN2E&)NC>`_=Dys0CRY_W^gWNXLeoVl(K4AxwB==O5}@W z@wBRLC;DNguVU>`M`yD9Ew*88RXL@3OqPQ8+G5fc%i__8R7Cm2d%2T-%xWbEL%Ir1{MX`sYM3a1m6fTdQF8lg_0M2p~G z1tkTq$AYWpA3P^blM{!;kgisKidj&^Lr0P37u5lj-v(S`Q6_usde3bmY)cR8LSg_) z2SAxb(JcETrhYPW_7K8$NT9k+O)jMd4F!dbZ#=B$NEo*fVxkUX$ud+E;s6dbFY}Ic-96DJ^tUf|C5ChnPudgYO5Qr;7Meqf2R? z4aaAWzdug)URltUcUTa|EG|4-0wr0k{sa-_JH!B>g|&+{ZPvT2j-2=4UmvquCeL`0zCGlxhPpYRY+XbrofSJts{FPT&EB!fx z+n~DP9Z_?P2_Ne>{TufNWi8c^A`>3(uxSI#usn;}^NPT$_E4gRf4AeK0GztB>D$lr znpyCQSxKk6p*`~Y0ZZ~btB;t+Fj4g6Y6Rlm@kMfICbD&YO1VDj6b+^8=rVS)bw`v) zUm^ogBP{|la|EBknGd!QTPAD*gXu z72Z?i+!Uz;o?@_y%9Wv`!w(L*u6U8UiiwHwi*58FR(ie77CLNn3Si6ex5^#m8(1pG zb3V%ZzJbUL*tY{NX|uYDCdL~AE^kkC?} zk!aI|*zNqCQ+ITup7#%=YPj40cWPK%LbuaVDiK08Ws`>ko4(pE-07R`Z&JzMgyiL{ zotQ~XvgtroPFvsLBDB;_K3ghI67Ji>WoXou_WZy~?`7O_?0@focBTk(mqnGArPB%qR*xW6(%Nh58I-7c^do%sVNxM^x-EyB=T}|94l_Ad%>F! z(9TRgv?6*&hOnMB4oW8pnC9Z`XT`_cxmSL(s+d3E*&>%>z^Pf4pH1ml~8 z-`0|qNul<39gk%veywT$kPqMshv-|GY5kr8!Mi9|t>2HXu7;t%7Cj9!y0XmgY^gtE zqtx`ryxid>iNF6T#?eAi=xXvZ;W)lSjQHs7bCG(5-Z@3%S#Lfk!{0t`{Xh@A4dmLX zeFw8gYVaP42j2Z`-v+(}o25T1{671FymQs6pXwa>D&lwgJ!a~^IH%_t#qkK|-j9G1 z-~@Nb5Bzha|NQ1W8zevY3{8@U=moob!&Q~9Rq?pC*Wl9buD4C`0@=VHD*s_3-EhDV z3cR`XXP3fck_ zdGyM=y6S>Ap5C|5YMJ70ovuc5l_1UkvG?9lO>JA;s3M4piVaYZq8vfGN>jQbg7n^- zARxWh00HbEAkw4;rHM4@JwcIPLJtrENUw>65|WVQZO*+%kLMom@qXjIzuq?(jIk5g zYp*@mEWb6|LWuoNo(G&%8nQ&Iaj(ua=PdD!92US9MAjAl3VW1$hQhg2qi_?H>yr`W zh^Cs;A5$!Xdh`fG#U$+yXpPXjI($ zQTd1)#*%gr{VVFM94dE&Km-^AdrV-w%2&n#wBkC%cxW(3E>}Gb%UYc8c+^efT=wpm zZV7_g*rM^qFrlSV&eE1DT8iw|L}M<@H+U1_y_P|=srn@rE>GTjp40SfJxQjau4>Fj zL^VXNM$S3}B=eS7t{3Lk8JTq$z>{84@$*CWdVJJ}x}q9QGA9a0BWhku$w)?@vH2A> z?O@J9L(GO89-tZrd13T7xb__?&yib7?NqPpupetf$0sEKmNq%Wv%n#a`C{*>P_4{~ zb_>tp>Bn4D<0jZ=T2Ft0Co*hllrt4H(u@;XyjI4tZ3R}ZhYmAdrrF9K+18eD7N+-s z2gmoc4x^uLA0AAW3wE(t7&*$6Fv$Ffbm6g$j>2Tbg zSQoG~!kTK$AY7*E1PY@|6BiFuk`zH}^(M zf*o|ecY3WPc^_`uZ*cQh5T)hBk+YwICJ0E0e?LEik=kKX6d;zdpBqx~ALsPP6#lK0 z$`1f`d~J$j>Eb`X&X2b`+ysn`zcYg!*vwR!azo3V7M9PKj6y(wUJBgoYsJHXvmn`UvR^e*{f8~A`V^R+r}>PC`Hb2; zJzGB8$mpu5@Fxm87y!+;aWku)aG`zMyZtUDpRn=~b4i!b4VcjCxnW7{#T4gS_oI{d zGsCA_)4qbQ+H}M%j#W6GC(j(%@K@MRM?LnsaR4sGWMJ;ytqK|{Q;go7-q@509Qm;I z)(*}lEHIgF0Nt7HTrXBBZu7mjRx$jHwQ@2?8WRPrx)6GArH}#X++aVE`TR6@YkO|` z>DaP`2&1%Z!Wdgg*UOv!>vh0Mf-X?!*#dpND7mL+01$M6K0oc^-!993DrX(bov)G8 zufV3vDnini$zIFP@ek0zDY~}x>+>e-z&Rl;P0><}Os1Q-UAqO=s)&d5gqxddb#f`A zNx%$Rz^+gMbp1-Y-%4SX^&k@SS^MF^mgW3nX1?NbD=~}gZt8i64`Fn@M-tQ0xSuqm zNV|%#J?j1F+v>?V(v9yxQf8J94kI5f&G+pmsyV`A~@t-7-y`8j*U`*Tn7z}E*w-YgU(kpntRkGV_Q!2^2-Hi}zh`Y(2eD9T+JOJPv z7cG%`e_HYHymNx%N-@o_vFFy}K(23A#x|k0_G~4&7O#;9v{e48o$A(~x4v^)qgfPz zI$Je)<65xKY_#=CVdZ6pB)g3iGRX0~=W6@+Z=%w{RlCIH*b@xP<;e_bTp9w}+vfM&X znsw%}rwT_HH8L~6TYMG;@2YpPoz4CWyFBRX4fOT7a$&4iKX^SqbLJtv%nKn*4M<_M zrp9f;LNL4xUU=TyG3mlX>&B2vrF{#EbDVvNgjlLgNC06}>WalawY$y0A;JG9Y~%Pz zzwOb5GQ@(bo)f=WmIM|Jvd$L}FK(-n%NV96Y?<(@OOO}CQRz}P$}f8Eh=NxNwcMBH z3>KDjrwX;gGW&rh%>xp{A4UES_n!7#vTyvLbN#ZiWwy1Oi=z z1WI%MyoTQ;!P5K?AgE1&Wxi4Mxue~#l}jz|qcFjahhr-%D>I*CH6qG-$c|-mCY}mM zT7>9bCWETdraL-?o`Xp`gF8yf5Ec>Q-fMnM&N*a+F}Q6kGI5gB2PF!Q;rRHA{ioZ}#lW1b2sQrnWU96$)vALi13@i+sRuM3% zw@T6VM5t0R2KXltp_k}e+cWauGdw4tBB%gjTK4Qh4{!w4W{r()wwwdE*{V#gP6a_Y zm!t`+q&c{0Ayql*F`%yiJlJk%Oan5ywc2MLgeT4QO=AE0FqK1(6v;@79-qd!Lo zHE5@{9-!ThE`)yYpMcmToZI#9{+!hwJCoovi03P=6-x(y$$l&AXora(K+X0CCmrfK z7V7nJD2_)5uwYN**3EpzdD((?^UiJrdkdBud&NAqf}?z2%soB++yzxTci?UoNf{Zm zRUtl8nqL&HY?6nA(RCt$AP>*$Ea>@aooJX zu&Qx}s)@c`v$LJzrAu5*rIzF`C34&T+RW7#)$%mhgEzHIeVYo`r#Lm@m=d|J=m1bh zc&-HKF8%jP;K8v_&mIZygcLPSMZlFTf;B#Jh|*jf73Ek&Fj&9zgQum z@c`69xyK9Iik4Jlc9x-Ov51eHp3n^eF+V5ooL09lO`{VefCAm4&8FKR=d}ZG-U#~m zl--{{IB-WOT!^Hyf~mog1Cd~ftw-AWWgE4%gzL+TGadujTX}0DX&^KWzAXr8yB`Mx z*#B7mwVNCb7MIoPR_o=x(Bn6JM((9tY?P*%KH?^HIO+5QbIYk$k-h>f!nUfhG#CJY zTwi?2X=j*-zVCwxqMw&dw779GIN)=%^}~DJ7Fod)7D9lQz5#yXquugO3-kFg6NQs< zgYeGcvk%f`=zdKc9$l9?6Y}tQ#L@w*4%nq9Y+?X@T0@4F#rb-{s8|7qra-6{ZI~>? zQ|r7>FAfX$>9;eXW&hy1i+vY6?{`|#sZL?F8pV|ClxtE|^%XiQ*R`cB#AFxrELeE5>#LerI1N+5?%U#;wOpYsboExP-&ZJd z`hBNR(wh-h-wCsm<1$_~HXB;22*aSEx2tmoFP?c)Jnog40*B16b6Zo`*^Ez)r;iyr zb`Nb>@q8dRK8$|mJIP{Z?)+r)oL#!f$?=KeNvo3f7M9z|xjZ!ccd-aqG!k?6hP>Ii zZ);6GmMmAxqIJYlKn>}HIu`quRsf z*)PL+`>k7}A{qeDa4rm~!;+1w&T|VW4jLW>^DN&z@jxw9LqPbnuZvZX# zEE#|GIlT^ZMcxf`BnNWE-74!OqBHjkOELT8D3Nc@NG%6e->R><6U%cb@-F z5I_og$<+OYkuZE@@n`#72rC7;+A)GdPIlc%NiH7pnQiEc+&|6YTpp}fxiPB)|NKR9 zxAegZ94x^zY~h+_g&#tgN6XU_{l%0~NO!b9Q_HCcAvQpof=Xn9+Wj`Kax-??qkM5B z{Y?z)cDnezPoD#Ix3P`sZ{3Wh-=9RxaZY6y*gQEJH4`n#dr+uBS8F=i(e>FRiTo%K zKQf~pRe><)B);_^TQyLB)`%C4Y3Z@9*0JQ7`K#Leb5w!s|anvcE zLkJ)+vOz^Jwc}Re(HQasmy-SBjB4;;Uuzi=eHoRg!ZPv1iaw!Zn(_CS)}iZ@@pMz8@<~8NvW? zD7|xo92dm);mbi`sI2TBe2XYoVE}tI2IEo80h^2Ic9AT&o2h1sV zu(`xVeG{9$^%~`ha-SfWJJtCq{7jOT>#&Iwrvu>ysXw8)>?el-FiHDAxL3@ zuu^o=0_lmc^4hLIn2I7Ntk(yH;Y>C;8eSL~3%1_iRx@0)jR8uNy2`a~$hKtTxCx^# z)3{UYy{pr;l$OuWV|kNDD3X)!b^--ywkO>N*4Dc`h31{J`=-I=l!=%yn2t0vO$1jGR4^~?f4;<(WEk2L?NZXv&*8dKZ3kk3SBzDa3NIC`O8f@+) zTOmA8Drxpm&Z=jjc&fzU;-zuV8gK+-GPydg=IbZAIZV9on0uXe!i~@xF1KX}Tqvw% z0Po%yJQ?1TW+&_A3vopoQK#hgP`0L308;5p0DBKMu*6DO9Dj~$uy@r(l<723-*7t7 z+&`!fu8WoxpNyd`Ph8G|3JGVqyFH4NyyB$lAoec!*`9X;hq~SgJ<36WT#!3(sbO{ef(>( z6WPv?2m<=|<1JpKU&B;e-!E}#dzsA{IWaL9H^E17qhLfTl-WY{8O}=2ld88{Od^~& z0j&9dPFN5xVD|SxSnul+}n4?PId!6$<1iu^@Xc5 zr;A=@_cFS6;UgDf(yP-fria*HzL^o4eP3phmrhqm4f28_qK@CNP>B%kf;UV-vQ9*y{J6i!Q;IGOdu76;Eoxc5zxlW4O8Uk4qonhFcz8#Zu!V}LPN z(6JxfxRGWafRBIs{9e;=;aTr|!>a-%XbH!b=24lPrN>O>;c8D^<8mzm*XIJ$g9Tu_ z9tr`3&jcf4w;Eg;cdNvq?=e$U5>2sC9L;Z8L12Xt&^@ki`|sXuYO<$}^^|38N?*u+ z5}!m8)q#PwZiKn7bvoqEJ9BV@H*bd_hbA2rT$*B40Qu(S(vz$1pG>{gK)sVrf zHZQK_7t~vo6y<$xVL8TEY7v;XPI8J#x{{4MQGF90zz8(^VV4$c z?ekfVo8(S=X2HyNij#(kc48NaTr7nKgQHG62i=XtZh>?LfE@-(*Cz(&?!(mV^-(!F z!LWYaDz?0S8rzv;BqO~(Tb6x4c4OUW-|pg7>j<$YN7>G3NN)tj+Sr^@0=zEL$NvDm zKL7w=ZyV~*btN!cZ#wxY`!nvzKr~&S@ zI60yTHUF-C8tYFf73%=JKW4QdiT>amBdFm7L+LAo5Vyp~&nTV`cH0!Jdsk6kAQEcK zw6_6WpOHWQ%qEBB9zM-?Qs4oXYU&v#^WA8xn!MZg<@4p}Ap?u(yiwNiTCb&k-M*dK z*!A^g$Kr*#31(5=3I7F@AAZhYra6&Wh|%@^be&O6zsUWzDeclxJXSuDVQQivilLCl zZTZ|n>s8o|`s=jNGMvG5E=)#{OZD|mO^N_LKSaddLsgJPuc4;H{`MB0xY=U>ccR8s zO`b!Up7tm2tV0;~qk;3pm#9kn%e!7?PlsT@`Q;&=q5yMr(h9038g!;lyi!X zzqgt^0B2r_zw>@Yc#W9?u25& zehf^uNGTVW3znG~xANCNg@H;+96at+-*l^1Zf+Qfe&$%za23D?WFz~xZ&i=H7Q%q= z&C?7tos5L7{PUr;PVv71N_EFV>=Z#(koDx`u0s>Y@ujko1KULX)WER?h$5ZPpdaoN zy)3~mfsoXL&<+7jmco;Aic@9472=?b7FI3b#7+r9I7z`7}0FSSE zN-N6zk0{1p#0rq6uSD6@vx=m7JN&lz+1guPop)S8%iZGBO&YDOVGYc85|sIL$UKt- zmsQVs9{2V(q;-Q$V#KkhV&mk%0bsKxOEA=x2eiz0{QQZ`I}NOG*jMcmXx?qWL9g&q!#_!cD%ieuakuO(d^borLO9LWk;^hT zC%ynUHR<2bueXCroV+j}E|3cTc!{C2TL3r`HIiyPr733e9u448eP9~+<%aO;+R&bwAhJK-bI8jlvZnfSMh3_PW^PRvf!I>*t7?7h zk8Y)j_+wQ&6ZF+zk6gbNm?$_z8Fzx>li3X4l#}2o@YSA25Ca5Z?8Jk>K|~9AOyxT! z_)!O1vK<)@CYrgEj)^x1PolWlD+(1EMH;qW&Q0$@8c;e|%*W6X6+Y2DS!TCug%fI} zCwthY2G4i{%ID<;l~%yM%&b*SK7Yy{%s*`6x)vTVWT?bx?+mCXcRT|pmIJrv)`4y| zo5@x!Nn+|HwMRwPYCDfB;IUfM=KgaP7h!py9Y>uPxI! z75u+~v@WaE$J2Zi7Z=bUo`~bmu+AjQo2qP$!AGlJsJO8Mm(N`Zh~L^)ky>x*+Nd+k5@otd(3SBP~=0PR&t{$)AfzL&L3Q-La}9V4}{ zDPu)a-+8u-_sTVpkfsc2-as)yNGwT47$hJSu=zR=rABEG-JV!+R7;4xn~^|G*j!?z z-JPm)2Q=?o9cj^8O+@P@F=pert7_4u_)1#nj>Fn}A4< z)HQ9{UrG^0*>|d09)QqLy2BWp@5RVK)i_W4xHUOlWLv}{m`-Ok45u0HWU>V#hG2Dw6vrw zbnfjzFM@ZtSmu@_OHU4%I4a*#%&aDj&)Oz+v%L3iZn&V!G>RVJ?w6u)q7Vq8| zDBd6kXi07F#5Q~I#9#$^=w1rVCC=}K;`oK{yFvZBy~SI)tH#rFb1B|qOLnd9+`ATm ze8^mj-Q~q40~4-q`t%B%rl=0OPWq@W>BJ(rR*hO9uR@XP3NS@e&!CtD4$T#+C6WU^ ztyTTT+6$$R`Evuj`31WCIk-Z=4%QmF@Ww2Ich@PlhVj?|vop#%wY^#Rscrg*ecRf2 zEMCH~(1?G+eW5Mz_R>Y`+Rp&cXsJMml2NZ+Dio+Z)i`LvWU(VU&D;GbBBQZesFgqA zvwXBzFgf;)Dm%0{p5VL_$-)AMq1@_byoY%@yS5<-e{=B ziL4DyvomHg*>x|oB~#*aPOD2)#5s8c&l`cC3sj9>+MdACy7x6x_&c&r=Br@t>dXVy zUtm}bau#s*ES2#lh$Ee1t?&~>wikfisWeQNai7ye%rd2FKwOg=>rY&#OsiP$=0X@! z)I(Rg)iC#&V&f7?SSH_a8lo8MiOEbw+|EQ5OkX4(-HY3EGj$HBzNp82d|R`h#1y@S zaNZ?q7Q9XX0xO!k+e}Yec(`{Zf^qrmt<3qN=2wJ+j5?`b0o|dZ4}4c%KN{SOAsX@) zhRsTDiR&lD;mQSk7jlXO0%(cGnL;Y^s z>hMybXtvNn_;pfr$xuQHQ;Je%IV3HzJe{h4KxvsrsX@fK`eVR4E&|?(tB5m5&ea+R z`mwyTqTV_)YknkZ(v|XXBLuHoX;5tL4j|2zw?!mzOXf%+d< zNiIX}(6|SZRYA6YWdR5SFi2aD&;GR(xG?_ zZ;mD$?h+35Vrm+I*Sh8SvR=lF9}`EJ^XI@nAD7$#jW*IZ?1d&Lf}qz|GcXE3R$Ihw z9oqirEum}qacBME@>lOoe|}rx8Wa>g;*!!GF{gczW`=$9q3gmzumpw4$nTAkukMwT zuao3vGW~3`3x1wyRIbSpbZ;whgOY%d*=Z!DI9;Ntwg^NxySEB!G+#hs`c;$krk}L3 zJ&%FQvJhQLyv=O^72mvP>(Cuk<9j}95u;+}B%U@BJ&fYLT0#`Wx6Lo9>|*oIXbL-# zyvwdhDkk!Cz-sKtc;e?Jz-iqhjS1sYOi&?il1SUnFFa&{WeB51+WPT zHNC{|n={MwBc?&#Gw*up)@o-|Egou2_5tZGm4`xD-Pa=BEw^PZnZ0nh2q<`-2iqA3 zz$a+g#=i!8jMK8uV?tpYYYj(|k3A`50dCeY_4aO3S^~li7l3$m)QA+zU1>A9SLo7& zJKF5h0jgTum$p&4C6VQ+6SBFr_R36VlfkWRBM+Lktbx>;&vh6m6TS5AgBQ$O>d;_Y zSgp?*GmOxDvIOHxe>pt+k$3p;gxE4g*QZ3H$@W?BqJuWk7%V(X zhOh&6AB{(dBWBMp0L?^2dn754^-L132dVsVMbZ^!dV z{J;P{$tsJ0xh*WeJ(Vz!dkqP_eejzV`OAf-S}2`h{ckMs_JIXZ0&mI3@|f0KS8!xD zts;a?dU}n%rI`g2{XCn|%!zQZHrGT7ROKy>8p4us=3#x07(jREDy<(RxZ{Go`RQ3t3Cq&3)Q@VRUhEsgnYi zNjb5kg5N*dwj7jF)9i&m*so;D^OD3ex#O|jyo{j~Kk zcUrQ+-Qp!oXPCPiS&I2z}Dz04az@z%3c1K;qcTHUDg!?t{ad!e_XEWGmeYN@EKnPffMzEWz*T4ce zm)erFL2#euv1>i~6wOY`4LTk#lh0g!pTdwaCr%WqR{~yo=Qh^<4#7 zOl@JC28O{8_BI72(?{fKs^CYGuYI#`8>&-4rjbBpnt5VzDK@+rTksoWx8QZuht+AM zB&N3R-EadjP@y*O_K{)HlZ%T~v}|8V;b!%#;rV=kM|x~8J?r|?qsavfC!cQ6;&} zv#W0zPKUxzFX}?nAO>xOWjfUk^0WJpp#_5iukcli%9jZ&x#5pnoOu2Y3`oSuHPe*k*)l@`p9r119gWRsOC;g4PbFW+^+^W%bE zq!kxB7W97*iudjxt2f`SlMyn3%BYC%!eLJBDe9fspUZ2#z4O%dWl5c{yhn=(d3hy- z*U5z{lpNd6EhEjXI6&Av#F9q_l^`Vb9+!rcoMXc#oDc+|crX3Q)PJaA4`j5KwC>vG zoEMi~f3UkenfO_vlb>nN`5kLR@rS3agAvisgbGRn&J!zK=WGPq?|>xd28AyM83k=> z!JJCdRlmRZ5Rg`PpbSKG%ZoAOqd37iI#dlM%R;M2n+<`oI~X4c`-YH-v0&)}7vm||;@u^H&w`vsOp>ToEpm1DjXly`~t zzOSL-Wtp9?Gl0XWYNi4)=^)ltKO`CF%n>;ubN_3`+1IG-4+h2Q>l2H(nL;41;a$~a z8cPc1CGz@O*5vT)h8g0xzsTB|zbNT%$QRh_Oav3t_B=j#rYp2;A0`*J?K0;KIyz+t zV|?rFj}G_cDn_4McB<`v4|p!6g`^T`&v*mr7?mSVu~LmeK$;PQzp!rHH_!gRM=lR< zycofsN;4uTrRXe_fHJy3(zP}Q62DSd8KBH-jt}KbP6FAkRh*>qZ2M1-p0BTZ3eCwn z=UEW?$M`Ttx*0VB>o8C}MVE@qj z>8f8zv-PLhyX#7fhafqF+f&(z;d}NZT9&LEyY(l9&hd>FK-nPi#Fa1*@w$2da3uQQ zK7TB}u?*gDqG~)qablsfs9K_5!*gISmKLVDXt$cG8&GgZnh5C z)~s-rWo-7B10Iz4R}e{d{I0MJ0Z+GBZsCx5?xZ(0(k#E|4t5h3ZNcRf-OM)C)E4tMl_iL zaNL$XorwC0szpd8plN0g~VMBfmze(8|3^N@rI3hX1vc5-5TJYUM`dU0c7$*#Ca{ zetbzF{iG5o1*H!5Q-|kscuq4YgAXN z^|*&Pet~Lo0*AaX!$1kB`zs*N|N6vs%)e)MMVtmGbh2`BDN=J*0cyV_&P)6Xv-O%& z2Y6u;e79mXxGNI{SGfO}gPi2av%TPTpZ(MWiQPe?Cx;ylKm z&dh)zs*8&tC(1V-oPXO0q_CWd`5#NVdoP9(2!tncnNGtEAcUdU8ySB|%nQ8IOHjmZ zy>D6Uugxu6ona>)Cakgp4^X{{#yj>d(RokV>_@ZiOaV>5zR~`t7oqwm+QP;MER)kp z!5g@AA;RV|TWqdsr1-=+CX8(;n%yq5Mk8ISfzIxQPp6CHhjiMPrPGjv7|CG$+Z^W1j)0+qIg0%cj_ijbBO`ql+mfr*fCpf3GT zT(qHyfdLcHjk6sgi|YU}%<-S#&4o!wJ9zFpO0H{EV6mo*PlbMC-T_E}# z4F?Oe_iE=^or%9vhq_lgzb{h+GhXA#=w`y+5a1Q*Vn+P@=&p`c#~=ad*Xf~}W-Q){ z><8HH7*&P1Pa&s9M&Y4BeNAT*EkyL#$wgG10e_!siJ{f=;F9GIzR&$C$GXf-e0nUb za}dedkg=2YBLnKAL!#-#g^yYg5r5^T!uS0Tg-D(3kLFm{vown?{7o!BBlC!EpqxpG z=GY9EunM1vh%4IqOSpg@zbY&#sfhnbVq(X@l0l5oZ{gTu&pUSOl}B4g@MEPrFP{YE z6~vCUuh_s=HcIDK%DkE=ftz{tOXa4@s`(}ciOcu524MU~iKO@N13Jsr4wZr=l~CTT z(KdITe)w!VP^a-b%1RgE@xCBt=o%S_X8J=y01B{bWNbot8!TQMi;IH6FDE!vldfIT z$koajAU@lCaD46lp}=&x@LXjbp78gcjH`%Cbs1T4lA@piSnFDTF}Ow`N=UMz2fAhlJUbJfkt zrn2~_#OP|(_OBhgieBnKYCl7pE~cvO#bUOMK#Gf}f z;s#$>I(~EMZIL}3%=#eL&fkE#8h$N4?5BeHC#q93Q!8_p=4K#8KG}xfgFoC?Hdjk< zxp`b^8 zPe$*l^MZOWr}lh)(wEJGR)1yoIbKf%{xI#WBiR%Y$TtkA`+7Ma+c~CK5mT*Kuqf4= zYoj+1C&ts~>~w;Qvcp8h4!aeX9B}z1NuM|6pdsr~*Z87OZKd_MRr0`qP7(_HayS~t z=Y zrTC!r>>`XWXm(N^`?z*D<4l)1p1DlS8K|$GcdtVH3Jd6+xJ+{~JBPO)NPF?WZOKsi z1}KTR7JBA^q(Fuki>8F^q_!K#$NnzcZqKuQq02|IIJUj+-Sy9KmWlFOGVPiNvZ>#5 zyzI%ghr4EP2viu8YfF!q*!!vhkjeL{>eFA*+CXA1&!IfvM0%=tWq;?wVuE~z^pUtb z4jMt2)QjV}YPXzJPR&!l=hKv^>i0BSA5Rebf-kJ?HO}`B?cXq2^0u}&U%3LT1?i+E zYdsC1^t0m^AOO0pvSKa zxwpz0k#vWSI?d23;eKCpIXY@)%us(=$NOKyLVpH5p$-7#EKbPs`3oEU7Y_UPpDd#Q zLG+kk|KWfB|I@sqRzLs3+D{jSRdH&GX%c;1(puy1sn4N*P9nqX^4X6KX6L!m zzUN5%c>#aEP;#wIzz(KWwq^U}zwzc@@9V0R1D$KPtMpa30N*Pcn)T%SVKTeiIif!+Q8OY4+dD@~V|ETpL@FSlY zvhfk$yYt{Ht`9#I=q4j_S{a5LojJu~~Ubl^dIe*&iP z2EXw}=ZQ{DWuMx61{yB4^iydP3flubSg?J%fVesXUF4|tpO@*6UBB1m&~W+(e2mI< zqxWs?f%6NxgZNELvcn%Qi3<_DQAq==^_s64m#URl;oD+neeURo)&*wWFl-nuGkl1NtTPFPu4 zwo)b}N!%y z6#}ZNHvZKQGx@7D{GFTv!3m%q|D?gd-`}Z;q}tlrx)E~Y>89M*>w7C}#FIQQ=7C&sY-hR|HDj^XNv`v3`%w z|8eiXo-e=vC~1|s!JmgOfAaj$_j|q&-rSbIw;kWa=07hoviF#pH}_v{xW1F&$BF$N zH|pvEE+4%cqIdpt(0}+w0Pu-T{FjQ)pHe*IJuun)j=Zb?s~tJmiO6bV@9x(lf zIevR%y*&q>o_gf}+HWXCPGwI;>8eZr&y#)k9+>QV4~G{&lZ&4&lQA#gOw0CI{@*7H zw0WyG*lY9lzj9EoHejL!;&r0`=g9(qxUpdm5dSl;{mAyA2>`dd=A{Pw&y&^E1176C zH+c4^EcP?DDAxtJ{r`&QPwDo5Me`r{|Nn~Sf7dLUdZ9&n&T9XI0+LHPIk~k0fPgax zEH{2xfn-$BM8Q_utEbZuCLrOlJp&%dclSgPjh zVkBDe-{1GoN-uPq!>#QGj?TrEo>rM1fV7%6p=V~((+`Xxe`{=LV7*HE^*(uJmtWp- zf#GVdmKhrVZYLKXP%YiykY*~+1>DFW31h;qxRL)gJ6o-(c7)6o4EICUtYVAWa?@Ay&caACS z?IJQb>9Q6cZJ(TAyU^IcDSK*-<)_N-FGgZ8RZixXtC%uouy*@YhoR@ww&Osw&$5Va z7JhgXnA_QAvk;;w*e_0O@v%J6o%J6y#W%ir&-b$VO7ia?!JxWBW{guZ#MVk>Q3*AKI?=CD6=5Io zs|4&lNHf-Xxxx9Rdg9)K-UB{)J_I`4;7_PtMGv&rz&pt!|7t+@53I3A<#NYRDZi`i z^{7MWHGhRuY&mzR4|W{D9LJ>J<|(EE80>%Ml)*n;|tSp?b-;w z04!w8Jk_{B`Iz!`e#w$96E;Jwd4)P|rfTQd ziVgqwsz>d<9ZcJiFBtyCeh* zF6pW0!-untF_jApKaTrrFMQ&i2^9m?_``bx=9eo3+?u059v3`X@Pa?8t2W%9n0(D` za>czlvqWxZ@x5hlo%5I2OAcI=!VjgNs0vxC_(yNgtvvKj`ah#J)+FOr2uS1|imH-y zbk#=C6q(O(;~HH{(MmRNtK}86-|5o{`(@7l#(vbtSCnL+xFn<`de2#ruN9v=mOl6A zV-^0=eg5YkM2IH_l)Bsr%r=u^HaFE%y~umik|9$jPDi^`*UUXGlG)JE#P@ zxh7~?8?^~l_tH_5M&3SAOH%{tIO!nHa$K+KMpeskvHD8&^D=4QkDK^KIXTe=3LWld z>Exk3`l@Ixd7->mv;vaKMjg4Jo1s^CPLYK|5L8J?sty8G^{qDt$lb;rFZlLr0e< zj0Giv-yKDd>W?kr&|Hz>BGZMcVlIL){wj!e;nTLAut~hS7*k@7{bN0#J-$llT0m7S z*sK=z;B~%f;3v(RSyy&{M0aTeykpz5<&FI8VgtdiE=ZvmiQ1Y@97R*D4ebwA3IWYY z``jBA6ho@0qs2VwoG0|WR+h&c!>vo`ix_*10; zq6>b$4jDI()RRZ4YL@csOFdBYM_OTlYqlj2p@qU%APcgx;B{MCd^?oHH)wrxp2}6t zY}UXWR$@3-=`;-&4*l^&9!)S!tv%x+5zcbyKy5{l+e;c|TEts>PN7B8EB0fto>3#} z>ZA?7q!Kr^$F*DbH{a0R8hpsB#-w2gIi75tcbaP9JhYIhX;}h9xbV>P)Rg&X@RKb^ zp`f~QZ0%JKVi9$9-Rb^D^M=i{Xy2^I>L6J{w15hEu}phz!{rlIg|iW!@wtIPyU9Ji zm9HA%)_3^@TYHo4S4?@;nALEwG-+$yvsj;lIUm23(>^IwiD zx*kdtc|gJ{$~-^j;_Dq&TqQ-UF@W%U++@i4>oGw}LLW9lj$`{V$D@w9L?cVRH(IcR z4743r=aPUXgo9f)YbK&G?Y`_Yl)-f1h*$3Zb8 zhUS3@N5FK26}Rbwis5(F{RuTk`YPOqGQF|>P^&n9e90Yp{;RG--IvRa{Pn67jFMzL z8Q)oUo<=@?IEKPri8gU4c9AfBc;mlV5G5fuqNhdM=^48xyvNu_wA4rHAe)#mW&VgU zL~>2g*eU~d@X@HYwgX~Tfq$k>0KEArD67UcG4nrEh@3;{O_WLJq|i8mn7-yP>btrw z@d>d4>A{tj(=UzQ*&eTqc+m@qa!w8yS_R>~bJ4s9K;LfWn2aa^H`waxv9_ez20DX#4Txl zzSc%3KV;poo0Pt}C%7g(Bk~gE>f?`!9A-KZPOmIvuV@*II{xMh5q|qV#h`{fXvBBx zXQwIsg%!9<)Gdbi#4%V`lI%?d&hlG0cS;)RxqSFVhEC`x$J}*l*+gr23TsHb~?#2N*p}&T(UEIdkIra#D^l=bTB=yj3$e> z60ZWnSHo1jkS)|4>|y5MAX_7Id<>o@cQ48O@iwK*9;0}mSiZP&TtH=zXNU&fx}2~) zp!bHoO6EhoYVO8*ZfP(w0CN^~b;^b_)Vi!?9c7ReGAL(Cj!`PTM^lrDBNeNp?u?ng0V$sVti#u04d?Ui}@VE zM`NanUISZIHnq(ygo532tFyStU0dl`G&;Y1vhypt12%zIPjHwN=J5gF^K`f8(&H=4 zMB&&jzbm)8#1O91v0Jbiud7x!7S&0(ee*APgoF3WeA`-fL~yRp+{0pM;%V2jOh;UN zSH@Q`S#^hILocGt^MyZ8>SBXo3Gt_unMSy~*UPRWtRD^1%80>O?d8(a$K zFrJP$hH)q$y&p$Y)lwWg`6KTq7RppP$D~S7MMx^cFm`5uCnOkff$mVCR%xAXX4Ovs-; zzAFkrQ5rT18tV6L`F9S3is@6ud1qA7g4ID^!jJXmThrB$x}@`w@h_@~o5;D+``*`1 zP?)=qA_{}BwxIV7GgGc+&(@-Z&%vq&RT%bkZ)$12aF0vWx!u#11^$eGc38XtXrY`E4O% z?OKRS;Vd}#L*#0MJYuRyM;-ii=oFsFB0QUd&$sDr`P@Y9GXOTE952Ofo7rrBaN()) z=Btd0>xekL&=HI2dR5ao+&(XmZPhxIDNi^0##QnL@q@E4)@yA&{6B0-Skef>l{dix zwGn)WR&slQrqmK2fT_!IKEdkVouF2~rF1M<=;bkq_v26|*l&t!ql$YrnCXSXN@3S< z0Y=eOSnR3}xtQiH1l)Dp<1<@Omfpr~w>s%+XHrVt{X*01$@aCIo3ez*XJDH;~K*&Qtm&An!vp? ze|Rnz5y;C|Bg16yKB=L&P)cN*MJR=!;pO#E=lJ>GP+Jl&K+l@)$nV^5xrT3&m5m(@ zVC5}(jZ(|Sd?_s5SdTzX#HfHpRMmSuoo*uZS5xb+yGNOB!Yjs#wM`KHG`^&?tCrW$cM^qVtZvHgM;ZyL5U3sRq3v&K1`W@q14( zS%P6*i18R5Qs4~>)~TW-f4Y)~5BFJ~n?#RvCi`oz(-AEA{LHB=Pj|PJx07MRkr`M?AtEA`yxl3{Z zsBtBHE_Pu{ow3c)7s@mb@^ibyoq1)DSwMwQD_@u8Kf=cB#lrX)zR={5SDcsjZVKi; z)n`j`8!3fupK^qA61Np}r>}YXxokw?*S3IMq*^`jUO6R^7RS~-Fpixd$v}Q;-{)w)vl1NkU zohw(vEgH%X`7?9DBJWK+CVe0?8S+j8ny@%>>4*IwBab#u(vjj4xADn%Vl2-kkUQ$* zO#|kOFk-echsU5LcwRn;9}DK!JZn&P>m>JSnBCJMN4pOGwV9Jz95xM-6IaJ-qD1*k zWfO9Wuc^_YL@m!%MIPOA>W@+-_X50X85=S|c+#Z0vM09m{`rb;*Wxr)44g>Fkxnn2CbIz* zK9g!FmFwM`zA5f*U0}h8Fcem}j%CxWX-k_|1lVSLh?MOAAa`rA9(~`p2|H})-z_KT z*0$#^56C22`>mZB)ozOioVGesjh1TkA1ZWi+Ia0)p}4&WYo#5|UNGx^;@7V|CrS@P zv1~a(C>xz4mY;T<_`1&hgI}qPEORCaE7z%(eW{};BEQdnY_rW)5>Y!d)p3WB!p%eKlwRCm|oT&vWPrb4jADMYn zFbvhsO68(_LpLly1!B3R8D@g#P@NGd7cKP?rBhn%K-dF!$tEzzqOZzPcYlM4=uCr1 zd`F2~;Hd~FwfpQPi?S6Sp8!12G6EiBAfseyKte(m3ixGys*UH@eI{s)OP`!8OjFuL z@La%i$;<=t$>LHlqT=|;(+|DsmsJlj}qu|LY*SP_i zN-WE#s95o?zroI1O{^WNn1eBiK2WfZLx~ZFisx>JqtKvb=wsDbv~cx$E8Ege1y~XG z8oDq>CO-|0dZ=id#Y_)tg@Cs)jpJ+gDVYAgGOF=8b~q8b7lJSKE67-Qdl{WpOwg?)1nX4PEywYjD#?sTj4~LO`{9R|SLyO=?d>pOy^2Zmy~F~^Y_uAeUXAM9(RajPOK+p$Yr2pVS^65z1oNDqH6_zbg= zn@5GzqY4v?Vv|}iyEIN@{r2PT_m7iDii|VAI5!4gsX(BE;q&h_-!&4gFx_5!leMXg z6J}*I1LDkyd`C(32O&i?G|C^67>Rm6ot8I4t)aN%1zLLhoiph{T7m5ibnAtWUQp78CtD_Kx2 zUW#9hMGW0g5fyChPBa-_O?@!cEKJ^5$4s?j_s}Q;ur=)Q0RaR4P-3}RT8?adIjN49 z9&GGffi++dre?sYfNFX7gS8OKCdJ3+Gi?K;nEFb385mtK!j%DrK)H_rn+PH?0z%v? zRdnzO>xEjqNMv;$Gs2D9yy3p3xRAnIcW}O=LBlsyy9*;W`j`mok=8Y^!@1j|p!Q;f2_w;Gp{GJ)C;PrJqGJyd3w>?|qF zBEEt}83p?F+N+&~Kl?;~yGTMgw0;Bq5%kbh2$#P54P4WGT;H@`0S4f+SZTKqgVHXx zE<00PVL)}VK74e%?Jxg2cDw@ir^Cu;={N9gDTvNPl7DqP;oHFFhBAK)52*d>xz|lt zXc5Db6|rKbm`Cy}_`!5ULDAa=AH?+{dANmwjlOElb`ofZI%*=~ZT%e}7u&I8oRn%t zI(j749q5?&h}pj_@5BYq#G$6x05DF!If`J?3qlW~;4R=H&?wUA$LK}q-leZ)`%NxN zwfDmuVRxEnbz^G@zBN{YP$*MPQLr*3K~NtO%J`Cz?vc3G_E0Q%mI-D?j(sc^PnHPj zn3_yP?>Ed?`;l;PH|>q_&&rY^m*g?(a}w2PXxSP@gtAifwS4Xlp~7HDLY`vluNpA+ za(hW}FC`{pQ3`>QLK;Fo3r?;}Ynxf)@eedD<=cIhNZ8Ttl3Gh?qfDQ?6(vs8YBL;F^yMf^u?nX6h?GTdyeO9#kPXT7-Q}!b zFzt?mY*pF$zNxkMfDcvK!K@)hvrgZ4mO844Z z7)eo3HFnuBrzg4&B);0et4xuXSqV+|79~u#V|&5H=T^XT-6&N*_tlNewKb|qJ}O%d zmJBiZ5>nepBzxgHtMfS%#}qR2j+``CcvKSl@iO7-6H!9rZD=$D5pJs~^0IDGHqhm> z+d&hnGzr@rKmY0AzVDDd^S%~|?`4&pai5yGUCGxytL{y^kyhI&{sQ}7 zY=t9M57QE?qeZE$v@eSs1lH9lyO&L6fc;_zdJBrY7i3t5ffkz6bp@!emejisAEhln z)u4*#Lqvo@@0snAL|i{4-#gGa*Bw##_q)_T8Y<dutB?1okQE2@I zz6?c)cJRZ%MmR&g*`d0jvRYY_#AV&_Vi{-i<*CztNa*4aV39Ieo=skf^onGSB%=h` zw8qjLg1sEd9It2@t=*Z<2z|0+jqYo%)nw}4S$vMnz%7cKC5Vd4?1Xf^Le-3YEpR}U z*P{Z<1Vx*=f_lMMP$iHQ#${B<+;g;ARiSb5{XQ`u$4}H7ap^1c_68~60pH`WJFyj*^bH6kIGU+ghU<$5$QHW|uZEI&e*HK@LFw35K^*}SfEvmbAhUl_FFx{tS>WQY8pt8lbe*##FVaxm>EgkE(gS>INE$t z!n<}TZ^iq>T9WpGI{V2FLB=ftm2a!AB|C=PVBs@S?e4Bk0-@esW_1 zZqGW*;e0F?a&5|ZO1*eAmu^g~i6B0C-~?{JFhrVrCI9%DMXJxjll0GQkJhT(rFdFj zFccsn8O_ntn6qRHLOY*ySoG!l2eVmC6e-ZDX>J%|u2(}uB6wOI(sB!VQZ-mN$BA>% zKxkJYEc*_F6oTOqS&hi6eA@3fuWS!-v~QW($fm}k3me~?UNSrL#OiXLQ`~oRcD=l2 z#L)x3Jrv>T_tE*`MnsWWVvG@d*Og|)Pw#TE@$}A8MLbX0FyL9kRSXmzsJ55d7fvf* zv&2+hh$56=bWz2|i#v`%de;rgX4(#XSDf%mz$LtRqWk1?mZj_BU#F&7W~!l34BD_l zTb5v$uw2F{jcOfw%=359vgMM@r9+3LVl;2v(Et9e8kys;<2Ebfm8DsyskdqS6h8L` z_vkN*uT7+O2oG6&w2j1+pv+&OB?R1!^=UaS`!tDM6k)8&!YflQ$kZ2Ec5ZKvZP{!X zx1@Ss@IEC#XuaBQx>_22u;l%EL`+O~;v~oDGv7X2o>6R0dAV9qnEM@!86Q5Re$?uE zB@hG|*B7ecz5ctNGD?7vbESyV@aE0MR`7+aH4O{Cc^LZ#5mOJl>-uaG5 z|Bs(~pQ1_-DNX5;!6(f1ZT9LL>9~tz*aPxkF&7o-vuWx($+U)vOrX*9jb`T2a=bO3ub{lO~#>w7>NB2$zQObR(ktr`92FPve+3rSs6g3b{a&?k<8%1pb3|F5`kJI4UuAVpu^K?kyKP zSr5#)93FJOBGZhYxrLk=4%IY3n+fbs!clVR`xxH77%>m9B)A=HR8$dz%W)+w+TK{; zGEXZyxdsWn!#lZIaKbqi+Balg7P+1(C-GX_?B2xtdsdkT)-TO{_I1nLi`K4ISJXj} zuTuDfWA5*4fC4q8TXc#(KXad2mVMRP`39eeq*1y+JDAEyJ1_@D6&sn2d7~tx^h>3CgZ{}6I+p15WFzLNXzlK zyw~)icnAIQcP#l=>_!m6;EF*(-*w&YVMvM4Z1G#Y(%^N2(W})xpRhD<6H<~9cGD^5r4NveOH(I}^oL8P z@oiXAC9_Sc*OK6KACwB(UvgqCXg=wGe+ABLgzQ&Qij~g{}9iF@*6}6rE zT%9MS{GFXi66I>hr#czu4EwnVn=5k`278a?dBaI;lPv}Jl(Y=pj~PJBBb$rwC098W ztrg4fUHU1q&Z1?#o6_B1VRtr5W)EB^eBnLMs0Lu<<2^W$_Q4c0(Cc$+H zD4<}q+n0@g*7VNqLzI8fBXuQ$yNF<~apE^Q%$8|~1DnokKAkDFV0sS$WflGe+g9#{ zIvgnI?6K*q6PzMfP>c1kw6CnGeinvT3#eR-Pq8h!E}(L$GOLz{DpN{)g#`iPon;$tsUIt-`8i zU0cM9CJjBs%Z~k%JAd%QLhmyet{#U=fI$A;x%SOuQ(=EIM~q80J?#a#HByNkl{*YsbFO~`J8Y}xq?L@4X)`CT5UJRpnZdDA~SVz9BZNUa|VA< zJhW9*Zij!;umUh*=-em9({7rsVm$3u`aK-#wcYEd$unV@-&e=AZ+ddqQot?y@_;rk z(8B3)fy?QGg3PX@>|!3#OegC)ew|90;X^(k-RY;Utgrjj;kS(<7sH$C-*JW}YrlFi z8x#Gy&8?|Pay2BRR4evP6E^YPVA3Hni)+ z6Hv07P;h1D&V$^~!YuDyc3>Xi*XDy2+gl

*8;$-fZ*AFtK2 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

(828n8JOV)eGCt}gXoZ`=YhJ19VjKf4( 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⁣&rpbX>mxkLZxk}))J^OZZYdNsCCgatmxsm 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[%)ARDU3 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°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
-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 literal 0 HcmV?d00001 diff --git a/docs/apm/images/service-maps.png b/docs/apm/images/service-maps.png new file mode 100644 index 0000000000000000000000000000000000000000..454ae9bb720fbd69560ecb3b3cfa90ddad1a06cc GIT binary patch literal 494889 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

<(f!^u*&emsmU#V*3A1CYVPjj)&n-00gQo)rD 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

x#XQ&2#DQ{1JgSrU@}=Q9c8wG}H$-;hQbhP}LS! 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

oOowp0-RyD3X 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 literal 0 HcmV?d00001 diff --git a/docs/apm/service-maps.asciidoc b/docs/apm/service-maps.asciidoc new file mode 100644 index 00000000000000..e0d84f33b4dcb9 --- /dev/null +++ b/docs/apm/service-maps.asciidoc @@ -0,0 +1,48 @@ +[[service-maps]] +=== Service maps + +beta::[] + +A service map is a real-time diagram of the interactions occurring in your application’s architecture. +It allows you to easily visualize data flow and high-level statistics, like average transaction duration, +requests per minute, errors per minute, and metrics, allowing you to quickly assess the status of your services. + +Our beta offering creates two types of service maps: + +* Global: All services and connections are shown. +* Service-specific: Selecting a specific service will highlight it's connections. + +[role="screenshot"] +image::apm/images/service-maps.png[Example view of service maps in the APM app in Kibana] + +[float] +[[visualize-your-architecture]] +=== Visualize your architecture + +Select the **Service Map** tab to get started. +By default, all services and connections are shown. +Whether your onboarding a new engineer, or just trying to grasp the big picture, +click around, zoom in and out, and begin to visualize how your services are connected. + +If there's a specific service that interests you, select that service to highlight its connections. +Clicking **Focus map** will refocus the map on that specific service and lock the connection highlighting. +From here, select **Service Details**, or click on the **Transaction** tab to jump to the Transaction overview. +You can also use the tabs at the top of the page to easily jump to the **Errors** or **Metrics** overview. + +While it's not possible to query in service maps, it is possible to filter by environment. +This can be useful if you have two or more services, in separate environments, but with the same name. +Use the environment drop down to only see the data you're interested in, like `dev` or `production`. + +[role="screenshot"] +image::apm/images/service-maps-java.png[Example view of service maps with Java highlighted in the APM app in Kibana] + +[float] +[[service-maps-legend]] +=== Legend + +Nodes appear on the map in one of two shapes: + +* **Circle**: Instrumented services. Interior icons are based on the language of the agent used. +* **Diamond**: Databases, external, and messaging. Interior icons represent the generic type, +with specific icons for known entities, like Elasticsearch. +Type and subtype are based on `span.type`, and `span.subtype`. diff --git a/docs/apm/using-the-apm-ui.asciidoc b/docs/apm/using-the-apm-ui.asciidoc index 1361dc046e3b1f..b1b7ed73079866 100644 --- a/docs/apm/using-the-apm-ui.asciidoc +++ b/docs/apm/using-the-apm-ui.asciidoc @@ -31,6 +31,8 @@ include::transactions.asciidoc[] include::spans.asciidoc[] +include::service-maps.asciidoc[] + include::errors.asciidoc[] include::metrics.asciidoc[] From eacdbcd4f5a6ad92db988a0d5c8ba7e0be141112 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Tue, 7 Apr 2020 16:37:15 -0400 Subject: [PATCH 09/52] [Endpoint] new AppRootProvider + Policy details tests (#62319) * Refactor of mocks into own dir ++ added `createAppContextTestRender` * new AppRootProvider component * Refactor application `index.tsx` to use `AppRootProvider` * Add `generatePolicyDatasource()` to EndpointDocGenerator * Test for policy details --- .../plugins/endpoint/common/generate_data.ts | 38 +++ .../public/applications/endpoint/index.tsx | 81 ++---- .../endpoint/mocks/app_context_render.tsx | 70 +++++ .../dependencies_start_mock.ts} | 2 +- .../applications/endpoint/mocks/index.ts | 8 + .../endpoint/store/policy_details/reducer.ts | 6 +- .../endpoint/view/app_root_provider.tsx | 58 +++++ .../endpoint/view/policy/agents_summary.tsx | 2 +- .../view/policy/policy_details.test.tsx | 239 ++++++++++++++++++ .../endpoint/view/policy/policy_details.tsx | 8 +- 10 files changed, 454 insertions(+), 58 deletions(-) create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/mocks/app_context_render.tsx rename x-pack/plugins/endpoint/public/applications/endpoint/{mocks.ts => mocks/dependencies_start_mock.ts} (96%) create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/mocks/index.ts create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/view/app_root_provider.tsx create mode 100644 x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.test.tsx diff --git a/x-pack/plugins/endpoint/common/generate_data.ts b/x-pack/plugins/endpoint/common/generate_data.ts index 0ec105129b7ac4..7c24bd9d771483 100644 --- a/x-pack/plugins/endpoint/common/generate_data.ts +++ b/x-pack/plugins/endpoint/common/generate_data.ts @@ -7,6 +7,11 @@ import uuid from 'uuid'; import seedrandom from 'seedrandom'; import { AlertEvent, EndpointEvent, HostMetadata, OSFields, HostFields } from './types'; +// FIXME: move types/model to top-level +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { PolicyData } from '../public/applications/endpoint/types'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { generatePolicy } from '../public/applications/endpoint/models/policy'; export type Event = AlertEvent | EndpointEvent; @@ -452,6 +457,39 @@ export class EndpointDocGenerator { } } + /** + * Generates an Ingest `datasource` that includes the Endpoint Policy data + */ + public generatePolicyDatasource(): PolicyData { + return { + id: this.seededUUIDv4(), + name: 'Endpoint Policy', + description: 'Policy to protect the worlds data', + config_id: this.seededUUIDv4(), + enabled: true, + output_id: '', + inputs: [ + { + type: 'endpoint', + enabled: true, + streams: [], + config: { + policy: { + value: generatePolicy(), + }, + }, + }, + ], + namespace: 'default', + package: { + name: 'endpoint', + title: 'Elastic Endpoint', + version: '1.0.0', + }, + revision: 1, + }; + } + private randomN(n: number): number { return Math.floor(this.random() * n); } diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/index.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/index.tsx index fa9055e0d9bbd3..89a6302351a546 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/index.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/index.tsx @@ -7,13 +7,9 @@ import * as React from 'react'; import ReactDOM from 'react-dom'; import { CoreStart, AppMountParameters, ScopedHistory } from 'kibana/public'; -import { I18nProvider, FormattedMessage } from '@kbn/i18n/react'; -import { Route, Switch, Router } from 'react-router-dom'; -import { Provider } from 'react-redux'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { Route, Switch } from 'react-router-dom'; import { Store } from 'redux'; -import { useObservable } from 'react-use'; -import { KibanaContextProvider } from '../../../../../../src/plugins/kibana_react/public'; -import { RouteCapture } from './view/route_capture'; import { EndpointPluginStartDependencies } from '../../plugin'; import { appStoreFactory } from './store'; import { AlertIndex } from './view/alerts'; @@ -21,7 +17,7 @@ import { HostList } from './view/hosts'; import { PolicyList } from './view/policy'; import { PolicyDetails } from './view/policy'; import { HeaderNavigation } from './components/header_nav'; -import { EuiThemeProvider } from '../../../../../legacy/common/eui_styled_components'; +import { AppRootProvider } from './view/app_root_provider'; /** * This module will be loaded asynchronously to reduce the bundle size of your plugin's main bundle. @@ -49,54 +45,31 @@ interface RouterProps { } const AppRoot: React.FunctionComponent = React.memo( - ({ - history, - store, - coreStart: { http, notifications, uiSettings, application }, - depsStart: { data }, - }) => { - const isDarkMode = useObservable(uiSettings.get$('theme:darkMode')); - + ({ history, store, coreStart, depsStart }) => { return ( - - - - - - - - - ( -

- -

- )} - /> - - - - - ( - - )} - /> - - - - - - - + + + + ( +

+ +

+ )} + /> + + + + + ( + + )} + /> +
+
); } ); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/mocks/app_context_render.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/app_context_render.tsx new file mode 100644 index 00000000000000..af34205e2310f3 --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/app_context_render.tsx @@ -0,0 +1,70 @@ +/* + * 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 { createMemoryHistory } from 'history'; +import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react'; +import { appStoreFactory } from '../store'; +import { coreMock } from '../../../../../../../src/core/public/mocks'; +import { EndpointPluginStartDependencies } from '../../../plugin'; +import { depsStartMock } from './dependencies_start_mock'; +import { AppRootProvider } from '../view/app_root_provider'; + +type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult; + +/** + * Mocked app root context renderer + */ +interface AppContextTestRender { + store: ReturnType; + history: ReturnType; + coreStart: ReturnType; + depsStart: EndpointPluginStartDependencies; + /** + * A wrapper around `AppRootContext` component. Uses the mocked modules as input to the + * `AppRootContext` + */ + AppWrapper: React.FC; + /** + * Renders the given UI within the created `AppWrapper` providing the given UI a mocked + * endpoint runtime context environment + */ + render: UiRender; +} + +/** + * Creates a mocked endpoint app context custom renderer that can be used to render + * component that depend upon the application's surrounding context providers. + * Factory also returns the content that was used to create the custom renderer, allowing + * for further customization. + */ +export const createAppRootMockRenderer = (): AppContextTestRender => { + const history = createMemoryHistory(); + const coreStart = coreMock.createStart({ basePath: '/mock' }); + const depsStart = depsStartMock(); + const store = appStoreFactory({ coreStart, depsStart }); + const AppWrapper: React.FunctionComponent<{ children: React.ReactElement }> = ({ children }) => ( + + {children} + + ); + const render: UiRender = (ui, options) => { + // @ts-ignore + return reactRender(ui, { + wrapper: AppWrapper, + ...options, + }); + }; + + return { + store, + history, + coreStart, + depsStart, + AppWrapper, + render, + }; +}; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/mocks.ts b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/dependencies_start_mock.ts similarity index 96% rename from x-pack/plugins/endpoint/public/applications/endpoint/mocks.ts rename to x-pack/plugins/endpoint/public/applications/endpoint/mocks/dependencies_start_mock.ts index e1a90b4a416dc2..00cf0bca57e66f 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/mocks.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/dependencies_start_mock.ts @@ -7,7 +7,7 @@ import { dataPluginMock, Start as DataPublicStartMock, -} from '../../../../../../src/plugins/data/public/mocks'; +} from '../../../../../../../src/plugins/data/public/mocks'; type DataMock = Omit & { indexPatterns: Omit & { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/mocks/index.ts b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/index.ts new file mode 100644 index 00000000000000..65e78f27943ba0 --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/mocks/index.ts @@ -0,0 +1,8 @@ +/* + * 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 './dependencies_start_mock'; +export * from './app_context_render'; diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/reducer.ts b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/reducer.ts index af9b49cea18adc..fb3e26157ef32a 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/reducer.ts +++ b/x-pack/plugins/endpoint/public/applications/endpoint/store/policy_details/reducer.ts @@ -74,8 +74,12 @@ export const policyDetailsReducer: Reducer = ( ...state, location: action.payload, }; + const isCurrentlyOnDetailsPage = isOnPolicyDetailsPage(newState); + const wasPreviouslyOnDetailsPage = isOnPolicyDetailsPage(state); - if (isOnPolicyDetailsPage(newState)) { + // Did user just enter the Detail page? if so, then set the loading indicator and return new state + if (isCurrentlyOnDetailsPage && !wasPreviouslyOnDetailsPage) { + newState.isLoading = true; return newState; } return { diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/app_root_provider.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/app_root_provider.tsx new file mode 100644 index 00000000000000..ca27831ee90b51 --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/app_root_provider.tsx @@ -0,0 +1,58 @@ +/* + * 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, { memo, ReactNode, useMemo } from 'react'; +import { Provider } from 'react-redux'; +import { I18nProvider } from '@kbn/i18n/react'; +import { Router } from 'react-router-dom'; +import { History } from 'history'; +import { CoreStart } from 'kibana/public'; +import { useObservable } from 'react-use'; +import { EuiThemeProvider } from '../../../../../../legacy/common/eui_styled_components'; +import { KibanaContextProvider } from '../../../../../../../src/plugins/kibana_react/public'; +import { appStoreFactory } from '../store'; +import { RouteCapture } from './route_capture'; +import { EndpointPluginStartDependencies } from '../../../plugin'; + +/** + * Provides the context for rendering the endpoint app + */ +export const AppRootProvider = memo<{ + store: ReturnType; + history: History; + coreStart: CoreStart; + depsStart: EndpointPluginStartDependencies; + children: ReactNode | ReactNode[]; +}>( + ({ + store, + history, + coreStart: { http, notifications, uiSettings, application }, + depsStart: { data }, + children, + }) => { + const isDarkMode = useObservable(uiSettings.get$('theme:darkMode')); + const services = useMemo(() => ({ http, notifications, application, data }), [ + application, + data, + http, + notifications, + ]); + return ( + + + + + + {children} + + + + + + ); + } +); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/agents_summary.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/agents_summary.tsx index d0751cf9fb886e..a3e30eb891db43 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/agents_summary.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/agents_summary.tsx @@ -61,7 +61,7 @@ export const AgentsSummary = memo(props => { }, []); return ( - + {stats.map(({ key, title, health }) => { return ( diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.test.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.test.tsx new file mode 100644 index 00000000000000..2ecc2b117bf017 --- /dev/null +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.test.tsx @@ -0,0 +1,239 @@ +/* + * 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 { mount } from 'enzyme'; +import { createAppRootMockRenderer } from '../../mocks'; +import { PolicyDetails } from './policy_details'; +import { EndpointDocGenerator } from '../../../../../common/generate_data'; + +describe('Policy Details', () => { + type FindReactWrapperResponse = ReturnType['find']>; + + const sleep = (ms = 100) => new Promise(wakeup => setTimeout(wakeup, ms)); + const generator = new EndpointDocGenerator(); + const { history, AppWrapper, coreStart } = createAppRootMockRenderer(); + const http = coreStart.http; + const render = (ui: Parameters[0]) => mount(ui, { wrappingComponent: AppWrapper }); + let policyDatasource: ReturnType; + let policyView: ReturnType; + + beforeEach(() => jest.clearAllMocks()); + + afterEach(() => { + if (policyView) { + policyView.unmount(); + } + }); + + describe('when displayed with invalid id', () => { + beforeEach(() => { + http.get.mockReturnValue(Promise.reject(new Error('policy not found'))); + history.push('/policy/1'); + policyView = render(); + }); + + it('should show loader followed by error message', () => { + expect(policyView.find('EuiLoadingSpinner').length).toBe(1); + policyView.update(); + const callout = policyView.find('EuiCallOut'); + expect(callout).toHaveLength(1); + expect(callout.prop('color')).toEqual('danger'); + expect(callout.text()).toEqual('policy not found'); + }); + }); + describe('when displayed with valid id', () => { + let asyncActions: Promise = Promise.resolve(); + + beforeEach(() => { + policyDatasource = generator.generatePolicyDatasource(); + policyDatasource.id = '1'; + + http.get.mockImplementation((...args) => { + const [path] = args; + if (typeof path === 'string') { + // GET datasouce + if (path === '/api/ingest_manager/datasources/1') { + asyncActions = asyncActions.then(async (): Promise => await sleep()); + return Promise.resolve({ + item: policyDatasource, + success: true, + }); + } + + // GET Agent status for agent config + if (path === '/api/ingest_manager/fleet/agent-status') { + asyncActions = asyncActions.then(async () => await sleep()); + return Promise.resolve({ + results: { events: 0, total: 5, online: 3, error: 1, offline: 1 }, + success: true, + }); + } + } + + return Promise.reject(new Error('unknown API call!')); + }); + history.push('/policy/1'); + policyView = render(); + }); + + it('should display back to list button and policy title', () => { + policyView.update(); + const pageHeaderLeft = policyView.find( + 'EuiPageHeaderSection[data-test-subj="pageViewHeaderLeft"]' + ); + + const backToListButton = pageHeaderLeft.find('EuiButtonEmpty'); + expect(backToListButton.prop('iconType')).toBe('arrowLeft'); + expect(backToListButton.prop('href')).toBe('/mock/app/endpoint/policy'); + expect(backToListButton.text()).toBe('Back to policy list'); + + const pageTitle = pageHeaderLeft.find('[data-test-subj="pageViewHeaderLeftTitle"]'); + expect(pageTitle).toHaveLength(1); + expect(pageTitle.text()).toEqual(policyDatasource.name); + }); + it('should navigate to list if back to link is clicked', async () => { + policyView.update(); + const backToListButton = policyView.find( + 'EuiPageHeaderSection[data-test-subj="pageViewHeaderLeft"] EuiButtonEmpty' + ); + expect(history.location.pathname).toEqual('/policy/1'); + backToListButton.simulate('click'); + expect(history.location.pathname).toEqual('/policy'); + }); + it('should display agent stats', async () => { + await asyncActions; + policyView.update(); + const headerRight = policyView.find( + 'EuiPageHeaderSection[data-test-subj="pageViewHeaderRight"]' + ); + const agentsSummary = headerRight.find('EuiFlexGroup[data-test-subj="policyAgentsSummary"]'); + expect(agentsSummary).toHaveLength(1); + expect(agentsSummary.text()).toBe('Hosts5Online3Offline1Error1'); + }); + it('should display cancel button', async () => { + await asyncActions; + policyView.update(); + const cancelbutton = policyView.find( + 'EuiButtonEmpty[data-test-subj="policyDetailsCancelButton"]' + ); + expect(cancelbutton).toHaveLength(1); + expect(cancelbutton.text()).toEqual('Cancel'); + }); + it('should redirect to policy list when cancel button is clicked', async () => { + await asyncActions; + policyView.update(); + const cancelbutton = policyView.find( + 'EuiButtonEmpty[data-test-subj="policyDetailsCancelButton"]' + ); + expect(history.location.pathname).toEqual('/policy/1'); + cancelbutton.simulate('click'); + expect(history.location.pathname).toEqual('/policy'); + }); + it('should display save button', async () => { + await asyncActions; + policyView.update(); + const saveButton = policyView.find('EuiButton[data-test-subj="policyDetailsSaveButton"]'); + expect(saveButton).toHaveLength(1); + expect(saveButton.text()).toEqual('Save'); + }); + describe('when the save button is clicked', () => { + let saveButton: FindReactWrapperResponse; + let confirmModal: FindReactWrapperResponse; + let modalCancelButton: FindReactWrapperResponse; + let modalConfirmButton: FindReactWrapperResponse; + + beforeEach(async () => { + await asyncActions; + policyView.update(); + saveButton = policyView.find('EuiButton[data-test-subj="policyDetailsSaveButton"]'); + saveButton.simulate('click'); + policyView.update(); + confirmModal = policyView.find( + 'EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]' + ); + modalCancelButton = confirmModal.find('button[data-test-subj="confirmModalCancelButton"]'); + modalConfirmButton = confirmModal.find( + 'button[data-test-subj="confirmModalConfirmButton"]' + ); + http.put.mockImplementation((...args) => { + asyncActions = asyncActions.then(async () => await sleep()); + const [path] = args; + if (typeof path === 'string') { + if (path === '/api/ingest_manager/datasources/1') { + return Promise.resolve({ + item: policyDatasource, + success: true, + }); + } + } + + return Promise.reject(new Error('unknown PUT path!')); + }); + }); + + it('should show a modal confirmation', () => { + expect(confirmModal).toHaveLength(1); + expect(confirmModal.find('div[data-test-subj="confirmModalTitleText"]').text()).toEqual( + 'Save and deploy changes' + ); + expect(modalCancelButton.text()).toEqual('Cancel'); + expect(modalConfirmButton.text()).toEqual('Save and deploy changes'); + }); + it('should show info callout if policy is in use', () => { + const warningCallout = confirmModal.find( + 'EuiCallOut[data-test-subj="policyDetailsWarningCallout"]' + ); + expect(warningCallout).toHaveLength(1); + expect(warningCallout.text()).toEqual( + 'This action will update 5 hostsSaving these changes will apply the updates to all active endpoints assigned to this policy' + ); + }); + it('should close dialog if cancel button is clicked', () => { + modalCancelButton.simulate('click'); + expect( + policyView.find('EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]') + ).toHaveLength(0); + }); + it('should update policy and show success notification when confirm button is clicked', async () => { + modalConfirmButton.simulate('click'); + policyView.update(); + // Modal should be closed + expect( + policyView.find('EuiConfirmModal[data-test-subj="policyDetailsConfirmModal"]') + ).toHaveLength(0); + + // API should be called + await asyncActions; + expect(http.put.mock.calls[0][0]).toEqual(`/api/ingest_manager/datasources/1`); + policyView.update(); + + // Toast notification should be shown + const toastAddMock = coreStart.notifications.toasts.add.mock; + expect(toastAddMock.calls).toHaveLength(1); + expect(toastAddMock.calls[0][0]).toMatchObject({ + color: 'success', + iconType: 'check', + }); + }); + it('should show an error notification toast if update fails', async () => { + policyDatasource.id = 'invalid'; + modalConfirmButton.simulate('click'); + + await asyncActions; + policyView.update(); + + // Toast notification should be shown + const toastAddMock = coreStart.notifications.toasts.add.mock; + expect(toastAddMock.calls).toHaveLength(1); + expect(toastAddMock.calls[0][0]).toMatchObject({ + color: 'danger', + iconType: 'alert', + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx index 2dba301bf45376..bc56e5e6f63290 100644 --- a/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx +++ b/x-pack/plugins/endpoint/public/applications/endpoint/view/policy/policy_details.tsx @@ -149,7 +149,10 @@ export const PolicyDetails = React.memo(() => { - + @@ -157,6 +160,7 @@ export const PolicyDetails = React.memo(() => { 0 && ( <> Date: Wed, 8 Apr 2020 00:44:38 +0100 Subject: [PATCH 10/52] chore(NA): removes server imports from canvas src plugin (#62783) * chore(NA): remove server imports from canvas src plugin * chore(NA): correctly import types for demodata --- .../functions/server/demodata/demo_rows_types.ts | 10 ++++++++++ .../functions/server/demodata/get_demo_rows.ts | 6 +----- .../functions/server/demodata/index.ts | 3 ++- .../plugins/canvas/i18n/functions/dict/demodata.ts | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/demo_rows_types.ts diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/demo_rows_types.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/demo_rows_types.ts new file mode 100644 index 00000000000000..e92dc79fba8c31 --- /dev/null +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/demo_rows_types.ts @@ -0,0 +1,10 @@ +/* + * 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 enum DemoRows { + CI = 'ci', + SHIRTS = 'shirts', +} diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/get_demo_rows.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/get_demo_rows.ts index 02f8efcfde95d3..58a2354b5cf384 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/get_demo_rows.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/get_demo_rows.ts @@ -6,14 +6,10 @@ import { cloneDeep } from 'lodash'; import ci from './ci.json'; +import { DemoRows } from './demo_rows_types'; import shirts from './shirts.json'; import { getFunctionErrors } from '../../../../i18n'; -export enum DemoRows { - CI = 'ci', - SHIRTS = 'shirts', -} - export function getDemoRows(arg: string | null) { if (arg === DemoRows.CI) { return cloneDeep(ci); diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts index 826c49d328f214..5cebae5bb669f7 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts @@ -8,7 +8,8 @@ import { sortBy } from 'lodash'; import { ExpressionFunctionDefinition } from 'src/plugins/expressions'; // @ts-ignore unconverted lib file import { queryDatatable } from '../../../../common/lib/datatable/query'; -import { DemoRows, getDemoRows } from './get_demo_rows'; +import { DemoRows } from './demo_rows_types'; +import { getDemoRows } from './get_demo_rows'; import { Filter, Datatable, DatatableColumn, DatatableRow } from '../../../../types'; import { getFunctionHelp } from '../../../../i18n'; diff --git a/x-pack/legacy/plugins/canvas/i18n/functions/dict/demodata.ts b/x-pack/legacy/plugins/canvas/i18n/functions/dict/demodata.ts index caedbfdec5be4c..35a5b86f752dce 100644 --- a/x-pack/legacy/plugins/canvas/i18n/functions/dict/demodata.ts +++ b/x-pack/legacy/plugins/canvas/i18n/functions/dict/demodata.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { demodata } from '../../../canvas_plugin_src/functions/server/demodata'; import { FunctionHelp } from '../function_help'; import { FunctionFactory } from '../../../types'; -import { DemoRows } from '../../../canvas_plugin_src/functions/server/demodata/get_demo_rows'; +import { DemoRows } from '../../../canvas_plugin_src/functions/server/demodata/demo_rows_types'; export const help: FunctionHelp> = { help: i18n.translate('xpack.canvas.functions.demodataHelpText', { From 5218e3048706236d0a0baddb0d32cf9f0d7536a8 Mon Sep 17 00:00:00 2001 From: Frank Hassanabad Date: Tue, 7 Apr 2020 19:37:47 -0600 Subject: [PATCH 11/52] [SIEM][Detection Engine] Fixes TypeScript types and adds format to time range query ## Summary * Fixes the Type Script types so we don't have to use non-null-assertions * Adds null checks where needed * Changes the time range query to have a format of epoch to avoid mapping issues ### Checklist - [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/rules/types.ts | 2 +- .../rules/create/helpers.test.ts | 10 +++++----- .../detection_engine/rules/create/helpers.ts | 2 +- .../pages/detection_engine/rules/helpers.tsx | 2 +- .../notifications/build_signals_query.test.ts | 1 + .../notifications/build_signals_query.ts | 1 + .../rules_notification_alert_type.ts | 6 +++--- .../schedule_notification_actions.ts | 2 +- .../detection_engine/notifications/utils.ts | 2 +- .../routes/rules/patch_rules_bulk_route.ts | 6 +++--- .../routes/rules/patch_rules_route.ts | 6 +++--- .../lib/detection_engine/routes/utils.ts | 2 +- .../create_rule_actions_saved_object.ts | 9 +++++++-- .../delete_rule_actions_saved_object.ts | 2 +- .../get_rule_actions_saved_object.ts | 8 +++++++- ...ate_or_create_rule_actions_saved_object.ts | 2 +- .../update_rule_actions_saved_object.ts | 9 +++++++-- .../detection_engine/rule_actions/utils.ts | 19 +++++++++++++++---- .../rules/update_rule_actions.ts | 8 ++++++-- .../rules/update_rules_notifications.ts | 5 +++-- .../signals/signal_rule_alert_type.test.ts | 2 +- .../signals/signal_rule_alert_type.ts | 9 ++++++--- .../lib/detection_engine/signals/types.ts | 2 +- .../siem/server/lib/detection_engine/types.ts | 9 +++++++-- 24 files changed, 84 insertions(+), 42 deletions(-) diff --git a/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/types.ts b/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/types.ts index bc559c5ac49721..f89d21ef1aeb19 100644 --- a/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/types.ts +++ b/x-pack/legacy/plugins/siem/public/containers/detection_engine/rules/types.ts @@ -70,7 +70,7 @@ const MetaRule = t.intersection([ }), t.partial({ throttle: t.string, - kibanaSiemAppUrl: t.string, + kibana_siem_app_url: t.string, }), ]); diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.test.ts b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.test.ts index efb601b6bd2072..8d793f39afa997 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.test.ts +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.test.ts @@ -515,7 +515,7 @@ describe('helpers', () => { actions: [], enabled: false, meta: { - kibanaSiemAppUrl: 'http://localhost:5601/app/siem', + kibana_siem_app_url: 'http://localhost:5601/app/siem', }, throttle: 'no_actions', }; @@ -533,7 +533,7 @@ describe('helpers', () => { actions: [], enabled: false, meta: { - kibanaSiemAppUrl: mockStepData.kibanaSiemAppUrl, + kibana_siem_app_url: mockStepData.kibanaSiemAppUrl, }, throttle: 'no_actions', }; @@ -566,7 +566,7 @@ describe('helpers', () => { ], enabled: false, meta: { - kibanaSiemAppUrl: mockStepData.kibanaSiemAppUrl, + kibana_siem_app_url: mockStepData.kibanaSiemAppUrl, }, throttle: 'rule', }; @@ -599,7 +599,7 @@ describe('helpers', () => { ], enabled: false, meta: { - kibanaSiemAppUrl: mockStepData.kibanaSiemAppUrl, + kibana_siem_app_url: mockStepData.kibanaSiemAppUrl, }, throttle: mockStepData.throttle, }; @@ -631,7 +631,7 @@ describe('helpers', () => { ], enabled: false, meta: { - kibanaSiemAppUrl: mockStepData.kibanaSiemAppUrl, + kibana_siem_app_url: mockStepData.kibanaSiemAppUrl, }, throttle: 'no_actions', }; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.ts b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.ts index 151e3a9bdf4d6d..7ad116c313361d 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/create/helpers.ts @@ -155,7 +155,7 @@ export const formatActionsStepData = (actionsStepData: ActionsStepRule): Actions enabled, throttle: actions.length ? throttle : NOTIFICATION_THROTTLE_NO_ACTIONS, meta: { - kibanaSiemAppUrl, + kibana_siem_app_url: kibanaSiemAppUrl, }, }; }; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx index db1f2298b5ea78..58a1b0fd3133e6 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx @@ -64,7 +64,7 @@ export const getActionsStepsData = ( actions: actions?.map(transformRuleToAlertAction), isNew: false, throttle, - kibanaSiemAppUrl: meta?.kibanaSiemAppUrl, + kibanaSiemAppUrl: meta?.kibana_siem_app_url, enabled, }; }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.test.ts index 189c596a771256..c6923283bec16f 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.test.ts @@ -41,6 +41,7 @@ describe('buildSignalsSearchQuery', () => { '@timestamp': { gt: from, lte: to, + format: 'epoch_millis', }, }, }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.ts index b973d4c5f4e98b..be0943c014225b 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/build_signals_query.ts @@ -32,6 +32,7 @@ export const buildSignalsSearchQuery = ({ ruleId, index, from, to }: BuildSignal '@timestamp': { gt: from, lte: to, + format: 'epoch_millis', }, }, }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts index 546488caa5ee78..ced81098c9f8e5 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/rules_notification_alert_type.ts @@ -53,7 +53,7 @@ export const rulesNotificationAlertType = ({ from: fromInMs, to: toInMs, index: ruleParams.outputIndex, - ruleId: ruleParams.ruleId!, + ruleId: ruleParams.ruleId, callCluster: services.callCluster, }); @@ -61,14 +61,14 @@ export const rulesNotificationAlertType = ({ from: fromInMs, to: toInMs, id: ruleAlertSavedObject.id, - kibanaSiemAppUrl: ruleAlertParams.meta?.kibanaSiemAppUrl as string, + kibanaSiemAppUrl: ruleAlertParams.meta?.kibana_siem_app_url, }); logger.info( `Found ${signalsCount} signals using signal rule name: "${ruleParams.name}", id: "${params.ruleAlertId}", rule_id: "${ruleParams.ruleId}" in "${ruleParams.outputIndex}" index` ); - if (signalsCount) { + if (signalsCount !== 0) { const alertInstance = services.alertInstanceFactory(alertId); scheduleNotificationActions({ alertInstance, signalsCount, resultsLink, ruleParams }); } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/schedule_notification_actions.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/schedule_notification_actions.ts index 749b892ef506f3..9f145af79ca90f 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/schedule_notification_actions.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/schedule_notification_actions.ts @@ -8,7 +8,7 @@ import { mapKeys, snakeCase } from 'lodash/fp'; import { AlertInstance } from '../../../../../../../plugins/alerting/server'; import { RuleTypeParams } from '../types'; -type NotificationRuleTypeParams = RuleTypeParams & { +export type NotificationRuleTypeParams = RuleTypeParams & { name: string; id: string; }; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/utils.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/utils.ts index 5dc7e7fc30b7fa..c91c4490e8eba0 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/utils.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/notifications/utils.ts @@ -10,7 +10,7 @@ export const getNotificationResultsLink = ({ from, to, }: { - kibanaSiemAppUrl: string; + kibanaSiemAppUrl?: string; id: string; from?: string; to?: string; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_bulk_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_bulk_route.ts index 85255594ee4805..8c0fceb7a5f295 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_bulk_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_bulk_route.ts @@ -121,15 +121,15 @@ export const patchRulesBulkRoute = (router: IRouter) => { anomalyThreshold, machineLearningJobId, }); - if (rule != null) { + if (rule != null && rule.enabled != null && rule.name != null) { const ruleActions = await updateRulesNotifications({ ruleAlertId: rule.id, alertsClient, savedObjectsClient, - enabled: rule.enabled!, + enabled: rule.enabled, actions, throttle, - name: rule.name!, + name: rule.name, }); const ruleStatuses = await savedObjectsClient.find< IRuleSavedAttributesSavedObjectAttributes diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_route.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_route.ts index f553ccd2c6f81f..9c5000d70e5fe8 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_route.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/rules/patch_rules_route.ts @@ -117,15 +117,15 @@ export const patchRulesRoute = (router: IRouter) => { anomalyThreshold, machineLearningJobId, }); - if (rule != null) { + if (rule != null && rule.enabled != null && rule.name != null) { const ruleActions = await updateRulesNotifications({ ruleAlertId: rule.id, alertsClient, savedObjectsClient, - enabled: rule.enabled!, + enabled: rule.enabled, actions, throttle, - name: rule.name!, + name: rule.name, }); const ruleStatuses = await savedObjectsClient.find< IRuleSavedAttributesSavedObjectAttributes diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/utils.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/utils.ts index 8d7360bae8eb9c..e4015ad8bafa4d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/utils.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/routes/utils.ts @@ -309,7 +309,7 @@ export const validateLicenseForRuleType = ({ }: { license: ILicense; ruleType: RuleType; -}) => { +}): void => { if (isMlRule(ruleType) && !license.hasAtLeast(MINIMUM_ML_LICENSE)) { const message = i18n.translate('xpack.siem.licensing.unsupportedMachineLearningMessage', { defaultMessage: diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts index 23c99b36cb4a76..97cfc1d2d9ea79 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/create_rule_actions_saved_object.ts @@ -14,7 +14,7 @@ interface CreateRuleActionsSavedObject { ruleAlertId: string; savedObjectsClient: AlertServices['savedObjectsClient']; actions: RuleAlertAction[] | undefined; - throttle: string | undefined; + throttle: string | null | undefined; } export const createRuleActionsSavedObject = async ({ @@ -22,7 +22,12 @@ export const createRuleActionsSavedObject = async ({ savedObjectsClient, actions = [], throttle, -}: CreateRuleActionsSavedObject) => { +}: CreateRuleActionsSavedObject): Promise<{ + id: string; + actions: RuleAlertAction[]; + alertThrottle: string | null; + ruleThrottle: string; +}> => { const ruleActionsSavedObject = await savedObjectsClient.create< IRuleActionsAttributesSavedObjectAttributes >(ruleActionsSavedObjectType, { diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts index 4e8781dd456920..864281da5bafd2 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/delete_rule_actions_saved_object.ts @@ -16,7 +16,7 @@ interface DeleteRuleActionsSavedObject { export const deleteRuleActionsSavedObject = async ({ ruleAlertId, savedObjectsClient, -}: DeleteRuleActionsSavedObject) => { +}: DeleteRuleActionsSavedObject): Promise<{} | null> => { const ruleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); if (!ruleActions) return null; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts index 3ae9090526d693..61b544db5a18a4 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/get_rule_actions_saved_object.ts @@ -4,6 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ +import { RuleAlertAction } from '../../../../common/detection_engine/types'; import { AlertServices } from '../../../../../../../plugins/alerting/server'; import { ruleActionsSavedObjectType } from './saved_object_mappings'; import { IRuleActionsAttributesSavedObjectAttributes } from './types'; @@ -17,7 +18,12 @@ interface GetRuleActionsSavedObject { export const getRuleActionsSavedObject = async ({ ruleAlertId, savedObjectsClient, -}: GetRuleActionsSavedObject) => { +}: GetRuleActionsSavedObject): Promise<{ + id: string; + actions: RuleAlertAction[]; + alertThrottle: string | null; + ruleThrottle: string; +} | null> => { const { saved_objects } = await savedObjectsClient.find< IRuleActionsAttributesSavedObjectAttributes >({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts index 3856f75255262a..adc87150f89a75 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_or_create_rule_actions_saved_object.ts @@ -15,7 +15,7 @@ interface UpdateOrCreateRuleActionsSavedObject { ruleAlertId: string; savedObjectsClient: AlertServices['savedObjectsClient']; actions: RuleAlertAction[] | undefined; - throttle: string | undefined; + throttle: string | null | undefined; } export const updateOrCreateRuleActionsSavedObject = async ({ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts index 56bce3c8b67a36..a15005110c56b1 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/update_rule_actions_saved_object.ts @@ -15,7 +15,7 @@ interface DeleteRuleActionsSavedObject { ruleAlertId: string; savedObjectsClient: AlertServices['savedObjectsClient']; actions: RuleAlertAction[] | undefined; - throttle: string | undefined; + throttle: string | null | undefined; } export const updateRuleActionsSavedObject = async ({ @@ -23,7 +23,12 @@ export const updateRuleActionsSavedObject = async ({ savedObjectsClient, actions, throttle, -}: DeleteRuleActionsSavedObject) => { +}: DeleteRuleActionsSavedObject): Promise<{ + ruleThrottle: string; + alertThrottle: string | null; + actions: RuleAlertAction[]; + id: string; +} | null> => { const ruleActions = await getRuleActionsSavedObject({ ruleAlertId, savedObjectsClient }); if (!ruleActions) return null; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/utils.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/utils.ts index 3c297ed8485552..554c2b4a3dd905 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/utils.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rule_actions/utils.ts @@ -5,16 +5,27 @@ */ import { SavedObjectsUpdateResponse } from 'kibana/server'; +import { RuleAlertAction } from '../../../../common/detection_engine/types'; import { IRuleActionsAttributesSavedObjectAttributes } from './types'; -export const getThrottleOptions = (throttle = 'no_actions') => ({ - ruleThrottle: throttle, - alertThrottle: ['no_actions', 'rule'].includes(throttle) ? null : throttle, +export const getThrottleOptions = ( + throttle: string | undefined | null = 'no_actions' +): { + ruleThrottle: string; + alertThrottle: string | null; +} => ({ + ruleThrottle: throttle ?? 'no_actions', + alertThrottle: ['no_actions', 'rule'].includes(throttle ?? 'no_actions') ? null : throttle, }); export const getRuleActionsFromSavedObject = ( savedObject: SavedObjectsUpdateResponse -) => ({ +): { + id: string; + actions: RuleAlertAction[]; + alertThrottle: string | null; + ruleThrottle: string; +} => ({ id: savedObject.id, actions: savedObject.attributes.actions || [], alertThrottle: savedObject.attributes.alertThrottle || null, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts index ac10143c1d8d07..e6ee1e6a297643 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rule_actions.ts @@ -4,7 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ -import { AlertsClient, AlertServices } from '../../../../../../../plugins/alerting/server'; +import { + AlertsClient, + AlertServices, + PartialAlert, +} from '../../../../../../../plugins/alerting/server'; import { getRuleActionsSavedObject } from '../rule_actions/get_rule_actions_saved_object'; import { readRules } from './read_rules'; import { transformRuleToAlertAction } from '../../../../common/detection_engine/transform_actions'; @@ -19,7 +23,7 @@ export const updateRuleActions = async ({ alertsClient, savedObjectsClient, ruleAlertId, -}: UpdateRuleActions) => { +}: UpdateRuleActions): Promise => { const rule = await readRules({ alertsClient, id: ruleAlertId }); if (rule == null) { return null; diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts index f70c591243a765..bb66a5ee1342f7 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/rules/update_rules_notifications.ts @@ -9,13 +9,14 @@ import { AlertsClient, AlertServices } from '../../../../../../../plugins/alerti import { updateOrCreateRuleActionsSavedObject } from '../rule_actions/update_or_create_rule_actions_saved_object'; import { updateNotifications } from '../notifications/update_notifications'; import { updateRuleActions } from './update_rule_actions'; +import { RuleActions } from '../rule_actions/types'; interface UpdateRulesNotifications { alertsClient: AlertsClient; savedObjectsClient: AlertServices['savedObjectsClient']; ruleAlertId: string; actions: RuleAlertAction[] | undefined; - throttle: string | undefined; + throttle: string | null | undefined; enabled: boolean; name: string; } @@ -28,7 +29,7 @@ export const updateRulesNotifications = async ({ enabled, name, throttle, -}: UpdateRulesNotifications) => { +}: UpdateRulesNotifications): Promise => { const ruleActions = await updateOrCreateRuleActionsSavedObject({ savedObjectsClient, ruleAlertId, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts index 11d31f1805440f..3d6f443ce60d61 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts @@ -47,7 +47,7 @@ const getPayload = ( interval: ruleAlert.schedule.interval, name: ruleAlert.name, tags: ruleAlert.tags, - throttle: ruleAlert.throttle!, + throttle: ruleAlert.throttle, scrollSize: 10, scrollLock: '0', }, diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts index 417fcbbe42a565..faac4a547fc176 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/signal_rule_alert_type.ts @@ -24,7 +24,10 @@ import { signalParamsSchema } from './signal_params_schema'; import { siemRuleActionGroups } from './siem_rule_action_groups'; import { findMlSignals } from './find_ml_signals'; import { bulkCreateMlSignals } from './bulk_create_ml_signals'; -import { scheduleNotificationActions } from '../notifications/schedule_notification_actions'; +import { + scheduleNotificationActions, + NotificationRuleTypeParams, +} from '../notifications/schedule_notification_actions'; import { ruleStatusServiceFactory } from './rule_status_service'; import { buildRuleMessageFactory } from './rule_messages'; import { ruleStatusSavedObjectsClientFactory } from './rule_status_saved_objects_client'; @@ -246,7 +249,7 @@ export const signalRulesAlertType = ({ if (result.success) { if (actions.length) { - const notificationRuleParams = { + const notificationRuleParams: NotificationRuleTypeParams = { ...ruleParams, name, id: savedObject.id, @@ -259,7 +262,7 @@ export const signalRulesAlertType = ({ from: fromInMs, to: toInMs, id: savedObject.id, - kibanaSiemAppUrl: meta?.kibanaSiemAppUrl as string, + kibanaSiemAppUrl: meta?.kibana_siem_app_url, }); logger.info( diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts index 543e8bf0619b00..d4469351de5442 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/types.ts @@ -162,5 +162,5 @@ export interface AlertAttributes { } export interface RuleAlertAttributes extends AlertAttributes { - params: RuleAlertParams; + params: Omit & { ruleId: string }; } diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts index efa0a92cc573b5..d3fa98fd73d3a3 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts @@ -29,6 +29,11 @@ export interface ThreatParams { // We don't have the input types defined through io-ts just yet but as we being introducing types from there we will more and more remove // types and share them between input and output schema but have an input Rule Schema and an output Rule Schema. +export interface Meta { + [key: string]: {} | string | undefined | null; + kibana_siem_app_url?: string | undefined; +} + export interface RuleAlertParams { actions: RuleAlertAction[]; anomalyThreshold: number | undefined; @@ -51,7 +56,7 @@ export interface RuleAlertParams { query: string | undefined | null; references: string[]; savedId?: string | undefined | null; - meta: Record | undefined | null; + meta: Meta | undefined | null; severity: string; tags: string[]; to: string; @@ -60,7 +65,7 @@ export interface RuleAlertParams { threat: ThreatParams[] | undefined | null; type: RuleType; version: number; - throttle: string; + throttle: string | undefined | null; lists: ListsDefaultArraySchema | null | undefined; } From d212102bf56e18813efd6fc993b6f175ed0407ef Mon Sep 17 00:00:00 2001 From: Peter Pisljar Date: Wed, 8 Apr 2020 07:44:23 +0200 Subject: [PATCH 12/52] fixing region map click filter (#61949) --- .../core_plugins/region_map/public/region_map_visualization.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/legacy/core_plugins/region_map/public/region_map_visualization.js b/src/legacy/core_plugins/region_map/public/region_map_visualization.js index 25641ea76809df..72f9d66e7d2bf4 100644 --- a/src/legacy/core_plugins/region_map/public/region_map_visualization.js +++ b/src/legacy/core_plugins/region_map/public/region_map_visualization.js @@ -164,7 +164,8 @@ export function createRegionMapVisualization({ serviceSettings, $injector, uiSet } this._choroplethLayer.on('select', event => { - const rowIndex = this._chartData.rows.findIndex(row => row[0] === event); + const { rows, columns } = this._chartData; + const rowIndex = rows.findIndex(row => row[columns[0].id] === event); this._vis.API.events.filter({ table: this._chartData, column: 0, From 028313a8fe9a03ec79182a9bd510245c872c4d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 8 Apr 2020 09:08:59 +0100 Subject: [PATCH 13/52] [Telemetry] Add possibility of registering exclusive collectors for each collection (#62665) * [Telemetry] Add posibility of regitering exclusive collectors for collections * [Telemetry] Filter unwanted fields from the kibana.os telemetry payload * Filter the collectors properly in bulkFetch * Move "kibana" usage collector from Monitoring to OSS Telemetry * Remove exclusivity of the "kibana_settings" collector * Unify "kibana_stats" collector from Monitoring and Legacy * Remove unused legacy constants * Proper type for UsageCollectionSetup in monitoring * Missed one undo * Add unit tests to the migrated collectors Co-authored-by: Elastic Machine --- .../collectors/get_ops_stats_collector.js | 56 -------- src/legacy/server/status/index.js | 2 - src/plugins/telemetry/common/constants.ts | 11 ++ .../telemetry/server/collectors/index.ts | 2 + .../kibana/get_saved_object_counts.test.ts | 61 ++++++++ .../kibana/get_saved_object_counts.ts | 82 +++++++++++ .../server/collectors/kibana/index.test.ts | 76 ++++++++++ .../server/collectors/kibana/index.ts} | 2 +- .../kibana/kibana_usage_collector.ts | 65 +++++++++ .../__snapshots__/index.test.ts.snap | 43 ++++++ .../server/collectors/ops_stats/index.test.ts | 132 ++++++++++++++++++ .../server/collectors/ops_stats/index.ts} | 2 +- .../ops_stats/ops_stats_collector.ts | 71 ++++++++++ src/plugins/telemetry/server/plugin.ts | 19 ++- .../server/telemetry_collection/get_kibana.ts | 4 + x-pack/plugins/monitoring/common/constants.ts | 6 - .../collectors/get_kibana_usage_collector.ts | 86 ------------ .../collectors/get_ops_stats_collector.ts | 46 ------ .../kibana_monitoring/collectors/index.ts | 14 +- x-pack/plugins/monitoring/server/plugin.ts | 7 +- 20 files changed, 568 insertions(+), 219 deletions(-) delete mode 100644 src/legacy/server/status/collectors/get_ops_stats_collector.js create mode 100644 src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.test.ts create mode 100644 src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.ts create mode 100644 src/plugins/telemetry/server/collectors/kibana/index.test.ts rename src/{legacy/server/status/constants.js => plugins/telemetry/server/collectors/kibana/index.ts} (90%) create mode 100644 src/plugins/telemetry/server/collectors/kibana/kibana_usage_collector.ts create mode 100644 src/plugins/telemetry/server/collectors/ops_stats/__snapshots__/index.test.ts.snap create mode 100644 src/plugins/telemetry/server/collectors/ops_stats/index.test.ts rename src/{legacy/server/status/collectors/index.js => plugins/telemetry/server/collectors/ops_stats/index.ts} (91%) create mode 100644 src/plugins/telemetry/server/collectors/ops_stats/ops_stats_collector.ts delete mode 100644 x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_kibana_usage_collector.ts delete mode 100644 x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.ts diff --git a/src/legacy/server/status/collectors/get_ops_stats_collector.js b/src/legacy/server/status/collectors/get_ops_stats_collector.js deleted file mode 100644 index b733e2e721e3a5..00000000000000 --- a/src/legacy/server/status/collectors/get_ops_stats_collector.js +++ /dev/null @@ -1,56 +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 { KIBANA_STATS_TYPE } from '../constants'; -import { getKibanaInfoForStats } from '../lib'; - -/* - * Initialize a collector for Kibana Ops Stats - * - * NOTE this collector's fetch method returns the latest stats from the - * Hapi/Good/Even-Better ops event listener. Therefore, the stats reset - * every 5 seconds (the default value of the ops.interval configuration - * setting). That makes it geared for providing the latest "real-time" - * stats. In the long-term, fetch should return stats that constantly - * accumulate over the server's uptime for better machine readability. - * Since the data is captured, timestamped and stored, the historical - * data can provide "real-time" stats by calculating a derivative of - * the metrics. - * See PR comment in https://github.com/elastic/kibana/pull/20577/files#r202416647 - */ -export function getOpsStatsCollector(usageCollection, server, kbnServer) { - return usageCollection.makeStatsCollector({ - type: KIBANA_STATS_TYPE, - fetch: () => { - return { - kibana: getKibanaInfoForStats(server, kbnServer), - ...kbnServer.metrics, // latest metrics captured from the ops event listener in src/legacy/server/status/index - }; - }, - isReady: () => true, - ignoreForInternalUploader: true, // Ignore this one from internal uploader. A different stats collector is used there. - }); -} - -export function registerOpsStatsCollector(usageCollection, server, kbnServer) { - if (usageCollection) { - const collector = getOpsStatsCollector(usageCollection, server, kbnServer); - usageCollection.registerCollector(collector); - } -} diff --git a/src/legacy/server/status/index.js b/src/legacy/server/status/index.js index df02b3c45ec2f8..5bd1efa99eb2c6 100644 --- a/src/legacy/server/status/index.js +++ b/src/legacy/server/status/index.js @@ -20,7 +20,6 @@ import ServerStatus from './server_status'; import { Metrics } from './lib/metrics'; import { registerStatusPage, registerStatusApi, registerStatsApi } from './routes'; -import { registerOpsStatsCollector } from './collectors'; import Oppsy from 'oppsy'; import { cloneDeep } from 'lodash'; import { getOSInfo } from './lib/get_os_info'; @@ -28,7 +27,6 @@ import { getOSInfo } from './lib/get_os_info'; export function statusMixin(kbnServer, server, config) { kbnServer.status = new ServerStatus(kbnServer.server); const { usageCollection } = server.newPlatform.setup.plugins; - registerOpsStatsCollector(usageCollection, server, kbnServer); const metrics = new Metrics(config, server); diff --git a/src/plugins/telemetry/common/constants.ts b/src/plugins/telemetry/common/constants.ts index babd009143c5ef..fd32862896528e 100644 --- a/src/plugins/telemetry/common/constants.ts +++ b/src/plugins/telemetry/common/constants.ts @@ -80,3 +80,14 @@ export const APPLICATION_USAGE_TYPE = 'application_usage'; * The type name used within the Monitoring index to publish management stats. */ export const KIBANA_STACK_MANAGEMENT_STATS_TYPE = 'stack_management'; + +/** + * The type name used to publish Kibana usage stats. + * NOTE: this string shows as-is in the stats API as a field name for the kibana usage stats + */ +export const KIBANA_USAGE_TYPE = 'kibana'; + +/** + * The type name used to publish Kibana usage stats in the formatted as bulk. + */ +export const KIBANA_STATS_TYPE = 'kibana_stats'; diff --git a/src/plugins/telemetry/server/collectors/index.ts b/src/plugins/telemetry/server/collectors/index.ts index 6eeda080bb3ab9..a874f8dd6202cc 100644 --- a/src/plugins/telemetry/server/collectors/index.ts +++ b/src/plugins/telemetry/server/collectors/index.ts @@ -22,3 +22,5 @@ export { registerUiMetricUsageCollector } from './ui_metric'; export { registerTelemetryPluginUsageCollector } from './telemetry_plugin'; export { registerManagementUsageCollector } from './management'; export { registerApplicationUsageCollector } from './application_usage'; +export { registerKibanaUsageCollector } from './kibana'; +export { registerOpsStatsCollector } from './ops_stats'; diff --git a/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.test.ts b/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.test.ts new file mode 100644 index 00000000000000..a7681e17664272 --- /dev/null +++ b/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.test.ts @@ -0,0 +1,61 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { getSavedObjectsCounts } from './get_saved_object_counts'; + +describe('getSavedObjectsCounts', () => { + test('Get all the saved objects equal to 0 because no results were found', async () => { + const callCluster = jest.fn(() => ({})); + + const results = await getSavedObjectsCounts(callCluster as any, '.kibana'); + expect(results).toStrictEqual({ + dashboard: { total: 0 }, + visualization: { total: 0 }, + search: { total: 0 }, + index_pattern: { total: 0 }, + graph_workspace: { total: 0 }, + timelion_sheet: { total: 0 }, + }); + }); + + test('Merge the zeros with the results', async () => { + const callCluster = jest.fn(() => ({ + aggregations: { + types: { + buckets: [ + { key: 'dashboard', doc_count: 1 }, + { key: 'timelion-sheet', doc_count: 2 }, + { key: 'index-pattern', value: 2 }, // Malformed on purpose + { key: 'graph_workspace', doc_count: 3 }, // already snake_cased + ], + }, + }, + })); + + const results = await getSavedObjectsCounts(callCluster as any, '.kibana'); + expect(results).toStrictEqual({ + dashboard: { total: 1 }, + visualization: { total: 0 }, + search: { total: 0 }, + index_pattern: { total: 0 }, + graph_workspace: { total: 3 }, + timelion_sheet: { total: 2 }, + }); + }); +}); diff --git a/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.ts b/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.ts new file mode 100644 index 00000000000000..804c8b0ed2026e --- /dev/null +++ b/src/plugins/telemetry/server/collectors/kibana/get_saved_object_counts.ts @@ -0,0 +1,82 @@ +/* + * 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. + */ + +/** + * Moved from /x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_kibana_usage_collector.ts + * + * The PR https://github.com/elastic/kibana/pull/62665 proved what the issue https://github.com/elastic/kibana/issues/58249 + * was claiming: the structure and payload for common telemetry bits differs between Monitoring and OSS/X-Pack collections. + * + * Unifying this logic from Monitoring that makes sense to have in OSS here and we will import it on the monitoring side to reuse it. + */ + +import { snakeCase } from 'lodash'; +import { APICaller } from 'kibana/server'; + +const TYPES = [ + 'dashboard', + 'visualization', + 'search', + 'index-pattern', + 'graph-workspace', + 'timelion-sheet', +]; + +export interface KibanaSavedObjectCounts { + [pluginName: string]: { + total: number; + }; +} + +export async function getSavedObjectsCounts( + callCluster: APICaller, + kibanaIndex: string // Typically '.kibana'. We might need a way to obtain it from the SavedObjects client (or the SavedObjects client to provide a way to run aggregations?) +): Promise { + const savedObjectCountSearchParams = { + index: kibanaIndex, + ignoreUnavailable: true, + filterPath: 'aggregations.types.buckets', + body: { + size: 0, + query: { + terms: { type: TYPES }, + }, + aggs: { + types: { + terms: { field: 'type', size: TYPES.length }, + }, + }, + }, + }; + const resp = await callCluster('search', savedObjectCountSearchParams); + const buckets: Array<{ key: string; doc_count: number }> = + resp.aggregations?.types?.buckets || []; + + // Initialise the object with all zeros for all the types + const allZeros: KibanaSavedObjectCounts = TYPES.reduce( + (acc, type) => ({ ...acc, [snakeCase(type)]: { total: 0 } }), + {} + ); + + // Add the doc_count from each bucket + return buckets.reduce( + (acc, { key, doc_count: total }) => (total ? { ...acc, [snakeCase(key)]: { total } } : acc), + allZeros + ); +} diff --git a/src/plugins/telemetry/server/collectors/kibana/index.test.ts b/src/plugins/telemetry/server/collectors/kibana/index.test.ts new file mode 100644 index 00000000000000..91ede686ded3da --- /dev/null +++ b/src/plugins/telemetry/server/collectors/kibana/index.test.ts @@ -0,0 +1,76 @@ +/* + * 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 { UsageCollectionSetup } from '../../../../../plugins/usage_collection/server'; +import { pluginInitializerContextConfigMock } from '../../../../../core/server/mocks'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { CollectorOptions } from '../../../../../plugins/usage_collection/server/collector/collector'; + +import { registerKibanaUsageCollector } from './'; + +describe('telemetry_kibana', () => { + let collector: CollectorOptions; + + const usageCollectionMock: jest.Mocked = { + makeUsageCollector: jest.fn().mockImplementation(config => (collector = config)), + registerCollector: jest.fn(), + } as any; + + const legacyConfig$ = pluginInitializerContextConfigMock({}).legacy.globalConfig$; + const callCluster = jest.fn().mockImplementation(() => ({})); + + beforeAll(() => registerKibanaUsageCollector(usageCollectionMock, legacyConfig$)); + afterAll(() => jest.clearAllTimers()); + + test('registered collector is set', () => { + expect(collector).not.toBeUndefined(); + expect(collector.type).toBe('kibana'); + }); + + test('fetch', async () => { + expect(await collector.fetch(callCluster)).toStrictEqual({ + index: '.kibana-tests', + dashboard: { total: 0 }, + visualization: { total: 0 }, + search: { total: 0 }, + index_pattern: { total: 0 }, + graph_workspace: { total: 0 }, + timelion_sheet: { total: 0 }, + }); + }); + + test('formatForBulkUpload', async () => { + const resultFromFetch = { + index: '.kibana-tests', + dashboard: { total: 0 }, + visualization: { total: 0 }, + search: { total: 0 }, + index_pattern: { total: 0 }, + graph_workspace: { total: 0 }, + timelion_sheet: { total: 0 }, + }; + + expect(collector.formatForBulkUpload!(resultFromFetch)).toStrictEqual({ + type: 'kibana_stats', + payload: { + usage: resultFromFetch, + }, + }); + }); +}); diff --git a/src/legacy/server/status/constants.js b/src/plugins/telemetry/server/collectors/kibana/index.ts similarity index 90% rename from src/legacy/server/status/constants.js rename to src/plugins/telemetry/server/collectors/kibana/index.ts index 3bb23749bae874..695d972346b8a5 100644 --- a/src/legacy/server/status/constants.js +++ b/src/plugins/telemetry/server/collectors/kibana/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export const KIBANA_STATS_TYPE = 'oss_kibana_stats'; // kibana stats per 5s intervals +export { registerKibanaUsageCollector } from './kibana_usage_collector'; diff --git a/src/plugins/telemetry/server/collectors/kibana/kibana_usage_collector.ts b/src/plugins/telemetry/server/collectors/kibana/kibana_usage_collector.ts new file mode 100644 index 00000000000000..ccf6f7b1033c94 --- /dev/null +++ b/src/plugins/telemetry/server/collectors/kibana/kibana_usage_collector.ts @@ -0,0 +1,65 @@ +/* + * 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 { Observable } from 'rxjs'; +import { take } from 'rxjs/operators'; +import { SharedGlobalConfig } from 'kibana/server'; +import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; +import { KIBANA_STATS_TYPE, KIBANA_USAGE_TYPE } from '../../../common/constants'; +import { getSavedObjectsCounts } from './get_saved_object_counts'; + +export function getKibanaUsageCollector( + usageCollection: UsageCollectionSetup, + legacyConfig$: Observable +) { + return usageCollection.makeUsageCollector({ + type: KIBANA_USAGE_TYPE, + isReady: () => true, + async fetch(callCluster) { + const { + kibana: { index }, + } = await legacyConfig$.pipe(take(1)).toPromise(); + return { + index, + ...(await getSavedObjectsCounts(callCluster, index)), + }; + }, + + /* + * Format the response data into a model for internal upload + * 1. Make this data part of the "kibana_stats" type + * 2. Organize the payload in the usage namespace of the data payload (usage.index, etc) + */ + formatForBulkUpload: result => { + return { + type: KIBANA_STATS_TYPE, + payload: { + usage: result, + }, + }; + }, + }); +} + +export function registerKibanaUsageCollector( + usageCollection: UsageCollectionSetup, + legacyConfig$: Observable +) { + usageCollection.registerCollector(getKibanaUsageCollector(usageCollection, legacyConfig$)); +} diff --git a/src/plugins/telemetry/server/collectors/ops_stats/__snapshots__/index.test.ts.snap b/src/plugins/telemetry/server/collectors/ops_stats/__snapshots__/index.test.ts.snap new file mode 100644 index 00000000000000..678237ffb6ea23 --- /dev/null +++ b/src/plugins/telemetry/server/collectors/ops_stats/__snapshots__/index.test.ts.snap @@ -0,0 +1,43 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`telemetry_ops_stats should return something when there is a metric 1`] = ` +Object { + "concurrent_connections": 20, + "os": Object { + "load": Object { + "15m": 3, + "1m": 0.5, + "5m": 1, + }, + "memory": Object { + "free_in_bytes": 10, + "total_in_bytes": 10, + "used_in_bytes": 10, + }, + "platform": "darwin", + "platformRelease": "test", + "uptime_in_millis": 1000, + }, + "process": Object { + "event_loop_delay": 10, + "memory": Object { + "heap": Object { + "size_limit": 0, + "total_in_bytes": 0, + "used_in_bytes": 0, + }, + "resident_set_size_in_bytes": 0, + }, + "uptime_in_millis": 1000, + }, + "requests": Object { + "disconnects": 10, + "total": 100, + }, + "response_times": Object { + "average": 100, + "max": 200, + }, + "timestamp": Any, +} +`; diff --git a/src/plugins/telemetry/server/collectors/ops_stats/index.test.ts b/src/plugins/telemetry/server/collectors/ops_stats/index.test.ts new file mode 100644 index 00000000000000..92e0e40776eb89 --- /dev/null +++ b/src/plugins/telemetry/server/collectors/ops_stats/index.test.ts @@ -0,0 +1,132 @@ +/* + * 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 { Subject } from 'rxjs'; +import { UsageCollectionSetup } from '../../../../../plugins/usage_collection/server'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { CollectorOptions } from '../../../../../plugins/usage_collection/server/collector/collector'; + +import { registerOpsStatsCollector } from './'; +import { OpsMetrics } from '../../../../../core/server'; + +describe('telemetry_ops_stats', () => { + let collector: CollectorOptions; + + const usageCollectionMock: jest.Mocked = { + makeStatsCollector: jest.fn().mockImplementation(config => (collector = config)), + registerCollector: jest.fn(), + } as any; + + const metrics$ = new Subject(); + const callCluster = jest.fn(); + + const metric: OpsMetrics = { + process: { + memory: { + heap: { + total_in_bytes: 0, + used_in_bytes: 0, + size_limit: 0, + }, + resident_set_size_in_bytes: 0, + }, + event_loop_delay: 10, + pid: 10, + uptime_in_millis: 1000, + }, + os: { + platform: 'darwin', + platformRelease: 'test', + load: { + '1m': 0.5, + '5m': 1, + '15m': 3, + }, + memory: { + total_in_bytes: 10, + free_in_bytes: 10, + used_in_bytes: 10, + }, + uptime_in_millis: 1000, + }, + response_times: { avg_in_millis: 100, max_in_millis: 200 }, + requests: { + disconnects: 10, + total: 100, + statusCodes: { 200: 100 }, + }, + concurrent_connections: 20, + }; + + beforeAll(() => registerOpsStatsCollector(usageCollectionMock, metrics$)); + afterAll(() => jest.clearAllTimers()); + + test('registered collector is set', () => { + expect(collector).not.toBeUndefined(); + expect(collector.type).toBe('kibana_stats'); + }); + + test('isReady should return false because no metrics have been provided yet', () => { + expect(collector.isReady()).toBe(false); + }); + + test('should return something when there is a metric', async () => { + metrics$.next(metric); + expect(collector.isReady()).toBe(true); + expect(await collector.fetch(callCluster)).toMatchSnapshot({ + concurrent_connections: 20, + os: { + load: { + '15m': 3, + '1m': 0.5, + '5m': 1, + }, + memory: { + free_in_bytes: 10, + total_in_bytes: 10, + used_in_bytes: 10, + }, + platform: 'darwin', + platformRelease: 'test', + uptime_in_millis: 1000, + }, + process: { + event_loop_delay: 10, + memory: { + heap: { + size_limit: 0, + total_in_bytes: 0, + used_in_bytes: 0, + }, + resident_set_size_in_bytes: 0, + }, + uptime_in_millis: 1000, + }, + requests: { + disconnects: 10, + total: 100, + }, + response_times: { + average: 100, + max: 200, + }, + timestamp: expect.any(String), + }); + }); +}); diff --git a/src/legacy/server/status/collectors/index.js b/src/plugins/telemetry/server/collectors/ops_stats/index.ts similarity index 91% rename from src/legacy/server/status/collectors/index.js rename to src/plugins/telemetry/server/collectors/ops_stats/index.ts index 92d9e601bbb35e..443a25749d2003 100644 --- a/src/legacy/server/status/collectors/index.js +++ b/src/plugins/telemetry/server/collectors/ops_stats/index.ts @@ -17,4 +17,4 @@ * under the License. */ -export { registerOpsStatsCollector } from './get_ops_stats_collector'; +export { registerOpsStatsCollector } from './ops_stats_collector'; diff --git a/src/plugins/telemetry/server/collectors/ops_stats/ops_stats_collector.ts b/src/plugins/telemetry/server/collectors/ops_stats/ops_stats_collector.ts new file mode 100644 index 00000000000000..4967e20006ddd7 --- /dev/null +++ b/src/plugins/telemetry/server/collectors/ops_stats/ops_stats_collector.ts @@ -0,0 +1,71 @@ +/* + * 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 { Observable } from 'rxjs'; +import { cloneDeep } from 'lodash'; +import moment from 'moment'; +import { OpsMetrics } from 'kibana/server'; +import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; +import { KIBANA_STATS_TYPE } from '../../../common/constants'; + +interface OpsStatsMetrics extends Omit { + timestamp: string; + response_times: { + average: number; + max: number; + }; +} + +/** + * Initialize a collector for Kibana Ops Stats + */ +export function getOpsStatsCollector( + usageCollection: UsageCollectionSetup, + metrics$: Observable +) { + let lastMetrics: OpsStatsMetrics | null = null; + metrics$.subscribe(_metrics => { + const metrics = cloneDeep(_metrics); + // Ensure we only include the same data that Metricbeat collection would get + delete metrics.process.pid; + const responseTimes = { + average: metrics.response_times.avg_in_millis, + max: metrics.response_times.max_in_millis, + }; + delete metrics.requests.statusCodes; + lastMetrics = { + ...metrics, + response_times: responseTimes, + timestamp: moment.utc().toISOString(), + }; + }); + + return usageCollection.makeStatsCollector({ + type: KIBANA_STATS_TYPE, + isReady: () => !!lastMetrics, + fetch: () => lastMetrics, + }); +} + +export function registerOpsStatsCollector( + usageCollection: UsageCollectionSetup, + metrics$: Observable +) { + usageCollection.registerCollector(getOpsStatsCollector(usageCollection, metrics$)); +} diff --git a/src/plugins/telemetry/server/plugin.ts b/src/plugins/telemetry/server/plugin.ts index 77036b4ea7ddc8..1df6a665e4d766 100644 --- a/src/plugins/telemetry/server/plugin.ts +++ b/src/plugins/telemetry/server/plugin.ts @@ -32,6 +32,8 @@ import { SavedObjectsClient, Plugin, Logger, + SharedGlobalConfig, + MetricsServiceSetup, } from '../../../core/server'; import { registerRoutes } from './routes'; import { registerCollection } from './telemetry_collection'; @@ -41,6 +43,8 @@ import { registerTelemetryPluginUsageCollector, registerManagementUsageCollector, registerApplicationUsageCollector, + registerKibanaUsageCollector, + registerOpsStatsCollector, } from './collectors'; import { TelemetryConfigType } from './config'; import { FetcherTask } from './fetcher'; @@ -61,6 +65,7 @@ export class TelemetryPlugin implements Plugin { private readonly logger: Logger; private readonly currentKibanaVersion: string; private readonly config$: Observable; + private readonly legacyConfig$: Observable; private readonly isDev: boolean; private readonly fetcherTask: FetcherTask; private savedObjectsClient?: ISavedObjectsRepository; @@ -71,6 +76,7 @@ export class TelemetryPlugin implements Plugin { this.isDev = initializerContext.env.mode.dev; this.currentKibanaVersion = initializerContext.env.packageInfo.version; this.config$ = initializerContext.config.create(); + this.legacyConfig$ = initializerContext.config.legacy.globalConfig$; this.fetcherTask = new FetcherTask({ ...initializerContext, logger: this.logger, @@ -78,15 +84,15 @@ export class TelemetryPlugin implements Plugin { } public async setup( - core: CoreSetup, + { elasticsearch, http, savedObjects, metrics }: CoreSetup, { usageCollection, telemetryCollectionManager }: TelemetryPluginsSetup ) { const currentKibanaVersion = this.currentKibanaVersion; const config$ = this.config$; const isDev = this.isDev; - registerCollection(telemetryCollectionManager, core.elasticsearch.dataClient); - const router = core.http.createRouter(); + registerCollection(telemetryCollectionManager, elasticsearch.dataClient); + const router = http.createRouter(); registerRoutes({ config$, @@ -96,8 +102,8 @@ export class TelemetryPlugin implements Plugin { telemetryCollectionManager, }); - this.registerMappings(opts => core.savedObjects.registerType(opts)); - this.registerUsageCollectors(usageCollection, opts => core.savedObjects.registerType(opts)); + this.registerMappings(opts => savedObjects.registerType(opts)); + this.registerUsageCollectors(usageCollection, metrics, opts => savedObjects.registerType(opts)); } public async start(core: CoreStart, { telemetryCollectionManager }: TelemetryPluginsStart) { @@ -153,11 +159,14 @@ export class TelemetryPlugin implements Plugin { private registerUsageCollectors( usageCollection: UsageCollectionSetup, + metrics: MetricsServiceSetup, registerType: SavedObjectsRegisterType ) { const getSavedObjectsClient = () => this.savedObjectsClient; const getUiSettingsClient = () => this.uiSettingsClient; + registerOpsStatsCollector(usageCollection, metrics.getOpsMetrics$()); + registerKibanaUsageCollector(usageCollection, this.legacyConfig$); registerTelemetryPluginUsageCollector(usageCollection, { currentKibanaVersion: this.currentKibanaVersion, config$: this.config$, diff --git a/src/plugins/telemetry/server/telemetry_collection/get_kibana.ts b/src/plugins/telemetry/server/telemetry_collection/get_kibana.ts index 86c6731e11d37b..a17f1b8232a223 100644 --- a/src/plugins/telemetry/server/telemetry_collection/get_kibana.ts +++ b/src/plugins/telemetry/server/telemetry_collection/get_kibana.ts @@ -55,6 +55,10 @@ export function handleKibanaStats( ...kibanaStats.os, }; const formattedOsStats = Object.entries(os).reduce((acc, [key, value]) => { + if (typeof value !== 'string') { + // There are new fields reported now from the "os" property like "load", "memory", etc. They are objects. + return acc; + } return { ...acc, [`${key}s`]: [{ [key]: value, count: 1 }], diff --git a/x-pack/plugins/monitoring/common/constants.ts b/x-pack/plugins/monitoring/common/constants.ts index 3a4c7b71dcd03d..edd6142455dfb6 100644 --- a/x-pack/plugins/monitoring/common/constants.ts +++ b/x-pack/plugins/monitoring/common/constants.ts @@ -28,12 +28,6 @@ export const KIBANA_STATS_TYPE_MONITORING = 'kibana_stats'; // similar to KIBANA * @type {string} */ export const KIBANA_SETTINGS_TYPE = 'kibana_settings'; -/** - * The type name used within the Monitoring index to publish Kibana usage stats. - * NOTE: this string shows as-is in the stats API as a field name for the kibana usage stats - * @type {string} - */ -export const KIBANA_USAGE_TYPE = 'kibana'; /* * Key for the localStorage service diff --git a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_kibana_usage_collector.ts b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_kibana_usage_collector.ts deleted file mode 100644 index 2c40ac56e19ec5..00000000000000 --- a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_kibana_usage_collector.ts +++ /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 { get, snakeCase } from 'lodash'; -import { CallCluster } from 'src/legacy/core_plugins/elasticsearch'; -import { KIBANA_USAGE_TYPE, KIBANA_STATS_TYPE_MONITORING } from '../../../common/constants'; - -const TYPES = [ - 'dashboard', - 'visualization', - 'search', - 'index-pattern', - 'graph-workspace', - 'timelion-sheet', -]; - -/** - * Fetches saved object counts by querying the .kibana index - */ -export function getKibanaUsageCollector(usageCollection: any, kibanaIndex: string) { - return usageCollection.makeUsageCollector({ - type: KIBANA_USAGE_TYPE, - isReady: () => true, - async fetch(callCluster: CallCluster) { - const savedObjectCountSearchParams = { - index: kibanaIndex, - ignoreUnavailable: true, - filterPath: 'aggregations.types.buckets', - body: { - size: 0, - query: { - terms: { type: TYPES }, - }, - aggs: { - types: { - terms: { field: 'type', size: TYPES.length }, - }, - }, - }, - }; - - const resp = await callCluster('search', savedObjectCountSearchParams); - const buckets: any = get(resp, 'aggregations.types.buckets', []); - - // get the doc_count from each bucket - const bucketCounts = buckets.reduce( - (acc: any, bucket: any) => ({ - ...acc, - [bucket.key]: bucket.doc_count, - }), - {} - ); - - return { - index: kibanaIndex, - ...TYPES.reduce( - (acc, type) => ({ - // combine the bucketCounts and 0s for types that don't have documents - ...acc, - [snakeCase(type)]: { - total: bucketCounts[type] || 0, - }, - }), - {} - ), - }; - }, - - /* - * Format the response data into a model for internal upload - * 1. Make this data part of the "kibana_stats" type - * 2. Organize the payload in the usage namespace of the data payload (usage.index, etc) - */ - formatForBulkUpload: (result: any) => { - return { - type: KIBANA_STATS_TYPE_MONITORING, - payload: { - usage: result, - }, - }; - }, - }); -} diff --git a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.ts b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.ts deleted file mode 100644 index 85357f786ddc17..00000000000000 --- a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/get_ops_stats_collector.ts +++ /dev/null @@ -1,46 +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 { Observable } from 'rxjs'; -import { cloneDeep } from 'lodash'; -import moment from 'moment'; -import { OpsMetrics } from 'kibana/server'; -import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; -import { KIBANA_STATS_TYPE_MONITORING } from '../../../common/constants'; - -interface MonitoringOpsMetrics extends OpsMetrics { - timestamp: string; -} - -/* - * Initialize a collector for Kibana Ops Stats - */ -export function getOpsStatsCollector( - usageCollection: UsageCollectionSetup, - metrics$: Observable -) { - let lastMetrics: MonitoringOpsMetrics | null = null; - metrics$.subscribe(_metrics => { - const metrics: any = cloneDeep(_metrics); - // Ensure we only include the same data that Metricbeat collection would get - delete metrics.process.pid; - metrics.response_times = { - average: metrics.response_times.avg_in_millis, - max: metrics.response_times.max_in_millis, - }; - delete metrics.requests.statusCodes; - lastMetrics = { - ...metrics, - timestamp: moment.utc().toISOString(), - }; - }); - - return usageCollection.makeStatsCollector({ - type: KIBANA_STATS_TYPE_MONITORING, - isReady: () => !!lastMetrics, - fetch: () => lastMetrics, - }); -} diff --git a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/index.ts b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/index.ts index e41b1512f1b299..dcd35b0d323ebf 100644 --- a/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/index.ts +++ b/x-pack/plugins/monitoring/server/kibana_monitoring/collectors/index.ts @@ -3,20 +3,14 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { Observable } from 'rxjs'; -import { OpsMetrics } from 'kibana/server'; -import { getKibanaUsageCollector } from './get_kibana_usage_collector'; -import { getOpsStatsCollector } from './get_ops_stats_collector'; + +import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; import { getSettingsCollector } from './get_settings_collector'; import { MonitoringConfig } from '../../config'; export function registerCollectors( - usageCollection: any, - config: MonitoringConfig, - opsMetrics$: Observable, - kibanaIndex: string + usageCollection: UsageCollectionSetup, + config: MonitoringConfig ) { - usageCollection.registerCollector(getOpsStatsCollector(usageCollection, opsMetrics$)); - usageCollection.registerCollector(getKibanaUsageCollector(usageCollection, kibanaIndex)); usageCollection.registerCollector(getSettingsCollector(usageCollection, config)); } diff --git a/x-pack/plugins/monitoring/server/plugin.ts b/x-pack/plugins/monitoring/server/plugin.ts index 784226dca66fee..920accd17ec8b2 100644 --- a/x-pack/plugins/monitoring/server/plugin.ts +++ b/x-pack/plugins/monitoring/server/plugin.ts @@ -177,12 +177,7 @@ export class Plugin { // Register collector objects for stats to show up in the APIs if (plugins.usageCollection) { - registerCollectors( - plugins.usageCollection, - config, - core.metrics.getOpsMetrics$(), - get(legacyConfig, 'kibana.index') - ); + registerCollectors(plugins.usageCollection, config); } // If collection is enabled, create the bulk uploader From 267f22c2ee174af6026773b04d782faf565d654c Mon Sep 17 00:00:00 2001 From: Mikhail Shustov Date: Wed, 8 Apr 2020 10:21:06 +0200 Subject: [PATCH 14/52] 2Mb --> 53kB (#62781) --- x-pack/plugins/watcher/public/plugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/watcher/public/plugin.ts b/x-pack/plugins/watcher/public/plugin.ts index 9bee7e60273e48..6de21bc27d48c7 100644 --- a/x-pack/plugins/watcher/public/plugin.ts +++ b/x-pack/plugins/watcher/public/plugin.ts @@ -12,7 +12,6 @@ import { FeatureCatalogueCategory } from '../../../../src/plugins/home/public'; import { LicenseStatus } from '../common/types/license_status'; import { ILicense } from '../../licensing/public'; -import { TimeBuckets } from './legacy'; import { PLUGIN } from '../common/constants'; import { Dependencies } from './types'; @@ -41,6 +40,7 @@ export class WatcherUIPlugin implements Plugin { const [core] = await getStartServices(); const { i18n: i18nDep, docLinks, savedObjects } = core; const { boot } = await import('./application/boot'); + const { TimeBuckets } = await import('./legacy'); return boot({ // Skip the first license status, because that's already been used to determine From 314c4f782f434dc799a732036f273bbc9d5c5f3a Mon Sep 17 00:00:00 2001 From: Daniil Suleiman <31325372+sulemanof@users.noreply.github.com> Date: Wed, 8 Apr 2020 12:00:13 +0300 Subject: [PATCH 15/52] [NP] Vis Default Editor plugin (#62475) * Move the default_editor to NP * Fix paths * Import styles through the visualize * Other fixes * Fix ip_ranges exhaustive-deps array * Fix filters and extend bounds * Other fixes * Fix date_ranges tests * Use useMount on first render Co-authored-by: Elastic Machine --- .eslintrc.js | 20 ---- .i18nrc.json | 2 +- .../public/components/editor/controls_tab.tsx | 2 +- .../public/components/editor/options_tab.tsx | 2 +- .../kibana/public/visualize/_index.scss | 3 + .../public/visualize/kibana_services.ts | 2 +- .../kibana/public/visualize/plugin.ts | 2 +- .../public/components/region_map_options.tsx | 2 +- .../region_map/public/region_map_type.js | 2 +- .../public/components/tile_map_options.tsx | 2 +- .../tile_map/public/tile_map_type.js | 2 +- .../core_plugins/vis_default_editor/index.ts | 42 -------- .../vis_default_editor/package.json | 4 - .../public/markdown_options.tsx | 2 +- .../vis_type_markdown/public/markdown_vis.ts | 2 +- .../public/settings_options.tsx | 2 +- .../public/components/metric_vis_options.tsx | 2 +- .../public/metric_vis_fn.test.ts | 4 - .../public/metric_vis_type.test.ts | 4 - .../vis_type_metric/public/metric_vis_type.ts | 2 +- .../public/components/table_vis_options.tsx | 2 +- .../vis_type_table/public/table_vis_type.ts | 2 +- .../public/components/tag_cloud_options.tsx | 2 +- .../public/tag_cloud_type.ts | 2 +- .../public/components/timelion_interval.tsx | 2 +- .../public/timelion_options.tsx | 2 +- .../public/timelion_vis_type.tsx | 2 +- .../public/components/vega_vis_editor.tsx | 2 +- .../vis_type_vega/public/vega_type.ts | 3 +- .../vis_type_vislib/public/area.ts | 2 +- .../components/common/basic_options.tsx | 2 +- .../public/components/common/color_ranges.tsx | 5 +- .../public/components/common/color_schema.tsx | 2 +- .../components/common/validation_wrapper.tsx | 2 +- .../public/components/options/gauge/index.tsx | 2 +- .../components/options/heatmap/index.tsx | 2 +- .../options/heatmap/labels_panel.tsx | 2 +- .../metrics_axes/category_axis_panel.tsx | 2 +- .../public/components/options/pie.tsx | 2 +- .../options/point_series/grid_panel.tsx | 2 +- .../vis_type_vislib/public/gauge.ts | 2 +- .../vis_type_vislib/public/goal.ts | 2 +- .../vis_type_vislib/public/heatmap.ts | 2 +- .../vis_type_vislib/public/histogram.ts | 2 +- .../vis_type_vislib/public/horizontal_bar.ts | 2 +- .../vis_type_vislib/public/line.ts | 2 +- .../vis_type_vislib/public/pie.ts | 2 +- .../public/utils/common_config.tsx | 2 +- src/plugins/vis_default_editor/README.md | 16 ++++ .../vis_default_editor/public/_agg.scss | 0 .../public/_agg_params.scss | 0 .../vis_default_editor/public/_default.scss | 0 .../vis_default_editor/public/_sidebar.scss | 0 .../__snapshots__/agg.test.tsx.snap | 0 .../__snapshots__/agg_group.test.tsx.snap | 0 .../public/components/agg.test.tsx | 0 .../public/components/agg.tsx | 3 +- .../public/components/agg_add.tsx | 2 +- .../public/components/agg_common_props.ts | 0 .../public/components/agg_group.test.tsx | 0 .../public/components/agg_group.tsx | 3 +- .../components/agg_group_helper.test.ts | 0 .../public/components/agg_group_helper.tsx | 0 .../public/components/agg_group_state.tsx | 0 .../public/components/agg_param.tsx | 0 .../public/components/agg_param_props.ts | 0 .../public/components/agg_params.test.tsx | 4 +- .../public/components/agg_params.tsx | 4 +- .../components/agg_params_helper.test.ts | 0 .../public/components/agg_params_helper.ts | 2 +- .../public/components/agg_params_map.ts | 7 +- .../public/components/agg_params_state.ts | 0 .../public/components/agg_select.tsx | 2 +- .../extended_bounds.test.tsx.snap | 0 .../__snapshots__/metric_agg.test.tsx.snap | 0 .../controls/__snapshots__/size.test.tsx.snap | 0 .../__snapshots__/top_aggregate.test.tsx.snap | 0 .../components/controls/agg_control_props.tsx | 0 .../components/controls/agg_utils.test.tsx | 0 .../components/controls/auto_precision.tsx | 0 .../controls/components/from_to_list.tsx | 74 ++++++++------- .../controls/components/input_list.tsx | 95 +++++++++++-------- .../controls/components/mask_list.tsx | 72 +++++++------- .../__snapshots__/number_list.test.tsx.snap | 0 .../__snapshots__/number_row.test.tsx.snap | 0 .../controls/components/number_list/index.ts | 0 .../number_list/number_list.test.tsx | 0 .../components/number_list/number_list.tsx | 4 +- .../number_list/number_row.test.tsx | 0 .../components/number_list/number_row.tsx | 0 .../components/number_list/range.test.ts | 1 - .../controls/components/number_list/range.ts | 0 .../components/number_list/utils.test.ts | 0 .../controls/components/number_list/utils.ts | 0 .../components/controls/date_ranges.test.tsx | 4 +- .../components/controls/date_ranges.tsx | 37 +++++--- .../components/controls/drop_partials.tsx | 0 .../controls/extended_bounds.test.tsx | 0 .../components/controls/extended_bounds.tsx | 0 .../public/components/controls/field.test.tsx | 0 .../public/components/controls/field.tsx | 8 +- .../public/components/controls/filter.tsx | 2 +- .../public/components/controls/filters.tsx | 9 +- .../controls/has_extended_bounds.tsx | 19 +++- .../public/components/controls/index.ts | 0 .../components/controls/ip_range_type.tsx | 0 .../public/components/controls/ip_ranges.tsx | 28 ++++-- .../controls/is_filtered_by_collar.tsx | 0 .../components/controls/metric_agg.test.tsx | 0 .../public/components/controls/metric_agg.tsx | 0 .../components/controls/min_doc_count.tsx | 0 .../components/controls/missing_bucket.tsx | 9 +- .../components/controls/number_interval.tsx | 2 +- .../public/components/controls/order.tsx | 2 +- .../components/controls/order_agg.test.tsx | 0 .../public/components/controls/order_agg.tsx | 4 +- .../public/components/controls/order_by.tsx | 10 +- .../components/controls/other_bucket.tsx | 0 .../components/controls/percentile_ranks.tsx | 0 .../components/controls/percentiles.test.tsx | 0 .../components/controls/percentiles.tsx | 0 .../public/components/controls/precision.tsx | 2 +- .../controls/radius_ratio_option.tsx | 7 +- .../components/controls/range_control.tsx | 0 .../public/components/controls/ranges.tsx | 63 ++++++------ .../public/components/controls/raw_json.tsx | 0 .../components/controls/rows_or_columns.tsx | 0 .../components/controls/scale_metrics.tsx | 0 .../public/components/controls/size.test.tsx | 0 .../public/components/controls/size.tsx | 2 +- .../public/components/controls/string.tsx | 2 +- .../public/components/controls/sub_agg.tsx | 5 +- .../public/components/controls/sub_metric.tsx | 9 +- .../public/components/controls/switch.tsx | 0 .../public/components/controls/test_utils.ts | 0 .../components/controls/time_interval.tsx | 4 +- .../controls/top_aggregate.test.tsx | 0 .../components/controls/top_aggregate.tsx | 4 +- .../public/components/controls/top_field.tsx | 0 .../public/components/controls/top_size.tsx | 0 .../components/controls/top_sort_field.tsx | 0 .../components/controls/use_geocentroid.tsx | 0 .../components/controls/utils/agg_utils.ts | 0 .../public/components/controls/utils/index.ts | 0 .../controls/utils/inline_comp_wrapper.tsx | 0 .../strings/comma_separated_list.test.ts | 0 .../utils/strings/comma_separated_list.ts | 0 .../controls/utils/strings/index.ts | 0 .../controls/utils/strings/prose.test.ts | 0 .../controls/utils/strings/prose.ts | 0 .../components/controls/utils/use_handlers.ts | 0 .../public/components/sidebar/controls.tsx | 2 +- .../public/components/sidebar/data_tab.tsx | 4 +- .../public/components/sidebar/index.ts | 0 .../public/components/sidebar/navbar.tsx | 0 .../public/components/sidebar/sidebar.tsx | 7 +- .../components/sidebar/sidebar_title.tsx | 4 +- .../components/sidebar/state/actions.ts | 0 .../components/sidebar/state/constants.ts | 0 .../sidebar/state/editor_form_state.ts | 0 .../public/components/sidebar/state/index.ts | 2 +- .../components/sidebar/state/reducers.ts | 2 +- .../public/components/utils/editor_config.ts | 0 .../public/components/utils/index.ts | 0 .../public/default_editor.tsx | 4 +- .../public/default_editor_controller.tsx | 6 +- .../vis_default_editor/public/editor_size.ts | 0 .../vis_default_editor/public/index.scss | 0 .../vis_default_editor/public/index.ts | 2 + .../vis_default_editor/public/schemas.ts | 2 +- .../vis_default_editor/public/types.ts | 0 .../vis_default_editor/public/utils.test.ts | 0 .../vis_default_editor/public/utils.ts | 0 .../public/vis_options_props.tsx | 0 .../public/vis_type_agg_filter.ts | 2 +- .../self_changing_editor.tsx | 2 +- 176 files changed, 366 insertions(+), 359 deletions(-) delete mode 100644 src/legacy/core_plugins/vis_default_editor/index.ts delete mode 100644 src/legacy/core_plugins/vis_default_editor/package.json create mode 100644 src/plugins/vis_default_editor/README.md rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/_agg.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/_agg_params.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/_default.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/_sidebar.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/__snapshots__/agg.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/__snapshots__/agg_group.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_add.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_common_props.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_group.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_group.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_group_helper.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_group_helper.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_group_state.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_param.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_param_props.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params.test.tsx (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params_helper.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params_helper.ts (99%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params_map.ts (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_params_state.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/agg_select.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/__snapshots__/extended_bounds.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/__snapshots__/metric_agg.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/__snapshots__/size.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/__snapshots__/top_aggregate.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/agg_control_props.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/agg_utils.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/auto_precision.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/from_to_list.tsx (68%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/input_list.tsx (75%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/mask_list.tsx (62%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_list.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_row.test.tsx.snap (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/number_list.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/number_list.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/number_row.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/number_row.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/range.test.ts (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/range.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/utils.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/components/number_list/utils.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/date_ranges.test.tsx (95%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/date_ranges.tsx (90%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/drop_partials.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/extended_bounds.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/extended_bounds.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/field.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/field.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/filter.tsx (99%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/filters.tsx (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/has_extended_bounds.tsx (73%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/ip_range_type.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/ip_ranges.tsx (79%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/is_filtered_by_collar.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/metric_agg.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/metric_agg.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/min_doc_count.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/missing_bucket.tsx (93%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/number_interval.tsx (99%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/order.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/order_agg.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/order_agg.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/order_by.tsx (94%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/other_bucket.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/percentile_ranks.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/percentiles.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/percentiles.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/precision.tsx (95%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/radius_ratio_option.tsx (95%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/range_control.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/ranges.tsx (91%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/raw_json.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/rows_or_columns.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/scale_metrics.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/size.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/size.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/string.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/sub_agg.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/sub_metric.tsx (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/switch.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/test_utils.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/time_interval.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/top_aggregate.test.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/top_aggregate.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/top_field.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/top_size.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/top_sort_field.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/use_geocentroid.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/agg_utils.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/inline_comp_wrapper.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/strings/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/strings/prose.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/strings/prose.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/controls/utils/use_handlers.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/controls.tsx (98%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/data_tab.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/navbar.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/sidebar.tsx (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/sidebar_title.tsx (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/state/actions.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/state/constants.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/state/editor_form_state.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/state/index.ts (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/sidebar/state/reducers.ts (99%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/utils/editor_config.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/components/utils/index.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/default_editor.tsx (94%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/default_editor_controller.tsx (92%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/editor_size.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/index.scss (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/index.ts (97%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/schemas.ts (96%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/types.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/utils.test.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/utils.ts (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/vis_options_props.tsx (100%) rename src/{legacy/core_plugins => plugins}/vis_default_editor/public/vis_type_agg_filter.ts (97%) diff --git a/.eslintrc.js b/.eslintrc.js index 3c173e52440092..2ce6d279d93a9f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -69,26 +69,6 @@ module.exports = { 'jsx-a11y/no-onchange': 'off', }, }, - { - files: ['src/legacy/core_plugins/expressions/**/*.{js,ts,tsx}'], - rules: { - 'react-hooks/exhaustive-deps': 'off', - }, - }, - { - files: [ - 'src/legacy/core_plugins/vis_default_editor/public/components/controls/**/*.{ts,tsx}', - ], - rules: { - 'react-hooks/exhaustive-deps': 'off', - }, - }, - { - files: ['src/legacy/ui/public/vis/**/*.{js,ts,tsx}'], - rules: { - 'react-hooks/exhaustive-deps': 'off', - }, - }, { files: ['src/plugins/es_ui_shared/**/*.{js,ts,tsx}'], rules: { diff --git a/.i18nrc.json b/.i18nrc.json index c293b3103a39c8..3b0b40b40792e8 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -43,7 +43,7 @@ "tileMap": "src/legacy/core_plugins/tile_map", "timelion": ["src/legacy/core_plugins/timelion", "src/legacy/core_plugins/vis_type_timelion", "src/plugins/timelion"], "uiActions": "src/plugins/ui_actions", - "visDefaultEditor": "src/legacy/core_plugins/vis_default_editor", + "visDefaultEditor": "src/plugins/vis_default_editor", "visTypeMarkdown": "src/legacy/core_plugins/vis_type_markdown", "visTypeMetric": "src/legacy/core_plugins/vis_type_metric", "visTypeTable": "src/legacy/core_plugins/vis_type_table", diff --git a/src/legacy/core_plugins/input_control_vis/public/components/editor/controls_tab.tsx b/src/legacy/core_plugins/input_control_vis/public/components/editor/controls_tab.tsx index 029e1f149d0520..b7114f1029ef2c 100644 --- a/src/legacy/core_plugins/input_control_vis/public/components/editor/controls_tab.tsx +++ b/src/legacy/core_plugins/input_control_vis/public/components/editor/controls_tab.tsx @@ -30,7 +30,7 @@ import { EuiSelect, } from '@elastic/eui'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { IIndexPattern } from 'src/plugins/data/public'; import { ControlEditor } from './control_editor'; import { diff --git a/src/legacy/core_plugins/input_control_vis/public/components/editor/options_tab.tsx b/src/legacy/core_plugins/input_control_vis/public/components/editor/options_tab.tsx index 95b14619c34169..cdff6cabad8ba8 100644 --- a/src/legacy/core_plugins/input_control_vis/public/components/editor/options_tab.tsx +++ b/src/legacy/core_plugins/input_control_vis/public/components/editor/options_tab.tsx @@ -23,7 +23,7 @@ import { EuiForm, EuiFormRow, EuiSwitch } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiSwitchEvent } from '@elastic/eui'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; interface OptionsTabParams { updateFiltersOnChange: boolean; diff --git a/src/legacy/core_plugins/kibana/public/visualize/_index.scss b/src/legacy/core_plugins/kibana/public/visualize/_index.scss index 0632831578bd01..079d82936bb574 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/_index.scss +++ b/src/legacy/core_plugins/kibana/public/visualize/_index.scss @@ -1,2 +1,5 @@ // Visualize plugin styles @import 'np_ready/index'; + +// should be removed while moving the visualize into NP +@import '../../../../../plugins/vis_default_editor/public/index' diff --git a/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts b/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts index addc608efd57d8..d5440c4677d8ae 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts +++ b/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts @@ -36,7 +36,7 @@ import { VisualizationsStart } from '../../../../../plugins/visualizations/publi import { SavedVisualizations } from './np_ready/types'; import { UsageCollectionSetup } from '../../../../../plugins/usage_collection/public'; import { KibanaLegacyStart } from '../../../../../plugins/kibana_legacy/public'; -import { DefaultEditorController } from '../../../vis_default_editor/public'; +import { DefaultEditorController } from '../../../../../plugins/vis_default_editor/public'; export interface VisualizeKibanaServices { pluginInitializerContext: PluginInitializerContext; diff --git a/src/legacy/core_plugins/kibana/public/visualize/plugin.ts b/src/legacy/core_plugins/kibana/public/visualize/plugin.ts index 81d8458010f196..4ffbc307c69a83 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/plugin.ts +++ b/src/legacy/core_plugins/kibana/public/visualize/plugin.ts @@ -51,7 +51,7 @@ import { HomePublicPluginSetup, } from '../../../../../plugins/home/public'; import { UsageCollectionSetup } from '../../../../../plugins/usage_collection/public'; -import { DefaultEditorController } from '../../../vis_default_editor/public'; +import { DefaultEditorController } from '../../../../../plugins/vis_default_editor/public'; export interface VisualizePluginStartDependencies { data: DataPublicPluginStart; diff --git a/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx b/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx index 4219e2e7151508..61cfbf00ded9e6 100644 --- a/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx +++ b/src/legacy/core_plugins/region_map/public/components/region_map_options.tsx @@ -23,7 +23,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { FileLayerField, VectorLayer, ServiceSettings } from 'ui/vis/map/service_settings'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { NumberInputOption, SelectOption, SwitchOption } from '../../../vis_type_vislib/public'; import { WmsOptions } from '../../../tile_map/public/components/wms_options'; import { RegionMapVisParams } from '../types'; diff --git a/src/legacy/core_plugins/region_map/public/region_map_type.js b/src/legacy/core_plugins/region_map/public/region_map_type.js index 4faa3f92abb5a6..9174b03cf843cf 100644 --- a/src/legacy/core_plugins/region_map/public/region_map_type.js +++ b/src/legacy/core_plugins/region_map/public/region_map_type.js @@ -22,7 +22,7 @@ import { mapToLayerWithId } from './util'; import { createRegionMapVisualization } from './region_map_visualization'; import { RegionMapOptions } from './components/region_map_options'; import { truncatedColorSchemas } from '../../../../plugins/charts/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; // TODO: reference to TILE_MAP plugin should be removed import { ORIGIN } from '../../tile_map/common/origin'; diff --git a/src/legacy/core_plugins/tile_map/public/components/tile_map_options.tsx b/src/legacy/core_plugins/tile_map/public/components/tile_map_options.tsx index 168f56b771b7e5..9169647aa2aef2 100644 --- a/src/legacy/core_plugins/tile_map/public/components/tile_map_options.tsx +++ b/src/legacy/core_plugins/tile_map/public/components/tile_map_options.tsx @@ -21,7 +21,7 @@ import React, { useEffect } from 'react'; import { EuiPanel, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { BasicOptions, RangeOption, diff --git a/src/legacy/core_plugins/tile_map/public/tile_map_type.js b/src/legacy/core_plugins/tile_map/public/tile_map_type.js index 39d39a4c8f8fcd..fe82ad5c7352b2 100644 --- a/src/legacy/core_plugins/tile_map/public/tile_map_type.js +++ b/src/legacy/core_plugins/tile_map/public/tile_map_type.js @@ -22,7 +22,7 @@ import { i18n } from '@kbn/i18n'; import { convertToGeoJson } from 'ui/vis/map/convert_to_geojson'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { createTileMapVisualization } from './tile_map_visualization'; import { TileMapOptions } from './components/tile_map_options'; import { MapTypes } from './map_types'; diff --git a/src/legacy/core_plugins/vis_default_editor/index.ts b/src/legacy/core_plugins/vis_default_editor/index.ts deleted file mode 100644 index ee7b5ee4a62ffb..00000000000000 --- a/src/legacy/core_plugins/vis_default_editor/index.ts +++ /dev/null @@ -1,42 +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 vidDefaultEditorPluginInitializer: LegacyPluginInitializer = ({ Plugin }: LegacyPluginApi) => - new Plugin({ - id: 'vis_default_editor', - require: [], - publicDir: resolve(__dirname, 'public'), - uiExports: { - styleSheetPaths: resolve(__dirname, 'public/index.scss'), - }, - 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 vidDefaultEditorPluginInitializer; diff --git a/src/legacy/core_plugins/vis_default_editor/package.json b/src/legacy/core_plugins/vis_default_editor/package.json deleted file mode 100644 index 77dcaff41da6bc..00000000000000 --- a/src/legacy/core_plugins/vis_default_editor/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "vis_default_editor", - "version": "kibana" -} diff --git a/src/legacy/core_plugins/vis_type_markdown/public/markdown_options.tsx b/src/legacy/core_plugins/vis_type_markdown/public/markdown_options.tsx index 8a4297d3b8149c..a6349793619a01 100644 --- a/src/legacy/core_plugins/vis_type_markdown/public/markdown_options.tsx +++ b/src/legacy/core_plugins/vis_type_markdown/public/markdown_options.tsx @@ -30,7 +30,7 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { MarkdownVisParams } from './types'; function MarkdownOptions({ stateParams, setValue }: VisOptionsProps) { diff --git a/src/legacy/core_plugins/vis_type_markdown/public/markdown_vis.ts b/src/legacy/core_plugins/vis_type_markdown/public/markdown_vis.ts index b84d9638eb973d..57ea6d9c9bb3d6 100644 --- a/src/legacy/core_plugins/vis_type_markdown/public/markdown_vis.ts +++ b/src/legacy/core_plugins/vis_type_markdown/public/markdown_vis.ts @@ -22,7 +22,7 @@ import { i18n } from '@kbn/i18n'; import { MarkdownVisWrapper } from './markdown_vis_controller'; import { MarkdownOptions } from './markdown_options'; import { SettingsOptions } from './settings_options'; -import { DefaultEditorSize } from '../../vis_default_editor/public'; +import { DefaultEditorSize } from '../../../../plugins/vis_default_editor/public'; export const markdownVisDefinition = { name: 'markdown', diff --git a/src/legacy/core_plugins/vis_type_markdown/public/settings_options.tsx b/src/legacy/core_plugins/vis_type_markdown/public/settings_options.tsx index ac1d4bcc82ceca..552fd633735543 100644 --- a/src/legacy/core_plugins/vis_type_markdown/public/settings_options.tsx +++ b/src/legacy/core_plugins/vis_type_markdown/public/settings_options.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { RangeOption, SwitchOption } from '../../vis_type_vislib/public'; import { MarkdownVisParams } from './types'; diff --git a/src/legacy/core_plugins/vis_type_metric/public/components/metric_vis_options.tsx b/src/legacy/core_plugins/vis_type_metric/public/components/metric_vis_options.tsx index 661f16d6497ba3..5c3032511f09af 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/components/metric_vis_options.tsx +++ b/src/legacy/core_plugins/vis_type_metric/public/components/metric_vis_options.tsx @@ -29,7 +29,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { ColorModes, ColorRanges, diff --git a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts index 22c32895d68035..4094cd4eff0601 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_fn.test.ts @@ -23,10 +23,6 @@ import { functionWrapper } from '../../../../plugins/expressions/common/expressi jest.mock('ui/new_platform'); -jest.mock('../../vis_default_editor/public', () => ({ - Schemas: class {}, -})); - describe('interpreter/functions#metric', () => { const fn = functionWrapper(createMetricVisFn()); const context = { diff --git a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts index 459da47556307c..706693eff10072 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.test.ts @@ -22,10 +22,6 @@ import { MetricVisComponent } from './components/metric_vis_component'; jest.mock('ui/new_platform'); -jest.mock('../../vis_default_editor/public', () => ({ - Schemas: class {}, -})); - describe('metric_vis - createMetricVisTypeDefinition', () => { it('has metric vis component set', () => { const def = createMetricVisTypeDefinition(); diff --git a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.ts b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.ts index f29164f7e540d1..3bbb8964122e54 100644 --- a/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.ts +++ b/src/legacy/core_plugins/vis_type_metric/public/metric_vis_type.ts @@ -24,7 +24,7 @@ import { MetricVisOptions } from './components/metric_vis_options'; import { ColorModes } from '../../vis_type_vislib/public'; import { ColorSchemas, colorSchemas } from '../../../../plugins/charts/public'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; export const createMetricVisTypeDefinition = () => ({ name: 'metric', diff --git a/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx b/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx index 30a95262731668..d01ab31e0a843b 100644 --- a/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx +++ b/src/legacy/core_plugins/vis_type_table/public/components/table_vis_options.tsx @@ -23,7 +23,7 @@ import { EuiIconTip, EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { search } from '../../../../../plugins/data/public'; import { NumberInputOption, SwitchOption, SelectOption } from '../../../vis_type_vislib/public'; import { TableVisParams } from '../types'; 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 index d26e860e51272a..43816121bc23bc 100644 --- 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 @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { Vis } from '../../../../plugins/visualizations/public'; import { tableVisResponseHandler } from './table_vis_response_handler'; // @ts-ignore diff --git a/src/legacy/core_plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx b/src/legacy/core_plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx index a9e816f70cf531..80e4e1de7ddab6 100644 --- a/src/legacy/core_plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx +++ b/src/legacy/core_plugins/vis_type_tagcloud/public/components/tag_cloud_options.tsx @@ -20,8 +20,8 @@ import React from 'react'; import { EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { ValidatedDualRange } from '../../../../../../src/plugins/kibana_react/public'; -import { VisOptionsProps } from '../../../vis_default_editor/public'; import { SelectOption, SwitchOption } from '../../../vis_type_vislib/public'; import { TagCloudVisParams } from '../types'; diff --git a/src/legacy/core_plugins/vis_type_tagcloud/public/tag_cloud_type.ts b/src/legacy/core_plugins/vis_type_tagcloud/public/tag_cloud_type.ts index 5a8cc3004a3154..b7dfa62c93fb97 100644 --- a/src/legacy/core_plugins/vis_type_tagcloud/public/tag_cloud_type.ts +++ b/src/legacy/core_plugins/vis_type_tagcloud/public/tag_cloud_type.ts @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { TagCloudOptions } from './components/tag_cloud_options'; diff --git a/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx b/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx index 6e29b111d422ac..8a8e1b22fb78db 100644 --- a/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx +++ b/src/legacy/core_plugins/vis_type_timelion/public/components/timelion_interval.tsx @@ -23,7 +23,7 @@ import { i18n } from '@kbn/i18n'; import { search } from '../../../../../plugins/data/public'; const { isValidEsInterval } = search.aggs; -import { useValidation } from '../../../vis_default_editor/public'; +import { useValidation } from '../../../../../plugins/vis_default_editor/public'; const intervalOptions = [ { diff --git a/src/legacy/core_plugins/vis_type_timelion/public/timelion_options.tsx b/src/legacy/core_plugins/vis_type_timelion/public/timelion_options.tsx index b7c40e15c11fd4..afffcf7ccaf7a7 100644 --- a/src/legacy/core_plugins/vis_type_timelion/public/timelion_options.tsx +++ b/src/legacy/core_plugins/vis_type_timelion/public/timelion_options.tsx @@ -20,9 +20,9 @@ import React, { useCallback } from 'react'; import { EuiPanel } from '@elastic/eui'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { VisParams } from './timelion_vis_fn'; import { TimelionInterval, TimelionExpressionInput } from './components'; -import { VisOptionsProps } from '../../vis_default_editor/public'; function TimelionOptions({ stateParams, setValue, setValidity }: VisOptionsProps) { const setInterval = useCallback((value: VisParams['interval']) => setValue('interval', value), [ diff --git a/src/legacy/core_plugins/vis_type_timelion/public/timelion_vis_type.tsx b/src/legacy/core_plugins/vis_type_timelion/public/timelion_vis_type.tsx index 6679553004097b..5be77b3e51a6ad 100644 --- a/src/legacy/core_plugins/vis_type_timelion/public/timelion_vis_type.tsx +++ b/src/legacy/core_plugins/vis_type_timelion/public/timelion_vis_type.tsx @@ -21,7 +21,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { KibanaContextProvider } from '../../../../plugins/kibana_react/public'; -import { DefaultEditorSize } from '../../vis_default_editor/public'; +import { DefaultEditorSize } from '../../../../plugins/vis_default_editor/public'; import { getTimelionRequestHandler } from './helpers/timelion_request_handler'; import { TimelionVisComponent, TimelionVisComponentProp } from './components'; import { TimelionOptions } from './timelion_options'; diff --git a/src/legacy/core_plugins/vis_type_vega/public/components/vega_vis_editor.tsx b/src/legacy/core_plugins/vis_type_vega/public/components/vega_vis_editor.tsx index 707a6830b5ba45..31144065d7b40b 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/components/vega_vis_editor.tsx +++ b/src/legacy/core_plugins/vis_type_vega/public/components/vega_vis_editor.tsx @@ -24,11 +24,11 @@ import compactStringify from 'json-stringify-pretty-compact'; import hjson from 'hjson'; import { i18n } from '@kbn/i18n'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { getNotifications } from '../services'; import { VisParams } from '../vega_fn'; import { VegaHelpMenu } from './vega_help_menu'; import { VegaActionsMenu } from './vega_actions_menu'; -import { VisOptionsProps } from '../../../vis_default_editor/public'; const aceOptions = { maxLines: Infinity, diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts b/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts index b0ec90d2c378f1..5d9ed5c8df91c5 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_type.ts @@ -18,8 +18,7 @@ */ import { i18n } from '@kbn/i18n'; -// @ts-ignore -import { DefaultEditorSize } from '../../vis_default_editor/public'; +import { DefaultEditorSize } from '../../../../plugins/vis_default_editor/public'; import { VegaVisualizationDependencies } from './plugin'; import { VegaVisEditor } from './components'; import { defaultFeedbackMessage } from '../../../../plugins/kibana_utils/common'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/area.ts b/src/legacy/core_plugins/vis_type_vislib/public/area.ts index e79555470298b8..68decacaaa0404 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/area.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/area.ts @@ -24,7 +24,7 @@ import { palettes } from '@elastic/eui/lib/services'; import { euiPaletteColorBlind } from '@elastic/eui/lib/services'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { Positions, ChartTypes, diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/common/basic_options.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/common/basic_options.tsx index 1138f66d21cfa5..baf3e8ecd1b289 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/common/basic_options.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/common/basic_options.tsx @@ -20,7 +20,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { VisOptionsProps } from '../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { SwitchOption } from './switch'; import { SelectOption } from './select'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_ranges.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_ranges.tsx index 2c9b1b543e8c23..84c70f10b12da7 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_ranges.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_ranges.tsx @@ -22,7 +22,10 @@ import { last } from 'lodash'; import { i18n } from '@kbn/i18n'; -import { RangeValues, RangesParamEditor } from '../../../../vis_default_editor/public'; +import { + RangeValues, + RangesParamEditor, +} from '../../../../../../plugins/vis_default_editor/public'; export type SetColorRangeValue = (paramName: string, value: RangeValues[]) => void; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_schema.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_schema.tsx index 06ce0a2b4af64b..35d7f7b13235e4 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_schema.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/common/color_schema.tsx @@ -22,7 +22,7 @@ import { i18n } from '@kbn/i18n'; import { EuiLink, EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from '../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { SelectOption } from './select'; import { SwitchOption } from './switch'; import { ColorSchemaVislibParams } from '../../types'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/common/validation_wrapper.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/common/validation_wrapper.tsx index c069d4c935669e..718056fd85492b 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/common/validation_wrapper.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/common/validation_wrapper.tsx @@ -19,7 +19,7 @@ import React, { useEffect, useState, useCallback } from 'react'; -import { VisOptionsProps } from '../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; export interface ValidationVisOptionsProps extends VisOptionsProps { setMultipleValidity(paramName: string, isValid: boolean): void; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/gauge/index.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/gauge/index.tsx index 706035a7b814ed..6109b548f9412c 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/gauge/index.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/gauge/index.tsx @@ -20,7 +20,7 @@ import React, { useCallback } from 'react'; import { EuiSpacer } from '@elastic/eui'; -import { VisOptionsProps } from '../../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { GaugeVisParams } from '../../../gauge'; import { RangesPanel } from './ranges_panel'; import { StylePanel } from './style_panel'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/index.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/index.tsx index 452b9ed9bdbb16..715b5902b69da2 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/index.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/index.tsx @@ -23,7 +23,7 @@ import { EuiPanel, EuiSpacer, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from '../../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { BasicOptions, ColorRanges, diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/labels_panel.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/labels_panel.tsx index c74f0ef765c8dc..38811bd8364595 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/labels_panel.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/heatmap/labels_panel.tsx @@ -23,7 +23,7 @@ import { EuiColorPicker, EuiFormRow, EuiPanel, EuiSpacer, EuiTitle } from '@elas import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from '../../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { ValueAxis } from '../../../types'; import { HeatmapVisParams } from '../../../heatmap'; import { SwitchOption } from '../../common'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/category_axis_panel.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/category_axis_panel.tsx index 049df0cdd77be9..915885388640c2 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/category_axis_panel.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/metrics_axes/category_axis_panel.tsx @@ -23,7 +23,7 @@ import { EuiPanel, EuiTitle, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from 'src/legacy/core_plugins/vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { Axis } from '../../../types'; import { SelectOption, SwitchOption } from '../../common'; import { LabelOptions, SetAxisLabel } from './label_options'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/pie.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/pie.tsx index 2182edafb3ebf2..4c0be456aad64b 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/pie.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/pie.tsx @@ -22,7 +22,7 @@ import { EuiPanel, EuiTitle, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from '../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { BasicOptions, TruncateLabelsOption, SwitchOption } from '../common'; import { PieVisParams } from '../../pie'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/components/options/point_series/grid_panel.tsx b/src/legacy/core_plugins/vis_type_vislib/public/components/options/point_series/grid_panel.tsx index db9acafac305c6..bb2b3f8fddb492 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/components/options/point_series/grid_panel.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/components/options/point_series/grid_panel.tsx @@ -22,7 +22,7 @@ import { EuiPanel, EuiTitle, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { VisOptionsProps } from '../../../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { SelectOption, SwitchOption } from '../../common'; import { BasicVislibParams, ValueAxis } from '../../../types'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/gauge.ts b/src/legacy/core_plugins/vis_type_vislib/public/gauge.ts index 4610bd37db5f1a..7ad821dbf2f30a 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/gauge.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/gauge.ts @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; -import { RangeValues, Schemas } from '../../vis_default_editor/public'; +import { RangeValues, Schemas } from '../../../../plugins/vis_default_editor/public'; import { AggGroupNames } from '../../../../plugins/data/public'; import { GaugeOptions } from './components/options'; import { getGaugeCollections, Alignments, ColorModes, GaugeTypes } from './utils/collections'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/goal.ts b/src/legacy/core_plugins/vis_type_vislib/public/goal.ts index c918128d01f110..6c311bebe07172 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/goal.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/goal.ts @@ -25,7 +25,7 @@ import { createVislibVisController } from './vis_controller'; import { VisTypeVislibDependencies } from './plugin'; import { ColorSchemas } from '../../../../plugins/charts/public'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; export const createGoalVisTypeDefinition = (deps: VisTypeVislibDependencies) => ({ name: 'goal', diff --git a/src/legacy/core_plugins/vis_type_vislib/public/heatmap.ts b/src/legacy/core_plugins/vis_type_vislib/public/heatmap.ts index 39a583f3c96411..88b4f0fcaf87e0 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/heatmap.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/heatmap.ts @@ -19,7 +19,7 @@ import { i18n } from '@kbn/i18n'; -import { RangeValues, Schemas } from '../../vis_default_editor/public'; +import { RangeValues, Schemas } from '../../../../plugins/vis_default_editor/public'; import { AggGroupNames } from '../../../../plugins/data/public'; import { AxisTypes, getHeatmapCollections, Positions, ScaleTypes } from './utils/collections'; import { HeatmapOptions } from './components/options'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/histogram.ts b/src/legacy/core_plugins/vis_type_vislib/public/histogram.ts index 15ef369e5150e2..54ec8f98203e25 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/histogram.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/histogram.ts @@ -24,7 +24,7 @@ import { palettes } from '@elastic/eui/lib/services'; import { euiPaletteColorBlind } from '@elastic/eui/lib/services'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { Positions, ChartTypes, diff --git a/src/legacy/core_plugins/vis_type_vislib/public/horizontal_bar.ts b/src/legacy/core_plugins/vis_type_vislib/public/horizontal_bar.ts index 8b5811628855c8..dc47252ccd44fe 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/horizontal_bar.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/horizontal_bar.ts @@ -24,7 +24,7 @@ import { palettes } from '@elastic/eui/lib/services'; import { euiPaletteColorBlind } from '@elastic/eui/lib/services'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { Positions, ChartTypes, diff --git a/src/legacy/core_plugins/vis_type_vislib/public/line.ts b/src/legacy/core_plugins/vis_type_vislib/public/line.ts index ac4cda869fe295..885ab295d11e1f 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/line.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/line.ts @@ -24,7 +24,7 @@ import { palettes } from '@elastic/eui/lib/services'; import { euiPaletteColorBlind } from '@elastic/eui/lib/services'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { Positions, ChartTypes, diff --git a/src/legacy/core_plugins/vis_type_vislib/public/pie.ts b/src/legacy/core_plugins/vis_type_vislib/public/pie.ts index 0f1bd93f5b5bd5..2774836baa3817 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/pie.ts +++ b/src/legacy/core_plugins/vis_type_vislib/public/pie.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { AggGroupNames } from '../../../../plugins/data/public'; -import { Schemas } from '../../vis_default_editor/public'; +import { Schemas } from '../../../../plugins/vis_default_editor/public'; import { PieOptions } from './components/options'; import { getPositions, Positions } from './utils/collections'; import { createVislibVisController } from './vis_controller'; diff --git a/src/legacy/core_plugins/vis_type_vislib/public/utils/common_config.tsx b/src/legacy/core_plugins/vis_type_vislib/public/utils/common_config.tsx index 6da40686a8b506..de867dc72bba7a 100644 --- a/src/legacy/core_plugins/vis_type_vislib/public/utils/common_config.tsx +++ b/src/legacy/core_plugins/vis_type_vislib/public/utils/common_config.tsx @@ -20,7 +20,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { VisOptionsProps } from '../../../vis_default_editor/public'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public'; import { PointSeriesOptions, MetricsAxisOptions } from '../components/options'; import { ValidationWrapper } from '../components/common'; import { BasicVislibParams } from '../types'; diff --git a/src/plugins/vis_default_editor/README.md b/src/plugins/vis_default_editor/README.md new file mode 100644 index 00000000000000..8607dfe486ace3 --- /dev/null +++ b/src/plugins/vis_default_editor/README.md @@ -0,0 +1,16 @@ +# Visualization Deafult Editor plugin + +The default editor is used in most primary visualizations, e.x. `Area`, `Data table`, `Pie`, etc. +It acts as a container for a particular visualization and options tabs. Contains the default "Data" tab in `public/components/sidebar/data_tab.tsx`. +The plugin exposes the static `DefaultEditorController` class to consume. + +```ts +import { DefaultEditorController } from '../../vis_default_editor/public'; + +const editor = new DefaultEditorController( + element, + vis, + eventEmitter, + embeddableHandler +); +``` \ No newline at end of file diff --git a/src/legacy/core_plugins/vis_default_editor/public/_agg.scss b/src/plugins/vis_default_editor/public/_agg.scss similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/_agg.scss rename to src/plugins/vis_default_editor/public/_agg.scss diff --git a/src/legacy/core_plugins/vis_default_editor/public/_agg_params.scss b/src/plugins/vis_default_editor/public/_agg_params.scss similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/_agg_params.scss rename to src/plugins/vis_default_editor/public/_agg_params.scss diff --git a/src/legacy/core_plugins/vis_default_editor/public/_default.scss b/src/plugins/vis_default_editor/public/_default.scss similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/_default.scss rename to src/plugins/vis_default_editor/public/_default.scss diff --git a/src/legacy/core_plugins/vis_default_editor/public/_sidebar.scss b/src/plugins/vis_default_editor/public/_sidebar.scss similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/_sidebar.scss rename to src/plugins/vis_default_editor/public/_sidebar.scss diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg.test.tsx.snap b/src/plugins/vis_default_editor/public/components/__snapshots__/agg.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/__snapshots__/agg.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_group.test.tsx.snap b/src/plugins/vis_default_editor/public/components/__snapshots__/agg_group.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/__snapshots__/agg_group.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/__snapshots__/agg_group.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg.test.tsx b/src/plugins/vis_default_editor/public/components/agg.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg.test.tsx rename to src/plugins/vis_default_editor/public/components/agg.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg.tsx b/src/plugins/vis_default_editor/public/components/agg.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg.tsx rename to src/plugins/vis_default_editor/public/components/agg.tsx index 83fbf70c9099ef..c7e3e609490f90 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg.tsx +++ b/src/plugins/vis_default_editor/public/components/agg.tsx @@ -28,14 +28,13 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { IAggConfig } from 'src/plugins/data/public'; +import { IAggConfig, TimeRange } from 'src/plugins/data/public'; import { DefaultEditorAggParams } from './agg_params'; import { DefaultEditorAggCommonProps } from './agg_common_props'; import { AGGS_ACTION_KEYS, AggsAction } from './agg_group_state'; import { RowsOrColumnsControl } from './controls/rows_or_columns'; import { RadiusRatioOptionControl } from './controls/radius_ratio_option'; import { getSchemaByName } from '../schemas'; -import { TimeRange } from '../../../../../plugins/data/public'; import { buildAggDescription } from './agg_params_helper'; export interface DefaultEditorAggProps extends DefaultEditorAggCommonProps { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_add.tsx b/src/plugins/vis_default_editor/public/components/agg_add.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_add.tsx rename to src/plugins/vis_default_editor/public/components/agg_add.tsx index 9df4ea58e0f075..f2c2f8b4d0b94c 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_add.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_add.tsx @@ -29,7 +29,7 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { IAggConfig, AggGroupNames } from '../../../../../plugins/data/public'; +import { IAggConfig, AggGroupNames } from '../../../data/public'; import { Schema } from '../schemas'; interface DefaultEditorAggAddProps { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts b/src/plugins/vis_default_editor/public/components/agg_common_props.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_common_props.ts rename to src/plugins/vis_default_editor/public/components/agg_common_props.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group.test.tsx b/src/plugins/vis_default_editor/public/components/agg_group.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_group.test.tsx rename to src/plugins/vis_default_editor/public/components/agg_group.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group.tsx b/src/plugins/vis_default_editor/public/components/agg_group.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_group.tsx rename to src/plugins/vis_default_editor/public/components/agg_group.tsx index 792595fd421f67..ecbc41f28003c9 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_group.tsx @@ -30,7 +30,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { AggGroupNames, search, IAggConfig } from '../../../../../plugins/data/public'; +import { AggGroupNames, search, IAggConfig, TimeRange } from '../../../data/public'; import { DefaultEditorAgg } from './agg'; import { DefaultEditorAggAdd } from './agg_add'; import { AddSchema, ReorderAggs, DefaultEditorAggCommonProps } from './agg_common_props'; @@ -42,7 +42,6 @@ import { } from './agg_group_helper'; import { aggGroupReducer, initAggsState, AGGS_ACTION_KEYS } from './agg_group_state'; import { Schema } from '../schemas'; -import { TimeRange } from '../../../../../plugins/data/public'; export interface DefaultEditorAggGroupProps extends DefaultEditorAggCommonProps { schemas: Schema[]; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group_helper.test.ts b/src/plugins/vis_default_editor/public/components/agg_group_helper.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_group_helper.test.ts rename to src/plugins/vis_default_editor/public/components/agg_group_helper.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group_helper.tsx b/src/plugins/vis_default_editor/public/components/agg_group_helper.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_group_helper.tsx rename to src/plugins/vis_default_editor/public/components/agg_group_helper.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_group_state.tsx b/src/plugins/vis_default_editor/public/components/agg_group_state.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_group_state.tsx rename to src/plugins/vis_default_editor/public/components/agg_group_state.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_param.tsx b/src/plugins/vis_default_editor/public/components/agg_param.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_param.tsx rename to src/plugins/vis_default_editor/public/components/agg_param.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_param_props.ts b/src/plugins/vis_default_editor/public/components/agg_param_props.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_param_props.ts rename to src/plugins/vis_default_editor/public/components/agg_param_props.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.test.tsx b/src/plugins/vis_default_editor/public/components/agg_params.test.tsx similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params.test.tsx rename to src/plugins/vis_default_editor/public/components/agg_params.test.tsx index 1c49ebf40640ed..cac1b0851b92df 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.test.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_params.test.tsx @@ -25,8 +25,8 @@ import { DefaultEditorAggParams as PureDefaultEditorAggParams, DefaultEditorAggParamsProps, } from './agg_params'; -import { KibanaContextProvider } from '../../../../../plugins/kibana_react/public'; -import { dataPluginMock } from '../../../../../plugins/data/public/mocks'; +import { KibanaContextProvider } from '../../../kibana_react/public'; +import { dataPluginMock } from '../../../data/public/mocks'; import { EditorVisState } from './sidebar/state/reducers'; const mockEditorConfig = { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx b/src/plugins/vis_default_editor/public/components/agg_params.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx rename to src/plugins/vis_default_editor/public/components/agg_params.tsx index b1555b76500d0a..3674e39b558d26 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_params.tsx @@ -22,7 +22,7 @@ import { EuiForm, EuiAccordion, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import useUnmount from 'react-use/lib/useUnmount'; -import { IAggConfig, IndexPattern, AggGroupNames } from '../../../../../plugins/data/public'; +import { IAggConfig, IndexPattern, AggGroupNames } from '../../../data/public'; import { DefaultEditorAggSelect } from './agg_select'; import { DefaultEditorAggParam } from './agg_param'; @@ -40,7 +40,7 @@ import { import { DefaultEditorCommonProps } from './agg_common_props'; import { EditorParamConfig, TimeIntervalParam, FixedParam, getEditorConfig } from './utils'; import { Schema, getSchemaByName } from '../schemas'; -import { useKibana } from '../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../kibana_react/public'; import { VisDefaultEditorKibanaServices } from '../types'; const FIXED_VALUE_PROP = 'fixedValue'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_helper.test.ts b/src/plugins/vis_default_editor/public/components/agg_params_helper.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params_helper.test.ts rename to src/plugins/vis_default_editor/public/components/agg_params_helper.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_helper.ts b/src/plugins/vis_default_editor/public/components/agg_params_helper.ts similarity index 99% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params_helper.ts rename to src/plugins/vis_default_editor/public/components/agg_params_helper.ts index 073cb7d5ac66c2..a32bd76bafa5ab 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_helper.ts +++ b/src/plugins/vis_default_editor/public/components/agg_params_helper.ts @@ -34,7 +34,7 @@ import { AggParamEditorProps } from './agg_param_props'; import { aggParamsMap } from './agg_params_map'; import { EditorConfig } from './utils'; import { Schema, getSchemaByName } from '../schemas'; -import { search } from '../../../../../plugins/data/public'; +import { search } from '../../../data/public'; import { EditorVisState } from './sidebar/state/reducers'; interface ParamInstanceBase { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_map.ts b/src/plugins/vis_default_editor/public/components/agg_params_map.ts similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params_map.ts rename to src/plugins/vis_default_editor/public/components/agg_params_map.ts index 4517313b6fd6e8..5af3cfc5b09289 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_map.ts +++ b/src/plugins/vis_default_editor/public/components/agg_params_map.ts @@ -18,12 +18,7 @@ */ import * as controls from './controls'; -import { - AggGroupNames, - BUCKET_TYPES, - METRIC_TYPES, - search, -} from '../../../../../plugins/data/public'; +import { AggGroupNames, BUCKET_TYPES, METRIC_TYPES, search } from '../../../data/public'; import { wrapWithInlineComp } from './controls/utils'; const { siblingPipelineType, parentPipelineType } = search.aggs; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_params_state.ts b/src/plugins/vis_default_editor/public/components/agg_params_state.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_params_state.ts rename to src/plugins/vis_default_editor/public/components/agg_params_state.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/agg_select.tsx b/src/plugins/vis_default_editor/public/components/agg_select.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/agg_select.tsx rename to src/plugins/vis_default_editor/public/components/agg_select.tsx index 7ee432946f3c87..6cb76b18e24a6f 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/agg_select.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_select.tsx @@ -24,7 +24,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { IAggType, IndexPattern } from 'src/plugins/data/public'; -import { useKibana } from '../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../kibana_react/public'; import { ComboBoxGroupedOptions } from '../utils'; import { AGG_TYPE_ACTION_KEYS, AggTypeAction } from './agg_params_state'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/extended_bounds.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/__snapshots__/extended_bounds.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/extended_bounds.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/__snapshots__/extended_bounds.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/metric_agg.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/__snapshots__/metric_agg.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/metric_agg.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/__snapshots__/metric_agg.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/size.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/__snapshots__/size.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/size.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/__snapshots__/size.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/top_aggregate.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/__snapshots__/top_aggregate.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/__snapshots__/top_aggregate.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/__snapshots__/top_aggregate.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/agg_control_props.tsx b/src/plugins/vis_default_editor/public/components/controls/agg_control_props.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/agg_control_props.tsx rename to src/plugins/vis_default_editor/public/components/controls/agg_control_props.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/agg_utils.test.tsx b/src/plugins/vis_default_editor/public/components/controls/agg_utils.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/agg_utils.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/agg_utils.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/auto_precision.tsx b/src/plugins/vis_default_editor/public/components/controls/auto_precision.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/auto_precision.tsx rename to src/plugins/vis_default_editor/public/components/controls/auto_precision.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx b/src/plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx similarity index 68% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx index e52b2c85b63fa2..b874459a8e7d3a 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/components/from_to_list.tsx @@ -17,11 +17,11 @@ * under the License. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { EuiFieldText, EuiFlexItem, EuiIcon } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { Ipv4Address } from '../../../../../../../plugins/kibana_utils/public'; +import { Ipv4Address } from '../../../../../kibana_utils/public'; import { InputList, InputListConfig, InputModel, InputObject, InputItem } from './input_list'; const EMPTY_STRING = ''; @@ -44,38 +44,42 @@ interface FromToListProps { setValidity(isValid: boolean): void; } -function FromToList({ showValidation, onBlur, ...rest }: FromToListProps) { - const fromToListConfig: InputListConfig = { - defaultValue: { - from: { value: '0.0.0.0', model: '0.0.0.0', isInvalid: false }, - to: { value: '255.255.255.255', model: '255.255.255.255', isInvalid: false }, +const defaultConfig = { + defaultValue: { + from: { value: '0.0.0.0', model: '0.0.0.0', isInvalid: false }, + to: { value: '255.255.255.255', model: '255.255.255.255', isInvalid: false }, + }, + validateClass: Ipv4Address, + getModelValue: (item: FromToObject = {}) => ({ + from: { + value: item.from || EMPTY_STRING, + model: item.from || EMPTY_STRING, + isInvalid: false, }, - validateClass: Ipv4Address, - getModelValue: (item: FromToObject = {}) => ({ - from: { - value: item.from || EMPTY_STRING, - model: item.from || EMPTY_STRING, - isInvalid: false, - }, - to: { value: item.to || EMPTY_STRING, model: item.to || EMPTY_STRING, isInvalid: false }, + to: { value: item.to || EMPTY_STRING, model: item.to || EMPTY_STRING, isInvalid: false }, + }), + getRemoveBtnAriaLabel: (item: FromToModel) => + i18n.translate('visDefaultEditor.controls.ipRanges.removeRangeAriaLabel', { + defaultMessage: 'Remove the range of {from} to {to}', + values: { from: item.from.value || '*', to: item.to.value || '*' }, }), - getRemoveBtnAriaLabel: (item: FromToModel) => - i18n.translate('visDefaultEditor.controls.ipRanges.removeRangeAriaLabel', { - defaultMessage: 'Remove the range of {from} to {to}', - values: { from: item.from.value || '*', to: item.to.value || '*' }, - }), - onChangeFn: ({ from, to }: FromToModel) => { - const result: FromToObject = {}; - if (from.model) { - result.from = from.model; - } - if (to.model) { - result.to = to.model; - } - return result; - }, - hasInvalidValuesFn: ({ from, to }: FromToModel) => from.isInvalid || to.isInvalid, - renderInputRow: (item: FromToModel, index, onChangeValue) => ( + onChangeFn: ({ from, to }: FromToModel) => { + const result: FromToObject = {}; + if (from.model) { + result.from = from.model; + } + if (to.model) { + result.to = to.model; + } + return result; + }, + hasInvalidValuesFn: ({ from, to }: FromToModel) => from.isInvalid || to.isInvalid, + modelNames: ['from', 'to'], +}; + +function FromToList({ showValidation, onBlur, ...rest }: FromToListProps) { + const renderInputRow = useCallback( + (item: FromToModel, index, onChangeValue) => ( <> ), - modelNames: ['from', 'to'], + [onBlur, showValidation] + ); + const fromToListConfig: InputListConfig = { + ...defaultConfig, + renderInputRow, }; return ; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/input_list.tsx b/src/plugins/vis_default_editor/public/components/controls/components/input_list.tsx similarity index 75% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/input_list.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/input_list.tsx index cc80d0073c9046..639b69cd3d33cb 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/input_list.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/components/input_list.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { useState, useEffect, Fragment } from 'react'; +import React, { useState, useEffect, Fragment, useCallback } from 'react'; import { isEmpty, isEqual, mapValues, omit, pick } from 'lodash'; import { EuiButtonIcon, @@ -70,7 +70,10 @@ interface InputListProps { } const generateId = htmlIdGenerator(); -const validateValue = (inputValue: string | undefined, config: InputListConfig) => { +const validateValue = ( + inputValue: string | undefined, + InputObject: InputListConfig['validateClass'] +) => { const result = { model: inputValue || '', isInvalid: false, @@ -80,7 +83,6 @@ const validateValue = (inputValue: string | undefined, config: InputListConfig) return result; } try { - const InputObject = config.validateClass; result.model = new InputObject(inputValue).toString(); result.isInvalid = false; return result; @@ -91,47 +93,60 @@ const validateValue = (inputValue: string | undefined, config: InputListConfig) }; function InputList({ config, list, onChange, setValidity }: InputListProps) { + const { defaultValue, getModelValue, modelNames, onChangeFn, validateClass } = config; const [models, setModels] = useState(() => list.map( item => ({ id: generateId(), - ...config.getModelValue(item), + ...getModelValue(item), } as InputModel) ) ); const hasInvalidValues = models.some(config.hasInvalidValuesFn); - const updateValues = (modelList: InputModel[]) => { - setModels(modelList); - onChange(modelList.map(config.onChangeFn)); - }; - const onChangeValue = (index: number, value: string, modelName: string) => { - const { model, isInvalid } = validateValue(value, config); - updateValues( - models.map((range, arrayIndex) => - arrayIndex === index - ? { - ...range, - [modelName]: { - value, - model, - isInvalid, - }, - } - : range - ) - ); - }; - const onDelete = (id: string) => updateValues(models.filter(model => model.id !== id)); - const onAdd = () => - updateValues([ - ...models, - { - id: generateId(), - ...config.getModelValue(), - } as InputModel, - ]); + const updateValues = useCallback( + (modelList: InputModel[]) => { + setModels(modelList); + onChange(modelList.map(onChangeFn)); + }, + [onChangeFn, onChange] + ); + const onChangeValue = useCallback( + (index: number, value: string, modelName: string) => { + const { model, isInvalid } = validateValue(value, validateClass); + updateValues( + models.map((range, arrayIndex) => + arrayIndex === index + ? { + ...range, + [modelName]: { + value, + model, + isInvalid, + }, + } + : range + ) + ); + }, + [models, updateValues, validateClass] + ); + const onDelete = useCallback( + (id: string) => updateValues(models.filter(model => model.id !== id)), + [models, updateValues] + ); + const onAdd = useCallback( + () => + updateValues([ + ...models, + { + id: generateId(), + ...getModelValue(), + } as InputModel, + ]), + [getModelValue, models, updateValues] + ); useEffect(() => { // resposible for setting up an initial value when there is no default value @@ -139,15 +154,15 @@ function InputList({ config, list, onChange, setValidity }: InputListProps) { updateValues([ { id: generateId(), - ...config.defaultValue, + ...defaultValue, } as InputModel, ]); } - }, []); + }, [defaultValue, list.length, updateValues]); useEffect(() => { setValidity(!hasInvalidValues); - }, [hasInvalidValues]); + }, [hasInvalidValues, setValidity]); useEffect(() => { // responsible for discarding changes @@ -155,7 +170,7 @@ function InputList({ config, list, onChange, setValidity }: InputListProps) { list.length !== models.length || list.some((item, index) => { // make model to be the same shape as stored value - const model: InputObject = mapValues(pick(models[index], config.modelNames), 'model'); + const model: InputObject = mapValues(pick(models[index], modelNames), 'model'); // we need to skip empty values since they are not stored in saved object return !isEqual(item, omit(model, isEmpty)); @@ -166,12 +181,12 @@ function InputList({ config, list, onChange, setValidity }: InputListProps) { item => ({ id: generateId(), - ...config.getModelValue(item), + ...getModelValue(item), } as InputModel) ) ); } - }, [list]); + }, [getModelValue, list, modelNames, models]); return ( <> diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/mask_list.tsx b/src/plugins/vis_default_editor/public/components/controls/components/mask_list.tsx similarity index 62% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/mask_list.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/mask_list.tsx index f6edecbbcbd701..560213fc08ff07 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/mask_list.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/components/mask_list.tsx @@ -17,12 +17,12 @@ * under the License. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { EuiFieldText, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { InputList, InputListConfig, InputObject, InputModel, InputItem } from './input_list'; -import { search } from '../../../../../../../plugins/data/public'; +import { search } from '../../../../../data/public'; const EMPTY_STRING = ''; @@ -42,36 +42,40 @@ interface MaskListProps { setValidity(isValid: boolean): void; } -function MaskList({ showValidation, onBlur, ...rest }: MaskListProps) { - const maskListConfig: InputListConfig = { - defaultValue: { - mask: { model: '0.0.0.0/1', value: '0.0.0.0/1', isInvalid: false }, +const defaultConfig = { + defaultValue: { + mask: { model: '0.0.0.0/1', value: '0.0.0.0/1', isInvalid: false }, + }, + validateClass: search.aggs.CidrMask, + getModelValue: (item: MaskObject = {}) => ({ + mask: { + model: item.mask || EMPTY_STRING, + value: item.mask || EMPTY_STRING, + isInvalid: false, }, - validateClass: search.aggs.CidrMask, - getModelValue: (item: MaskObject = {}) => ({ - mask: { - model: item.mask || EMPTY_STRING, - value: item.mask || EMPTY_STRING, - isInvalid: false, - }, - }), - getRemoveBtnAriaLabel: (item: MaskModel) => - item.mask.value - ? i18n.translate('visDefaultEditor.controls.ipRanges.removeCidrMaskButtonAriaLabel', { - defaultMessage: 'Remove the CIDR mask value of {mask}', - values: { mask: item.mask.value }, - }) - : i18n.translate('visDefaultEditor.controls.ipRanges.removeEmptyCidrMaskButtonAriaLabel', { - defaultMessage: 'Remove the CIDR mask default value', - }), - onChangeFn: ({ mask }: MaskModel) => { - if (mask.model) { - return { mask: mask.model }; - } - return {}; - }, - hasInvalidValuesFn: ({ mask }) => mask.isInvalid, - renderInputRow: ({ mask }: MaskModel, index, onChangeValue) => ( + }), + getRemoveBtnAriaLabel: (item: MaskModel) => + item.mask.value + ? i18n.translate('visDefaultEditor.controls.ipRanges.removeCidrMaskButtonAriaLabel', { + defaultMessage: 'Remove the CIDR mask value of {mask}', + values: { mask: item.mask.value }, + }) + : i18n.translate('visDefaultEditor.controls.ipRanges.removeEmptyCidrMaskButtonAriaLabel', { + defaultMessage: 'Remove the CIDR mask default value', + }), + onChangeFn: ({ mask }: MaskModel) => { + if (mask.model) { + return { mask: mask.model }; + } + return {}; + }, + hasInvalidValuesFn: ({ mask }: MaskModel) => mask.isInvalid, + modelNames: 'mask', +}; + +function MaskList({ showValidation, onBlur, ...rest }: MaskListProps) { + const renderInputRow = useCallback( + ({ mask }: MaskModel, index, onChangeValue) => ( ), - modelNames: 'mask', + [onBlur, showValidation] + ); + const maskListConfig: InputListConfig = { + ...defaultConfig, + renderInputRow, }; return ; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_list.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_list.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_list.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_list.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_row.test.tsx.snap b/src/plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_row.test.tsx.snap similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_row.test.tsx.snap rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/__snapshots__/number_row.test.tsx.snap diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/index.ts b/src/plugins/vis_default_editor/public/components/controls/components/number_list/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/index.ts rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_list.test.tsx b/src/plugins/vis_default_editor/public/components/controls/components/number_list/number_list.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_list.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/number_list.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx b/src/plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx index a43c66c2e08ccf..b4683e47979cea 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/components/number_list/number_list.tsx @@ -79,7 +79,7 @@ function NumberList({ if (!numberArray.length) { onChange([models[0].value as number]); } - }, []); + }, [models, numberArray.length, onChange]); const isValid = !hasInvalidValues(models); useValidation(setValidity, isValid); @@ -109,7 +109,7 @@ function NumberList({ }) ); }, - [numberRange, models, onUpdate] + [models, onUpdate] ); // Add an item to the end of the list diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_row.test.tsx b/src/plugins/vis_default_editor/public/components/controls/components/number_list/number_row.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_row.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/number_row.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_row.tsx b/src/plugins/vis_default_editor/public/components/controls/components/number_list/number_row.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/number_row.tsx rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/number_row.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts b/src/plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts index e9090e5b38ef78..a19034d3c8e92f 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts +++ b/src/plugins/vis_default_editor/public/components/controls/components/number_list/range.test.ts @@ -108,7 +108,6 @@ describe('Range parsing utility', () => { }; forOwn(tests, (spec, str: any) => { - // eslint-disable-next-line jest/valid-describe describe(str, () => { const range = parseRange(str); diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/range.ts b/src/plugins/vis_default_editor/public/components/controls/components/number_list/range.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/range.ts rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/range.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/utils.test.ts b/src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/utils.test.ts rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.test.ts diff --git a/src/legacy/core_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 similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts rename to src/plugins/vis_default_editor/public/components/controls/components/number_list/utils.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx b/src/plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx similarity index 95% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx index 6b1a4dca7b84f5..b844fdfb82256b 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/date_ranges.test.tsx @@ -20,8 +20,8 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { DateRangesParamEditor } from './date_ranges'; -import { KibanaContextProvider } from '../../../../../../plugins/kibana_react/public'; -import { docLinksServiceMock } from '../../../../../../core/public/mocks'; +import { KibanaContextProvider } from '../../../../kibana_react/public'; +import { docLinksServiceMock } from '../../../../../core/public/mocks'; describe('DateRangesParamEditor component', () => { let setValue: jest.Mock; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.tsx b/src/plugins/vis_default_editor/public/components/controls/date_ranges.tsx similarity index 90% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.tsx rename to src/plugins/vis_default_editor/public/components/controls/date_ranges.tsx index 15e864bfd026df..57f4c7d04019b0 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/date_ranges.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/date_ranges.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { Fragment, useState, useEffect } from 'react'; +import React, { Fragment, useState, useEffect, useCallback } from 'react'; import { htmlIdGenerator, EuiButtonIcon, @@ -36,8 +36,9 @@ import dateMath from '@elastic/datemath'; import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; import { isEqual, omit } from 'lodash'; +import { useMount } from 'react-use'; -import { useKibana } from '../../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../../kibana_react/public'; import { AggParamEditorProps } from '../agg_param_props'; const FROM_PLACEHOLDER = '\u2212\u221E'; @@ -72,12 +73,26 @@ function DateRangesParamEditor({ ({ from, to }) => (!from && !to) || !validateDateMath(from) || !validateDateMath(to) ); - // set up an initial range when there is no default range - useEffect(() => { + const updateRanges = useCallback( + (rangeValues: DateRangeValuesModel[]) => { + // do not set internal id parameter into saved object + setValue(rangeValues.map(range => omit(range, 'id'))); + setRanges(rangeValues); + }, + [setValue] + ); + + const onAddRange = useCallback(() => updateRanges([...ranges, { id: generateId() }]), [ + ranges, + updateRanges, + ]); + + useMount(() => { + // set up an initial range when there is no default range if (!value.length) { onAddRange(); } - }, []); + }); useEffect(() => { // responsible for discarding changes @@ -87,18 +102,12 @@ function DateRangesParamEditor({ ) { setRanges(value.map(range => ({ ...range, id: generateId() }))); } - }, [value]); + }, [ranges, value]); useEffect(() => { setValidity(!hasInvalidRange); - }, [hasInvalidRange]); - - const updateRanges = (rangeValues: DateRangeValuesModel[]) => { - // do not set internal id parameter into saved object - setValue(rangeValues.map(range => omit(range, 'id'))); - setRanges(rangeValues); - }; - const onAddRange = () => updateRanges([...ranges, { id: generateId() }]); + }, [hasInvalidRange, setValidity]); + const onRemoveRange = (id: string) => updateRanges(ranges.filter(range => range.id !== id)); const onChangeRange = (id: string, key: string, newValue: string) => updateRanges( diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/drop_partials.tsx b/src/plugins/vis_default_editor/public/components/controls/drop_partials.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/drop_partials.tsx rename to src/plugins/vis_default_editor/public/components/controls/drop_partials.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/extended_bounds.test.tsx b/src/plugins/vis_default_editor/public/components/controls/extended_bounds.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/extended_bounds.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/extended_bounds.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/extended_bounds.tsx b/src/plugins/vis_default_editor/public/components/controls/extended_bounds.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/extended_bounds.tsx rename to src/plugins/vis_default_editor/public/components/controls/extended_bounds.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/field.test.tsx b/src/plugins/vis_default_editor/public/components/controls/field.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/field.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/field.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/field.tsx b/src/plugins/vis_default_editor/public/components/controls/field.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/field.tsx rename to src/plugins/vis_default_editor/public/components/controls/field.tsx index fc1cbb51b70a78..42086004a12dc0 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/field.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/field.tsx @@ -18,7 +18,8 @@ */ import { get } from 'lodash'; -import React, { useEffect, useState, useCallback } from 'react'; +import React, { useState, useCallback } from 'react'; +import { useMount } from 'react-use'; import { EuiComboBox, EuiComboBoxOptionOption, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -84,8 +85,7 @@ function FieldParamEditor({ const showErrorMessage = (showValidation || !indexedFields.length) && !isValid; useValidation(setValidity, isValid); - - useEffect(() => { + useMount(() => { // set field if only one available if (indexedFields.length !== 1) { return; @@ -98,7 +98,7 @@ function FieldParamEditor({ } else if (indexedField.options.length === 1) { setValue(indexedField.options[0].target); } - }, []); + }); const onSearchChange = useCallback(searchValue => setIsDirty(Boolean(searchValue)), []); diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/filter.tsx b/src/plugins/vis_default_editor/public/components/controls/filter.tsx similarity index 99% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/filter.tsx rename to src/plugins/vis_default_editor/public/components/controls/filter.tsx index e2e7c2895093e7..16aaff47f49c31 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/filter.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/filter.tsx @@ -21,7 +21,7 @@ import React, { useState } from 'react'; import { EuiForm, EuiButtonIcon, EuiFieldText, EuiFormRow, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { IAggConfig, Query, QueryStringInput } from '../../../../../../plugins/data/public'; +import { IAggConfig, Query, QueryStringInput } from '../../../../data/public'; interface FilterRowProps { id: string; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/filters.tsx b/src/plugins/vis_default_editor/public/components/controls/filters.tsx similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/filters.tsx rename to src/plugins/vis_default_editor/public/components/controls/filters.tsx index be4c62ab08aa2a..d4e698f655c5e1 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/filters.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/filters.tsx @@ -21,9 +21,10 @@ import React, { useState, useEffect } from 'react'; import { omit, isEqual } from 'lodash'; import { htmlIdGenerator, EuiButton, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; +import { useMount } from 'react-use'; import { Query } from 'src/plugins/data/public'; -import { useKibana } from '../../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../../kibana_react/public'; import { FilterRow } from './filter'; import { AggParamEditorProps } from '../agg_param_props'; @@ -40,10 +41,10 @@ function FiltersParamEditor({ agg, value = [], setValue }: AggParamEditorProps ({ ...filter, id: generateId() })) ); - useEffect(() => { + useMount(() => { // set parsed values into model after initialization setValue(filters.map(filter => omit({ ...filter, input: filter.input }, 'id'))); - }, []); + }); useEffect(() => { // responsible for discarding changes @@ -53,7 +54,7 @@ function FiltersParamEditor({ agg, value = [], setValue }: AggParamEditorProps ({ ...filter, id: generateId() }))); } - }, [value]); + }, [filters, value]); const updateFilters = (updatedFilters: FilterValue[]) => { // do not set internal id parameter into saved object diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx b/src/plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx similarity index 73% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx rename to src/plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx index 90b7cb03b7a5b3..a316a087c8bcbc 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/has_extended_bounds.tsx @@ -17,22 +17,32 @@ * under the License. */ -import React, { useEffect } from 'react'; +import React, { useEffect, useRef } from 'react'; import { i18n } from '@kbn/i18n'; -import { search } from '../../../../../../plugins/data/public'; +import { search } from '../../../../data/public'; import { SwitchParamEditor } from './switch'; import { AggParamEditorProps } from '../agg_param_props'; const { isType } = search.aggs; function HasExtendedBoundsParamEditor(props: AggParamEditorProps) { + const { agg, setValue, value } = props; + const minDocCount = useRef(agg.params.min_doc_count); + useEffect(() => { - props.setValue(props.value && props.agg.params.min_doc_count); - }, [props.agg.params.min_doc_count]); + if (minDocCount.current !== agg.params.min_doc_count) { + // The "Extend bounds" param is only enabled when "Show empty buckets" is turned on. + // So if "Show empty buckets" is changed, "Extend bounds" should reflect changes + minDocCount.current = agg.params.min_doc_count; + + setValue(value && agg.params.min_doc_count); + } + }, [agg.params.min_doc_count, setValue, value]); return ( ) { !props.agg.params.min_doc_count || !(isType('number')(props.agg) || isType('date')(props.agg)) } - {...props} /> ); } diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/index.ts b/src/plugins/vis_default_editor/public/components/controls/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/index.ts rename to src/plugins/vis_default_editor/public/components/controls/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/ip_range_type.tsx b/src/plugins/vis_default_editor/public/components/controls/ip_range_type.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/ip_range_type.tsx rename to src/plugins/vis_default_editor/public/components/controls/ip_range_type.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/ip_ranges.tsx b/src/plugins/vis_default_editor/public/components/controls/ip_ranges.tsx similarity index 79% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/ip_ranges.tsx rename to src/plugins/vis_default_editor/public/components/controls/ip_ranges.tsx index c4b90649aaaaeb..5ffa8088a95467 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/ip_ranges.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/ip_ranges.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { EuiFormRow } from '@elastic/eui'; import { FromToList, FromToObject } from './components/from_to_list'; @@ -38,12 +38,22 @@ function IpRangesParamEditor({ setValidity, showValidation, }: AggParamEditorProps) { - const handleChange = (modelName: IpRangeTypes, items: Array) => { - setValue({ - ...value, - [modelName]: items, - }); - }; + const handleMaskListChange = useCallback( + (items: MaskObject[]) => + setValue({ + ...value, + [IpRangeTypes.MASK]: items, + }), + [setValue, value] + ); + const handleFromToListChange = useCallback( + (items: FromToObject[]) => + setValue({ + ...value, + [IpRangeTypes.FROM_TO]: items, + }), + [setValue, value] + ); return ( @@ -52,7 +62,7 @@ function IpRangesParamEditor({ list={value.mask} showValidation={showValidation} onBlur={setTouched} - onChange={items => handleChange(IpRangeTypes.MASK, items)} + onChange={handleMaskListChange} setValidity={setValidity} /> ) : ( @@ -60,7 +70,7 @@ function IpRangesParamEditor({ list={value.fromTo} showValidation={showValidation} onBlur={setTouched} - onChange={items => handleChange(IpRangeTypes.FROM_TO, items)} + onChange={handleFromToListChange} setValidity={setValidity} /> )} diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/is_filtered_by_collar.tsx b/src/plugins/vis_default_editor/public/components/controls/is_filtered_by_collar.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/is_filtered_by_collar.tsx rename to src/plugins/vis_default_editor/public/components/controls/is_filtered_by_collar.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/metric_agg.test.tsx b/src/plugins/vis_default_editor/public/components/controls/metric_agg.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/metric_agg.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/metric_agg.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/metric_agg.tsx b/src/plugins/vis_default_editor/public/components/controls/metric_agg.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/metric_agg.tsx rename to src/plugins/vis_default_editor/public/components/controls/metric_agg.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/min_doc_count.tsx b/src/plugins/vis_default_editor/public/components/controls/min_doc_count.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/min_doc_count.tsx rename to src/plugins/vis_default_editor/public/components/controls/min_doc_count.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/missing_bucket.tsx b/src/plugins/vis_default_editor/public/components/controls/missing_bucket.tsx similarity index 93% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/missing_bucket.tsx rename to src/plugins/vis_default_editor/public/components/controls/missing_bucket.tsx index 7010f0d53e569e..7d4d2230bd766f 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/missing_bucket.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/missing_bucket.tsx @@ -21,20 +21,22 @@ import React, { useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { SwitchParamEditor } from './switch'; -import { search } from '../../../../../../plugins/data/public'; +import { search } from '../../../../data/public'; import { AggParamEditorProps } from '../agg_param_props'; function MissingBucketParamEditor(props: AggParamEditorProps) { const fieldTypeIsNotString = !search.aggs.isStringType(props.agg); + const { setValue } = props; useEffect(() => { if (fieldTypeIsNotString) { - props.setValue(false); + setValue(false); } - }, [fieldTypeIsNotString]); + }, [fieldTypeIsNotString, setValue]); return ( ) { } )} disabled={fieldTypeIsNotString} - {...props} /> ); } diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/number_interval.tsx b/src/plugins/vis_default_editor/public/components/controls/number_interval.tsx similarity index 99% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/number_interval.tsx rename to src/plugins/vis_default_editor/public/components/controls/number_interval.tsx index 6ab5ee2d260a15..02bf680734526c 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/number_interval.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/number_interval.tsx @@ -61,7 +61,7 @@ function NumberIntervalParamEditor({ useEffect(() => { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); const onChange = useCallback( ({ target }: React.ChangeEvent) => diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order.tsx b/src/plugins/vis_default_editor/public/components/controls/order.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/order.tsx rename to src/plugins/vis_default_editor/public/components/controls/order.tsx index 8f63662d928c1a..e609bf9adf790e 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/order.tsx @@ -39,7 +39,7 @@ function OrderParamEditor({ useEffect(() => { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); // @ts-ignore return ( diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order_agg.test.tsx b/src/plugins/vis_default_editor/public/components/controls/order_agg.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/order_agg.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/order_agg.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order_agg.tsx b/src/plugins/vis_default_editor/public/components/controls/order_agg.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/order_agg.tsx rename to src/plugins/vis_default_editor/public/components/controls/order_agg.tsx index 41672bc192fabe..c5a35cbbd7ab1e 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order_agg.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/order_agg.tsx @@ -20,7 +20,7 @@ import React, { useEffect } from 'react'; import { EuiSpacer } from '@elastic/eui'; -import { AggParamType, IAggConfig, AggGroupNames } from '../../../../../../plugins/data/public'; +import { AggParamType, IAggConfig, AggGroupNames } from '../../../../data/public'; import { useSubAggParamsHandlers } from './utils'; import { AggParamEditorProps } from '../agg_param_props'; import { DefaultEditorAggParams } from '../agg_params'; @@ -47,7 +47,7 @@ function OrderAggParamEditor({ if (orderBy !== 'custom' && value) { setValue(undefined); } - }, [orderBy]); + }, [agg, aggParam, orderBy, setValue, value]); const { onAggTypeChange, setAggParamValue } = useSubAggParamsHandlers( agg, diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order_by.tsx b/src/plugins/vis_default_editor/public/components/controls/order_by.tsx similarity index 94% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/order_by.tsx rename to src/plugins/vis_default_editor/public/components/controls/order_by.tsx index 9f1aaa54a8ca3e..47b12f4340d429 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/order_by.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/order_by.tsx @@ -17,9 +17,10 @@ * under the License. */ -import React, { useEffect } from 'react'; +import React from 'react'; import { EuiFormRow, EuiSelect } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useMount } from 'react-use'; import { isCompatibleAggregation, @@ -28,7 +29,7 @@ import { useValidation, } from './utils'; import { AggParamEditorProps } from '../agg_param_props'; -import { search } from '../../../../../../plugins/data/public'; +import { search } from '../../../../data/public'; const { termsAggFilter } = search.aggs; const DEFAULT_VALUE = '_key'; @@ -58,8 +59,7 @@ function OrderByParamEditor({ const isValid = !!value; useValidation(setValidity, isValid); - - useEffect(() => { + useMount(() => { // setup the initial value of orderBy if (!value) { let respAgg = { id: DEFAULT_VALUE }; @@ -70,7 +70,7 @@ function OrderByParamEditor({ setValue(respAgg.id); } - }, []); + }); useFallbackMetric(setValue, termsAggFilter, metricAggs, value, DEFAULT_VALUE); diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/other_bucket.tsx b/src/plugins/vis_default_editor/public/components/controls/other_bucket.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/other_bucket.tsx rename to src/plugins/vis_default_editor/public/components/controls/other_bucket.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/percentile_ranks.tsx b/src/plugins/vis_default_editor/public/components/controls/percentile_ranks.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/percentile_ranks.tsx rename to src/plugins/vis_default_editor/public/components/controls/percentile_ranks.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/percentiles.test.tsx b/src/plugins/vis_default_editor/public/components/controls/percentiles.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/percentiles.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/percentiles.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/percentiles.tsx b/src/plugins/vis_default_editor/public/components/controls/percentiles.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/percentiles.tsx rename to src/plugins/vis_default_editor/public/components/controls/percentiles.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/precision.tsx b/src/plugins/vis_default_editor/public/components/controls/precision.tsx similarity index 95% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/precision.tsx rename to src/plugins/vis_default_editor/public/components/controls/precision.tsx index df71e72ee6c617..ad2011513b171c 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/precision.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/precision.tsx @@ -22,7 +22,7 @@ import React from 'react'; import { EuiRange, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { useKibana } from '../../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../../kibana_react/public'; import { AggParamEditorProps } from '../agg_param_props'; function PrecisionParamEditor({ agg, value, setValue }: AggParamEditorProps) { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx b/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx similarity index 95% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx rename to src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx index c64b079e4f802c..86c4431b6d5ed1 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx @@ -17,10 +17,11 @@ * under the License. */ -import React, { useEffect, useCallback } from 'react'; +import React, { useCallback } from 'react'; import { EuiFormRow, EuiIconTip, EuiRange, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; +import { useMount } from 'react-use'; import { AggControlProps } from './agg_control_props'; @@ -44,11 +45,11 @@ function RadiusRatioOptionControl({ editorStateParams, setStateParamValue }: Agg ); - useEffect(() => { + useMount(() => { if (!editorStateParams.radiusRatio) { setStateParamValue(PARAM_NAME, DEFAULT_VALUE); } - }, []); + }); const onChange = useCallback( (e: React.ChangeEvent | React.MouseEvent) => diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/range_control.tsx b/src/plugins/vis_default_editor/public/components/controls/range_control.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/range_control.tsx rename to src/plugins/vis_default_editor/public/components/controls/range_control.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/ranges.tsx b/src/plugins/vis_default_editor/public/components/controls/ranges.tsx similarity index 91% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/ranges.tsx rename to src/plugins/vis_default_editor/public/components/controls/ranges.tsx index 27de9dfe68ee0a..5c6438b4004085 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/ranges.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/ranges.tsx @@ -17,7 +17,7 @@ * under the License. */ -import React, { Fragment, useState, useEffect } from 'react'; +import React, { Fragment, useCallback, useState, useEffect } from 'react'; import { htmlIdGenerator, EuiButtonIcon, @@ -76,13 +76,44 @@ function RangesParamEditor({ validateRange, }: RangesParamEditorProps) { const [ranges, setRanges] = useState(() => value.map(range => ({ ...range, id: generateId() }))); + const updateRanges = useCallback( + (rangeValues: RangeValuesModel[]) => { + // do not set internal id parameter into saved object + setValue(rangeValues.map(range => omit(range, 'id'))); + setRanges(rangeValues); + + if (setTouched) { + setTouched(true); + } + }, + [setTouched, setValue] + ); + const onAddRange = useCallback( + () => + addRangeValues + ? updateRanges([...ranges, { ...addRangeValues(), id: generateId() }]) + : updateRanges([...ranges, { id: generateId() }]), + [addRangeValues, ranges, updateRanges] + ); + const onRemoveRange = (id: string) => updateRanges(ranges.filter(range => range.id !== id)); + const onChangeRange = (id: string, key: string, newValue: string) => + updateRanges( + ranges.map(range => + range.id === id + ? { + ...range, + [key]: newValue === '' ? undefined : parseFloat(newValue), + } + : range + ) + ); // set up an initial range when there is no default range useEffect(() => { if (!value.length) { onAddRange(); } - }, []); + }, [onAddRange, value.length]); useEffect(() => { // responsible for discarding changes @@ -92,33 +123,7 @@ function RangesParamEditor({ ) { setRanges(value.map(range => ({ ...range, id: generateId() }))); } - }, [value]); - - const updateRanges = (rangeValues: RangeValuesModel[]) => { - // do not set internal id parameter into saved object - setValue(rangeValues.map(range => omit(range, 'id'))); - setRanges(rangeValues); - - if (setTouched) { - setTouched(true); - } - }; - const onAddRange = () => - addRangeValues - ? updateRanges([...ranges, { ...addRangeValues(), id: generateId() }]) - : updateRanges([...ranges, { id: generateId() }]); - const onRemoveRange = (id: string) => updateRanges(ranges.filter(range => range.id !== id)); - const onChangeRange = (id: string, key: string, newValue: string) => - updateRanges( - ranges.map(range => - range.id === id - ? { - ...range, - [key]: newValue === '' ? undefined : parseFloat(newValue), - } - : range - ) - ); + }, [ranges, value]); const hasInvalidRange = validateRange && diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/raw_json.tsx b/src/plugins/vis_default_editor/public/components/controls/raw_json.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/raw_json.tsx rename to src/plugins/vis_default_editor/public/components/controls/raw_json.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/rows_or_columns.tsx b/src/plugins/vis_default_editor/public/components/controls/rows_or_columns.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/rows_or_columns.tsx rename to src/plugins/vis_default_editor/public/components/controls/rows_or_columns.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/scale_metrics.tsx b/src/plugins/vis_default_editor/public/components/controls/scale_metrics.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/scale_metrics.tsx rename to src/plugins/vis_default_editor/public/components/controls/scale_metrics.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/size.test.tsx b/src/plugins/vis_default_editor/public/components/controls/size.test.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/size.test.tsx rename to src/plugins/vis_default_editor/public/components/controls/size.test.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/size.tsx b/src/plugins/vis_default_editor/public/components/controls/size.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/size.tsx rename to src/plugins/vis_default_editor/public/components/controls/size.tsx index 824ec4aeb253c2..9f55eb9212dee7 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/size.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/size.tsx @@ -48,7 +48,7 @@ function SizeParamEditor({ useEffect(() => { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); return ( { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); const onChange = useCallback(ev => setValue(ev.target.value), [setValue]); diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_agg.tsx b/src/plugins/vis_default_editor/public/components/controls/sub_agg.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_agg.tsx rename to src/plugins/vis_default_editor/public/components/controls/sub_agg.tsx index c9f53a68b3e83e..ee0fbd8532ce93 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_agg.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/sub_agg.tsx @@ -20,7 +20,7 @@ import React, { useEffect } from 'react'; import { EuiSpacer } from '@elastic/eui'; -import { AggParamType, IAggConfig, AggGroupNames } from '../../../../../../plugins/data/public'; +import { AggParamType, IAggConfig, AggGroupNames } from '../../../../data/public'; import { useSubAggParamsHandlers } from './utils'; import { AggParamEditorProps } from '../agg_param_props'; import { DefaultEditorAggParams } from '../agg_params'; @@ -29,7 +29,6 @@ function SubAggParamEditor({ agg, aggParam, formIsTouched, - value, metricAggs, state, setValue, @@ -44,7 +43,7 @@ function SubAggParamEditor({ } else if (!agg.params.customMetric) { setValue(aggParam.makeAgg(agg)); } - }, [value, metricAggs]); + }, [metricAggs, agg, setValue, aggParam]); const { onAggTypeChange, setAggParamValue } = useSubAggParamsHandlers( agg, diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_metric.tsx b/src/plugins/vis_default_editor/public/components/controls/sub_metric.tsx similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_metric.tsx rename to src/plugins/vis_default_editor/public/components/controls/sub_metric.tsx index ead3f8bb006231..361eeba9abdbf8 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/sub_metric.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/sub_metric.tsx @@ -17,11 +17,12 @@ * under the License. */ -import React, { useEffect } from 'react'; +import React from 'react'; import { EuiFormLabel, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useMount } from 'react-use'; -import { AggParamType, IAggConfig, AggGroupNames } from '../../../../../../plugins/data/public'; +import { AggParamType, IAggConfig, AggGroupNames } from '../../../../data/public'; import { useSubAggParamsHandlers } from './utils'; import { AggParamEditorProps } from '../agg_param_props'; import { DefaultEditorAggParams } from '../agg_params'; @@ -48,13 +49,13 @@ function SubMetricParamEditor({ const aggTitle = type === 'customMetric' ? metricTitle : bucketTitle; const aggGroup = type === 'customMetric' ? AggGroupNames.Metrics : AggGroupNames.Buckets; - useEffect(() => { + useMount(() => { if (agg.params[type]) { setValue(agg.params[type]); } else { setValue(aggParam.makeAgg(agg)); } - }, []); + }); const { onAggTypeChange, setAggParamValue } = useSubAggParamsHandlers( agg, diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/switch.tsx b/src/plugins/vis_default_editor/public/components/controls/switch.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/switch.tsx rename to src/plugins/vis_default_editor/public/components/controls/switch.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/test_utils.ts b/src/plugins/vis_default_editor/public/components/controls/test_utils.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/test_utils.ts rename to src/plugins/vis_default_editor/public/components/controls/test_utils.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/time_interval.tsx b/src/plugins/vis_default_editor/public/components/controls/time_interval.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/time_interval.tsx rename to src/plugins/vis_default_editor/public/components/controls/time_interval.tsx index 971a62faf7d7c9..4af41f67bc524c 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/controls/time_interval.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/time_interval.tsx @@ -23,7 +23,7 @@ import { EuiFormRow, EuiIconTip, EuiComboBox, EuiComboBoxOptionOption } from '@e import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; -import { search, AggParamOption } from '../../../../../../plugins/data/public'; +import { search, AggParamOption } from '../../../../data/public'; import { AggParamEditorProps } from '../agg_param_props'; const { parseEsInterval, InvalidEsCalendarIntervalError } = search.aggs; @@ -161,7 +161,7 @@ function TimeIntervalParamEditor({ useEffect(() => { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); return ( { setValidity(isValid); - }, [isValid]); + }, [isValid, setValidity]); useEffect(() => { if (isFirstRun.current) { @@ -102,7 +102,7 @@ export function TopAggregateParamEditor({ if (filteredOptions.length === 1) { setValue(aggParam.options.find(opt => opt.value === filteredOptions[0].value)); } - }, [fieldType]); + }, [aggParam.options, fieldType, filteredOptions, setValue, value]); const handleChange = (event: React.ChangeEvent) => { if (event.target.value === emptyValue.value) { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/top_field.tsx b/src/plugins/vis_default_editor/public/components/controls/top_field.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/top_field.tsx rename to src/plugins/vis_default_editor/public/components/controls/top_field.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/top_size.tsx b/src/plugins/vis_default_editor/public/components/controls/top_size.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/top_size.tsx rename to src/plugins/vis_default_editor/public/components/controls/top_size.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/top_sort_field.tsx b/src/plugins/vis_default_editor/public/components/controls/top_sort_field.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/top_sort_field.tsx rename to src/plugins/vis_default_editor/public/components/controls/top_sort_field.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/use_geocentroid.tsx b/src/plugins/vis_default_editor/public/components/controls/use_geocentroid.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/use_geocentroid.tsx rename to src/plugins/vis_default_editor/public/components/controls/use_geocentroid.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/agg_utils.ts b/src/plugins/vis_default_editor/public/components/controls/utils/agg_utils.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/agg_utils.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/agg_utils.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/index.ts b/src/plugins/vis_default_editor/public/components/controls/utils/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/index.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/inline_comp_wrapper.tsx b/src/plugins/vis_default_editor/public/components/controls/utils/inline_comp_wrapper.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/inline_comp_wrapper.tsx rename to src/plugins/vis_default_editor/public/components/controls/utils/inline_comp_wrapper.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.test.ts b/src/plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.test.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.ts b/src/plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/strings/comma_separated_list.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/index.ts b/src/plugins/vis_default_editor/public/components/controls/utils/strings/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/index.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/strings/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/prose.test.ts b/src/plugins/vis_default_editor/public/components/controls/utils/strings/prose.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/prose.test.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/strings/prose.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/prose.ts b/src/plugins/vis_default_editor/public/components/controls/utils/strings/prose.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/strings/prose.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/strings/prose.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/use_handlers.ts b/src/plugins/vis_default_editor/public/components/controls/utils/use_handlers.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/controls/utils/use_handlers.ts rename to src/plugins/vis_default_editor/public/components/controls/utils/use_handlers.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/controls.tsx b/src/plugins/vis_default_editor/public/components/sidebar/controls.tsx similarity index 98% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/controls.tsx rename to src/plugins/vis_default_editor/public/components/sidebar/controls.tsx index 18b445b4a26dbd..db9d7d9e3316a1 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/controls.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/controls.tsx @@ -30,7 +30,7 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; import { useDebounce } from 'react-use'; -import { Vis } from '../../../../../../plugins/visualizations/public'; +import { Vis } from 'src/plugins/visualizations/public'; import { discardChanges, EditorAction } from './state'; interface DefaultEditorControlsProps { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/data_tab.tsx b/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/data_tab.tsx rename to src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx index 0c967723db8e71..0466c64541e23b 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/data_tab.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/data_tab.tsx @@ -26,7 +26,8 @@ import { IAggConfig, IMetricAggType, search, -} from '../../../../../../plugins/data/public'; + TimeRange, +} from '../../../../data/public'; import { DefaultEditorAggGroup } from '../agg_group'; import { EditorAction, @@ -39,7 +40,6 @@ import { } from './state'; import { AddSchema, ReorderAggs, DefaultEditorAggCommonProps } from '../agg_common_props'; import { ISchemas } from '../../schemas'; -import { TimeRange } from '../../../../../../plugins/data/public'; import { EditorVisState } from './state/reducers'; export interface DefaultEditorDataTabProps { diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/index.ts b/src/plugins/vis_default_editor/public/components/sidebar/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/index.ts rename to src/plugins/vis_default_editor/public/components/sidebar/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/navbar.tsx b/src/plugins/vis_default_editor/public/components/sidebar/navbar.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/navbar.tsx rename to src/plugins/vis_default_editor/public/components/sidebar/navbar.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar.tsx b/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar.tsx rename to src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx index b24486a12fd246..9dfeae1815d1a7 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/sidebar.tsx @@ -23,16 +23,15 @@ import { i18n } from '@kbn/i18n'; import { keyCodes, EuiButtonIcon, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { EventEmitter } from 'events'; -import { Vis } from 'src/plugins/visualizations/public'; +import { Vis, PersistedState } from 'src/plugins/visualizations/public'; +import { SavedSearch } from 'src/plugins/discover/public'; +import { TimeRange } from 'src/plugins/data/public'; import { DefaultEditorNavBar, OptionTab } from './navbar'; import { DefaultEditorControls } from './controls'; import { setStateParamValue, useEditorReducer, useEditorFormState, discardChanges } from './state'; import { DefaultEditorAggCommonProps } from '../agg_common_props'; import { SidebarTitle } from './sidebar_title'; -import { PersistedState } from '../../../../../../plugins/visualizations/public'; -import { SavedSearch } from '../../../../../../plugins/discover/public'; import { Schema } from '../../schemas'; -import { TimeRange } from '../../../../../../plugins/data/public'; interface DefaultEditorSideBarProps { isCollapsed: boolean; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx b/src/plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx rename to src/plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx index fb63a598a4faec..c9f83e5b474a68 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx +++ b/src/plugins/vis_default_editor/public/components/sidebar/sidebar_title.tsx @@ -35,8 +35,8 @@ import { import { FormattedMessage } from '@kbn/i18n/react'; import { i18n } from '@kbn/i18n'; -import { Vis } from '../../../../../../plugins/visualizations/public'; -import { SavedSearch } from '../../../../../../plugins/discover/public'; +import { Vis } from 'src/plugins/visualizations/public'; +import { SavedSearch } from 'src/plugins/discover/public'; interface LinkedSearchProps { savedSearch: SavedSearch; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/actions.ts b/src/plugins/vis_default_editor/public/components/sidebar/state/actions.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/actions.ts rename to src/plugins/vis_default_editor/public/components/sidebar/state/actions.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/constants.ts b/src/plugins/vis_default_editor/public/components/sidebar/state/constants.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/constants.ts rename to src/plugins/vis_default_editor/public/components/sidebar/state/constants.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/editor_form_state.ts b/src/plugins/vis_default_editor/public/components/sidebar/state/editor_form_state.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/editor_form_state.ts rename to src/plugins/vis_default_editor/public/components/sidebar/state/editor_form_state.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/index.ts b/src/plugins/vis_default_editor/public/components/sidebar/state/index.ts similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/index.ts rename to src/plugins/vis_default_editor/public/components/sidebar/state/index.ts index d39d6d07b32d28..1bfa100cbd0f7a 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/index.ts +++ b/src/plugins/vis_default_editor/public/components/sidebar/state/index.ts @@ -24,7 +24,7 @@ import { Vis } from 'src/plugins/visualizations/public'; import { createEditorStateReducer, initEditorState, EditorVisState } from './reducers'; import { EditorStateActionTypes } from './constants'; import { EditorAction } from './actions'; -import { useKibana } from '../../../../../../../plugins/kibana_react/public'; +import { useKibana } from '../../../../../kibana_react/public'; import { VisDefaultEditorKibanaServices } from '../../../types'; export * from './editor_form_state'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/reducers.ts b/src/plugins/vis_default_editor/public/components/sidebar/state/reducers.ts similarity index 99% rename from src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/reducers.ts rename to src/plugins/vis_default_editor/public/components/sidebar/state/reducers.ts index b9f89cebd8bf34..4e7a2904584daf 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/components/sidebar/state/reducers.ts +++ b/src/plugins/vis_default_editor/public/components/sidebar/state/reducers.ts @@ -20,7 +20,7 @@ import { cloneDeep } from 'lodash'; import { Vis } from 'src/plugins/visualizations/public'; -import { AggGroupNames, DataPublicPluginStart } from '../../../../../../../plugins/data/public'; +import { AggGroupNames, DataPublicPluginStart } from '../../../../../data/public'; import { EditorStateActionTypes } from './constants'; import { getEnabledMetricAggsCount } from '../../agg_group_helper'; import { EditorAction } from './actions'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/utils/editor_config.ts b/src/plugins/vis_default_editor/public/components/utils/editor_config.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/utils/editor_config.ts rename to src/plugins/vis_default_editor/public/components/utils/editor_config.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/components/utils/index.ts b/src/plugins/vis_default_editor/public/components/utils/index.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/components/utils/index.ts rename to src/plugins/vis_default_editor/public/components/utils/index.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/default_editor.tsx b/src/plugins/vis_default_editor/public/default_editor.tsx similarity index 94% rename from src/legacy/core_plugins/vis_default_editor/public/default_editor.tsx rename to src/plugins/vis_default_editor/public/default_editor.tsx index 899b9c1b5fd6eb..f1963b94dcf954 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/default_editor.tsx +++ b/src/plugins/vis_default_editor/public/default_editor.tsx @@ -19,8 +19,8 @@ import React, { useEffect, useRef, useState, useCallback } from 'react'; -import { EditorRenderProps } from '../../kibana/public/visualize/np_ready/types'; -import { PanelsContainer, Panel } from '../../../../plugins/kibana_react/public'; +import { EditorRenderProps } from 'src/legacy/core_plugins/kibana/public/visualize/np_ready/types'; +import { PanelsContainer, Panel } from '../../kibana_react/public'; import './vis_type_agg_filter'; import { DefaultEditorSideBar } from './components/sidebar'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/default_editor_controller.tsx b/src/plugins/vis_default_editor/public/default_editor_controller.tsx similarity index 92% rename from src/legacy/core_plugins/vis_default_editor/public/default_editor_controller.tsx rename to src/plugins/vis_default_editor/public/default_editor_controller.tsx index 58e67b5064da51..798da09f8e30bf 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/default_editor_controller.tsx +++ b/src/plugins/vis_default_editor/public/default_editor_controller.tsx @@ -23,9 +23,9 @@ import { i18n } from '@kbn/i18n'; import { EventEmitter } from 'events'; import { EditorRenderProps } from 'src/legacy/core_plugins/kibana/public/visualize/np_ready/types'; -import { Vis, VisualizeEmbeddableContract } from '../../../../plugins/visualizations/public'; -import { Storage } from '../../../../plugins/kibana_utils/public'; -import { KibanaContextProvider } from '../../../../plugins/kibana_react/public'; +import { Vis, VisualizeEmbeddableContract } from 'src/plugins/visualizations/public'; +import { Storage } from '../../kibana_utils/public'; +import { KibanaContextProvider } from '../../kibana_react/public'; import { DefaultEditor } from './default_editor'; import { DefaultEditorDataTab, OptionTab } from './components/sidebar'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/editor_size.ts b/src/plugins/vis_default_editor/public/editor_size.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/editor_size.ts rename to src/plugins/vis_default_editor/public/editor_size.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/index.scss b/src/plugins/vis_default_editor/public/index.scss similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/index.scss rename to src/plugins/vis_default_editor/public/index.scss diff --git a/src/legacy/core_plugins/vis_default_editor/public/index.ts b/src/plugins/vis_default_editor/public/index.ts similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/index.ts rename to src/plugins/vis_default_editor/public/index.ts index 156d50f451b577..6c58c6df26b001 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/index.ts +++ b/src/plugins/vis_default_editor/public/index.ts @@ -17,6 +17,8 @@ * under the License. */ +import './index.scss'; + export { DefaultEditorController } from './default_editor_controller'; export { useValidation } from './components/controls/utils'; export { RangesParamEditor, RangeValues } from './components/controls/ranges'; diff --git a/src/legacy/core_plugins/vis_default_editor/public/schemas.ts b/src/plugins/vis_default_editor/public/schemas.ts similarity index 96% rename from src/legacy/core_plugins/vis_default_editor/public/schemas.ts rename to src/plugins/vis_default_editor/public/schemas.ts index 4e632da44afc08..05ba5fa9c94198 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/schemas.ts +++ b/src/plugins/vis_default_editor/public/schemas.ts @@ -21,7 +21,7 @@ import _, { defaults } from 'lodash'; import { Optional } from '@kbn/utility-types'; -import { AggGroupNames, AggParam, IAggGroupNames } from '../../../../plugins/data/public'; +import { AggGroupNames, AggParam, IAggGroupNames } from '../../data/public'; export interface ISchemas { [AggGroupNames.Buckets]: Schema[]; diff --git a/src/legacy/core_plugins/vis_default_editor/public/types.ts b/src/plugins/vis_default_editor/public/types.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/types.ts rename to src/plugins/vis_default_editor/public/types.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/utils.test.ts b/src/plugins/vis_default_editor/public/utils.test.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/utils.test.ts rename to src/plugins/vis_default_editor/public/utils.test.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/utils.ts b/src/plugins/vis_default_editor/public/utils.ts similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/utils.ts rename to src/plugins/vis_default_editor/public/utils.ts diff --git a/src/legacy/core_plugins/vis_default_editor/public/vis_options_props.tsx b/src/plugins/vis_default_editor/public/vis_options_props.tsx similarity index 100% rename from src/legacy/core_plugins/vis_default_editor/public/vis_options_props.tsx rename to src/plugins/vis_default_editor/public/vis_options_props.tsx diff --git a/src/legacy/core_plugins/vis_default_editor/public/vis_type_agg_filter.ts b/src/plugins/vis_default_editor/public/vis_type_agg_filter.ts similarity index 97% rename from src/legacy/core_plugins/vis_default_editor/public/vis_type_agg_filter.ts rename to src/plugins/vis_default_editor/public/vis_type_agg_filter.ts index 3ff212c43e6e84..bf5661f42a9f5f 100644 --- a/src/legacy/core_plugins/vis_default_editor/public/vis_type_agg_filter.ts +++ b/src/plugins/vis_default_editor/public/vis_type_agg_filter.ts @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import { IAggType, IAggConfig, IndexPattern, search } from '../../../../plugins/data/public'; +import { IAggType, IAggConfig, IndexPattern, search } from '../../data/public'; const { aggTypeFilters, propFilter } = search.aggs; const filterByName = propFilter('name'); diff --git a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/public/self_changing_vis/self_changing_editor.tsx b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/public/self_changing_vis/self_changing_editor.tsx index d3f66d708603c5..6c430e34d5e29b 100644 --- a/test/plugin_functional/plugins/kbn_tp_custom_visualizations/public/self_changing_vis/self_changing_editor.tsx +++ b/test/plugin_functional/plugins/kbn_tp_custom_visualizations/public/self_changing_vis/self_changing_editor.tsx @@ -20,7 +20,7 @@ import React from 'react'; import { EuiFieldNumber, EuiFormRow } from '@elastic/eui'; -import { VisOptionsProps } from '../../../../../../src/legacy/core_plugins/vis_default_editor/public/vis_options_props'; +import { VisOptionsProps } from 'src/plugins/vis_default_editor/public/vis_options_props'; interface CounterParams { counter: number; From 3d6fd68eb2117290451abe223afd5de19a55cb19 Mon Sep 17 00:00:00 2001 From: Maryia Lapata Date: Wed, 8 Apr 2020 12:48:41 +0300 Subject: [PATCH 16/52] Get rid of ui/i18n in Discover (#62799) --- .../public/discover/get_inner_angular.ts | 1 - .../kibana/public/discover/kibana_services.ts | 2 - .../components/action_bar/action_bar.tsx | 146 ++++---- .../action_bar/action_bar_directive.ts | 4 +- .../np_ready/angular/directives/index.js | 10 +- .../np_ready/angular/directives/no_results.js | 46 +-- .../angular/directives/uninitialized.tsx | 70 ++-- .../public/discover/np_ready/angular/doc.ts | 4 +- .../doc_table/components/pager/index.ts | 5 +- .../components/pager/tool_bar_pager_text.tsx | 18 +- .../doc_table/components/table_header.ts | 4 +- .../discover/np_ready/components/doc/doc.tsx | 146 ++++---- .../components/fetch_error/fetch_error.tsx | 32 +- .../components/sidebar/discover_sidebar.tsx | 316 +++++++++--------- .../sidebar/discover_sidebar_directive.ts | 3 +- 15 files changed, 412 insertions(+), 395 deletions(-) diff --git a/src/legacy/core_plugins/kibana/public/discover/get_inner_angular.ts b/src/legacy/core_plugins/kibana/public/discover/get_inner_angular.ts index 607d79b81618e9..6ccbc13aeeb571 100644 --- a/src/legacy/core_plugins/kibana/public/discover/get_inner_angular.ts +++ b/src/legacy/core_plugins/kibana/public/discover/get_inner_angular.ts @@ -201,7 +201,6 @@ function createDocTableModule() { .directive('docTable', createDocTableDirective) .directive('kbnTableHeader', createTableHeaderDirective) .directive('toolBarPagerText', createToolBarPagerTextDirective) - .directive('toolBarPagerText', createToolBarPagerTextDirective) .directive('kbnTableRow', createTableRowDirective) .directive('toolBarPagerButtons', createToolBarPagerButtonsDirective) .directive('kbnInfiniteScroll', createInfiniteScrollDirective) 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 55f369eaecd2c2..e6421142f66666 100644 --- a/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts +++ b/src/legacy/core_plugins/kibana/public/discover/kibana_services.ts @@ -50,8 +50,6 @@ export const [getUrlTracker, setUrlTracker] = createGetterSetter<{ setTrackedUrl: (url: string) => void; }>('urlTracker'); -// EXPORT legacy static dependencies, should be migrated when available in a new version; -export { wrapInI18nContext } from 'ui/i18n'; import { search } from '../../../../../plugins/data/public'; import { createGetterSetter } from '../../../../../plugins/kibana_utils/common'; export const { getRequestInspectorStats, getResponseInspectorStats, tabifyAggResponse } = search; diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar.tsx index 57ad8e0b1040f3..8fcfcba08955c3 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar.tsx @@ -18,7 +18,7 @@ */ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import { EuiButtonEmpty, EuiFieldNumber, @@ -88,77 +88,83 @@ export function ActionBar({ }; return ( -
- {isSuccessor && } - {isSuccessor && showWarning && } - {isSuccessor && showWarning && } - - - { - const value = newDocCount + defaultStepSize; - if (isValid(value)) { - setNewDocCount(value); - onChangeCount(value); - } - }} - flush="right" - > - - - - - - { - setNewDocCount(ev.target.valueAsNumber); - }} - onBlur={() => { - if (newDocCount !== docCount && isValid(newDocCount)) { - onChangeCount(newDocCount); + + + {isSuccessor && } + {isSuccessor && showWarning && ( + + )} + {isSuccessor && showWarning && } + + + { + const value = newDocCount + defaultStepSize; + if (isValid(value)) { + setNewDocCount(value); + onChangeCount(value); } }} - type="number" - value={newDocCount >= 0 ? newDocCount : ''} - /> - - - - - {isSuccessor ? ( - - ) : ( - + + + + + + { + setNewDocCount(ev.target.valueAsNumber); + }} + onBlur={() => { + if (newDocCount !== docCount && isValid(newDocCount)) { + onChangeCount(newDocCount); + } + }} + type="number" + value={newDocCount >= 0 ? newDocCount : ''} /> - )} - - - - {!isSuccessor && showWarning && } - {!isSuccessor && } - +
+
+ + + {isSuccessor ? ( + + ) : ( + + )} + + +
+ {!isSuccessor && showWarning && ( + + )} + {!isSuccessor && } + + ); } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar_directive.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar_directive.ts index 697b039adde818..b705b4e4faeb59 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar_directive.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/components/action_bar/action_bar_directive.ts @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -import { getAngularModule, wrapInI18nContext } from '../../../../../kibana_services'; +import { getAngularModule } from '../../../../../kibana_services'; import { ActionBar } from './action_bar'; getAngularModule().directive('contextActionBar', function(reactDirective: any) { - return reactDirective(wrapInI18nContext(ActionBar)); + return reactDirective(ActionBar); }); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/index.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/index.js index 5482258e06564f..5a999235bf9a5c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/index.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/index.js @@ -20,16 +20,12 @@ import { DiscoverNoResults } from './no_results'; import { DiscoverUninitialized } from './uninitialized'; import { DiscoverHistogram } from './histogram'; -import { getAngularModule, wrapInI18nContext } from '../../../kibana_services'; +import { getAngularModule } from '../../../kibana_services'; const app = getAngularModule(); -app.directive('discoverNoResults', reactDirective => - reactDirective(wrapInI18nContext(DiscoverNoResults)) -); +app.directive('discoverNoResults', reactDirective => reactDirective(DiscoverNoResults)); -app.directive('discoverUninitialized', reactDirective => - reactDirective(wrapInI18nContext(DiscoverUninitialized)) -); +app.directive('discoverUninitialized', reactDirective => reactDirective(DiscoverUninitialized)); app.directive('discoverHistogram', reactDirective => reactDirective(DiscoverHistogram)); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/no_results.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/no_results.js index ba02068590c149..ad81d5252a25c0 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/no_results.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/no_results.js @@ -18,7 +18,7 @@ */ import React, { Component, Fragment } from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import PropTypes from 'prop-types'; import { @@ -247,29 +247,31 @@ export class DiscoverNoResults extends Component { } return ( - - + + + - - - - } - color="warning" - iconType="help" - data-test-subj="discoverNoResults" - /> + + + + } + color="warning" + iconType="help" + data-test-subj="discoverNoResults" + /> - {shardFailuresMessage} - {timeFieldMessage} - {luceneQueryMessage} - - - + {shardFailuresMessage} + {timeFieldMessage} + {luceneQueryMessage} + +
+ + ); } } diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/uninitialized.tsx b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/uninitialized.tsx index f40865800098eb..b308607bbfbb07 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/uninitialized.tsx +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/directives/uninitialized.tsx @@ -18,7 +18,7 @@ */ import React from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n/react'; import { EuiButton, EuiEmptyPrompt, EuiPage, EuiPageBody, EuiPageContent } from '@elastic/eui'; @@ -28,38 +28,40 @@ interface Props { export const DiscoverUninitialized = ({ onRefresh }: Props) => { return ( - - - - - -